propose-patch
[org.ibex.core.git] / src / org / xwt / js / JSFunction.java
index c15ef55..2f75ff2 100644 (file)
@@ -1,4 +1,4 @@
-// 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.*;
@@ -6,7 +6,7 @@ import java.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 ///////////////////////////////////////////////
@@ -26,8 +26,16 @@ public class JSFunction extends JS implements ByteCodes, Tokens {
 
     // 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);
@@ -41,7 +49,7 @@ public class JSFunction extends JS implements ByteCodes, Tokens {
         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
@@ -64,6 +72,7 @@ public class JSFunction extends JS implements ByteCodes, Tokens {
         return cx.resume();
     }
 
+    public JSScope getParentScope() { return parentScope; }
 
     // Adding and Altering Bytecodes ///////////////////////////////////////////////////
 
@@ -97,6 +106,7 @@ public class JSFunction extends JS implements ByteCodes, Tokens {
     // Debugging //////////////////////////////////////////////////////////////////////
 
     public String toString() { return "JSFunction [" + sourceName + ":" + firstLine + "]"; }
+
     public String dump() {
         StringBuffer sb = new StringBuffer(1024);
         sb.append("\n" + sourceName + ": " + firstLine + "\n");