aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-09-16 15:42:53 +0100
committerMichael Williamson <mike@zwobble.org>2023-09-16 15:42:53 +0100
commit4fcb9922d9d6369529b398b09d1021cffeccfd5c (patch)
tree5a61d1b5db77a0eccfde719382be8ed21f544aae /src/main/java
parenta06341080c61372bb58fba7f1aa29caa863b7ee9 (diff)
Handle invalid field name
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/types/NamespaceTypeInfo.java9
-rw-r--r--src/main/java/org/shedlang/compiler/types/NoSuchFieldInternalError.java16
2 files changed, 23 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/types/NamespaceTypeInfo.java b/src/main/java/org/shedlang/compiler/types/NamespaceTypeInfo.java
index 7540714b..3c5fbc0b 100644
--- a/src/main/java/org/shedlang/compiler/types/NamespaceTypeInfo.java
+++ b/src/main/java/org/shedlang/compiler/types/NamespaceTypeInfo.java
@@ -8,7 +8,12 @@ public record NamespaceTypeInfo(POrderedMap<String, Type> fields) {
}
public int fieldIndex(String fieldName) {
- // TODO: handle missing field
- return fields.keys().indexOf(fieldName);
+ var fieldIndex = fields.keys().indexOf(fieldName);
+
+ if (fieldIndex == -1) {
+ throw new NoSuchFieldInternalError(fieldName);
+ } else {
+ return fieldIndex;
+ }
}
}
diff --git a/src/main/java/org/shedlang/compiler/types/NoSuchFieldInternalError.java b/src/main/java/org/shedlang/compiler/types/NoSuchFieldInternalError.java
new file mode 100644
index 00000000..a465e5b0
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/types/NoSuchFieldInternalError.java
@@ -0,0 +1,16 @@
+package org.shedlang.compiler.types;
+
+import org.shedlang.compiler.errors.InternalCompilerError;
+
+public class NoSuchFieldInternalError extends InternalCompilerError {
+ private final String fieldName;
+
+ public NoSuchFieldInternalError(String fieldName) {
+ super("No such field: " + fieldName);
+ this.fieldName = fieldName;
+ }
+
+ public String fieldName() {
+ return fieldName;
+ }
+}