-// Copyright 2003 Adam Megacz, see the COPYING file for licensing [GPL]
+// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
package org.xwt.js;
import org.xwt.util.*;
import java.io.*;
/** A JavaScript function, compiled into bytecode */
-public class JSFunction extends JS implements ByteCodes, Tokens {
+class JSFunction extends JS implements ByteCodes, Tokens, org.xwt.Scheduler.Task {
// Fields and Accessors ///////////////////////////////////////////////
// Public //////////////////////////////////////////////////////////////////////////////
+ // 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());
+ int oldpausecount = i.pausecount;
+ i.resume();
+ }
+
/** parse and compile a function */
- public static JSFunction fromReader(String sourceName, int firstLine, Reader sourceCode) throws IOException {
+ 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);
return ret;
}
- public JSFunction cloneWithNewParentScope(JSScope s) {
+ 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
// NOTE: Neither *this* function nor the new function should be modified after this call
return cx.resume();
}
+ public JSScope getParentScope() { return parentScope; }
// Adding and Altering Bytecodes ///////////////////////////////////////////////////
// Debugging //////////////////////////////////////////////////////////////////////
public String toString() { return "JSFunction [" + sourceName + ":" + firstLine + "]"; }
+
public String dump() {
StringBuffer sb = new StringBuffer(1024);
sb.append("\n" + sourceName + ": " + firstLine + "\n");