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
|
@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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user