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/typechecker/TypeChecker.java9
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/errors/SumVariantMustBeInSameNamespaceError.java18
2 files changed, 25 insertions, 2 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 c2eae29..a12677e 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
@@ -291,6 +291,13 @@ public class TypeChecker {
throw new SumVariantMustBeStructError(variantValueType, untypedVariant.source());
}
+ if (!variantValueStructType.namespaceName().equals(context.namespaceName())) {
+ throw new SumVariantMustBeInSameNamespaceError(
+ variantValueStructType.namespaceName(),
+ untypedVariant.source()
+ );
+ }
+
var variant = new SumVariant(variants.size(), variantType.value(), variantValueStructType);
variants.add(variant);
}
@@ -348,8 +355,6 @@ public class TypeChecker {
Optional<List<Field>> variantTypeFields,
TypesInfo typesInfo
) {
- // TODO: check that variant and sum are in the same namespace.
-
for (var sumTypeField : sumTypeFields) {
var variantTypeField = variantTypeFields.flatMap(
fields -> fields.stream()
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/errors/SumVariantMustBeInSameNamespaceError.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/errors/SumVariantMustBeInSameNamespaceError.java
new file mode 100644
index 0000000..2210d1b
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/errors/SumVariantMustBeInSameNamespaceError.java
@@ -0,0 +1,18 @@
+package org.zwobble.hobgoblin.compiler.typechecker.errors;
+
+import org.zwobble.hobgoblin.compiler.errors.SourceError;
+import org.zwobble.hobgoblin.compiler.sources.Source;
+import org.zwobble.hobgoblin.compiler.types.NamespaceName;
+
+public class SumVariantMustBeInSameNamespaceError extends SourceError {
+ private final NamespaceName namespaceName;
+
+ public SumVariantMustBeInSameNamespaceError(NamespaceName namespaceName, Source source) {
+ super("sum variant must be in same namespace, but was from " + namespaceName, source);
+ this.namespaceName = namespaceName;
+ }
+
+ public NamespaceName namespaceName() {
+ return namespaceName;
+ }
+}