Commit c5948b98 authored by neis's avatar neis Committed by Commit bot

[generators] Always call function with closure context when resuming.

The resume trampolin used to call the generator function with the context of the
last suspension rather than the closure's context.  While that was fine for
Ignition, Turbofan got utterly confused.  With this CL, the resume trampolin
always passes in the closure's context (like in the very first call of the
generator function).  The generator function itself then restores its previously
current context by reading it from the generator object and doing a
PushContext.

BUG=chromium:681171

Review-Url: https://codereview.chromium.org/2639533002
Cr-Commit-Position: refs/heads/master@{#42407}
parent 8863f9f2
......@@ -737,8 +737,8 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
__ str(r2, FieldMemOperand(r1, JSGeneratorObject::kResumeModeOffset));
// Load suspended function and context.
__ ldr(cp, FieldMemOperand(r1, JSGeneratorObject::kContextOffset));
__ ldr(r4, FieldMemOperand(r1, JSGeneratorObject::kFunctionOffset));
__ ldr(cp, FieldMemOperand(r4, JSFunction::kContextOffset));
// Flood function if we are stepping.
Label prepare_step_in_if_stepping, prepare_step_in_suspended_generator;
......
......@@ -744,8 +744,8 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
__ Str(x2, FieldMemOperand(x1, JSGeneratorObject::kResumeModeOffset));
// Load suspended function and context.
__ Ldr(cp, FieldMemOperand(x1, JSGeneratorObject::kContextOffset));
__ Ldr(x4, FieldMemOperand(x1, JSGeneratorObject::kFunctionOffset));
__ Ldr(cp, FieldMemOperand(x4, JSFunction::kContextOffset));
// Flood function if we are stepping.
Label prepare_step_in_if_stepping, prepare_step_in_suspended_generator;
......
......@@ -386,8 +386,8 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
__ mov(FieldOperand(ebx, JSGeneratorObject::kResumeModeOffset), edx);
// Load suspended function and context.
__ mov(esi, FieldOperand(ebx, JSGeneratorObject::kContextOffset));
__ mov(edi, FieldOperand(ebx, JSGeneratorObject::kFunctionOffset));
__ mov(esi, FieldOperand(edi, JSFunction::kContextOffset));
// Flood function if we are stepping.
Label prepare_step_in_if_stepping, prepare_step_in_suspended_generator;
......
......@@ -864,8 +864,8 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
__ sw(a2, FieldMemOperand(a1, JSGeneratorObject::kResumeModeOffset));
// Load suspended function and context.
__ lw(cp, FieldMemOperand(a1, JSGeneratorObject::kContextOffset));
__ lw(t0, FieldMemOperand(a1, JSGeneratorObject::kFunctionOffset));
__ lw(cp, FieldMemOperand(t0, JSFunction::kContextOffset));
// Flood function if we are stepping.
Label prepare_step_in_if_stepping, prepare_step_in_suspended_generator;
......
......@@ -740,8 +740,8 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
__ sd(a2, FieldMemOperand(a1, JSGeneratorObject::kResumeModeOffset));
// Load suspended function and context.
__ ld(cp, FieldMemOperand(a1, JSGeneratorObject::kContextOffset));
__ ld(a4, FieldMemOperand(a1, JSGeneratorObject::kFunctionOffset));
__ ld(cp, FieldMemOperand(a4, JSFunction::kContextOffset));
// Flood function if we are stepping.
Label prepare_step_in_if_stepping, prepare_step_in_suspended_generator;
......
......@@ -749,8 +749,8 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
__ StoreP(r5, FieldMemOperand(r4, JSGeneratorObject::kResumeModeOffset), r0);
// Load suspended function and context.
__ LoadP(cp, FieldMemOperand(r4, JSGeneratorObject::kContextOffset));
__ LoadP(r7, FieldMemOperand(r4, JSGeneratorObject::kFunctionOffset));
__ LoadP(cp, FieldMemOperand(r7, JSFunction::kContextOffset));
// Flood function if we are stepping.
Label prepare_step_in_if_stepping, prepare_step_in_suspended_generator;
......
......@@ -748,8 +748,8 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
__ StoreP(r4, FieldMemOperand(r3, JSGeneratorObject::kResumeModeOffset));
// Load suspended function and context.
__ LoadP(cp, FieldMemOperand(r3, JSGeneratorObject::kContextOffset));
__ LoadP(r6, FieldMemOperand(r3, JSGeneratorObject::kFunctionOffset));
__ LoadP(cp, FieldMemOperand(r6, JSFunction::kContextOffset));
// Flood function if we are stepping.
Label prepare_step_in_if_stepping, prepare_step_in_suspended_generator;
......
......@@ -458,8 +458,8 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
__ movp(FieldOperand(rbx, JSGeneratorObject::kResumeModeOffset), rdx);
// Load suspended function and context.
__ movp(rsi, FieldOperand(rbx, JSGeneratorObject::kContextOffset));
__ movp(rdi, FieldOperand(rbx, JSGeneratorObject::kFunctionOffset));
__ movp(rsi, FieldOperand(rdi, JSFunction::kContextOffset));
// Flood function if we are stepping.
Label prepare_step_in_if_stepping, prepare_step_in_suspended_generator;
......
......@@ -387,8 +387,8 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
__ mov(FieldOperand(ebx, JSGeneratorObject::kResumeModeOffset), edx);
// Load suspended function and context.
__ mov(esi, FieldOperand(ebx, JSGeneratorObject::kContextOffset));
__ mov(edi, FieldOperand(ebx, JSGeneratorObject::kFunctionOffset));
__ mov(esi, FieldOperand(edi, JSFunction::kContextOffset));
// Flood function if we are stepping.
Label prepare_step_in_if_stepping, prepare_step_in_suspended_generator;
......
......@@ -42,6 +42,8 @@ Reduction JSIntrinsicLowering::Reduce(Node* node) {
return ReduceGeneratorGetInputOrDebugPos(node);
case Runtime::kInlineGeneratorGetResumeMode:
return ReduceGeneratorGetResumeMode(node);
case Runtime::kInlineGeneratorGetContext:
return ReduceGeneratorGetContext(node);
case Runtime::kInlineIsArray:
return ReduceIsInstanceType(node, JS_ARRAY_TYPE);
case Runtime::kInlineIsTypedArray:
......@@ -140,6 +142,16 @@ Reduction JSIntrinsicLowering::ReduceGeneratorGetInputOrDebugPos(Node* node) {
return Change(node, op, generator, effect, control);
}
Reduction JSIntrinsicLowering::ReduceGeneratorGetContext(Node* node) {
Node* const generator = NodeProperties::GetValueInput(node, 0);
Node* const effect = NodeProperties::GetEffectInput(node);
Node* const control = NodeProperties::GetControlInput(node);
Operator const* const op =
simplified()->LoadField(AccessBuilder::ForJSGeneratorObjectContext());
return Change(node, op, generator, effect, control);
}
Reduction JSIntrinsicLowering::ReduceGeneratorGetResumeMode(Node* node) {
Node* const generator = NodeProperties::GetValueInput(node, 0);
Node* const effect = NodeProperties::GetEffectInput(node);
......
......@@ -43,6 +43,7 @@ class V8_EXPORT_PRIVATE JSIntrinsicLowering final
Reduction ReduceDebugIsActive(Node* node);
Reduction ReduceDeoptimizeNow(Node* node);
Reduction ReduceGeneratorClose(Node* node);
Reduction ReduceGeneratorGetContext(Node* node);
Reduction ReduceGeneratorGetInputOrDebugPos(Node* node);
Reduction ReduceGeneratorGetResumeMode(Node* node);
Reduction ReduceIsInstanceType(Node* node, InstanceType instance_type);
......
......@@ -788,10 +788,13 @@ void BytecodeGenerator::VisitGeneratorPrologue() {
->LoadAccumulatorWithRegister(generator_object)
.JumpIfUndefined(&regular_call);
// This is a resume call. Restore registers and perform state dispatch.
// (The current context has already been restored by the trampoline.)
// This is a resume call. Restore the current context and the registers, then
// perform state dispatch.
Register dummy = register_allocator()->NewRegister();
builder()
->ResumeGenerator(generator_object)
->CallRuntime(Runtime::kInlineGeneratorGetContext, generator_object)
.PushContext(dummy)
.ResumeGenerator(generator_object)
.StoreAccumulatorInRegister(generator_state_);
BuildIndexedJump(generator_state_, 0, generator_resume_points_.size(),
generator_resume_points_);
......
......@@ -61,6 +61,14 @@ RUNTIME_FUNCTION(Runtime_GeneratorGetReceiver) {
return generator->receiver();
}
RUNTIME_FUNCTION(Runtime_GeneratorGetContext) {
HandleScope scope(isolate);
DCHECK_EQ(1, args.length());
CONVERT_ARG_HANDLE_CHECKED(JSGeneratorObject, generator, 0);
return generator->context();
}
RUNTIME_FUNCTION(Runtime_GeneratorGetInputOrDebugPos) {
HandleScope scope(isolate);
DCHECK_EQ(1, args.length());
......
......@@ -246,6 +246,7 @@ namespace internal {
F(GeneratorClose, 1, 1) \
F(GeneratorGetFunction, 1, 1) \
F(GeneratorGetReceiver, 1, 1) \
F(GeneratorGetContext, 1, 1) \
F(GeneratorGetInputOrDebugPos, 1, 1) \
F(GeneratorGetContinuation, 1, 1) \
F(GeneratorGetSourcePosition, 1, 1) \
......
......@@ -11,20 +11,22 @@ snippet: "
function* f() { }
f();
"
frame size: 11
frame size: 12
parameter count: 1
bytecode array length: 197
bytecode array length: 204
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(21),
B(JumpIfUndefined), U8(28),
B(CallRuntime), U16(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(2),
B(ResumeGenerator), R(new_target),
B(Star), R(1),
B(LdaZero),
B(TestEqualStrict), R(1), U8(0),
B(JumpIfTrue), U8(53),
B(LdaSmi), U8(77),
B(Star), R(2),
B(CallRuntime), U16(Runtime::kAbort), R(2), U8(1),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), U8(-2),
B(Star), R(1),
B(CreateFunctionContext), U8(2),
......@@ -32,80 +34,80 @@ bytecodes: [
B(Ldar), R(this),
B(StaCurrentContextSlot), U8(4),
/* 11 E> */ B(StackCheck),
B(Mov), R(context), R(4),
B(Mov), R(context), R(5),
B(LdaCurrentContextSlot), U8(4),
B(Star), R(6),
B(Mov), R(closure), R(5),
/* 11 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(5), U8(2),
B(Star), R(7),
B(Mov), R(closure), R(6),
/* 11 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(6), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(5),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(6),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(7),
B(LdaZero),
B(SuspendGenerator), R(6),
B(Ldar), R(5),
B(SuspendGenerator), R(7),
B(Ldar), R(6),
/* 16 S> */ B(Return),
B(LdaSmi), U8(-2),
B(Star), R(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(6), U8(1),
B(Star), R(7),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(6), U8(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(7), U8(1),
B(Star), R(8),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(7), U8(1),
B(Star), R(9),
B(LdaZero),
B(TestEqualStrict), R(8), U8(0),
B(TestEqualStrict), R(9), U8(0),
B(JumpIfTrue), U8(31),
B(LdaSmi), U8(2),
B(TestEqualStrict), R(8), U8(0),
B(TestEqualStrict), R(9), U8(0),
B(JumpIfTrue), U8(21),
B(Jump), U8(2),
B(LdaTrue),
B(Star), R(10),
B(Mov), R(7), R(9),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(9), U8(2),
B(Star), R(3),
B(Star), R(11),
B(Mov), R(8), R(10),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(10), U8(2),
B(Star), R(4),
B(LdaZero),
B(Star), R(2),
B(Star), R(3),
B(Jump), U8(35),
B(Ldar), R(7),
B(Ldar), R(8),
/* 11 E> */ B(Throw),
B(LdaUndefined),
B(Star), R(5),
B(LdaTrue),
B(Star), R(6),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(5), U8(2),
B(Star), R(3),
B(LdaTrue),
B(Star), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(4),
B(LdaSmi), U8(1),
B(Star), R(2),
B(Star), R(3),
B(Jump), U8(14),
B(LdaSmi), U8(-1),
B(Star), R(2),
B(Jump), U8(8),
B(Star), R(3),
B(Jump), U8(8),
B(Star), R(4),
B(LdaSmi), U8(2),
B(Star), R(2),
B(Star), R(3),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(4),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(5),
B(CallRuntime), U16(Runtime::k_GeneratorClose), R(5), U8(1),
B(Ldar), R(4),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(6),
B(CallRuntime), U16(Runtime::k_GeneratorClose), R(6), U8(1),
B(Ldar), R(5),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrict), R(2), U8(0),
B(TestEqualStrict), R(3), U8(0),
B(JumpIfTrue), U8(18),
B(LdaSmi), U8(1),
B(TestEqualStrict), R(2), U8(0),
B(TestEqualStrict), R(3), U8(0),
B(JumpIfTrue), U8(14),
B(LdaSmi), U8(2),
B(TestEqualStrict), R(2), U8(0),
B(TestEqualStrict), R(3), U8(0),
B(JumpIfTrue), U8(10),
B(Jump), U8(11),
B(Ldar), R(3),
B(Ldar), R(4),
/* 16 S> */ B(Return),
B(Ldar), R(3),
B(Ldar), R(4),
/* 16 S> */ B(Return),
B(Ldar), R(3),
B(Ldar), R(4),
B(ReThrow),
B(LdaUndefined),
/* 16 S> */ B(Return),
......@@ -113,7 +115,7 @@ bytecodes: [
constant pool: [
]
handlers: [
[39, 136, 142],
[46, 143, 149],
]
---
......@@ -121,12 +123,14 @@ snippet: "
function* f() { yield 42 }
f();
"
frame size: 11
frame size: 12
parameter count: 1
bytecode array length: 292
bytecode array length: 299
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(28),
B(JumpIfUndefined), U8(35),
B(CallRuntime), U16(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(2),
B(ResumeGenerator), R(new_target),
B(Star), R(1),
B(LdaZero),
......@@ -136,8 +140,8 @@ bytecodes: [
B(TestEqualStrict), R(1), U8(0),
B(JumpIfTrueConstant), U8(0),
B(LdaSmi), U8(77),
B(Star), R(2),
B(CallRuntime), U16(Runtime::kAbort), R(2), U8(1),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), U8(-2),
B(Star), R(1),
B(CreateFunctionContext), U8(2),
......@@ -145,120 +149,120 @@ bytecodes: [
B(Ldar), R(this),
B(StaCurrentContextSlot), U8(4),
/* 11 E> */ B(StackCheck),
B(Mov), R(context), R(4),
B(Mov), R(context), R(5),
B(LdaCurrentContextSlot), U8(4),
B(Star), R(6),
B(Mov), R(closure), R(5),
/* 11 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(5), U8(2),
B(Star), R(7),
B(Mov), R(closure), R(6),
/* 11 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(6), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(5),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(6),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(7),
B(LdaZero),
B(SuspendGenerator), R(6),
B(Ldar), R(5),
B(SuspendGenerator), R(7),
B(Ldar), R(6),
/* 25 S> */ B(Return),
B(LdaSmi), U8(-2),
B(Star), R(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(6), U8(1),
B(Star), R(7),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(6), U8(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(7), U8(1),
B(Star), R(8),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(7), U8(1),
B(Star), R(9),
B(LdaZero),
B(TestEqualStrict), R(8), U8(0),
B(TestEqualStrict), R(9), U8(0),
B(JumpIfTrue), U8(31),
B(LdaSmi), U8(2),
B(TestEqualStrict), R(8), U8(0),
B(TestEqualStrict), R(9), U8(0),
B(JumpIfTrue), U8(21),
B(Jump), U8(2),
B(LdaTrue),
B(Star), R(10),
B(Mov), R(7), R(9),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(9), U8(2),
B(Star), R(3),
B(Star), R(11),
B(Mov), R(8), R(10),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(10), U8(2),
B(Star), R(4),
B(LdaZero),
B(Star), R(2),
B(Star), R(3),
B(Jump), U8(113),
B(Ldar), R(7),
B(Ldar), R(8),
/* 11 E> */ B(Throw),
/* 16 S> */ B(LdaSmi), U8(42),
B(Star), R(5),
B(Star), R(6),
B(LdaFalse),
B(Star), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(6),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(5), U8(2),
B(Star), R(5),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(6),
B(Star), R(7),
B(LdaSmi), U8(1),
B(SuspendGenerator), R(6),
B(Ldar), R(5),
B(SuspendGenerator), R(7),
B(Ldar), R(6),
/* 25 S> */ B(Return),
B(LdaSmi), U8(-2),
B(Star), R(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(6), U8(1),
B(Star), R(7),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(6), U8(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(7), U8(1),
B(Star), R(8),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(7), U8(1),
B(Star), R(9),
B(LdaZero),
B(TestEqualStrict), R(8), U8(0),
B(TestEqualStrict), R(9), U8(0),
B(JumpIfTrue), U8(32),
B(LdaSmi), U8(2),
B(TestEqualStrict), R(8), U8(0),
B(TestEqualStrict), R(9), U8(0),
B(JumpIfTrue), U8(22),
B(Jump), U8(2),
B(LdaTrue),
B(Star), R(10),
B(Mov), R(7), R(9),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(9), U8(2),
B(Star), R(3),
B(Star), R(11),
B(Mov), R(8), R(10),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(10), U8(2),
B(Star), R(4),
B(LdaSmi), U8(1),
B(Star), R(2),
B(Star), R(3),
B(Jump), U8(35),
B(Ldar), R(7),
B(Ldar), R(8),
/* 16 E> */ B(Throw),
B(LdaUndefined),
B(Star), R(5),
B(LdaTrue),
B(Star), R(6),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(5), U8(2),
B(Star), R(3),
B(LdaTrue),
B(Star), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(4),
B(LdaSmi), U8(2),
B(Star), R(2),
B(Star), R(3),
B(Jump), U8(14),
B(LdaSmi), U8(-1),
B(Star), R(2),
B(Jump), U8(8),
B(Star), R(3),
B(Jump), U8(8),
B(Star), R(4),
B(LdaSmi), U8(3),
B(Star), R(2),
B(Star), R(3),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(4),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(5),
B(CallRuntime), U16(Runtime::k_GeneratorClose), R(5), U8(1),
B(Ldar), R(4),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(6),
B(CallRuntime), U16(Runtime::k_GeneratorClose), R(6), U8(1),
B(Ldar), R(5),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrict), R(2), U8(0),
B(TestEqualStrict), R(3), U8(0),
B(JumpIfTrue), U8(25),
B(LdaSmi), U8(1),
B(TestEqualStrict), R(2), U8(0),
B(TestEqualStrict), R(3), U8(0),
B(JumpIfTrue), U8(21),
B(LdaSmi), U8(2),
B(TestEqualStrict), R(2), U8(0),
B(TestEqualStrict), R(3), U8(0),
B(JumpIfTrue), U8(17),
B(LdaSmi), U8(3),
B(TestEqualStrict), R(2), U8(0),
B(TestEqualStrict), R(3), U8(0),
B(JumpIfTrue), U8(13),
B(Jump), U8(14),
B(Ldar), R(3),
B(Ldar), R(4),
/* 25 S> */ B(Return),
B(Ldar), R(3),
B(Ldar), R(4),
/* 25 S> */ B(Return),
B(Ldar), R(3),
B(Ldar), R(4),
/* 25 S> */ B(Return),
B(Ldar), R(3),
B(Ldar), R(4),
B(ReThrow),
B(LdaUndefined),
/* 25 S> */ B(Return),
......@@ -267,7 +271,7 @@ constant pool: [
Smi [130],
]
handlers: [
[46, 221, 227],
[53, 228, 234],
]
---
......@@ -275,12 +279,14 @@ snippet: "
function* f() { for (let x of [42]) yield x }
f();
"
frame size: 17
frame size: 18
parameter count: 1
bytecode array length: 771
bytecode array length: 778
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(28),
B(JumpIfUndefined), U8(35),
B(CallRuntime), U16(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(4),
B(ResumeGenerator), R(new_target),
B(Star), R(3),
B(LdaZero),
......@@ -290,8 +296,8 @@ bytecodes: [
B(TestEqualStrict), R(3), U8(0),
B(JumpIfTrueConstant), U8(3),
B(LdaSmi), U8(77),
B(Star), R(4),
B(CallRuntime), U16(Runtime::kAbort), R(4), U8(1),
B(Star), R(5),
B(CallRuntime), U16(Runtime::kAbort), R(5), U8(1),
B(LdaSmi), U8(-2),
B(Star), R(3),
B(CreateFunctionContext), U8(9),
......@@ -299,41 +305,41 @@ bytecodes: [
B(Ldar), R(this),
B(StaCurrentContextSlot), U8(4),
/* 11 E> */ B(StackCheck),
B(Mov), R(context), R(6),
B(Mov), R(context), R(7),
B(LdaCurrentContextSlot), U8(4),
B(Star), R(8),
B(Mov), R(closure), R(7),
/* 11 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(7), U8(2),
B(Star), R(9),
B(Mov), R(closure), R(8),
/* 11 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(8), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(7),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(8),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(9),
B(LdaZero),
B(SuspendGenerator), R(8),
B(Ldar), R(7),
B(SuspendGenerator), R(9),
B(Ldar), R(8),
/* 44 S> */ B(Return),
B(LdaSmi), U8(-2),
B(Star), R(3),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(8), U8(1),
B(Star), R(9),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(8), U8(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(9), U8(1),
B(Star), R(10),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(9), U8(1),
B(Star), R(11),
B(LdaZero),
B(TestEqualStrict), R(10), U8(0),
B(TestEqualStrict), R(11), U8(0),
B(JumpIfTrue), U8(31),
B(LdaSmi), U8(2),
B(TestEqualStrict), R(10), U8(0),
B(TestEqualStrict), R(11), U8(0),
B(JumpIfTrue), U8(21),
B(Jump), U8(2),
B(LdaTrue),
B(Star), R(12),
B(Mov), R(9), R(11),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(11), U8(2),
B(Star), R(5),
B(Star), R(13),
B(Mov), R(10), R(12),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(12), U8(2),
B(Star), R(6),
B(LdaZero),
B(Star), R(4),
B(Star), R(5),
B(JumpConstant), U8(18),
B(Ldar), R(9),
B(Ldar), R(10),
/* 11 E> */ B(Throw),
B(Ldar), R(closure),
B(CreateBlockContext), U8(0),
......@@ -342,13 +348,13 @@ bytecodes: [
B(StaCurrentContextSlot), U8(4),
B(LdaZero),
B(StaContextSlot), R(1), U8(9), U8(0),
B(Mov), R(context), R(9),
B(Mov), R(context), R(10),
B(Mov), R(context), R(11),
/* 30 S> */ B(CreateArrayLiteral), U8(1), U8(0), U8(9),
B(Star), R(11),
B(LdaNamedProperty), R(11), U8(2), U8(2),
B(Star), R(12),
B(CallProperty), R(12), R(11), U8(1), U8(4),
B(LdaNamedProperty), R(12), U8(2), U8(2),
B(Star), R(13),
B(CallProperty), R(13), R(12), U8(1), U8(4),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
/* 30 E> */ B(StaContextSlot), R(1), U8(7), U8(0),
......@@ -359,28 +365,28 @@ bytecodes: [
B(TestEqualStrict), R(3), U8(0),
B(JumpIfTrueConstant), U8(8),
B(LdaSmi), U8(77),
B(Star), R(11),
B(CallRuntime), U16(Runtime::kAbort), R(11), U8(1),
B(Star), R(12),
B(CallRuntime), U16(Runtime::kAbort), R(12), U8(1),
/* 27 S> */ B(LdaContextSlot), R(1), U8(7), U8(0),
B(Star), R(13),
B(LdaNamedProperty), R(13), U8(4), U8(8),
B(Star), R(12),
B(LdaNamedProperty), R(12), U8(4), U8(8),
B(Star), R(11),
/* 27 E> */ B(CallProperty), R(11), R(12), U8(1), U8(6),
/* 27 E> */ B(CallProperty), R(12), R(13), U8(1), U8(6),
/* 27 E> */ B(StaContextSlot), R(1), U8(8), U8(0),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(11), U8(1),
B(Star), R(12),
B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(12), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(13),
B(LdaContextSlot), R(1), U8(8), U8(0),
B(Star), R(11),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(11), U8(1),
B(Star), R(12),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(12), U8(1),
B(LdaContextSlot), R(1), U8(8), U8(0),
B(Star), R(11),
B(LdaNamedProperty), R(11), U8(5), U8(10),
B(Star), R(12),
B(LdaNamedProperty), R(12), U8(5), U8(10),
B(JumpIfToBooleanTrueConstant), U8(9),
B(LdaContextSlot), R(1), U8(8), U8(0),
B(Star), R(11),
B(LdaNamedProperty), R(11), U8(6), U8(12),
B(Star), R(12),
B(LdaNamedProperty), R(12), U8(6), U8(12),
B(StaContextSlot), R(1), U8(10), U8(0),
B(LdaSmi), U8(2),
B(StaContextSlot), R(1), U8(9), U8(0),
......@@ -395,209 +401,209 @@ bytecodes: [
B(LdaContextSlot), R(1), U8(6), U8(0),
B(StaCurrentContextSlot), U8(4),
/* 36 S> */ B(LdaCurrentContextSlot), U8(4),
B(Star), R(11),
B(Star), R(12),
B(LdaFalse),
B(Star), R(13),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(12), U8(2),
B(Star), R(12),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(11), U8(2),
B(Star), R(11),
B(LdaContextSlot), R(1), U8(5), U8(0),
B(Star), R(12),
B(Star), R(13),
B(LdaSmi), U8(1),
B(SuspendGenerator), R(12),
B(Ldar), R(11),
B(SuspendGenerator), R(13),
B(Ldar), R(12),
/* 44 S> */ B(Return),
B(LdaSmi), U8(-2),
B(Star), R(3),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(12), U8(1),
B(Star), R(13),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(12), U8(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(13), U8(1),
B(Star), R(14),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(13), U8(1),
B(Star), R(15),
B(LdaZero),
B(TestEqualStrict), R(14), U8(0),
B(TestEqualStrict), R(15), U8(0),
B(JumpIfTrue), U8(43),
B(LdaSmi), U8(2),
B(TestEqualStrict), R(14), U8(0),
B(TestEqualStrict), R(15), U8(0),
B(JumpIfTrue), U8(33),
B(Jump), U8(2),
B(LdaTrue),
B(Star), R(16),
B(Mov), R(13), R(15),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(15), U8(2),
B(Star), R(17),
B(Mov), R(14), R(16),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(16), U8(2),
B(PopContext), R(2),
B(PopContext), R(2),
B(PopContext), R(2),
B(PopContext), R(2),
B(PopContext), R(2),
B(PopContext), R(2),
B(Star), R(8),
B(Star), R(9),
B(LdaZero),
B(Star), R(7),
B(Star), R(8),
B(Jump), U8(74),
B(Ldar), R(13),
B(Ldar), R(14),
/* 36 E> */ B(Throw),
B(PopContext), R(2),
B(LdaZero),
B(StaContextSlot), R(1), U8(9), U8(0),
B(Wide), B(JumpLoop), U16(-219), U16(0),
B(Jump), U8(44),
B(Star), R(11),
B(Star), R(12),
B(Ldar), R(closure),
B(CreateCatchContext), R(11), U8(10), U8(11),
B(Star), R(10),
B(CreateCatchContext), R(12), U8(10), U8(11),
B(Star), R(11),
B(PushContext), R(2),
B(LdaContextSlot), R(1), U8(9), U8(0),
B(Star), R(11),
B(Star), R(12),
B(LdaSmi), U8(2),
B(TestEqualStrict), R(11), U8(14),
B(TestEqualStrict), R(12), U8(14),
B(JumpIfFalse), U8(8),
B(LdaSmi), U8(1),
B(StaContextSlot), R(1), U8(9), U8(0),
B(LdaCurrentContextSlot), U8(4),
B(Star), R(11),
B(CallRuntime), U16(Runtime::kReThrow), R(11), U8(1),
B(Star), R(12),
B(CallRuntime), U16(Runtime::kReThrow), R(12), U8(1),
B(PopContext), R(2),
B(LdaSmi), U8(-1),
B(Star), R(7),
B(Jump), U8(8),
B(Star), R(8),
B(Jump), U8(8),
B(Star), R(9),
B(LdaSmi), U8(1),
B(Star), R(7),
B(Star), R(8),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(9),
B(LdaContextSlot), R(1), U8(9), U8(0),
B(Star), R(10),
B(LdaContextSlot), R(1), U8(9), U8(0),
B(Star), R(11),
B(LdaZero),
B(TestEqualStrict), R(10), U8(15),
B(TestEqualStrict), R(11), U8(15),
B(JumpIfTrueConstant), U8(17),
B(LdaContextSlot), R(1), U8(7), U8(0),
B(Star), R(10),
B(LdaNamedProperty), R(10), U8(12), U8(16),
B(Star), R(11),
B(LdaNamedProperty), R(11), U8(12), U8(16),
B(StaContextSlot), R(1), U8(11), U8(0),
B(LdaContextSlot), R(1), U8(11), U8(0),
B(Star), R(10),
B(TestUndetectable), R(10),
B(Star), R(11),
B(TestUndetectable), R(11),
B(JumpIfFalse), U8(4),
B(JumpConstant), U8(16),
B(LdaContextSlot), R(1), U8(9), U8(0),
B(Star), R(10),
B(Star), R(11),
B(LdaSmi), U8(1),
B(TestEqualStrict), R(10), U8(19),
B(TestEqualStrict), R(11), U8(19),
B(JumpIfFalse), U8(75),
B(LdaContextSlot), R(1), U8(11), U8(0),
B(TypeOf),
B(Star), R(10),
B(Star), R(11),
B(LdaConstant), U8(13),
B(TestEqualStrict), R(10), U8(20),
B(TestEqualStrict), R(11), U8(20),
B(JumpIfFalse), U8(4),
B(Jump), U8(18),
B(Wide), B(LdaSmi), U16(129),
B(Star), R(10),
B(LdaConstant), U8(14),
B(Star), R(11),
B(CallRuntime), U16(Runtime::kNewTypeError), R(10), U8(2),
B(LdaConstant), U8(14),
B(Star), R(12),
B(CallRuntime), U16(Runtime::kNewTypeError), R(11), U8(2),
B(Throw),
B(Mov), R(context), R(10),
B(Mov), R(context), R(11),
B(LdaContextSlot), R(1), U8(11), U8(0),
B(Star), R(11),
B(LdaContextSlot), R(1), U8(7), U8(0),
B(Star), R(12),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(11), U8(2),
B(LdaContextSlot), R(1), U8(7), U8(0),
B(Star), R(13),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(12), U8(2),
B(Jump), U8(20),
B(Star), R(11),
B(Star), R(12),
B(Ldar), R(closure),
B(CreateCatchContext), R(11), U8(10), U8(15),
B(Star), R(10),
B(CreateCatchContext), R(12), U8(10), U8(15),
B(Star), R(11),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(10),
B(Ldar), R(11),
B(PushContext), R(2),
B(PopContext), R(2),
B(Jump), U8(47),
B(LdaContextSlot), R(1), U8(11), U8(0),
B(Star), R(10),
B(LdaContextSlot), R(1), U8(7), U8(0),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(10), U8(2),
B(LdaContextSlot), R(1), U8(7), U8(0),
B(Star), R(12),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(11), U8(2),
B(StaContextSlot), R(1), U8(12), U8(0),
B(LdaContextSlot), R(1), U8(12), U8(0),
B(Star), R(10),
B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(10), U8(1),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(11), U8(1),
B(JumpIfToBooleanFalse), U8(4),
B(Jump), U8(13),
B(LdaContextSlot), R(1), U8(12), U8(0),
B(Star), R(10),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(10), U8(1),
B(Ldar), R(9),
B(Star), R(11),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(11), U8(1),
B(Ldar), R(10),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrict), R(7), U8(0),
B(TestEqualStrict), R(8), U8(0),
B(JumpIfTrue), U8(11),
B(LdaSmi), U8(1),
B(TestEqualStrict), R(7), U8(0),
B(TestEqualStrict), R(8), U8(0),
B(JumpIfTrue), U8(17),
B(Jump), U8(28),
B(PopContext), R(1),
B(PopContext), R(1),
B(LdaSmi), U8(1),
B(Star), R(4),
B(Mov), R(8), R(5),
B(Star), R(5),
B(Mov), R(9), R(6),
B(Jump), U8(47),
B(PopContext), R(1),
B(PopContext), R(1),
B(LdaSmi), U8(2),
B(Star), R(4),
B(Mov), R(8), R(5),
B(Star), R(5),
B(Mov), R(9), R(6),
B(Jump), U8(34),
B(PopContext), R(1),
B(LdaUndefined),
B(Star), R(7),
B(LdaTrue),
B(Star), R(8),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
B(Star), R(5),
B(LdaTrue),
B(Star), R(9),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(8), U8(2),
B(Star), R(6),
B(LdaSmi), U8(3),
B(Star), R(4),
B(Star), R(5),
B(Jump), U8(14),
B(LdaSmi), U8(-1),
B(Star), R(4),
B(Jump), U8(8),
B(Star), R(5),
B(Jump), U8(8),
B(Star), R(6),
B(LdaSmi), U8(4),
B(Star), R(4),
B(Star), R(5),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(6),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(7),
B(CallRuntime), U16(Runtime::k_GeneratorClose), R(7), U8(1),
B(Ldar), R(6),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(8),
B(CallRuntime), U16(Runtime::k_GeneratorClose), R(8), U8(1),
B(Ldar), R(7),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrict), R(4), U8(0),
B(TestEqualStrict), R(5), U8(0),
B(JumpIfTrue), U8(32),
B(LdaSmi), U8(1),
B(TestEqualStrict), R(4), U8(0),
B(TestEqualStrict), R(5), U8(0),
B(JumpIfTrue), U8(28),
B(LdaSmi), U8(2),
B(TestEqualStrict), R(4), U8(0),
B(TestEqualStrict), R(5), U8(0),
B(JumpIfTrue), U8(24),
B(LdaSmi), U8(3),
B(TestEqualStrict), R(4), U8(0),
B(TestEqualStrict), R(5), U8(0),
B(JumpIfTrue), U8(20),
B(LdaSmi), U8(4),
B(TestEqualStrict), R(4), U8(0),
B(TestEqualStrict), R(5), U8(0),
B(JumpIfTrue), U8(16),
B(Jump), U8(17),
B(Ldar), R(5),
B(Ldar), R(6),
/* 44 S> */ B(Return),
B(Ldar), R(5),
B(Ldar), R(6),
/* 44 S> */ B(Return),
B(Ldar), R(5),
B(Ldar), R(6),
B(ReThrow),
B(Ldar), R(5),
B(Ldar), R(6),
/* 44 S> */ B(Return),
B(Ldar), R(5),
B(Ldar), R(6),
B(ReThrow),
B(LdaUndefined),
/* 44 S> */ B(Return),
......@@ -624,9 +630,9 @@ constant pool: [
Smi [582],
]
handlers: [
[46, 690, 696],
[142, 441, 447],
[145, 397, 399],
[543, 559, 561],
[53, 697, 703],
[149, 448, 454],
[152, 404, 406],
[550, 566, 568],
]
......@@ -11,62 +11,64 @@ top level: yes
snippet: "
import \"bar\";
"
frame size: 8
frame size: 9
parameter count: 2
bytecode array length: 124
bytecode array length: 131
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(21),
B(JumpIfUndefined), U8(28),
B(CallRuntime), U16(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(2),
B(ResumeGenerator), R(new_target),
B(Star), R(1),
B(LdaZero),
B(TestEqualStrict), R(1), U8(0),
B(JumpIfTrue), U8(63),
B(LdaSmi), U8(77),
B(Star), R(2),
B(CallRuntime), U16(Runtime::kAbort), R(2), U8(1),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), U8(-2),
B(Star), R(1),
B(LdaConstant), U8(0),
B(Star), R(4),
B(Mov), R(arg0), R(2),
B(Mov), R(closure), R(3),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(2), U8(3),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(PushContext), R(0),
B(Ldar), R(this),
B(StaCurrentContextSlot), U8(4),
/* 0 E> */ B(StackCheck),
B(LdaCurrentContextSlot), U8(4),
B(Star), R(3),
B(Mov), R(closure), R(2),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(2), U8(2),
B(Star), R(4),
B(Mov), R(closure), R(3),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(2),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(4),
B(LdaZero),
B(SuspendGenerator), R(3),
B(Ldar), R(2),
B(SuspendGenerator), R(4),
B(Ldar), R(3),
/* 13 S> */ B(Return),
B(LdaSmi), U8(-2),
B(Star), R(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(3), U8(1),
B(Star), R(4),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(3), U8(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(Star), R(6),
B(LdaZero),
B(TestEqualStrict), R(5), U8(0),
B(TestEqualStrict), R(6), U8(0),
B(JumpIfTrue), U8(25),
B(LdaSmi), U8(2),
B(TestEqualStrict), R(5), U8(0),
B(TestEqualStrict), R(6), U8(0),
B(JumpIfTrue), U8(15),
B(Jump), U8(2),
B(LdaTrue),
B(Star), R(7),
B(Mov), R(4), R(6),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
/* 13 S> */ B(Return),
B(Ldar), R(4),
B(Ldar), R(5),
/* 0 E> */ B(Throw),
B(LdaUndefined),
/* 13 S> */ B(Return),
......@@ -81,62 +83,64 @@ handlers: [
snippet: "
import {foo} from \"bar\";
"
frame size: 8
frame size: 9
parameter count: 2
bytecode array length: 124
bytecode array length: 131
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(21),
B(JumpIfUndefined), U8(28),
B(CallRuntime), U16(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(2),
B(ResumeGenerator), R(new_target),
B(Star), R(1),
B(LdaZero),
B(TestEqualStrict), R(1), U8(0),
B(JumpIfTrue), U8(63),
B(LdaSmi), U8(77),
B(Star), R(2),
B(CallRuntime), U16(Runtime::kAbort), R(2), U8(1),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), U8(-2),
B(Star), R(1),
B(LdaConstant), U8(0),
B(Star), R(4),
B(Mov), R(arg0), R(2),
B(Mov), R(closure), R(3),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(2), U8(3),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(PushContext), R(0),
B(Ldar), R(this),
B(StaCurrentContextSlot), U8(4),
/* 0 E> */ B(StackCheck),
B(LdaCurrentContextSlot), U8(4),
B(Star), R(3),
B(Mov), R(closure), R(2),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(2), U8(2),
B(Star), R(4),
B(Mov), R(closure), R(3),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(2),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(4),
B(LdaZero),
B(SuspendGenerator), R(3),
B(Ldar), R(2),
B(SuspendGenerator), R(4),
B(Ldar), R(3),
/* 24 S> */ B(Return),
B(LdaSmi), U8(-2),
B(Star), R(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(3), U8(1),
B(Star), R(4),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(3), U8(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(Star), R(6),
B(LdaZero),
B(TestEqualStrict), R(5), U8(0),
B(TestEqualStrict), R(6), U8(0),
B(JumpIfTrue), U8(25),
B(LdaSmi), U8(2),
B(TestEqualStrict), R(5), U8(0),
B(TestEqualStrict), R(6), U8(0),
B(JumpIfTrue), U8(15),
B(Jump), U8(2),
B(LdaTrue),
B(Star), R(7),
B(Mov), R(4), R(6),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
/* 24 S> */ B(Return),
B(Ldar), R(4),
B(Ldar), R(5),
/* 0 E> */ B(Throw),
B(LdaUndefined),
/* 24 S> */ B(Return),
......@@ -153,74 +157,76 @@ snippet: "
goo(42);
{ let x; { goo(42) } };
"
frame size: 9
frame size: 10
parameter count: 2
bytecode array length: 194
bytecode array length: 201
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(21),
B(JumpIfUndefined), U8(28),
B(CallRuntime), U16(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(3),
B(ResumeGenerator), R(new_target),
B(Star), R(2),
B(LdaZero),
B(TestEqualStrict), R(2), U8(0),
B(JumpIfTrue), U8(63),
B(LdaSmi), U8(77),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(Star), R(4),
B(CallRuntime), U16(Runtime::kAbort), R(4), U8(1),
B(LdaSmi), U8(-2),
B(Star), R(2),
B(LdaConstant), U8(0),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(Star), R(6),
B(Mov), R(arg0), R(4),
B(Mov), R(closure), R(5),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(4), U8(3),
B(PushContext), R(0),
B(Ldar), R(this),
B(StaCurrentContextSlot), U8(4),
/* 0 E> */ B(StackCheck),
B(LdaCurrentContextSlot), U8(4),
B(Star), R(4),
B(Mov), R(closure), R(3),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2),
B(Star), R(5),
B(Mov), R(closure), R(4),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(4), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(4),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(5),
B(LdaZero),
B(SuspendGenerator), R(4),
B(Ldar), R(3),
B(SuspendGenerator), R(5),
B(Ldar), R(4),
/* 64 S> */ B(Return),
B(LdaSmi), U8(-2),
B(Star), R(2),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(5), U8(1),
B(Star), R(6),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(5), U8(1),
B(Star), R(7),
B(LdaZero),
B(TestEqualStrict), R(6), U8(0),
B(TestEqualStrict), R(7), U8(0),
B(JumpIfTrue), U8(25),
B(LdaSmi), U8(2),
B(TestEqualStrict), R(6), U8(0),
B(TestEqualStrict), R(7), U8(0),
B(JumpIfTrue), U8(15),
B(Jump), U8(2),
B(LdaTrue),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
B(Star), R(9),
B(Mov), R(6), R(8),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(8), U8(2),
/* 64 S> */ B(Return),
B(Ldar), R(5),
B(Ldar), R(6),
/* 0 E> */ B(Throw),
/* 32 S> */ B(LdaUndefined),
B(Star), R(4),
B(Star), R(5),
/* 32 E> */ B(LdaModuleVariable), U8(-1), U8(0),
B(JumpIfNotHole), U8(11),
B(LdaConstant), U8(1),
B(Star), R(5),
B(CallRuntime), U16(Runtime::kThrowReferenceError), R(5), U8(1),
B(Star), R(3),
B(Star), R(6),
B(CallRuntime), U16(Runtime::kThrowReferenceError), R(6), U8(1),
B(Star), R(4),
B(LdaSmi), U8(42),
B(Star), R(5),
/* 32 E> */ B(Call), R(3), R(4), U8(2), U8(2),
B(Star), R(6),
/* 32 E> */ B(Call), R(4), R(5), U8(2), U8(2),
B(Ldar), R(closure),
B(CreateBlockContext), U8(2),
B(PushContext), R(1),
......@@ -229,16 +235,16 @@ bytecodes: [
/* 47 S> */ B(LdaUndefined),
/* 47 E> */ B(StaCurrentContextSlot), U8(4),
/* 52 S> */ B(LdaUndefined),
B(Star), R(4),
B(Star), R(5),
/* 52 E> */ B(LdaModuleVariable), U8(-1), U8(1),
B(JumpIfNotHole), U8(11),
B(LdaConstant), U8(1),
B(Star), R(5),
B(CallRuntime), U16(Runtime::kThrowReferenceError), R(5), U8(1),
B(Star), R(3),
B(Star), R(6),
B(CallRuntime), U16(Runtime::kThrowReferenceError), R(6), U8(1),
B(Star), R(4),
B(LdaSmi), U8(42),
B(Star), R(5),
/* 52 E> */ B(Call), R(3), R(4), U8(2), U8(4),
B(Star), R(6),
/* 52 E> */ B(Call), R(4), R(5), U8(2), U8(4),
B(PopContext), R(1),
B(LdaUndefined),
/* 64 S> */ B(Return),
......@@ -257,62 +263,64 @@ snippet: "
foo++;
{ let x; { foo++ } };
"
frame size: 9
frame size: 10
parameter count: 2
bytecode array length: 159
bytecode array length: 166
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(21),
B(JumpIfUndefined), U8(28),
B(CallRuntime), U16(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(3),
B(ResumeGenerator), R(new_target),
B(Star), R(2),
B(LdaZero),
B(TestEqualStrict), R(2), U8(0),
B(JumpIfTrue), U8(63),
B(LdaSmi), U8(77),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(Star), R(4),
B(CallRuntime), U16(Runtime::kAbort), R(4), U8(1),
B(LdaSmi), U8(-2),
B(Star), R(2),
B(LdaConstant), U8(0),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(Star), R(6),
B(Mov), R(arg0), R(4),
B(Mov), R(closure), R(5),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(4), U8(3),
B(PushContext), R(0),
B(Ldar), R(this),
B(StaCurrentContextSlot), U8(4),
/* 0 E> */ B(StackCheck),
B(LdaCurrentContextSlot), U8(4),
B(Star), R(4),
B(Mov), R(closure), R(3),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2),
B(Star), R(5),
B(Mov), R(closure), R(4),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(4), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(4),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(5),
B(LdaZero),
B(SuspendGenerator), R(4),
B(Ldar), R(3),
B(SuspendGenerator), R(5),
B(Ldar), R(4),
/* 49 S> */ B(Return),
B(LdaSmi), U8(-2),
B(Star), R(2),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(5), U8(1),
B(Star), R(6),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(5), U8(1),
B(Star), R(7),
B(LdaZero),
B(TestEqualStrict), R(6), U8(0),
B(TestEqualStrict), R(7), U8(0),
B(JumpIfTrue), U8(25),
B(LdaSmi), U8(2),
B(TestEqualStrict), R(6), U8(0),
B(TestEqualStrict), R(7), U8(0),
B(JumpIfTrue), U8(15),
B(Jump), U8(2),
B(LdaTrue),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
B(Star), R(9),
B(Mov), R(6), R(8),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(8), U8(2),
/* 49 S> */ B(Return),
B(Ldar), R(5),
B(Ldar), R(6),
/* 0 E> */ B(Throw),
/* 17 S> */ B(LdaSmi), U8(42),
/* 17 E> */ B(StaModuleVariable), U8(1), U8(0),
......@@ -346,27 +354,29 @@ snippet: "
foo++;
{ let x; { foo++ } };
"
frame size: 9
frame size: 10
parameter count: 2
bytecode array length: 163
bytecode array length: 170
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(21),
B(JumpIfUndefined), U8(28),
B(CallRuntime), U16(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(3),
B(ResumeGenerator), R(new_target),
B(Star), R(2),
B(LdaZero),
B(TestEqualStrict), R(2), U8(0),
B(JumpIfTrue), U8(67),
B(LdaSmi), U8(77),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(Star), R(4),
B(CallRuntime), U16(Runtime::kAbort), R(4), U8(1),
B(LdaSmi), U8(-2),
B(Star), R(2),
B(LdaConstant), U8(0),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(Star), R(6),
B(Mov), R(arg0), R(4),
B(Mov), R(closure), R(5),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(4), U8(3),
B(PushContext), R(0),
B(Ldar), R(this),
B(StaCurrentContextSlot), U8(4),
......@@ -374,36 +384,36 @@ bytecodes: [
B(StaModuleVariable), U8(1), U8(0),
/* 0 E> */ B(StackCheck),
B(LdaCurrentContextSlot), U8(4),
B(Star), R(4),
B(Mov), R(closure), R(3),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2),
B(Star), R(5),
B(Mov), R(closure), R(4),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(4), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(4),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(5),
B(LdaZero),
B(SuspendGenerator), R(4),
B(Ldar), R(3),
B(SuspendGenerator), R(5),
B(Ldar), R(4),
/* 49 S> */ B(Return),
B(LdaSmi), U8(-2),
B(Star), R(2),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(5), U8(1),
B(Star), R(6),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(5), U8(1),
B(Star), R(7),
B(LdaZero),
B(TestEqualStrict), R(6), U8(0),
B(TestEqualStrict), R(7), U8(0),
B(JumpIfTrue), U8(25),
B(LdaSmi), U8(2),
B(TestEqualStrict), R(6), U8(0),
B(TestEqualStrict), R(7), U8(0),
B(JumpIfTrue), U8(15),
B(Jump), U8(2),
B(LdaTrue),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
B(Star), R(9),
B(Mov), R(6), R(8),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(8), U8(2),
/* 49 S> */ B(Return),
B(Ldar), R(5),
B(Ldar), R(6),
/* 0 E> */ B(Throw),
/* 17 S> */ B(LdaSmi), U8(42),
/* 17 E> */ B(StaModuleVariable), U8(1), U8(0),
......@@ -437,27 +447,29 @@ snippet: "
foo++;
{ let x; { foo++ } };
"
frame size: 9
frame size: 10
parameter count: 2
bytecode array length: 167
bytecode array length: 174
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(21),
B(JumpIfUndefined), U8(28),
B(CallRuntime), U16(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(3),
B(ResumeGenerator), R(new_target),
B(Star), R(2),
B(LdaZero),
B(TestEqualStrict), R(2), U8(0),
B(JumpIfTrue), U8(67),
B(LdaSmi), U8(77),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(Star), R(4),
B(CallRuntime), U16(Runtime::kAbort), R(4), U8(1),
B(LdaSmi), U8(-2),
B(Star), R(2),
B(LdaConstant), U8(0),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(Star), R(6),
B(Mov), R(arg0), R(4),
B(Mov), R(closure), R(5),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(4), U8(3),
B(PushContext), R(0),
B(Ldar), R(this),
B(StaCurrentContextSlot), U8(4),
......@@ -465,36 +477,36 @@ bytecodes: [
B(StaModuleVariable), U8(1), U8(0),
/* 0 E> */ B(StackCheck),
B(LdaCurrentContextSlot), U8(4),
B(Star), R(4),
B(Mov), R(closure), R(3),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2),
B(Star), R(5),
B(Mov), R(closure), R(4),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(4), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(4),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(5),
B(LdaZero),
B(SuspendGenerator), R(4),
B(Ldar), R(3),
B(SuspendGenerator), R(5),
B(Ldar), R(4),
/* 51 S> */ B(Return),
B(LdaSmi), U8(-2),
B(Star), R(2),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(5), U8(1),
B(Star), R(6),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(5), U8(1),
B(Star), R(7),
B(LdaZero),
B(TestEqualStrict), R(6), U8(0),
B(TestEqualStrict), R(7), U8(0),
B(JumpIfTrue), U8(25),
B(LdaSmi), U8(2),
B(TestEqualStrict), R(6), U8(0),
B(TestEqualStrict), R(7), U8(0),
B(JumpIfTrue), U8(15),
B(Jump), U8(2),
B(LdaTrue),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
B(Star), R(9),
B(Mov), R(6), R(8),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(8), U8(2),
/* 51 S> */ B(Return),
B(Ldar), R(5),
B(Ldar), R(6),
/* 0 E> */ B(Throw),
/* 19 S> */ B(LdaSmi), U8(42),
/* 19 E> */ B(StaModuleVariable), U8(1), U8(0),
......@@ -526,27 +538,29 @@ handlers: [
snippet: "
export default (function () {});
"
frame size: 8
frame size: 9
parameter count: 2
bytecode array length: 135
bytecode array length: 142
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(21),
B(JumpIfUndefined), U8(28),
B(CallRuntime), U16(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(2),
B(ResumeGenerator), R(new_target),
B(Star), R(1),
B(LdaZero),
B(TestEqualStrict), R(1), U8(0),
B(JumpIfTrue), U8(67),
B(LdaSmi), U8(77),
B(Star), R(2),
B(CallRuntime), U16(Runtime::kAbort), R(2), U8(1),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), U8(-2),
B(Star), R(1),
B(LdaConstant), U8(0),
B(Star), R(4),
B(Mov), R(arg0), R(2),
B(Mov), R(closure), R(3),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(2), U8(3),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(PushContext), R(0),
B(Ldar), R(this),
B(StaCurrentContextSlot), U8(4),
......@@ -554,36 +568,36 @@ bytecodes: [
B(StaModuleVariable), U8(1), U8(0),
/* 0 E> */ B(StackCheck),
B(LdaCurrentContextSlot), U8(4),
B(Star), R(3),
B(Mov), R(closure), R(2),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(2), U8(2),
B(Star), R(4),
B(Mov), R(closure), R(3),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(2),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(4),
B(LdaZero),
B(SuspendGenerator), R(3),
B(Ldar), R(2),
B(SuspendGenerator), R(4),
B(Ldar), R(3),
/* 32 S> */ B(Return),
B(LdaSmi), U8(-2),
B(Star), R(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(3), U8(1),
B(Star), R(4),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(3), U8(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(Star), R(6),
B(LdaZero),
B(TestEqualStrict), R(5), U8(0),
B(TestEqualStrict), R(6), U8(0),
B(JumpIfTrue), U8(25),
B(LdaSmi), U8(2),
B(TestEqualStrict), R(5), U8(0),
B(TestEqualStrict), R(6), U8(0),
B(JumpIfTrue), U8(15),
B(Jump), U8(2),
B(LdaTrue),
B(Star), R(7),
B(Mov), R(4), R(6),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
/* 32 S> */ B(Return),
B(Ldar), R(4),
B(Ldar), R(5),
/* 0 E> */ B(Throw),
B(CreateClosure), U8(1), U8(2), U8(0),
B(StaModuleVariable), U8(1), U8(0),
......@@ -601,27 +615,29 @@ handlers: [
snippet: "
export default (class {});
"
frame size: 8
frame size: 9
parameter count: 2
bytecode array length: 172
bytecode array length: 179
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(21),
B(JumpIfUndefined), U8(28),
B(CallRuntime), U16(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(2),
B(ResumeGenerator), R(new_target),
B(Star), R(1),
B(LdaZero),
B(TestEqualStrict), R(1), U8(0),
B(JumpIfTrue), U8(67),
B(LdaSmi), U8(77),
B(Star), R(2),
B(CallRuntime), U16(Runtime::kAbort), R(2), U8(1),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), U8(-2),
B(Star), R(1),
B(LdaConstant), U8(0),
B(Star), R(4),
B(Mov), R(arg0), R(2),
B(Mov), R(closure), R(3),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(2), U8(3),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(PushContext), R(0),
B(Ldar), R(this),
B(StaCurrentContextSlot), U8(4),
......@@ -629,50 +645,50 @@ bytecodes: [
B(StaModuleVariable), U8(1), U8(0),
/* 0 E> */ B(StackCheck),
B(LdaCurrentContextSlot), U8(4),
B(Star), R(3),
B(Mov), R(closure), R(2),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(2), U8(2),
B(Star), R(4),
B(Mov), R(closure), R(3),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(2),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(4),
B(LdaZero),
B(SuspendGenerator), R(3),
B(Ldar), R(2),
B(SuspendGenerator), R(4),
B(Ldar), R(3),
/* 26 S> */ B(Return),
B(LdaSmi), U8(-2),
B(Star), R(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(3), U8(1),
B(Star), R(4),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(3), U8(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(Star), R(6),
B(LdaZero),
B(TestEqualStrict), R(5), U8(0),
B(TestEqualStrict), R(6), U8(0),
B(JumpIfTrue), U8(25),
B(LdaSmi), U8(2),
B(TestEqualStrict), R(5), U8(0),
B(TestEqualStrict), R(6), U8(0),
B(JumpIfTrue), U8(15),
B(Jump), U8(2),
B(LdaTrue),
B(Star), R(7),
B(Mov), R(4), R(6),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
/* 26 S> */ B(Return),
B(Ldar), R(4),
B(Ldar), R(5),
/* 0 E> */ B(Throw),
/* 16 S> */ B(CreateClosure), U8(1), U8(2), U8(0),
B(Star), R(2),
B(LdaTheHole),
B(Star), R(3),
B(LdaTheHole),
B(Star), R(4),
B(LdaSmi), U8(16),
B(Star), R(5),
B(LdaSmi), U8(24),
B(Star), R(6),
B(Mov), R(2), R(4),
B(CallRuntime), U16(Runtime::kDefineClass), R(3), U8(4),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kInstallClassNameAccessor), R(2), U8(1),
B(CallRuntime), U16(Runtime::kToFastProperties), R(2), U8(1),
B(LdaSmi), U8(24),
B(Star), R(7),
B(Mov), R(3), R(5),
B(CallRuntime), U16(Runtime::kDefineClass), R(4), U8(4),
B(Star), R(4),
B(CallRuntime), U16(Runtime::kInstallClassNameAccessor), R(3), U8(1),
B(CallRuntime), U16(Runtime::kToFastProperties), R(3), U8(1),
B(StaCurrentContextSlot), U8(6),
B(LdaCurrentContextSlot), U8(6),
/* 16 E> */ B(StaModuleVariable), U8(1), U8(0),
......@@ -690,62 +706,64 @@ handlers: [
snippet: "
export {foo as goo} from \"bar\"
"
frame size: 8
frame size: 9
parameter count: 2
bytecode array length: 124
bytecode array length: 131
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(21),
B(JumpIfUndefined), U8(28),
B(CallRuntime), U16(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(2),
B(ResumeGenerator), R(new_target),
B(Star), R(1),
B(LdaZero),
B(TestEqualStrict), R(1), U8(0),
B(JumpIfTrue), U8(63),
B(LdaSmi), U8(77),
B(Star), R(2),
B(CallRuntime), U16(Runtime::kAbort), R(2), U8(1),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), U8(-2),
B(Star), R(1),
B(LdaConstant), U8(0),
B(Star), R(4),
B(Mov), R(arg0), R(2),
B(Mov), R(closure), R(3),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(2), U8(3),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(PushContext), R(0),
B(Ldar), R(this),
B(StaCurrentContextSlot), U8(4),
/* 0 E> */ B(StackCheck),
B(LdaCurrentContextSlot), U8(4),
B(Star), R(3),
B(Mov), R(closure), R(2),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(2), U8(2),
B(Star), R(4),
B(Mov), R(closure), R(3),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(2),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(4),
B(LdaZero),
B(SuspendGenerator), R(3),
B(Ldar), R(2),
B(SuspendGenerator), R(4),
B(Ldar), R(3),
/* 30 S> */ B(Return),
B(LdaSmi), U8(-2),
B(Star), R(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(3), U8(1),
B(Star), R(4),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(3), U8(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(Star), R(6),
B(LdaZero),
B(TestEqualStrict), R(5), U8(0),
B(TestEqualStrict), R(6), U8(0),
B(JumpIfTrue), U8(25),
B(LdaSmi), U8(2),
B(TestEqualStrict), R(5), U8(0),
B(TestEqualStrict), R(6), U8(0),
B(JumpIfTrue), U8(15),
B(Jump), U8(2),
B(LdaTrue),
B(Star), R(7),
B(Mov), R(4), R(6),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
/* 30 S> */ B(Return),
B(Ldar), R(4),
B(Ldar), R(5),
/* 0 E> */ B(Throw),
B(LdaUndefined),
/* 30 S> */ B(Return),
......@@ -760,62 +778,64 @@ handlers: [
snippet: "
export * from \"bar\"
"
frame size: 8
frame size: 9
parameter count: 2
bytecode array length: 124
bytecode array length: 131
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(21),
B(JumpIfUndefined), U8(28),
B(CallRuntime), U16(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(2),
B(ResumeGenerator), R(new_target),
B(Star), R(1),
B(LdaZero),
B(TestEqualStrict), R(1), U8(0),
B(JumpIfTrue), U8(63),
B(LdaSmi), U8(77),
B(Star), R(2),
B(CallRuntime), U16(Runtime::kAbort), R(2), U8(1),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), U8(-2),
B(Star), R(1),
B(LdaConstant), U8(0),
B(Star), R(4),
B(Mov), R(arg0), R(2),
B(Mov), R(closure), R(3),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(2), U8(3),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(PushContext), R(0),
B(Ldar), R(this),
B(StaCurrentContextSlot), U8(4),
/* 0 E> */ B(StackCheck),
B(LdaCurrentContextSlot), U8(4),
B(Star), R(3),
B(Mov), R(closure), R(2),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(2), U8(2),
B(Star), R(4),
B(Mov), R(closure), R(3),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(2),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(4),
B(LdaZero),
B(SuspendGenerator), R(3),
B(Ldar), R(2),
B(SuspendGenerator), R(4),
B(Ldar), R(3),
/* 19 S> */ B(Return),
B(LdaSmi), U8(-2),
B(Star), R(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(3), U8(1),
B(Star), R(4),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(3), U8(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(Star), R(6),
B(LdaZero),
B(TestEqualStrict), R(5), U8(0),
B(TestEqualStrict), R(6), U8(0),
B(JumpIfTrue), U8(25),
B(LdaSmi), U8(2),
B(TestEqualStrict), R(5), U8(0),
B(TestEqualStrict), R(6), U8(0),
B(JumpIfTrue), U8(15),
B(Jump), U8(2),
B(LdaTrue),
B(Star), R(7),
B(Mov), R(4), R(6),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
/* 19 S> */ B(Return),
B(Ldar), R(4),
B(Ldar), R(5),
/* 0 E> */ B(Throw),
B(LdaUndefined),
/* 19 S> */ B(Return),
......@@ -831,78 +851,80 @@ snippet: "
import * as foo from \"bar\"
foo.f(foo, foo.x);
"
frame size: 8
frame size: 9
parameter count: 2
bytecode array length: 163
bytecode array length: 170
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(21),
B(JumpIfUndefined), U8(28),
B(CallRuntime), U16(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(2),
B(ResumeGenerator), R(new_target),
B(Star), R(1),
B(LdaZero),
B(TestEqualStrict), R(1), U8(0),
B(JumpIfTrue), U8(73),
B(LdaSmi), U8(77),
B(Star), R(2),
B(CallRuntime), U16(Runtime::kAbort), R(2), U8(1),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), U8(-2),
B(Star), R(1),
B(LdaConstant), U8(0),
B(Star), R(4),
B(Mov), R(arg0), R(2),
B(Mov), R(closure), R(3),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(2), U8(3),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(PushContext), R(0),
B(Ldar), R(this),
B(StaCurrentContextSlot), U8(4),
B(LdaZero),
B(Star), R(2),
B(CallRuntime), U16(Runtime::kGetModuleNamespace), R(2), U8(1),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kGetModuleNamespace), R(3), U8(1),
B(StaCurrentContextSlot), U8(6),
/* 0 E> */ B(StackCheck),
B(LdaCurrentContextSlot), U8(4),
B(Star), R(3),
B(Mov), R(closure), R(2),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(2), U8(2),
B(Star), R(4),
B(Mov), R(closure), R(3),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(2),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(4),
B(LdaZero),
B(SuspendGenerator), R(3),
B(Ldar), R(2),
B(SuspendGenerator), R(4),
B(Ldar), R(3),
/* 45 S> */ B(Return),
B(LdaSmi), U8(-2),
B(Star), R(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(3), U8(1),
B(Star), R(4),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(3), U8(1),
B(CallRuntime), U16(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(CallRuntime), U16(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(Star), R(6),
B(LdaZero),
B(TestEqualStrict), R(5), U8(0),
B(TestEqualStrict), R(6), U8(0),
B(JumpIfTrue), U8(25),
B(LdaSmi), U8(2),
B(TestEqualStrict), R(5), U8(0),
B(TestEqualStrict), R(6), U8(0),
B(JumpIfTrue), U8(15),
B(Jump), U8(2),
B(LdaTrue),
B(Star), R(7),
B(Mov), R(4), R(6),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
/* 45 S> */ B(Return),
B(Ldar), R(4),
B(Ldar), R(5),
/* 0 E> */ B(Throw),
/* 27 S> */ B(LdaCurrentContextSlot), U8(6),
B(Star), R(3),
/* 30 E> */ B(LdaNamedProperty), R(3), U8(1), U8(4),
B(Star), R(2),
B(LdaCurrentContextSlot), U8(6),
B(Star), R(4),
/* 30 E> */ B(LdaNamedProperty), R(4), U8(1), U8(4),
B(Star), R(3),
B(LdaCurrentContextSlot), U8(6),
B(Star), R(5),
/* 41 E> */ B(LdaNamedProperty), R(5), U8(2), U8(6),
B(Star), R(5),
/* 31 E> */ B(CallProperty), R(2), R(3), U8(3), U8(2),
B(LdaCurrentContextSlot), U8(6),
B(Star), R(6),
/* 41 E> */ B(LdaNamedProperty), R(6), U8(2), U8(6),
B(Star), R(6),
/* 31 E> */ B(CallProperty), R(3), R(4), U8(3), U8(2),
B(LdaUndefined),
/* 45 S> */ B(Return),
]
......
// Copyright 2017 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --always-opt --function-context-specialization --verify-heap
bar = function() { }
try {
(function() {
bar(...(function*(){ yield 1; yield 2; yield 3; })());
})();
} catch(e) {}
// Copyright 2017 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --always-opt --function-context-specialization --verify-heap
function* gen() {
for (var i = 0; i < 3; ++i) {
yield i
}
}
gen().next();
// Copyright 2017 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --always-opt --function-context-specialization --verify-heap
(function __f_5() {
var __v_0 = { *['a']() { yield 2; } };
var __v_3 = __v_0.a();
__v_3.next();
})();
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment