diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-08-02 12:03:10 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-08-02 12:03:10 +0100 |
| commit | 39cd42e5c472caada59d4790d40551f60dd57cce (patch) | |
| tree | 75769c7999d1a59384b49d0f1ec90ad9a681e37c /src/main | |
| parent | bbee238f6f5989dbcfd2790d7310aad5664336ec (diff) | |
Use proper source for errors
Diffstat (limited to 'src/main')
4 files changed, 22 insertions, 17 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/analysis/ArbitraryValueAnalysis.java b/src/main/java/org/zwobble/hobgoblin/compiler/analysis/ArbitraryValueAnalysis.java index ed752d0..a281adf 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/analysis/ArbitraryValueAnalysis.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/analysis/ArbitraryValueAnalysis.java @@ -2,7 +2,6 @@ package org.zwobble.hobgoblin.compiler.analysis; import org.zwobble.hobgoblin.compiler.analysis.errors.SumTypeHasNoVariantsError; import org.zwobble.hobgoblin.compiler.analysis.errors.TypeIsInfiniteError; -import org.zwobble.hobgoblin.compiler.sources.NullSource; import org.zwobble.hobgoblin.compiler.typechecker.TypesInfo; import org.zwobble.hobgoblin.compiler.types.*; @@ -12,19 +11,17 @@ import java.util.Set; public class ArbitraryValueAnalysis { public static Type selectArbitraryVariant(SumType sumType, TypesInfo typesInfo) { - var sumVariants = typesInfo.sumVariants(sumType); - if (sumVariants.isEmpty()) { - // TODO: proper source - throw new SumTypeHasNoVariantsError(sumType, NullSource.INSTANCE); + var sumTypeInfo = typesInfo.sumTypeInfo(sumType); + if (sumTypeInfo.variants().isEmpty()) { + throw new SumTypeHasNoVariantsError(sumType, sumTypeInfo.source()); } var seenTypes = new HashSet<Type>(); seenTypes.add(sumType); - return sumVariants.stream() + return sumTypeInfo.variants().stream() .filter(variant -> isNonRecursivelyConstructable(variant.valueType(), seenTypes, typesInfo)) .findFirst() - // TODO: proper source - .orElseThrow(() -> new TypeIsInfiniteError(sumType, NullSource.INSTANCE)) + .orElseThrow(() -> new TypeIsInfiniteError(sumType, sumTypeInfo.source())) .containerType(); } 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 97a8c74..d812753 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypesInfo.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypesInfo.java @@ -13,6 +13,7 @@ public interface TypesInfo { List<SumType> variantOf(StructType variantType); List<SumVariant> sumVariants(SumType type); + SumTypeInfo sumTypeInfo(SumType type); List<EnumVariant> enumVariants(EnumType enumType); } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypesInfoInMemory.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypesInfoInMemory.java index 07c3673..f97badf 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypesInfoInMemory.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypesInfoInMemory.java @@ -6,12 +6,6 @@ import org.zwobble.hobgoblin.compiler.types.*; import java.util.*; public class TypesInfoInMemory implements TypesInfo { - private record SumTypeInfo( - List<SumVariant> variants, - List<Field> fields, - Source source - ) {} - public static TypesInfoInMemory empty() { return new TypesInfoInMemory( new HashMap<>(), @@ -88,14 +82,15 @@ public class TypesInfoInMemory implements TypesInfo { } public List<SumVariant> sumVariants(SumType type) { - return sumTypeInfo(type).variants; + return sumTypeInfo(type).variants(); } public List<Field> fieldsOf(SumType type) { - return sumTypeInfo(type).fields; + return sumTypeInfo(type).fields(); } - private SumTypeInfo sumTypeInfo(SumType type) { + @Override + public SumTypeInfo sumTypeInfo(SumType type) { var typeInfo = this.sumTypeInfos.get(type); if (typeInfo == null) { // TODO: better error diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/types/SumTypeInfo.java b/src/main/java/org/zwobble/hobgoblin/compiler/types/SumTypeInfo.java new file mode 100644 index 0000000..1fde055 --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/types/SumTypeInfo.java @@ -0,0 +1,12 @@ +package org.zwobble.hobgoblin.compiler.types; + +import org.zwobble.hobgoblin.compiler.sources.Source; + +import java.util.List; + +public record SumTypeInfo( + List<SumVariant> variants, + List<Field> fields, + Source source +) { +} |
