mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
[INFER] Mark INCELEM opcodes accessing non-integer properties as producing unknown values, bug 653243.
This commit is contained in:
parent
b7e3e5433b
commit
d868b00326
12
js/src/jit-test/tests/jaeger/bug653243.js
Normal file
12
js/src/jit-test/tests/jaeger/bug653243.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
try {
|
||||||
|
obj[i] = "a";
|
||||||
|
} catch (e) {}
|
||||||
|
var obj = {
|
||||||
|
p: 100
|
||||||
|
};
|
||||||
|
var name = "p";
|
||||||
|
var a = [];
|
||||||
|
for (var i = 0; i < 10; i++) {
|
||||||
|
a[i] = obj[name]--;
|
||||||
|
}
|
||||||
|
assertEq(a.join(), '100,99,98,97,96,95,94,93,92,91');
|
@ -1833,6 +1833,9 @@ stubs::ElemInc(VMFrame &f)
|
|||||||
if (!ObjIncOp<1, true, strict, true>(f, obj, id))
|
if (!ObjIncOp<1, true, strict, true>(f, obj, id))
|
||||||
THROW();
|
THROW();
|
||||||
f.regs.sp[-3] = f.regs.sp[-1];
|
f.regs.sp[-3] = f.regs.sp[-1];
|
||||||
|
|
||||||
|
if (!JSID_IS_INT(id) && !f.script()->typeMonitorUnknown(f.cx, f.pc()))
|
||||||
|
THROW();
|
||||||
}
|
}
|
||||||
|
|
||||||
template void JS_FASTCALL stubs::ElemInc<true>(VMFrame &f);
|
template void JS_FASTCALL stubs::ElemInc<true>(VMFrame &f);
|
||||||
@ -1851,6 +1854,9 @@ stubs::ElemDec(VMFrame &f)
|
|||||||
if (!ObjIncOp<-1, true, strict, true>(f, obj, id))
|
if (!ObjIncOp<-1, true, strict, true>(f, obj, id))
|
||||||
THROW();
|
THROW();
|
||||||
f.regs.sp[-3] = f.regs.sp[-1];
|
f.regs.sp[-3] = f.regs.sp[-1];
|
||||||
|
|
||||||
|
if (!JSID_IS_INT(id) && !f.script()->typeMonitorUnknown(f.cx, f.pc()))
|
||||||
|
THROW();
|
||||||
}
|
}
|
||||||
|
|
||||||
template void JS_FASTCALL stubs::ElemDec<true>(VMFrame &f);
|
template void JS_FASTCALL stubs::ElemDec<true>(VMFrame &f);
|
||||||
@ -1869,6 +1875,9 @@ stubs::IncElem(VMFrame &f)
|
|||||||
if (!ObjIncOp<1, false, strict, true>(f, obj, id))
|
if (!ObjIncOp<1, false, strict, true>(f, obj, id))
|
||||||
THROW();
|
THROW();
|
||||||
f.regs.sp[-3] = f.regs.sp[-1];
|
f.regs.sp[-3] = f.regs.sp[-1];
|
||||||
|
|
||||||
|
if (!JSID_IS_INT(id) && !f.script()->typeMonitorUnknown(f.cx, f.pc()))
|
||||||
|
THROW();
|
||||||
}
|
}
|
||||||
|
|
||||||
template void JS_FASTCALL stubs::IncElem<true>(VMFrame &f);
|
template void JS_FASTCALL stubs::IncElem<true>(VMFrame &f);
|
||||||
@ -1887,6 +1896,9 @@ stubs::DecElem(VMFrame &f)
|
|||||||
if (!ObjIncOp<-1, false, strict, true>(f, obj, id))
|
if (!ObjIncOp<-1, false, strict, true>(f, obj, id))
|
||||||
THROW();
|
THROW();
|
||||||
f.regs.sp[-3] = f.regs.sp[-1];
|
f.regs.sp[-3] = f.regs.sp[-1];
|
||||||
|
|
||||||
|
if (!JSID_IS_INT(id) && !f.script()->typeMonitorUnknown(f.cx, f.pc()))
|
||||||
|
THROW();
|
||||||
}
|
}
|
||||||
|
|
||||||
template void JS_FASTCALL stubs::DecElem<true>(VMFrame &f);
|
template void JS_FASTCALL stubs::DecElem<true>(VMFrame &f);
|
||||||
|
Loading…
Reference in New Issue
Block a user