Исправлен вызов пользовательской функции

This commit is contained in:
Victor 2016-01-08 21:32:20 +02:00
parent cf40faa126
commit 4004703cb6
2 changed files with 11 additions and 16 deletions

View File

@ -28,12 +28,21 @@ public final class UserDefinedFunction implements Function {
} }
@Override @Override
public Value execute(Value... args) { public Value execute(Value... values) {
final int size = values.length;
if (size != getArgsCount()) throw new RuntimeException("Args count mismatch");
try { try {
Variables.push();
for (int i = 0; i < size; i++) {
Variables.set(getArgsName(i), values[i]);
}
body.execute(); body.execute();
return NumberValue.ZERO; return NumberValue.ZERO;
} catch (ReturnStatement rt) { } catch (ReturnStatement rt) {
return rt.getResult(); return rt.getResult();
} finally {
Variables.pop();
} }
} }

View File

@ -40,21 +40,7 @@ public final class FunctionalExpression implements Expression {
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
values[i] = arguments.get(i).eval(); values[i] = arguments.get(i).eval();
} }
return getFunction(name).execute(values);
final Function function = getFunction(name);
if (function instanceof UserDefinedFunction) {
final UserDefinedFunction userFunction = (UserDefinedFunction) function;
if (size != userFunction.getArgsCount()) throw new RuntimeException("Args count mismatch");
Variables.push();
for (int i = 0; i < size; i++) {
Variables.set(userFunction.getArgsName(i), values[i]);
}
final Value result = userFunction.execute(values);
Variables.pop();
return result;
}
return function.execute(values);
} }
private Function getFunction(String key) { private Function getFunction(String key) {