diff options
Diffstat (limited to 'src')
6 files changed, 21 insertions, 6 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); }; } } diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNodeMatchers.java b/src/test/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNodeMatchers.java index bbf6a84..874b44b 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNodeMatchers.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNodeMatchers.java @@ -1,6 +1,6 @@ package org.zwobble.hobgoblin.compiler.ast.typed; -import org.zwobble.hobgoblin.compiler.types.ConstructedNativeType; +import org.zwobble.hobgoblin.compiler.types.ConstructedType; import org.zwobble.precisely.Matcher; import static org.zwobble.precisely.Matchers.*; @@ -10,7 +10,7 @@ public class TypedNodeMatchers { } public static Matcher<TypedTypeLevelExpressionNode<?>> isTypedConstructedTypeNode( - Matcher<ConstructedNativeType> value + Matcher<ConstructedType> value ) { return instanceOf( TypedConstructedTypeNode.class, |
