diff options
| author | Michael Williamson <mike@zwobble.org> | 2025-03-02 19:46:06 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2025-03-02 19:46:06 +0000 |
| commit | 089f1dfd9a3972fe8d399fa5797d75e9c69b5dac (patch) | |
| tree | 12ef31cafa24169773cc702b0c37583b3bee8d61 /src/main/java | |
| parent | d75f1c798a226861297a18da9a5afaa756e1ba91 (diff) | |
Handle This type for generic native types
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java index 5d08633d..aaf49ba0 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java @@ -1770,12 +1770,20 @@ public class TypeChecker { var typedMethodNodes = new ArrayList<TypedNativeFunctionDeclarationNode>(); var methodInfos = new ArrayList<MethodInfo>(); + // TODO: remove duplication with methods on struct + var thisType = switch (typeOrConstructor) { + case TypeOrConstructor.Constructor<SimpleNativeType> constructor -> + Types.constructedType(constructor.value(), constructor.value().params()); + case TypeOrConstructor.Type<SimpleNativeType> type -> + type.value(); + }; + for (var untypedMethodNode : untyped.methods()) { context = context.enterBlock(P.map( Map.entry( "This", Variable.defined( - Types.metaType(typeOrConstructor.toType()), + Types.metaType(thisType), VariableType.VAL ) ) |
