diff options
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); + } +} |
