diff --git a/src/main/java/com/annimon/ownlang/lib/ClassInstanceValue.java b/src/main/java/com/annimon/ownlang/lib/ClassInstanceValue.java index febcfa9..a0e2a4a 100644 --- a/src/main/java/com/annimon/ownlang/lib/ClassInstanceValue.java +++ b/src/main/java/com/annimon/ownlang/lib/ClassInstanceValue.java @@ -43,6 +43,15 @@ public class ClassInstanceValue implements Value { return thisMap.get(value); } + public void set(Value key, Value value) { + final Value v = thisMap.get(key); + if (v == null) { + throw new RuntimeException("Unable to add new field " + + key.asString() + " to class " + className); + } + thisMap.set(key, value); + } + @Override public Object raw() { return null; diff --git a/src/main/java/com/annimon/ownlang/parser/ast/ContainerAccessExpression.java b/src/main/java/com/annimon/ownlang/parser/ast/ContainerAccessExpression.java index d013717..6ee8305 100644 --- a/src/main/java/com/annimon/ownlang/parser/ast/ContainerAccessExpression.java +++ b/src/main/java/com/annimon/ownlang/parser/ast/ContainerAccessExpression.java @@ -73,6 +73,10 @@ public final class ContainerAccessExpression implements Expression, Accessible { ((MapValue) container).set(lastIndex, value); return value; + case Types.CLASS: + ((ClassInstanceValue) container).set(lastIndex, value); + return value; + default: throw new TypeException("Array or map expected. Got " + container.type()); }