aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter/values/ObjectInterpreterValue.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-02-11 21:33:25 +0000
committerMichael Williamson <mike@zwobble.org>2016-02-11 21:33:25 +0000
commita34a00ba19f6ffb61762da4629b53b8a633f9d17 (patch)
tree6ae34a92c0dfe9a24df0b7e90da2da263a61f708 /src/main/java/org/zwobble/couscous/interpreter/values/ObjectInterpreterValue.java
parent6d02b3e3e6f8da9837a46efda4733bdd89e38aaf (diff)
Implement static constructor and fields in interpreter
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/values/ObjectInterpreterValue.java')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/ObjectInterpreterValue.java24
1 files changed, 6 insertions, 18 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/ObjectInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/ObjectInterpreterValue.java
index 566ff80..e46ae45 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/ObjectInterpreterValue.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/ObjectInterpreterValue.java
@@ -1,20 +1,16 @@
package org.zwobble.couscous.interpreter.values;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
-import org.zwobble.couscous.interpreter.InterpreterTypes;
-import org.zwobble.couscous.interpreter.errors.NoSuchField;
-import org.zwobble.couscous.interpreter.errors.UnboundField;
import org.zwobble.couscous.values.PrimitiveValue;
+import java.util.Optional;
+
public class ObjectInterpreterValue implements InterpreterValue {
private final ConcreteType type;
- private final Map<String, InterpreterValue> fields;
+ private final InterpreterFields fields;
public ObjectInterpreterValue(ConcreteType type) {
this.type = type;
- this.fields = new HashMap<>();
+ this.fields = new InterpreterFields(type);
}
@Override
@@ -29,19 +25,11 @@ public class ObjectInterpreterValue implements InterpreterValue {
@Override
public InterpreterValue getField(String fieldName) {
- type.getField(fieldName).orElseThrow(() -> new NoSuchField(fieldName));
- if (fields.containsKey(fieldName)) {
- return fields.get(fieldName);
- } else {
- throw new UnboundField(fieldName);
- }
+ return fields.getField(fieldName);
}
@Override
public void setField(String fieldName, InterpreterValue value) {
- FieldValue field = type.getField(fieldName)
- .orElseThrow(() -> new NoSuchField(fieldName));
- InterpreterTypes.checkIsInstance(field.getType(), value);
- fields.put(fieldName, value);
+ fields.setField(fieldName, value);
}
} \ No newline at end of file