summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerGlobalContext.java2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypesInfo.java39
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypesInfoInMemory.java41
3 files changed, 47 insertions, 35 deletions
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 ca2d731..28ad532 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerGlobalContext.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerGlobalContext.java
@@ -20,7 +20,7 @@ public class TypeCheckerGlobalContext {
}
public TypesInfo toTypesInfo() {
- return new TypesInfo(
+ return new TypesInfoInMemory(
this.enumVariants,
this.fieldsOf,
this.sumVariants
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypesInfo.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypesInfo.java
index 63d21b6..b5bfb89 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypesInfo.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypesInfo.java
@@ -1,41 +1,12 @@
package org.zwobble.hobgoblin.compiler.typechecker;
import org.zwobble.hobgoblin.compiler.types.*;
-import org.zwobble.hobgoblin.compiler.util.ManyToMany;
import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-public class TypesInfo {
- private final Map<EnumType, List<EnumVariant>> enumVariants;
- private final Map<Type, List<Field>> fieldsOf;
- private final ManyToMany<SumType, Type> sumVariants;
-
- public TypesInfo(
- Map<EnumType, List<EnumVariant>> enumVariants,
- Map<Type, List<Field>> fieldsOf,
- ManyToMany<SumType, Type> sumVariants
- ) {
- this.enumVariants = enumVariants;
- this.fieldsOf = fieldsOf;
- this.sumVariants = sumVariants;
- }
-
- public List<EnumVariant> enumVariants(EnumType enumType) {
- return this.enumVariants.get(enumType);
- }
-
- public List<Field> fieldsOf(StructType structType) {
- // TODO: handle error better
- return Optional.ofNullable(this.fieldsOf.get(structType)).orElseThrow();
- }
-
- public List<SumType> variantOf(StructType variantType) {
- return this.sumVariants.rightToLeft(variantType);
- }
-
- public List<Type> sumVariants(SumType type) {
- return this.sumVariants.leftToRight(type);
- }
+public interface TypesInfo {
+ List<EnumVariant> enumVariants(EnumType enumType);
+ List<Field> fieldsOf(StructType structType);
+ List<SumType> variantOf(StructType variantType);
+ List<Type> sumVariants(SumType type);
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypesInfoInMemory.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypesInfoInMemory.java
new file mode 100644
index 0000000..dae23ea
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypesInfoInMemory.java
@@ -0,0 +1,41 @@
+package org.zwobble.hobgoblin.compiler.typechecker;
+
+import org.zwobble.hobgoblin.compiler.types.*;
+import org.zwobble.hobgoblin.compiler.util.ManyToMany;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+public class TypesInfoInMemory implements TypesInfo {
+ private final Map<EnumType, List<EnumVariant>> enumVariants;
+ private final Map<Type, List<Field>> fieldsOf;
+ private final ManyToMany<SumType, Type> sumVariants;
+
+ public TypesInfoInMemory(
+ Map<EnumType, List<EnumVariant>> enumVariants,
+ Map<Type, List<Field>> fieldsOf,
+ ManyToMany<SumType, Type> sumVariants
+ ) {
+ this.enumVariants = enumVariants;
+ this.fieldsOf = fieldsOf;
+ this.sumVariants = sumVariants;
+ }
+
+ public List<EnumVariant> enumVariants(EnumType enumType) {
+ return this.enumVariants.get(enumType);
+ }
+
+ public List<Field> fieldsOf(StructType structType) {
+ // TODO: handle error better
+ return Optional.ofNullable(this.fieldsOf.get(structType)).orElseThrow();
+ }
+
+ public List<SumType> variantOf(StructType variantType) {
+ return this.sumVariants.rightToLeft(variantType);
+ }
+
+ public List<Type> sumVariants(SumType type) {
+ return this.sumVariants.leftToRight(type);
+ }
+}