summaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedConstructedTypeNode.java6
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java3
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/types/StructTypeConstructor.java9
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/types/TypeConstructor.java2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/types/Types.java3
5 files changed, 19 insertions, 4 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedConstructedTypeNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedConstructedTypeNode.java
index 5567516..5321a0c 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedConstructedTypeNode.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedConstructedTypeNode.java
@@ -1,10 +1,10 @@
package org.zwobble.hobgoblin.compiler.ast.typed;
import org.zwobble.hobgoblin.compiler.sources.Source;
-import org.zwobble.hobgoblin.compiler.types.ConstructedNativeType;
+import org.zwobble.hobgoblin.compiler.types.ConstructedType;
public record TypedConstructedTypeNode(
- ConstructedNativeType value,
+ ConstructedType value,
Source source
-) implements TypedTypeLevelExpressionNode<ConstructedNativeType> {
+) implements TypedTypeLevelExpressionNode<ConstructedType> {
}
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 feffe8a..e61cb7a 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
@@ -437,6 +437,9 @@ public class TypeChecker {
var constructedType = switch (receiver) {
case NativeTypeConstructor nativeTypeConstructor ->
new ConstructedNativeType(nativeTypeConstructor, args);
+
+ case StructTypeConstructor structTypeConstructor ->
+ new ConstructedStructType(structTypeConstructor, args);
};
return new TypedConstructedTypeNode(
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/types/StructTypeConstructor.java b/src/main/java/org/zwobble/hobgoblin/compiler/types/StructTypeConstructor.java
new file mode 100644
index 0000000..01df65e
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/types/StructTypeConstructor.java
@@ -0,0 +1,9 @@
+package org.zwobble.hobgoblin.compiler.types;
+
+import java.util.List;
+
+public record StructTypeConstructor(
+ List<TypeParam> params,
+ SimpleStructType genericType
+) implements TypeConstructor<SimpleStructType> {
+}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeConstructor.java b/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeConstructor.java
index 2c779d2..95dbf7c 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeConstructor.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeConstructor.java
@@ -2,7 +2,7 @@ package org.zwobble.hobgoblin.compiler.types;
import java.util.List;
-public sealed interface TypeConstructor<T extends ConstructibleType> extends TypeLevelValue permits NativeTypeConstructor {
+public sealed interface TypeConstructor<T extends ConstructibleType> extends TypeLevelValue permits NativeTypeConstructor, StructTypeConstructor {
List<TypeParam> params();
T genericType();
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/types/Types.java b/src/main/java/org/zwobble/hobgoblin/compiler/types/Types.java
index 6d8fcbb..094a419 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/types/Types.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/types/Types.java
@@ -13,6 +13,9 @@ public class Types {
return (TypeConstructor<T>) switch (genericType) {
case SimpleNativeType simpleNativeType ->
new NativeTypeConstructor(params, simpleNativeType);
+
+ case SimpleStructType simpleStructType ->
+ new StructTypeConstructor(params, simpleStructType);
};
}
}