author | Bill McCloskey <wmccloskey@mozilla.com> |
Tue, 05 Oct 2010 10:49:27 -0700 | |
changeset 55512 | ca4d24b04c2c8251320637ec88c8d6113ec52520 |
parent 55511 | 10505391ffd1f8fbcfa6cbf8ae7962b482bb04dc |
child 55513 | 01dbfd987f73995092031551f15432a2714cfecc |
push id | 16269 |
push user | jst@mozilla.com |
push date | Thu, 14 Oct 2010 01:40:35 +0000 |
treeherder | mozilla-central@29c228a4d7eb [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | brendan |
bugs | 601393 |
milestone | 2.0b7pre |
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 @@ -4446,16 +4446,27 @@ EmitEndInit(JSContext *cx, JSCodeGenerat #endif return js_Emit1(cx, cg, JSOP_ENDINIT) >= 0; } /* See the SRC_FOR source note offsetBias comments later in this file. */ JS_STATIC_ASSERT(JSOP_NOP_LENGTH == 1); JS_STATIC_ASSERT(JSOP_POP_LENGTH == 1); +class EmitLevelManager +{ +private: + JSCodeGenerator *cg; + +public: + EmitLevelManager(JSCodeGenerator *cg) : cg(cg) { cg->emitLevel++; } + + ~EmitLevelManager() { cg->emitLevel--; } +}; + JSBool js_EmitTree(JSContext *cx, JSCodeGenerator *cg, JSParseNode *pn) { JSBool ok, useful, wantval; JSStmtInfo *stmt, stmtInfo; ptrdiff_t top, off, tmp, beq, jmp; JSParseNode *pn2, *pn3; JSAtom *atom; @@ -4463,24 +4474,24 @@ js_EmitTree(JSContext *cx, JSCodeGenerat jsatomid atomIndex; uintN index; ptrdiff_t noteIndex; JSSrcNoteType noteType; jsbytecode *pc; JSOp op; TokenKind type; uint32 argc; + EmitLevelManager elm(cg); #if JS_HAS_SHARP_VARS jsint sharpnum; #endif JS_CHECK_RECURSION(cx, return JS_FALSE); ok = JS_TRUE; - cg->emitLevel++; pn->pn_offset = top = CG_OFFSET(cg); /* Emit notes to tell the current bytecode's source line number. */ UPDATE_LINE_NUMBER_NOTES(cx, cg, pn->pn_pos.begin.lineno); switch (pn->pn_type) { case TOK_FUNCTION: { @@ -6843,17 +6854,17 @@ js_EmitTree(JSContext *cx, JSCodeGenerat case TOK_NAME: /* * Cope with a left-over function definition that was replaced by a use * of a later function definition of the same name. See FunctionDef and * MakeDefIntoUse in jsparse.cpp. */ if (pn->pn_op == JSOP_NOP) - return JS_TRUE; + break; if (!EmitNameOp(cx, cg, pn, JS_FALSE)) return JS_FALSE; break; #if JS_HAS_XML_SUPPORT case TOK_XMLATTR: case TOK_XMLSPACE: case TOK_XMLTEXT: @@ -7044,17 +7055,18 @@ js_EmitTree(JSContext *cx, JSCodeGenerat return JS_FALSE; break; #endif /* JS_HAS_XML_SUPPORT */ default: JS_ASSERT(0); } - if (ok && --cg->emitLevel == 0) { + /* cg->emitLevel == 1 means we're last on the stack, so finish up. */ + if (ok && cg->emitLevel == 1) { if (cg->spanDeps) ok = OptimizeSpanDeps(cx, cg); if (!UpdateLineNumberNotes(cx, cg, pn->pn_pos.end.lineno)) return JS_FALSE; } return ok; }