summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java8
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/types/TypeParam.java3
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerConstructedTypeTests.java6
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerMetaTypeTests.java3
5 files changed, 11 insertions, 11 deletions
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<SimpleNativeType> 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<SimpleNativeType> 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<SimpleNativeType> 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<SimpleNativeType> 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(