mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1153458 - Fix decompiler issue with DoCallNativeGetter. r=efaust
This commit is contained in:
parent
daae534dcc
commit
ab19894824
13
js/src/jit-test/tests/baseline/bug1153458.js
Normal file
13
js/src/jit-test/tests/baseline/bug1153458.js
Normal file
@ -0,0 +1,13 @@
|
||||
// |jit-test| baseline-eager; error: TypeError
|
||||
try {
|
||||
__defineGetter__("x", Iterator)()
|
||||
} catch (e) {}
|
||||
f = function() {
|
||||
return (function() {
|
||||
this.x
|
||||
})
|
||||
}()
|
||||
try {
|
||||
f()
|
||||
} catch (e) {}
|
||||
f()
|
@ -7666,14 +7666,13 @@ ICGetProp_CallNative::Compiler::generateStubCode(MacroAssembler& masm)
|
||||
|
||||
Label failure;
|
||||
|
||||
AllocatableGeneralRegisterSet regs(availableGeneralRegs(0));
|
||||
AllocatableGeneralRegisterSet regs(availableGeneralRegs(1));
|
||||
Register objReg = InvalidReg;
|
||||
|
||||
MOZ_ASSERT(!(inputDefinitelyObject_ && outerClass_));
|
||||
if (inputDefinitelyObject_) {
|
||||
objReg = R0.scratchReg();
|
||||
} else {
|
||||
regs.take(R0);
|
||||
// Guard input is an object and unbox.
|
||||
masm.branchTestObject(Assembler::NotEqual, R0, &failure);
|
||||
objReg = masm.extractObject(R0, ExtractTemp0);
|
||||
@ -7683,12 +7682,11 @@ ICGetProp_CallNative::Compiler::generateStubCode(MacroAssembler& masm)
|
||||
masm.branchTestObjClass(Assembler::NotEqual, objReg, tmp, outerClass_, &failure);
|
||||
masm.loadPtr(Address(objReg, ProxyDataOffset + offsetof(ProxyDataLayout, values)), tmp);
|
||||
masm.loadValue(Address(tmp, offsetof(ProxyValueArray, privateSlot)), val);
|
||||
objReg = masm.extractObject(val, ExtractTemp0);
|
||||
masm.movePtr(masm.extractObject(val, ExtractTemp0), objReg);
|
||||
regs.add(val);
|
||||
regs.add(tmp);
|
||||
}
|
||||
}
|
||||
regs.takeUnchecked(objReg);
|
||||
|
||||
Register scratch = regs.takeAnyExcluding(ICTailCallReg);
|
||||
|
||||
@ -7704,6 +7702,13 @@ ICGetProp_CallNative::Compiler::generateStubCode(MacroAssembler& masm)
|
||||
regs.add(holderReg);
|
||||
}
|
||||
|
||||
// Box and push obj onto baseline frame stack for decompiler
|
||||
if (inputDefinitelyObject_)
|
||||
masm.tagValue(JSVAL_TYPE_OBJECT, objReg, R0);
|
||||
EmitStowICValues(masm, 1);
|
||||
if (inputDefinitelyObject_)
|
||||
objReg = masm.extractObject(R0, ExtractTemp0);
|
||||
|
||||
// Push a stub frame so that we can perform a non-tail call.
|
||||
enterStubFrame(masm, scratch);
|
||||
|
||||
@ -7715,15 +7720,14 @@ ICGetProp_CallNative::Compiler::generateStubCode(MacroAssembler& masm)
|
||||
masm.push(objReg);
|
||||
masm.push(callee);
|
||||
|
||||
if (!inputDefinitelyObject_)
|
||||
regs.add(R0);
|
||||
else
|
||||
regs.add(objReg);
|
||||
regs.add(R0);
|
||||
|
||||
if (!callVM(DoCallNativeGetterInfo, masm))
|
||||
return false;
|
||||
leaveStubFrame(masm);
|
||||
|
||||
EmitUnstowICValues(masm, 1, /* discard = */true);
|
||||
|
||||
// Enter type monitor IC to type-check result.
|
||||
EmitEnterTypeMonitorIC(masm);
|
||||
|
||||
|
@ -215,6 +215,8 @@ class Test:
|
||||
test.test_join.append([name[len('test-join='):]])
|
||||
elif name == 'ion-eager':
|
||||
test.jitflags.append('--ion-eager')
|
||||
elif name == 'baseline-eager':
|
||||
test.jitflags.append('--baseline-eager')
|
||||
elif name == 'dump-bytecode':
|
||||
test.jitflags.append('--dump-bytecode')
|
||||
elif name.startswith('--'):
|
||||
|
Loading…
Reference in New Issue
Block a user