TopchetoEU/revert-ES5 #31
@ -10,9 +10,6 @@ public final class CodeFunction extends FunctionValue {
|
|||||||
public final Value[][] captures;
|
public final Value[][] captures;
|
||||||
public Environment env;
|
public Environment env;
|
||||||
|
|
||||||
public Value self;
|
|
||||||
public Value argsVal;
|
|
||||||
|
|
||||||
private Value onCall(Frame frame) {
|
private Value onCall(Frame frame) {
|
||||||
frame.onPush();
|
frame.onPush();
|
||||||
|
|
||||||
@ -27,11 +24,8 @@ public final class CodeFunction extends FunctionValue {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public Value onCall(Environment env, boolean isNew, String name, Value thisArg, Value ...args) {
|
@Override public Value onCall(Environment env, boolean isNew, Value self, Value ...args) {
|
||||||
var frame = new Frame(env, isNew, thisArg, args, this);
|
var frame = new Frame(env, isNew, self, args, this);
|
||||||
if (argsVal != null) frame.fakeArgs = argsVal;
|
|
||||||
if (self != null) frame.self = self;
|
|
||||||
if (mustCallSuper && isNew) frame.self = null;
|
|
||||||
|
|
||||||
var res = onCall(frame);
|
var res = onCall(frame);
|
||||||
|
|
||||||
|
@ -7,7 +7,6 @@ import java.util.List;
|
|||||||
|
|
||||||
import me.topchetoeu.jscript.common.environment.Environment;
|
import me.topchetoeu.jscript.common.environment.Environment;
|
||||||
import me.topchetoeu.jscript.runtime.debug.DebugContext;
|
import me.topchetoeu.jscript.runtime.debug.DebugContext;
|
||||||
import me.topchetoeu.jscript.runtime.exceptions.EngineException;
|
|
||||||
import me.topchetoeu.jscript.runtime.values.KeyCache;
|
import me.topchetoeu.jscript.runtime.values.KeyCache;
|
||||||
import me.topchetoeu.jscript.runtime.values.Member;
|
import me.topchetoeu.jscript.runtime.values.Member;
|
||||||
import me.topchetoeu.jscript.runtime.values.Value;
|
import me.topchetoeu.jscript.runtime.values.Value;
|
||||||
@ -21,9 +20,8 @@ public abstract class FunctionValue extends ObjectValue {
|
|||||||
public int length;
|
public int length;
|
||||||
public Value prototype = new ObjectValue();
|
public Value prototype = new ObjectValue();
|
||||||
|
|
||||||
public boolean enableCall = true;
|
public boolean enableApply = true;
|
||||||
public boolean enableNew = true;
|
public boolean enableConstruct = true;
|
||||||
public boolean mustCallSuper = false;
|
|
||||||
|
|
||||||
private final FieldMember nameField = new FieldMember(this, true, false, false) {
|
private final FieldMember nameField = new FieldMember(this, true, false, false) {
|
||||||
@Override public Value get(Environment env, Value self) {
|
@Override public Value get(Environment env, Value self) {
|
||||||
@ -53,18 +51,17 @@ public abstract class FunctionValue extends ObjectValue {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
protected abstract Value onCall(Environment ext, boolean isNew, String name, Value thisArg, Value ...args);
|
protected abstract Value onCall(Environment ext, boolean isNew, Value thisArg, Value ...args);
|
||||||
|
|
||||||
@Override public String toString() { return String.format("function %s(...)", name); }
|
@Override public String toString() { return String.format("function %s(...)", name); }
|
||||||
@Override public Value call(Environment ext, boolean isNew, String name, Value thisArg, Value ...args) {
|
@Override public Value apply(Environment env, Value self, Value... args) {
|
||||||
if (isNew && !enableNew) super.call(ext, isNew, name, thisArg, args);
|
if (!enableApply) throw new RuntimeException("Function cannot be applied");
|
||||||
if (!isNew && !enableCall) {
|
return onCall(env, false, self, args);
|
||||||
if (name == null || name.equals("")) name = "(intermediate value)";
|
}
|
||||||
throw EngineException.ofType(name + " is not invokable");
|
@Override public Value construct(Environment env, Value self, Value... args) {
|
||||||
}
|
if (!enableConstruct) throw new RuntimeException("Function cannot be constructed");
|
||||||
|
return onCall(env, true, self, args);
|
||||||
return onCall(ext, isNew, name, thisArg, args);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override public Member getOwnMember(Environment env, KeyCache key) {
|
@Override public Member getOwnMember(Environment env, KeyCache key) {
|
||||||
switch (key.toString(env)) {
|
switch (key.toString(env)) {
|
||||||
|
@ -10,7 +10,7 @@ public final class NativeFunction extends FunctionValue {
|
|||||||
|
|
||||||
public final NativeFunctionRunner action;
|
public final NativeFunctionRunner action;
|
||||||
|
|
||||||
@Override public Value onCall(Environment env, boolean isNew, String name, Value self, Value ...args) {
|
@Override public Value onCall(Environment env, boolean isNew, Value self, Value ...args) {
|
||||||
return action.run(new Arguments(env, isNew, self, args));
|
return action.run(new Arguments(env, isNew, self, args));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user