From cd7382bcbc1ea971ef42e5f9bd9ecf19b0b316e8 Mon Sep 17 00:00:00 2001 From: Victor Date: Fri, 17 Jul 2015 14:48:00 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B9=20?= =?UTF-8?q?=D0=B8=D0=B7=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ownlang/parser/ast/FunctionalExpression.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/com/annimon/ownlang/parser/ast/FunctionalExpression.java b/src/com/annimon/ownlang/parser/ast/FunctionalExpression.java index f996880..554017a 100644 --- a/src/com/annimon/ownlang/parser/ast/FunctionalExpression.java +++ b/src/com/annimon/ownlang/parser/ast/FunctionalExpression.java @@ -1,7 +1,9 @@ package com.annimon.ownlang.parser.ast; import com.annimon.ownlang.lib.Function; +import com.annimon.ownlang.lib.FunctionValue; import com.annimon.ownlang.lib.Functions; +import static com.annimon.ownlang.lib.Functions.isExists; import com.annimon.ownlang.lib.UserDefinedFunction; import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Variables; @@ -39,7 +41,7 @@ public final class FunctionalExpression implements Expression { values[i] = arguments.get(i).eval(); } - final Function function = Functions.get(name); + final Function function = getFunction(name); if (function instanceof UserDefinedFunction) { final UserDefinedFunction userFunction = (UserDefinedFunction) function; if (size != userFunction.getArgsCount()) throw new RuntimeException("Args count mismatch"); @@ -55,6 +57,15 @@ public final class FunctionalExpression implements Expression { return function.execute(values); } + private Function getFunction(String key) { + if (Functions.isExists(key)) return Functions.get(key); + if (Variables.isExists(key)) { + final Value value = Variables.get(key); + if (value instanceof FunctionValue) return ((FunctionValue)value).getValue(); + } + throw new RuntimeException("Unknown function " + key); + } + @Override public void accept(Visitor visitor) { visitor.visit(this);