summaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java8
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerGlobalContext.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/types/ConstructedNativeType.java22
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/types/ConstructibleType.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/types/SimpleNativeType.java8
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/types/Type.java2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/types/TypeConstructor.java13
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/types/TypeLevelValue.java2
-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;