Fix decompilation of JSOP_REGEXP and JSOP_NEWARRAY_COPYONWRITE.

This commit is contained in:
Pale Moon
2017-08-13 10:57:54 +02:00
committed by Roy Tam
parent 4422e05f3b
commit 9eff8e7274
+26 -5
View File
@@ -1608,12 +1608,33 @@ ExpressionDecompiler::decompilePC(jsbytecode* pc)
write("(...)");
case JSOP_NEWARRAY:
return write("[]");
case JSOP_REGEXP:
case JSOP_OBJECT:
case JSOP_REGEXP: {
RootedObject obj(cx, script->getRegExp(GET_UINT32_INDEX(pc)));
JSString* str = obj->as<RegExpObject>().toString(cx);
if (!str)
return false;
return write(str);
}
case JSOP_NEWARRAY_COPYONWRITE: {
JSObject* obj = (op == JSOP_REGEXP)
? script->getRegExp(GET_UINT32_INDEX(pc))
: script->getObject(GET_UINT32_INDEX(pc));
RootedObject obj(cx, script->getObject(GET_UINT32_INDEX(pc)));
Handle<ArrayObject*> aobj = obj.as<ArrayObject>();
if (!write("["))
return false;
for (size_t i = 0; i < aobj->getDenseInitializedLength(); i++) {
if (i > 0 && !write(", "))
return false;
RootedValue v(cx, aobj->getDenseElement(i));
MOZ_RELEASE_ASSERT(v.isPrimitive() && !v.isMagic());
JSString* str = ValueToSource(cx, v);
if (!str || !write(str))
return false;
}
return write("]");
}
case JSOP_OBJECT: {
JSObject* obj = script->getObject(GET_UINT32_INDEX(pc));
RootedValue objv(cx, ObjectValue(*obj));
JSString* str = ValueToSource(cx, objv);
if (!str)