X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fjs%2FJSFunction.java;h=5d8838e5ba1a7017981ac5e36177964ab9df91a2;hb=73131826a18c93af4fb04672bc3ec820e1197ad1;hp=4bf41e4831c2b678d41d5c0ccf4c01da67984b17;hpb=b1fa73c17b31f268fca5695d0876d7314fbacce3;p=org.ibex.js.git diff --git a/src/org/ibex/js/JSFunction.java b/src/org/ibex/js/JSFunction.java index 4bf41e4..5d8838e 100644 --- a/src/org/ibex/js/JSFunction.java +++ b/src/org/ibex/js/JSFunction.java @@ -1,11 +1,15 @@ -// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL] +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. + package org.ibex.js; import java.io.*; import org.ibex.util.*; /** A JavaScript function, compiled into bytecode */ -class JSFunction extends JS implements ByteCodes, Tokens, Task { +// FIXME: This shouldn't be public, needed for public add/delTrap (which is needed for the Template.java hack) +public class JSFunction extends JS implements ByteCodes, Tokens, Task { // Fields and Accessors /////////////////////////////////////////////// @@ -28,25 +32,10 @@ class JSFunction extends JS implements ByteCodes, Tokens, Task { // FEATURE: make sure that this can only be called from the Scheduler... /** if you enqueue a function, it gets invoked in its own pauseable context */ public void perform() throws JSExn { - Interpreter i = new Interpreter(this, true, new JSArray()); + Interpreter i = new Interpreter(this, true, new Interpreter.JSArgs(this)); i.resume(); } - /** parse and compile a function */ - public static JSFunction _fromReader(String sourceName, int firstLine, Reader sourceCode) throws IOException { - JSFunction ret = new JSFunction(sourceName, firstLine, null); - if (sourceCode == null) return ret; - Parser p = new Parser(sourceCode, sourceName, firstLine); - while(true) { - int s = ret.size; - p.parseStatement(ret, null); - if (s == ret.size) break; - } - ret.add(-1, LITERAL, null); - ret.add(-1, RETURN); - return ret; - } - public JSFunction _cloneWithNewParentScope(JSScope s) { JSFunction ret = new JSFunction(sourceName, firstLine, s); // Reuse the same op, arg, line, and size variables for the new "instance" of the function @@ -60,13 +49,8 @@ class JSFunction extends JS implements ByteCodes, Tokens, Task { } /** Note: code gets run in an unpauseable context. */ - public Object call(Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn { - JSArray args = new JSArray(); - if (nargs > 0) args.addElement(a0); - if (nargs > 1) args.addElement(a1); - if (nargs > 2) args.addElement(a2); - for(int i=3; i>>16) + " size: " + (n&0xffff)); } sb.append("\n"); }