diff --git a/mozilla/js/rhino/src/org/mozilla/javascript/Interpreter.java b/mozilla/js/rhino/src/org/mozilla/javascript/Interpreter.java index 2f40a71bc7b..8c1196e82f0 100644 --- a/mozilla/js/rhino/src/org/mozilla/javascript/Interpreter.java +++ b/mozilla/js/rhino/src/org/mozilla/javascript/Interpreter.java @@ -122,6 +122,7 @@ public class Interpreter itsData = new InterpreterData(securityDomain, cx.getLanguageVersion()); itsData.itsSourceFile = scriptOrFn.getSourceName(); itsData.encodedSource = encodedSource; + itsData.topLevel = true; if (tree instanceof FunctionNode) { generateFunctionICode(cx); return createFunction(cx, scope, itsData, false); @@ -147,13 +148,12 @@ public class Interpreter private static void notifyDebugger_r(Context cx, InterpreterData idata, String debugSource) { + cx.debugger.handleCompilationDone(cx, idata, debugSource); if (idata.itsNestedFunctions != null) { for (int i = 0; i != idata.itsNestedFunctions.length; ++i) { notifyDebugger_r(cx, idata.itsNestedFunctions[i], debugSource); } } - cx.debugger.handleCompilationDone(cx, idata, debugSource); - } private void generateFunctionICode(Context cx) @@ -1703,8 +1703,8 @@ public class Interpreter } } else { - scope = ScriptRuntime.initScript(cx, scope, fnOrScript, thisObj, - idata.itsFromEvalCode); + ScriptRuntime.initScript(cx, scope, fnOrScript, thisObj, + idata.itsFromEvalCode); } if (idata.itsNestedFunctions != null) { diff --git a/mozilla/js/rhino/src/org/mozilla/javascript/InterpreterData.java b/mozilla/js/rhino/src/org/mozilla/javascript/InterpreterData.java index 757b7ecdb7f..f965a3acc94 100644 --- a/mozilla/js/rhino/src/org/mozilla/javascript/InterpreterData.java +++ b/mozilla/js/rhino/src/org/mozilla/javascript/InterpreterData.java @@ -40,7 +40,8 @@ import java.io.Serializable; import org.mozilla.javascript.debug.DebuggableScript; -final class InterpreterData implements Serializable, DebuggableScript { +final class InterpreterData implements Serializable, DebuggableScript +{ static final long serialVersionUID = 4815333329084415557L; @@ -48,7 +49,8 @@ final class InterpreterData implements Serializable, DebuggableScript { static final int INITIAL_STRINGTABLE_SIZE = 64; static final int INITIAL_NUMBERTABLE_SIZE = 64; - InterpreterData(Object securityDomain, int languageVersion) { + InterpreterData(Object securityDomain, int languageVersion) + { itsICodeTop = INITIAL_MAX_ICODE_LENGTH; itsICode = new byte[itsICodeTop]; @@ -96,24 +98,45 @@ final class InterpreterData implements Serializable, DebuggableScript { boolean useDynamicScope; - public boolean isFunction() { + boolean topLevel; + + public boolean isTopLevel() + { + return topLevel; + } + + public boolean isFunction() + { return itsFunctionType != 0; } - public String getFunctionName() { + public String getFunctionName() + { return itsName; } - public String getSourceName() { + public String getSourceName() + { return itsSourceFile; } - public boolean isGeneratedScript() { + public boolean isGeneratedScript() + { return ScriptRuntime.isGeneratedScript(itsSourceFile); } - public int[] getLineNumbers() { + public int[] getLineNumbers() + { return Interpreter.getLineNumbers(this); } + public int getFunctionCount() + { + return (itsNestedFunctions == null) ? 0 : itsNestedFunctions.length; + } + + public DebuggableScript getFunction(int index) + { + return itsNestedFunctions[index]; + } } diff --git a/mozilla/js/rhino/src/org/mozilla/javascript/debug/DebuggableScript.java b/mozilla/js/rhino/src/org/mozilla/javascript/debug/DebuggableScript.java index f9262afaa81..93487c06d2a 100644 --- a/mozilla/js/rhino/src/org/mozilla/javascript/debug/DebuggableScript.java +++ b/mozilla/js/rhino/src/org/mozilla/javascript/debug/DebuggableScript.java @@ -45,7 +45,9 @@ import java.util.Enumeration; * This interface exposes debugging information from executable * code (either functions or top-level scripts). */ -public interface DebuggableScript { +public interface DebuggableScript +{ + public boolean isTopLevel(); /** * Returns true if this is a function, false if it is a script. @@ -77,4 +79,8 @@ public interface DebuggableScript { */ public int[] getLineNumbers(); + public int getFunctionCount(); + + public DebuggableScript getFunction(int index); + }