diff --git a/program.own b/program.own index 4f0656e..e87bb27 100644 --- a/program.own +++ b/program.own @@ -85,6 +85,8 @@ for i = 0, i < 4, i = i + 1 { // map map = {"+" : add, "-" : sub. "*" : mul, "/" : div} +map["%"] = def(x,y) = x % y +map["pow"] = def(x,y) = pow(x, y) //print map["+"] print "\n" print function(map["+"], 4, 5) @@ -97,4 +99,5 @@ arr1 = arr1 :: 4 arr2 = [5,6,7] print arr1 print "\n" -print arr1 << arr2 \ No newline at end of file +print arr1 << arr2 + diff --git a/src/com/annimon/ownlang/parser/ast/ArrayAccessExpression.java b/src/com/annimon/ownlang/parser/ast/ArrayAccessExpression.java index a4511a8..4db62d0 100644 --- a/src/com/annimon/ownlang/parser/ast/ArrayAccessExpression.java +++ b/src/com/annimon/ownlang/parser/ast/ArrayAccessExpression.java @@ -54,7 +54,7 @@ public final class ArrayAccessExpression implements Expression { } } - private MapValue consumeMap(Value value) { + public MapValue consumeMap(Value value) { if (value instanceof MapValue) { return (MapValue) value; } else { diff --git a/src/com/annimon/ownlang/parser/ast/ArrayAssignmentStatement.java b/src/com/annimon/ownlang/parser/ast/ArrayAssignmentStatement.java index 14f4439..5a41a8a 100644 --- a/src/com/annimon/ownlang/parser/ast/ArrayAssignmentStatement.java +++ b/src/com/annimon/ownlang/parser/ast/ArrayAssignmentStatement.java @@ -1,5 +1,9 @@ package com.annimon.ownlang.parser.ast; +import com.annimon.ownlang.lib.ArrayValue; +import com.annimon.ownlang.lib.Value; +import com.annimon.ownlang.lib.Variables; + /** * * @author aNNiMON @@ -16,7 +20,12 @@ public final class ArrayAssignmentStatement implements Statement { @Override public void execute() { - array.getArray().set(array.lastIndex(), expression.eval()); + final Value container = Variables.get(array.variable); + if (container instanceof ArrayValue) { + array.getArray().set(array.lastIndex(), expression.eval()); + return; + } + array.consumeMap(container).set(array.indices.get(0).eval(), expression.eval()); } @Override