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