X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2Fjs%2FJSFunction.java;h=2f75ff2dfdc8de8d3be1592e25ed43960ec37423;hb=de378041d5ca2aca1a2b5a31ef15ae90a86c977f;hp=c15ef55272ffb8129b42846a9a84e6ce00bea101;hpb=a374e033525b9c872cf47b10c066afbb532bf7c4;p=org.ibex.core.git diff --git a/src/org/xwt/js/JSFunction.java b/src/org/xwt/js/JSFunction.java index c15ef55..2f75ff2 100644 --- a/src/org/xwt/js/JSFunction.java +++ b/src/org/xwt/js/JSFunction.java @@ -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");