mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 618362 - Fix offset when accessing args in strict mode (r=njn)
This commit is contained in:
parent
550ccf784f
commit
8cbdef706f
@ -13,7 +13,7 @@ function strictArgs(a)
|
||||
}
|
||||
|
||||
var a1, a2, a3;
|
||||
for (var i = 0; i < 5; i++)
|
||||
for (var i = 0; i < HOTLOOP+1; i++)
|
||||
{
|
||||
a1 = strictArgs();
|
||||
a2 = strictArgs(1);
|
||||
|
@ -10476,8 +10476,8 @@ TraceRecorder::newArguments(LIns* callee_ins, bool strict)
|
||||
if (strict) {
|
||||
LIns* argsData_ins = w.getObjPrivatizedSlot(argsobj_ins, JSObject::JSSLOT_ARGS_DATA);
|
||||
ptrdiff_t slotsOffset = offsetof(ArgumentsData, slots);
|
||||
cx->fp()->forEachCanonicalActualArg(BoxArg(this, ArgsSlotsAddress(argsData_ins,
|
||||
slotsOffset)));
|
||||
cx->fp()->forEachCanonicalActualArg(BoxArg(this, ArgsSlotOffsetAddress(argsData_ins,
|
||||
slotsOffset)));
|
||||
}
|
||||
|
||||
return argsobj_ins;
|
||||
@ -12586,7 +12586,8 @@ TraceRecorder::guardNotHole(LIns *argsobj_ins, LIns *idx_ins)
|
||||
LIns* vp_ins = w.addp(argsData_ins, slotOffset_ins);
|
||||
|
||||
guard(false,
|
||||
w.name(is_boxed_magic(ArgsSlotsAddress(vp_ins), JS_ARGS_HOLE), "guard(not deleted arg)"),
|
||||
w.name(is_boxed_magic(ArgsSlotOffsetAddress(vp_ins), JS_ARGS_HOLE),
|
||||
"guard(not deleted arg)"),
|
||||
MISMATCH_EXIT);
|
||||
}
|
||||
|
||||
|
@ -244,10 +244,10 @@ struct FCSlotsAddress : Address
|
||||
: Address(base, slot * sizeof(Value), ACCSET_FCSLOTS) {}
|
||||
};
|
||||
|
||||
struct ArgsSlotsAddress : Address
|
||||
struct ArgsSlotOffsetAddress : Address
|
||||
{
|
||||
ArgsSlotsAddress(nj::LIns *base, unsigned slot = 0)
|
||||
: Address(base, slot * sizeof(Value), ACCSET_ARGS_DATA) {}
|
||||
ArgsSlotOffsetAddress(nj::LIns *base, unsigned offset = 0)
|
||||
: Address(base, offset, ACCSET_ARGS_DATA) {}
|
||||
};
|
||||
|
||||
struct AnyAddress : Address
|
||||
|
Loading…
Reference in New Issue
Block a user