Skip to content

Commit 1760a54

Browse files
committed
Bug 1875894: Update PortableBaselineInterpreter to handle new opcodes. r=iain
Differential Revision: https://phabricator.services.mozilla.com/D199336
1 parent 7aa9b8f commit 1760a54

File tree

1 file changed

+55
-4
lines changed

1 file changed

+55
-4
lines changed

js/src/vm/PortableBaselineInterpret.cpp

+55-4
Original file line numberDiff line numberDiff line change
@@ -4421,17 +4421,16 @@ PBIResult PortableBaselineInterpret(JSContext* cx_, State& state, Stack& stack,
44214421
}
44224422

44234423
CASE(AsyncResolve) {
4424-
// valueOrReason, gen => promise
4425-
auto resolveKind = AsyncFunctionResolveKind(GET_UINT8(pc));
4424+
// value, gen => promise
44264425
JSObject* promise;
44274426
{
44284427
ReservedRooted<JSObject*> obj0(&state.obj0,
44294428
&POP().asValue().toObject()); // gen
44304429
ReservedRooted<Value> value0(&state.value0,
4431-
POP().asValue()); // valueOrReason
4430+
POP().asValue()); // value
44324431
PUSH_EXIT_FRAME();
44334432
promise = AsyncFunctionResolve(
4434-
cx, obj0.as<AsyncFunctionGeneratorObject>(), value0, resolveKind);
4433+
cx, obj0.as<AsyncFunctionGeneratorObject>(), value0);
44354434
if (!promise) {
44364435
goto error;
44374436
}
@@ -4440,6 +4439,27 @@ PBIResult PortableBaselineInterpret(JSContext* cx_, State& state, Stack& stack,
44404439
END_OP(AsyncResolve);
44414440
}
44424441

4442+
CASE(AsyncReject) {
4443+
// reason, gen => promise
4444+
JSObject* promise;
4445+
{
4446+
ReservedRooted<JSObject*> obj0(&state.obj0,
4447+
&POP().asValue().toObject()); // gen
4448+
ReservedRooted<Value> value0(&state.value0,
4449+
POP().asValue()); // stack
4450+
ReservedRooted<Value> value1(&state.value1,
4451+
POP().asValue()); // reason
4452+
PUSH_EXIT_FRAME();
4453+
promise = AsyncFunctionReject(
4454+
cx, obj0.as<AsyncFunctionGeneratorObject>(), value1, value0);
4455+
if (!promise) {
4456+
goto error;
4457+
}
4458+
}
4459+
PUSH(StackVal(ObjectValue(*promise)));
4460+
END_OP(AsyncReject);
4461+
}
4462+
44434463
CASE(CanSkipAwait) {
44444464
// value => value, can_skip
44454465
bool result = false;
@@ -4724,6 +4744,17 @@ PBIResult PortableBaselineInterpret(JSContext* cx_, State& state, Stack& stack,
47244744
END_OP(Throw);
47254745
}
47264746

4747+
CASE(ThrowWithStack) {
4748+
{
4749+
ReservedRooted<Value> value0(&state.value0, POP().asValue());
4750+
ReservedRooted<Value> value1(&state.value1, POP().asValue());
4751+
PUSH_EXIT_FRAME();
4752+
MOZ_ALWAYS_FALSE(ThrowWithStackOperation(cx, value1, value0));
4753+
goto error;
4754+
}
4755+
END_OP(ThrowWithStack);
4756+
}
4757+
47274758
CASE(ThrowMsg) {
47284759
{
47294760
PUSH_EXIT_FRAME();
@@ -4760,6 +4791,25 @@ PBIResult PortableBaselineInterpret(JSContext* cx_, State& state, Stack& stack,
47604791
END_OP(Exception);
47614792
}
47624793

4794+
CASE(ExceptionAndStack) {
4795+
{
4796+
ReservedRooted<Value> value0(&state.value0);
4797+
{
4798+
PUSH_EXIT_FRAME();
4799+
if (!cx.getCx()->getPendingExceptionStack(&value0)) {
4800+
goto error;
4801+
}
4802+
if (!GetAndClearException(cx, &state.res)) {
4803+
goto error;
4804+
}
4805+
}
4806+
PUSH(StackVal(state.res));
4807+
PUSH(StackVal(value0));
4808+
state.res.setUndefined();
4809+
}
4810+
END_OP(ExceptionAndStack);
4811+
}
4812+
47634813
CASE(Finally) {
47644814
#ifndef __wasi__
47654815
if (frameMgr.cxForLocalUseOnly()->hasAnyPendingInterrupt()) {
@@ -5256,6 +5306,7 @@ PBIResult PortableBaselineInterpret(JSContext* cx_, State& state, Stack& stack,
52565306
sp = reinterpret_cast<StackVal*>(rfe.stackPointer);
52575307
TRACE_PRINTF(" -> finally to pc %p\n", pc);
52585308
PUSH(StackVal(rfe.exception));
5309+
PUSH(StackVal(rfe.exceptionStack));
52595310
PUSH(StackVal(BooleanValue(true)));
52605311
stack.unwindingSP = sp;
52615312
goto unwind;

0 commit comments

Comments
 (0)