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 +-- .../compiler/typechecker/TypeCheckerConstructedTypeTests.java | 6 +++--- .../hobgoblin/compiler/typechecker/TypeCheckerMetaTypeTests.java | 3 ++- 5 files changed, 11 insertions(+), 11 deletions(-) (limited to 'src') 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; diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerConstructedTypeTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerConstructedTypeTests.java index 4f409d2..49aa4b6 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerConstructedTypeTests.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerConstructedTypeTests.java @@ -44,7 +44,7 @@ public class TypeCheckerConstructedTypeTests { ); var context = TypeCheckerContextArb.namespaceContext(); var listType = SimpleNativeType.builtin("List"); - var listTypeConstructor = Types.constructor(List.of(new TypeParam("T")), listType); + var listTypeConstructor = Types.constructor(List.of(new TypeParam(listType, "T")), listType); context.declare("List", new TypeLevelValueType(listTypeConstructor), NullSource.INSTANCE); var int32Type = SimpleNativeType.builtin("Int32"); context.declare("Int32", new TypeLevelValueType(int32Type), NullSource.INSTANCE); @@ -64,7 +64,7 @@ public class TypeCheckerConstructedTypeTests { ); var context = TypeCheckerContextArb.namespaceContext(); var listType = SimpleNativeType.builtin("List"); - var listTypeConstructor = Types.constructor(List.of(new TypeParam("T")), listType); + var listTypeConstructor = Types.constructor(List.of(new TypeParam(listType, "T")), listType); context.declare("List", new TypeLevelValueType(listTypeConstructor), NullSource.INSTANCE); var error = assertThrows( @@ -87,7 +87,7 @@ public class TypeCheckerConstructedTypeTests { ); var context = TypeCheckerContextArb.namespaceContext(); var listType = SimpleNativeType.builtin("List"); - var listTypeConstructor = Types.constructor(List.of(new TypeParam("T")), listType); + var listTypeConstructor = Types.constructor(List.of(new TypeParam(listType, "T")), listType); context.declare("List", new TypeLevelValueType(listTypeConstructor), NullSource.INSTANCE); var error = assertThrows( diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerMetaTypeTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerMetaTypeTests.java index 4566b9b..074d1df 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerMetaTypeTests.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerMetaTypeTests.java @@ -35,7 +35,8 @@ public class TypeCheckerMetaTypeTests { public void whenVariableIsTypeLevelValueButNotMetaTypeThenErrorIsThrown() { var untyped = UntypedArb.typeLevelReference("List"); var context = TypeCheckerContextArb.namespaceContext(); - var typeConstructor = Types.constructor(List.of(new TypeParam("T")), SimpleNativeType.builtin("List")); + var innerType = SimpleNativeType.builtin("List"); + var typeConstructor = Types.constructor(List.of(new TypeParam(innerType, "T")), innerType); context.declare("List", new TypeLevelValueType(typeConstructor), NullSource.INSTANCE); var error = assertThrows( -- cgit v1.2.3