diff options
Diffstat (limited to 'src/main')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java | 4 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java | 8 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerGlobalContext.java | 4 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/types/ConstructedNativeType.java | 22 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/types/ConstructibleType.java | 4 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/types/SimpleNativeType.java | 8 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/types/Type.java | 2 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/types/TypeConstructor.java | 13 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/types/TypeLevelValue.java | 2 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/types/TypeParam.java (renamed from src/main/java/org/zwobble/hobgoblin/compiler/types/NativeType.java) | 3 |
10 files changed, 62 insertions, 8 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 7a2f181..edbc3fe 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java @@ -1,7 +1,7 @@ package org.zwobble.hobgoblin.compiler.builtins; -import org.zwobble.hobgoblin.compiler.types.NativeType; +import org.zwobble.hobgoblin.compiler.types.SimpleNativeType; public class NativeTypes { - public static NativeType INT_32 = new NativeType("Int32"); + public static SimpleNativeType INT_32 = new SimpleNativeType("Int32"); } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java index 2f5c620..d5af6d9 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java @@ -132,7 +132,10 @@ public class JavaTypesGenerator implements Generator { private JavaTypeRef generateTypeRef(Type type) { return switch (type) { - case NativeType nativeType -> { + case ConstructedNativeType constructedNativeType -> + throw new UnsupportedOperationException("TODO"); + + case SimpleNativeType simpleNativeType -> { if (type.equals(NativeTypes.INT_32)) { yield new JavaTypeRef(List.of(), "int"); } else { @@ -148,6 +151,9 @@ public class JavaTypesGenerator implements Generator { case TypeLevelValueType typeLevelValueType -> throw new UnsupportedOperationException("TODO"); + + case TypeParam typeParam -> + throw new UnsupportedOperationException("TODO"); }; } } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerGlobalContext.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerGlobalContext.java index e98afc0..4692127 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerGlobalContext.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerGlobalContext.java @@ -1,7 +1,7 @@ package org.zwobble.hobgoblin.compiler.typechecker; import org.zwobble.hobgoblin.compiler.types.NamespaceName; -import org.zwobble.hobgoblin.compiler.types.NativeType; +import org.zwobble.hobgoblin.compiler.types.SimpleNativeType; import org.zwobble.hobgoblin.compiler.types.Type; import org.zwobble.hobgoblin.compiler.types.TypeLevelValueType; @@ -18,7 +18,7 @@ public class TypeCheckerGlobalContext { private TypeCheckerGlobalContext() { } - public void addNativeType(NativeType type) { + public void addNativeType(SimpleNativeType type) { this.nativeTypes.put(type.name(), new TypeLevelValueType(type)); } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/types/ConstructedNativeType.java b/src/main/java/org/zwobble/hobgoblin/compiler/types/ConstructedNativeType.java new file mode 100644 index 0000000..0f8051a --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/types/ConstructedNativeType.java @@ -0,0 +1,22 @@ +package org.zwobble.hobgoblin.compiler.types; + +import java.util.List; +import java.util.stream.Collectors; + +public record ConstructedNativeType( + TypeConstructor<SimpleNativeType> constructor, + List<Type> args +) implements Type { + @Override + public String name() { + return constructor.genericType().name(); + } + + @Override + public String describe() { + var argsString = args().stream() + .map(arg -> arg.describe()) + .collect(Collectors.joining(", ")); + return constructor.describe() + "[" + argsString + "]"; + } +} diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/types/ConstructibleType.java b/src/main/java/org/zwobble/hobgoblin/compiler/types/ConstructibleType.java new file mode 100644 index 0000000..50b298d --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/types/ConstructibleType.java @@ -0,0 +1,4 @@ +package org.zwobble.hobgoblin.compiler.types; + +public sealed interface ConstructibleType extends Type permits SimpleNativeType { +} diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/types/SimpleNativeType.java b/src/main/java/org/zwobble/hobgoblin/compiler/types/SimpleNativeType.java new file mode 100644 index 0000000..0d73fc9 --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/types/SimpleNativeType.java @@ -0,0 +1,8 @@ +package org.zwobble.hobgoblin.compiler.types; + +public record SimpleNativeType(String name) implements Type, ConstructibleType { + @Override + public String describe() { + return name; + } +} diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/types/Type.java b/src/main/java/org/zwobble/hobgoblin/compiler/types/Type.java index eeccb8b..4af272f 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/types/Type.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/types/Type.java @@ -1,5 +1,5 @@ package org.zwobble.hobgoblin.compiler.types; -public sealed interface Type extends TypeLevelValue permits NativeType, StructType, SumType, TypeLevelValueType { +public sealed interface Type extends TypeLevelValue permits ConstructedNativeType, ConstructibleType, SimpleNativeType, StructType, SumType, TypeLevelValueType, TypeParam { String name(); } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeConstructor.java b/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeConstructor.java new file mode 100644 index 0000000..1e412d7 --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeConstructor.java @@ -0,0 +1,13 @@ +package org.zwobble.hobgoblin.compiler.types; + +import java.util.List; + +public record TypeConstructor<T extends ConstructibleType>( + List<TypeParam> params, + T genericType +) implements TypeLevelValue { + @Override + public String describe() { + return genericType.describe(); + } +} diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeLevelValue.java b/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeLevelValue.java index 9740cf9..cf62eb1 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeLevelValue.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeLevelValue.java @@ -1,5 +1,5 @@ package org.zwobble.hobgoblin.compiler.types; -public sealed interface TypeLevelValue permits Type { +public sealed interface TypeLevelValue permits Type, TypeConstructor { String describe(); } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/types/NativeType.java b/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeParam.java index 2a45a1f..479cd3d 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/types/NativeType.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeParam.java @@ -1,6 +1,7 @@ package org.zwobble.hobgoblin.compiler.types; -public record NativeType(String name) implements Type { +public record TypeParam(String name) implements Type { + // TODO: scope? @Override public String describe() { return name; |
