mirror of
https://github.com/aNNiMON/Own-Programming-Language-Tutorial.git
synced 2024-09-20 08:44:20 +03:00
Исправлен вызов пользовательской функции
This commit is contained in:
parent
cf40faa126
commit
4004703cb6
@ -28,12 +28,21 @@ public final class UserDefinedFunction implements Function {
|
||||
}
|
||||
|
||||
@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 {
|
||||
Variables.push();
|
||||
for (int i = 0; i < size; i++) {
|
||||
Variables.set(getArgsName(i), values[i]);
|
||||
}
|
||||
body.execute();
|
||||
return NumberValue.ZERO;
|
||||
} catch (ReturnStatement rt) {
|
||||
return rt.getResult();
|
||||
} finally {
|
||||
Variables.pop();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -40,21 +40,7 @@ public final class FunctionalExpression implements Expression {
|
||||
for (int i = 0; i < size; i++) {
|
||||
values[i] = arguments.get(i).eval();
|
||||
}
|
||||
|
||||
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);
|
||||
return getFunction(name).execute(values);
|
||||
}
|
||||
|
||||
private Function getFunction(String key) {
|
||||
|
Loading…
Reference in New Issue
Block a user