From d3457ec73355001b562dc2af00e2d17c832d9f91 Mon Sep 17 00:00:00 2001 From: "igor%mir2.org" Date: Sun, 18 Sep 2005 11:11:06 +0000 Subject: [PATCH] Fixing bug 309029: remind parser about Context.compileFunction case. --- js/rhino/docs/rhino16R2.html | 16 ++++++++++++++++ js/rhino/src/org/mozilla/javascript/Context.java | 3 +++ js/rhino/src/org/mozilla/javascript/Parser.java | 5 ++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/js/rhino/docs/rhino16R2.html b/js/rhino/docs/rhino16R2.html index 0f4a09fe2348..3978f7e72977 100644 --- a/js/rhino/docs/rhino16R2.html +++ b/js/rhino/docs/rhino16R2.html @@ -360,6 +360,22 @@ rethrown erro... + + + 306825 + + Allow to use shell.Global in servlets + + + + + + 309029 + + Exception when evaluating recursive function + + + diff --git a/js/rhino/src/org/mozilla/javascript/Context.java b/js/rhino/src/org/mozilla/javascript/Context.java index f799936c922c..cb21268efa98 100644 --- a/js/rhino/src/org/mozilla/javascript/Context.java +++ b/js/rhino/src/org/mozilla/javascript/Context.java @@ -2182,6 +2182,9 @@ public class Context } Parser p = new Parser(compilerEnv, compilationErrorReporter); + if (returnFunction) { + p.calledByCompileFunction = true; + } ScriptOrFnNode tree; if (sourceString != null) { tree = p.parse(sourceString, sourceName, lineno); diff --git a/js/rhino/src/org/mozilla/javascript/Parser.java b/js/rhino/src/org/mozilla/javascript/Parser.java index 0db84dfc3fa0..29e611673a94 100644 --- a/js/rhino/src/org/mozilla/javascript/Parser.java +++ b/js/rhino/src/org/mozilla/javascript/Parser.java @@ -68,6 +68,7 @@ public class Parser CompilerEnvirons compilerEnv; private ErrorReporter errorReporter; private String sourceURI; + boolean calledByCompileFunction; private TokenStream ts; private int currentFlaggedToken; @@ -340,7 +341,9 @@ public class Parser if (tt == Token.FUNCTION) { consumeToken(); try { - n = function(FunctionNode.FUNCTION_STATEMENT); + n = function(calledByCompileFunction + ? FunctionNode.FUNCTION_EXPRESSION + : FunctionNode.FUNCTION_STATEMENT); } catch (ParserException e) { break; }