From da4d1be7537e90d234d8aa040b66472fe74ef883 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 9 Aug 2026 21:45:34 +0100 Subject: Add scope to TypeParam --- .../java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java | 8 ++++---- .../org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java | 2 +- src/main/java/org/zwobble/hobgoblin/compiler/types/TypeParam.java | 3 +-- 3 files changed, 6 insertions(+), 7 deletions(-) (limited to 'src/main') diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java b/src/main/java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java index f4e499e..36748a7 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java @@ -14,7 +14,7 @@ public class NativeTypes { public static final SimpleNativeType BOX_INNER = SimpleNativeType.builtin("Box"); public static TypeConstructor BOX = Types.constructor( - List.of(new TypeParam("T")), + List.of(new TypeParam(BOX_INNER, "T")), BOX_INNER ); @@ -25,7 +25,7 @@ public class NativeTypes { public static final SimpleNativeType LIST_INNER = SimpleNativeType.builtin("List"); public static TypeConstructor LIST = Types.constructor( - List.of(new TypeParam("T")), + List.of(new TypeParam(LIST_INNER, "T")), LIST_INNER ); @@ -36,7 +36,7 @@ public class NativeTypes { public static final SimpleNativeType OPTION_INNER = SimpleNativeType.builtin("Option"); public static TypeConstructor OPTION = Types.constructor( - List.of(new TypeParam("T")), + List.of(new TypeParam(OPTION_INNER, "T")), OPTION_INNER ); @@ -47,7 +47,7 @@ public class NativeTypes { public static final SimpleNativeType SHARED_INNER = SimpleNativeType.builtin("Shared"); public static TypeConstructor SHARED = Types.constructor( - List.of(new TypeParam("T")), + List.of(new TypeParam(SHARED_INNER, "T")), SHARED_INNER ); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java index 90b95b2..feffe8a 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java @@ -170,7 +170,7 @@ public class TypeChecker { ? new TypeOrConstructor.Type<>(nativeType) : new TypeOrConstructor.Constructor<>(new NativeTypeConstructor( untyped.typeParams().get().stream() - .map(typeParam -> new TypeParam(typeParam.name())) + .map(typeParam -> new TypeParam(nativeType, typeParam.name())) .toList(), nativeType )); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeParam.java b/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeParam.java index 479cd3d..f9b31d9 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeParam.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeParam.java @@ -1,7 +1,6 @@ package org.zwobble.hobgoblin.compiler.types; -public record TypeParam(String name) implements Type { - // TODO: scope? +public record TypeParam(SimpleType scope, String name) implements Type { @Override public String describe() { return name; -- cgit v1.2.3