bug 302439: Spandep fu doesn't skip unused JSOP_TABLESWITCH jump table entries. Patch by brendan (except for the whitespace cleanup by me), r=shaver a=brendan

This commit is contained in:
mrbkap%gmail.com 2005-07-28 17:39:44 +00:00
Родитель e8fcfb5c63
Коммит 2ca84fb604
1 изменённых файлов: 5 добавлений и 4 удалений

Просмотреть файл

@ -577,7 +577,7 @@ BuildSpanDepTable(JSContext *cx, JSCodeGenerator *cg)
pc2 += JUMP_OFFSET_LEN; pc2 += JUMP_OFFSET_LEN;
for (i = low; i <= high; i++) { for (i = low; i <= high; i++) {
off = GET_JUMP_OFFSET(pc2); off = GET_JUMP_OFFSET(pc2);
if (!AddSpanDep(cx, cg, pc, pc2, off)) if (off != 0 && !AddSpanDep(cx, cg, pc, pc2, off))
return JS_FALSE; return JS_FALSE;
pc2 += JUMP_OFFSET_LEN; pc2 += JUMP_OFFSET_LEN;
} }
@ -4712,10 +4712,10 @@ js_EmitTree(JSContext *cx, JSCodeGenerator *cg, JSParseNode *pn)
switch (pn->pn_head->pn_type) { switch (pn->pn_head->pn_type) {
case TOK_XMLETAGO: case TOK_XMLETAGO:
JS_ASSERT(0); JS_ASSERT(0);
/* FALL THROUGH */
case TOK_XMLPTAGC: case TOK_XMLPTAGC:
case TOK_XMLSTAGO: case TOK_XMLSTAGO:
break; break;
default: default:
if (js_Emit1(cx, cg, JSOP_STARTXML) < 0) if (js_Emit1(cx, cg, JSOP_STARTXML) < 0)
return JS_FALSE; return JS_FALSE;
@ -4723,8 +4723,9 @@ js_EmitTree(JSContext *cx, JSCodeGenerator *cg, JSParseNode *pn)
for (pn2 = pn->pn_head; pn2; pn2 = pn2->pn_next) { for (pn2 = pn->pn_head; pn2; pn2 = pn2->pn_next) {
if (pn2->pn_type == TOK_LC && if (pn2->pn_type == TOK_LC &&
js_Emit1(cx, cg, JSOP_STARTXMLEXPR) < 0) js_Emit1(cx, cg, JSOP_STARTXMLEXPR) < 0) {
return JS_FALSE; return JS_FALSE;
}
if (!js_EmitTree(cx, cg, pn2)) if (!js_EmitTree(cx, cg, pn2))
return JS_FALSE; return JS_FALSE;
if (pn2 != pn->pn_head && js_Emit1(cx, cg, JSOP_ADD) < 0) if (pn2 != pn->pn_head && js_Emit1(cx, cg, JSOP_ADD) < 0)
@ -4785,7 +4786,7 @@ js_EmitTree(JSContext *cx, JSCodeGenerator *cg, JSParseNode *pn)
for (pn2 = pn2->pn_next, i = 0; pn2; pn2 = pn2->pn_next, i++) { for (pn2 = pn2->pn_next, i = 0; pn2; pn2 = pn2->pn_next, i++) {
if (pn2->pn_type == TOK_LC && if (pn2->pn_type == TOK_LC &&
js_Emit1(cx, cg, JSOP_STARTXMLEXPR) < 0) { js_Emit1(cx, cg, JSOP_STARTXMLEXPR) < 0) {
return JS_FALSE; return JS_FALSE;
} }
if (!js_EmitTree(cx, cg, pn2)) if (!js_EmitTree(cx, cg, pn2))
return JS_FALSE; return JS_FALSE;