author | Luke Wagner <lw@mozilla.com> |
Mon, 03 Jan 2011 09:06:33 -0800 | |
changeset 59985 | 6d23e573cd875163c620ed08bfac0e4eaad81053 |
parent 59984 | 42bc53a5b27f977655554cbc3dd598d4232b43f3 |
child 59986 | 9fa77ffd11459e9f81052e2bc428376fd41cfaa1 |
push id | 17820 |
push user | cleary@mozilla.com |
push date | Tue, 04 Jan 2011 21:40:57 +0000 |
treeherder | mozilla-central@969691cfe40e [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | brendan |
bugs | 584423 |
milestone | 2.0b9pre |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
js/src/jsemit.cpp | file | annotate | diff | comparison | revisions |
--- a/js/src/jsemit.cpp +++ b/js/src/jsemit.cpp @@ -3771,16 +3771,23 @@ out: bad: ok = JS_FALSE; goto out; } JSBool js_EmitFunctionScript(JSContext *cx, JSCodeGenerator *cg, JSParseNode *body) { + /* + * The decompiler has assumptions about what may occur immediately after + * script->main (e.g., in the case of destructuring params). Thus, put the + * following ops into the range [script->code, script->main). Note: + * execution starts from script->code, so this has no semantic effect. + */ + if (cg->flags & TCF_FUN_IS_GENERATOR) { /* JSOP_GENERATOR must be the first instruction. */ CG_SWITCH_TO_PROLOG(cg); JS_ASSERT(CG_NEXT(cg) == CG_BASE(cg)); if (js_Emit1(cx, cg, JSOP_GENERATOR) < 0) return false; CG_SWITCH_TO_MAIN(cg); } @@ -3795,18 +3802,20 @@ js_EmitFunctionScript(JSContext *cx, JSC if (cg->needsEagerArguments()) { CG_SWITCH_TO_PROLOG(cg); if (js_Emit1(cx, cg, JSOP_ARGUMENTS) < 0 || js_Emit1(cx, cg, JSOP_POP) < 0) return false; CG_SWITCH_TO_MAIN(cg); } if (cg->flags & TCF_FUN_UNBRAND_THIS) { + CG_SWITCH_TO_PROLOG(cg); if (js_Emit1(cx, cg, JSOP_UNBRANDTHIS) < 0) return false; + CG_SWITCH_TO_MAIN(cg); } return js_EmitTree(cx, cg, body) && js_Emit1(cx, cg, JSOP_STOP) >= 0 && JSScript::NewScriptFromCG(cx, cg); } /* A macro for inlining at the top of js_EmitTree (whence it came). */