[INFER] Rejoin during CALLPROP if either compilation did a GETPROP for string accesses, bug 643669.

This commit is contained in:
Brian Hackett 2011-03-22 14:40:07 -07:00
parent bd9e58285b
commit 989848101e
2 changed files with 33 additions and 0 deletions

View File

@ -0,0 +1,3 @@
try {(function () {
eval("gc().l()")
})() } catch (e) {}

View File

@ -3383,6 +3383,16 @@ mjit::Compiler::jsop_callprop_slow(JSAtom *atom)
frame.pop();
pushSyncedEntry(0);
pushSyncedEntry(1);
if (recompiling) {
OOL_STUBCALL(stubs::GetProp);
stubcc.rejoin(Changes(2));
OOL_STUBCALL(ic::CallProp);
stubcc.rejoin(Changes(2));
OOL_STUBCALL(ic::GetProp);
stubcc.rejoin(Changes(2));
}
return true;
}
@ -3669,6 +3679,10 @@ mjit::Compiler::jsop_callprop_generic(JSAtom *atom)
if (recompiling) {
OOL_STUBCALL(stubs::CallProp);
stubcc.rejoin(Changes(2));
OOL_STUBCALL(stubs::GetProp);
stubcc.rejoin(Changes(2));
OOL_STUBCALL(ic::GetProp);
stubcc.rejoin(Changes(2));
}
return true;
@ -3724,6 +3738,13 @@ mjit::Compiler::jsop_callprop_str(JSAtom *atom)
frame.pushTypedPayload(JSVAL_TYPE_STRING, strReg);
frame.forgetType(frame.peek(-1));
if (recompiling) {
OOL_STUBCALL(stubs::CallProp);
stubcc.rejoin(Changes(2));
OOL_STUBCALL(ic::CallProp);
stubcc.rejoin(Changes(2));
}
return true;
}
@ -3818,6 +3839,15 @@ mjit::Compiler::jsop_callprop_obj(JSAtom *atom)
stubcc.rejoin(Changes(2));
pics.append(pic);
if (recompiling) {
OOL_STUBCALL(stubs::CallProp);
stubcc.rejoin(Changes(2));
OOL_STUBCALL(stubs::GetProp);
stubcc.rejoin(Changes(2));
OOL_STUBCALL(ic::GetProp);
stubcc.rejoin(Changes(2));
}
return true;
}