diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-09-16 15:42:53 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-09-16 15:42:53 +0100 |
| commit | 4fcb9922d9d6369529b398b09d1021cffeccfd5c (patch) | |
| tree | 5a61d1b5db77a0eccfde719382be8ed21f544aae /src/main/java | |
| parent | a06341080c61372bb58fba7f1aa29caa863b7ee9 (diff) | |
Handle invalid field name
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/types/NamespaceTypeInfo.java | 9 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/types/NoSuchFieldInternalError.java | 16 |
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; + } +} |
