Fix computed vs. literal-identifier attribute name decompilation (349822, r=mrbkap).

This commit is contained in:
brendan%mozilla.org 2006-08-23 07:09:03 +00:00
Родитель 74c01e12c9
Коммит dc3833bf60
1 изменённых файлов: 11 добавлений и 2 удалений

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

@ -2363,12 +2363,15 @@ Decompile(SprintStack *ss, jsbytecode *pc, intN nb)
case JSOP_GETGVAR: case JSOP_GETGVAR:
atom = GET_ATOM(cx, jp->script, pc); atom = GET_ATOM(cx, jp->script, pc);
do_name: do_name:
lval = "";
do_qname:
sn = js_GetSrcNote(jp->script, pc); sn = js_GetSrcNote(jp->script, pc);
rval = QuoteString(&ss->sprinter, ATOM_TO_STRING(atom), 0); rval = QuoteString(&ss->sprinter, ATOM_TO_STRING(atom), 0);
if (!rval) if (!rval)
return JS_FALSE; return JS_FALSE;
RETRACT(&ss->sprinter, rval); RETRACT(&ss->sprinter, rval);
todo = Sprint(&ss->sprinter, ss_format, VarPrefix(sn), rval); todo = Sprint(&ss->sprinter, "%s%s%s",
VarPrefix(sn), lval, rval);
break; break;
case JSOP_UINT16: case JSOP_UINT16:
@ -2888,6 +2891,11 @@ Decompile(SprintStack *ss, jsbytecode *pc, intN nb)
break; break;
BEGIN_LITOPX_CASE(JSOP_QNAMEPART) BEGIN_LITOPX_CASE(JSOP_QNAMEPART)
if (pc[JSOP_QNAMEPART_LENGTH] == JSOP_TOATTRNAME) {
len += JSOP_TOATTRNAME_LENGTH;
lval = "@";
goto do_qname;
}
goto do_name; goto do_name;
END_LITOPX_CASE END_LITOPX_CASE
@ -2907,8 +2915,9 @@ Decompile(SprintStack *ss, jsbytecode *pc, intN nb)
break; break;
case JSOP_TOATTRNAME: case JSOP_TOATTRNAME:
op = JSOP_NOP; /* turn off parens */
rval = POP_STR(); rval = POP_STR();
todo = Sprint(&ss->sprinter, "@%s", rval); todo = Sprint(&ss->sprinter, "@[%s]", rval);
break; break;
case JSOP_TOATTRVAL: case JSOP_TOATTRVAL: