зеркало из https://github.com/mozilla/pjs.git
Partial fix for bug 375682. This fixes the bug for Rhino's interpretive mode
only.
This commit is contained in:
Родитель
914ec3a6cc
Коммит
021a8f7bcf
|
@ -637,11 +637,11 @@ public class Interpreter
|
||||||
int fnType = scriptOrFn.getFunctionNode(fnIndex).
|
int fnType = scriptOrFn.getFunctionNode(fnIndex).
|
||||||
getFunctionType();
|
getFunctionType();
|
||||||
// Only function expressions or function expression
|
// Only function expressions or function expression
|
||||||
// statements needs closure code creating new function
|
// statements need closure code creating new function
|
||||||
// object on stack as function statements are initialized
|
// object on stack as function statements are initialized
|
||||||
// at script/function start
|
// at script/function start.
|
||||||
// In addition function expression can not present here
|
// In addition, function expressions can not be present here
|
||||||
// at statement level, they must only present as expressions.
|
// at statement level, they must only be present as expressions.
|
||||||
if (fnType == FunctionNode.FUNCTION_EXPRESSION_STATEMENT) {
|
if (fnType == FunctionNode.FUNCTION_EXPRESSION_STATEMENT) {
|
||||||
addIndexOp(Icode_CLOSURE_STMT, fnIndex);
|
addIndexOp(Icode_CLOSURE_STMT, fnIndex);
|
||||||
} else {
|
} else {
|
||||||
|
@ -649,6 +649,17 @@ public class Interpreter
|
||||||
throw Kit.codeBug();
|
throw Kit.codeBug();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// For function statements or function expression statements
|
||||||
|
// in scripts, we need to ensure that the result of the script
|
||||||
|
// is the function if it is the last statement in the script.
|
||||||
|
// For example, eval("function () {}") should return a
|
||||||
|
// function, not undefined.
|
||||||
|
if (!itsInFunctionFlag) {
|
||||||
|
addIndexOp(Icode_CLOSURE_EXPR, fnIndex);
|
||||||
|
stackChange(1);
|
||||||
|
addIcode(Icode_POP_RESULT);
|
||||||
|
stackChange(-1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -365,7 +365,11 @@ public class Main
|
||||||
lineno, null);
|
lineno, null);
|
||||||
if (script != null) {
|
if (script != null) {
|
||||||
Object result = evaluateScript(script, cx, global);
|
Object result = evaluateScript(script, cx, global);
|
||||||
if (result != Context.getUndefinedValue()) {
|
// Avoid printing out undefined or function definitions.
|
||||||
|
if (result != Context.getUndefinedValue() &&
|
||||||
|
!(result instanceof Function &&
|
||||||
|
source.trim().startsWith("function")))
|
||||||
|
{
|
||||||
try {
|
try {
|
||||||
ps.println(Context.toString(result));
|
ps.println(Context.toString(result));
|
||||||
} catch (RhinoException rex) {
|
} catch (RhinoException rex) {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче