diff --git a/mozilla/js/rhino/docs/rhino16R2.html b/mozilla/js/rhino/docs/rhino16R2.html
index 0f4a09fe234..3978f7e7297 100644
--- a/mozilla/js/rhino/docs/rhino16R2.html
+++ b/mozilla/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/mozilla/js/rhino/src/org/mozilla/javascript/Context.java b/mozilla/js/rhino/src/org/mozilla/javascript/Context.java
index f799936c922..cb21268efa9 100644
--- a/mozilla/js/rhino/src/org/mozilla/javascript/Context.java
+++ b/mozilla/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/mozilla/js/rhino/src/org/mozilla/javascript/Parser.java b/mozilla/js/rhino/src/org/mozilla/javascript/Parser.java
index 0db84dfc3fa..29e611673a9 100644
--- a/mozilla/js/rhino/src/org/mozilla/javascript/Parser.java
+++ b/mozilla/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;
}