aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2025-03-02 19:46:06 +0000
committerMichael Williamson <mike@zwobble.org>2025-03-02 19:46:06 +0000
commit089f1dfd9a3972fe8d399fa5797d75e9c69b5dac (patch)
tree12ef31cafa24169773cc702b0c37583b3bee8d61 /src/main/java
parentd75f1c798a226861297a18da9a5afaa756e1ba91 (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.java10
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
)
)