[INFER] More robust handling when storing an unknown value to a known double, bug 617450.

This commit is contained in:
Brian Hackett 2010-12-08 06:28:35 -08:00
parent 915e45dac7
commit de02bee6d5
2 changed files with 19 additions and 4 deletions

View File

@ -0,0 +1,11 @@
function f() {
var x = 1.23;
function g() {
var y = x++;
assertEq(y, 1.23);
}
g();
assertEq(x, 2.23);
}
f();

View File

@ -2101,16 +2101,20 @@ FrameState::storeTop(FrameEntry *target, bool popGuaranteed, JSValueType type)
regstate(reg).reassociate(target);
}
} else if (type == JSVAL_TYPE_DOUBLE) {
JS_ASSERT(backing->isType(JSVAL_TYPE_INT32));
FPRegisterID fpreg = allocFPReg();
if (backing->isTypeKnown()) {
JS_ASSERT(backing->isType(JSVAL_TYPE_INT32));
masm.convertInt32ToDouble(reg, fpreg);
} else {
syncFe(backing);
masm.moveInt32OrDouble(addressOf(backing), fpreg);
}
target->setType(JSVAL_TYPE_DOUBLE);
target->data.setFPRegister(fpreg);
regstate(fpreg).associate(target, RematInfo::DATA);
forgetReg(reg);
forgetAllRegs(backing);
} else {
/*
* The backing should normally already be the type we are storing. However,