/** Called by Rhino's arguments.cascade. Note: cx will be null if this was invoked from perform() rather than from a script. */
public static final CascadeFunction cascadeFunction = new CascadeFunction();
private static class CascadeFunction extends JS.Function {
- CascadeFunction() { setSeal(true); }
+ CascadeFunction() { super(-1, "java", null, null); setSeal(true); }
public Object _call(JS.Array args) { return _call(args, JS.getCurrentFunction()); }
public Object _call(JS.Array args, Function currentFunction) {
Trap currentTrap = TrapContext.get().currentTrap;
- /*
- if (currentTrap == null || (currentFunction != currentTrap.f)) {
- if (Log.on) Log.log(this, "attempt to cascade() by a function that was not invoked as a trap at " +
- currentFunction.getSourceName());
- if (Log.on) Log.log(this, "currentfunction == " + currentFunction);
- if (Log.on) Log.log(this, "currentTrap.f == " + currentTrap.f);
- return null;
- }
- */
if (args.length() != 0) TrapContext.get().putCascadeHappened = true;
Trap t = currentTrap.next;
// if we've hit the end of the trap stack, just do a put(,,,true)
return ret;
}
- Object ret = f._call(args);
-
+ Object ret = f.call(args);
+
// autocascade if required
if (args.length() > 0 && !isreadtrap && !tc.putCascadeHappened) cascadeFunction._call(args, f);