summaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-08-02 12:00:52 +0100
committerMichael Williamson <mike@zwobble.org>2026-08-02 12:00:52 +0100
commitbbee238f6f5989dbcfd2790d7310aad5664336ec (patch)
tree17f5071efbdd5c2a846d59744b5b001960e577bd /src/main/java/org
parent3b74ee086e4b59e4265fa632c6db93fd0a9d07ea (diff)
Store source for sum types
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java7
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceContext.java5
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypesInfoInMemory.java9
3 files changed, 15 insertions, 6 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
index d87b7ff..a40bd92 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
@@ -293,7 +293,12 @@ public class TypeChecker {
var typeCheckedFieldDefinitions = typeCheckFieldDefinitions(untyped.fields(), context);
- context.defineSumType(sumType, variants, typeCheckedFieldDefinitions.fields);
+ context.defineSumType(
+ sumType,
+ variants,
+ typeCheckedFieldDefinitions.fields,
+ untyped.source()
+ );
for (var variant : variants) {
if (context.isDefined(variant.valueType())) {
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceContext.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceContext.java
index 804fd68..56bc5ed 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceContext.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceContext.java
@@ -76,9 +76,10 @@ public class TypeCheckerNamespaceContext {
public void defineSumType(
SumType sumType,
List<SumVariant> variantTypes,
- List<Field> fields
+ List<Field> fields,
+ Source source
) {
- this.typesInfo.defineSumType(sumType, variantTypes, fields);
+ this.typesInfo.defineSumType(sumType, variantTypes, fields, source);
}
public List<SumType> variantOf(StructType variantType) {
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 64c285b..07c3673 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypesInfoInMemory.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypesInfoInMemory.java
@@ -1,5 +1,6 @@
package org.zwobble.hobgoblin.compiler.typechecker;
+import org.zwobble.hobgoblin.compiler.sources.Source;
import org.zwobble.hobgoblin.compiler.types.*;
import java.util.*;
@@ -7,7 +8,8 @@ import java.util.*;
public class TypesInfoInMemory implements TypesInfo {
private record SumTypeInfo(
List<SumVariant> variants,
- List<Field> fields
+ List<Field> fields,
+ Source source
) {}
public static TypesInfoInMemory empty() {
@@ -69,9 +71,10 @@ public class TypesInfoInMemory implements TypesInfo {
public void defineSumType(
SumType sumType,
List<SumVariant> variants,
- List<Field> fields
+ List<Field> fields,
+ Source source
) {
- var sumTypeInfo = new SumTypeInfo(variants, fields);
+ var sumTypeInfo = new SumTypeInfo(variants, fields, source);
this.sumTypeInfos.put(sumType, sumTypeInfo);
for (var variant : variants) {