import java.util.Vector; class NativeFunction extends JSObject { NativeFunction(ControlNode aBody) { super("Function"); body = aBody; } JSValue call(Environment theEnv, JSValue rV) { JSScope args = new JSScope("Arguments"); theEnv.enterNewScope(args); for (int i = 0; i < parameters.size(); i++) { if (rV instanceof JSValueList) args.putProp(theEnv, (JSString)(parameters.elementAt(i)), (JSValue) ( ((JSValueList)rV).contents.elementAt(i)) ); else args.putProp(theEnv, (JSString)(parameters.elementAt(i)), rV ); } ControlNode c = body; while (c != null) c = c.eval(theEnv); theEnv.leaveScope(); return theEnv.resultValue; } ControlNode body; Vector parameters = new Vector(); }