From d2a159bb451890c82130fa9f54be3c057740125e Mon Sep 17 00:00:00 2001 From: Victor Date: Sun, 3 Apr 2016 16:21:19 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=BD=D0=B5=D0=BA=D0=BE=D1=80=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=BD=D0=BE=D0=B5=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B2=D0=BD=D1=83=D1=82=D1=80?= =?UTF-8?q?=D0=B8=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../annimon/ownlang/lib/UserDefinedFunction.java | 4 ++-- .../ast/DestructuringAssignmentStatement.java | 4 ++-- .../annimon/ownlang/parser/ast/MatchExpression.java | 10 +++++----- tests.own | 13 +++++++++++-- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/com/annimon/ownlang/lib/UserDefinedFunction.java b/src/com/annimon/ownlang/lib/UserDefinedFunction.java index a71b026..bc3cf5e 100644 --- a/src/com/annimon/ownlang/lib/UserDefinedFunction.java +++ b/src/com/annimon/ownlang/lib/UserDefinedFunction.java @@ -44,12 +44,12 @@ public final class UserDefinedFunction implements Function { try { Variables.push(); for (int i = 0; i < size; i++) { - Variables.set(getArgsName(i), values[i]); + Variables.define(getArgsName(i), values[i]); } // Optional args if exists for (int i = size; i < totalArgsCount; i++) { final Argument arg = arguments.get(i); - Variables.set(arg.getName(), arg.getValueExpr().eval()); + Variables.define(arg.getName(), arg.getValueExpr().eval()); } body.execute(); return NumberValue.ZERO; diff --git a/src/com/annimon/ownlang/parser/ast/DestructuringAssignmentStatement.java b/src/com/annimon/ownlang/parser/ast/DestructuringAssignmentStatement.java index 2d100f4..2b1d24f 100644 --- a/src/com/annimon/ownlang/parser/ast/DestructuringAssignmentStatement.java +++ b/src/com/annimon/ownlang/parser/ast/DestructuringAssignmentStatement.java @@ -41,7 +41,7 @@ public final class DestructuringAssignmentStatement implements Statement { for (int i = 0; i < size; i++) { final String variable = variables.get(i); if (variable != null) { - Variables.set(variable, array.get(i)); + Variables.define(variable, array.get(i)); } } } @@ -50,7 +50,7 @@ public final class DestructuringAssignmentStatement implements Statement { for (Map.Entry entry : map) { final String variable = variables.get(i); if (variable != null) { - Variables.set(variable, new ArrayValue( + Variables.define(variable, new ArrayValue( new Value[] { entry.getKey(), entry.getValue() } )); } diff --git a/src/com/annimon/ownlang/parser/ast/MatchExpression.java b/src/com/annimon/ownlang/parser/ast/MatchExpression.java index 8e8a2c9..1f1faa5 100644 --- a/src/com/annimon/ownlang/parser/ast/MatchExpression.java +++ b/src/com/annimon/ownlang/parser/ast/MatchExpression.java @@ -47,7 +47,7 @@ public final class MatchExpression implements Expression, Statement { return evalResult(p.result); } } else { - Variables.set(pattern.variable, value); + Variables.define(pattern.variable, value); if (optMatches(p)) { final Value result = evalResult(p.result);; Variables.remove(pattern.variable); @@ -84,7 +84,7 @@ public final class MatchExpression implements Expression, Statement { case 1: // match arr { case [x]: x = arr ... } final String variable = parts.get(0); - Variables.set(variable, array); + Variables.define(variable, array); if (optMatches(p)) { return true; } @@ -107,7 +107,7 @@ public final class MatchExpression implements Expression, Statement { private boolean matchListPatternEqualsSize(ListPattern p, List parts, int partsSize, ArrayValue array) { // Set variables for (int i = 0; i < partsSize; i++) { - Variables.set(parts.get(i), array.get(i)); + Variables.define(parts.get(i), array.get(i)); } if (optMatches(p)) { // Clean up will be provided after evaluate result @@ -124,14 +124,14 @@ public final class MatchExpression implements Expression, Statement { // Set element variables final int lastPart = partsSize - 1; for (int i = 0; i < lastPart; i++) { - Variables.set(parts.get(i), array.get(i)); + Variables.define(parts.get(i), array.get(i)); } // Set tail variable final ArrayValue tail = new ArrayValue(arraySize - partsSize + 1); for (int i = lastPart; i < arraySize; i++) { tail.set(i - lastPart, array.get(i)); } - Variables.set(parts.get(lastPart), tail); + Variables.define(parts.get(lastPart), tail); // Check optional condition if (optMatches(p)) { // Clean up will be provided after evaluate result diff --git a/tests.own b/tests.own index bd96965..0cfb580 100644 --- a/tests.own +++ b/tests.own @@ -32,9 +32,9 @@ def testTypes() { assertSameType(0, 0.0) } -def testFail() { +/*def testFail() { assertTrue(false) -} +}*/ def testScope() { x = 5 @@ -47,4 +47,13 @@ def testScope() { assertEquals(15, x) } +def testFibonacci() { + def fib(n) { + if n < 2 return n + return fib(n-2) + fib(n-1) + } + assertEquals(3, fib(4)) + assertEquals(21, fib(8)) +} + println runTests() \ No newline at end of file