v8/test/cctest/interpreter/bytecode_expectations/AsyncGenerators.golden

1230 lines
48 KiB
Plaintext
Raw Normal View History

#
# Autogenerated by generate-bytecode-expectations.
#
---
wrap: no
test function name: f
async iteration: yes
---
snippet: "
async function* f() { }
f();
"
frame size: 10
parameter count: 1
bytecode array length: 304
bytecodes: [
B(Mov), R(new_target), R(1),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(1), U8(1),
B(PushContext), R(3),
B(RestoreGeneratorState), R(1),
B(Star), R(2),
B(SwitchOnSmiNoFeedback), U8(0), U8(3), I8(0),
B(LdaSmi), I8(46),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(2),
B(Mov), R(closure), R(3),
B(Mov), R(this), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(Star), R(0),
/* 17 E> */ B(StackCheck),
B(Star), R(1),
B(Mov), R(context), R(5),
B(Mov), R(context), R(6),
B(Ldar), R(0),
/* 17 E> */ B(SuspendGenerator), R(1), R(0), U8(7), U8(0),
/* 22 S> */ B(Return),
B(RestoreGeneratorRegisters), R(1), R(0), U8(7),
B(LdaSmi), I8(-2),
B(Star), R(2),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(1), U8(1),
B(Star), R(7),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(1), U8(1),
B(SwitchOnSmiNoFeedback), U8(3), U8(2), I8(0),
B(Ldar), R(7),
/* 17 E> */ B(Throw),
B(Mov), R(1), R(8),
B(Mov), R(7), R(9),
B(CallJSRuntime), U8(%async_generator_await_uncaught), R(8), U8(2),
B(SuspendGenerator), R(1), R(0), U8(8), U8(1),
/* 22 S> */ B(Return),
B(RestoreGeneratorRegisters), R(1), R(0), U8(8),
B(LdaSmi), I8(-2),
B(Star), R(2),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(1), U8(1),
B(Star), R(8),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(1), U8(1),
B(Star), R(9),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(5),
B(Ldar), R(8),
B(ReThrow),
B(LdaZero),
B(Star), R(3),
B(Mov), R(8), R(4),
B(Jump), U8(105),
B(LdaUndefined),
B(Star), R(8),
B(Mov), R(1), R(7),
B(CallJSRuntime), U8(%async_generator_await_uncaught), R(7), U8(2),
B(SuspendGenerator), R(1), R(0), U8(7), U8(2),
/* 22 S> */ B(Return),
B(RestoreGeneratorRegisters), R(1), R(0), U8(7),
B(LdaSmi), I8(-2),
B(Star), R(2),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(1), U8(1),
B(Star), R(7),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(1), U8(1),
B(Star), R(8),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(8),
B(JumpIfTrue), U8(5),
B(Ldar), R(7),
B(ReThrow),
B(LdaZero),
B(Star), R(3),
B(Mov), R(7), R(4),
B(Jump), U8(53),
B(Jump), U8(39),
B(Star), R(7),
B(Ldar), R(closure),
B(CreateCatchContext), R(7), U8(5), U8(6),
B(Star), R(6),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(6),
B(PushContext), R(7),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(9),
B(Mov), R(0), R(8),
B(InvokeIntrinsic), U8(Runtime::k_AsyncGeneratorReject), R(8), U8(2),
B(PopContext), R(7),
B(Star), R(4),
B(LdaSmi), I8(1),
B(Star), R(3),
B(Jump), U8(14),
B(LdaSmi), I8(-1),
B(Star), R(3),
B(Jump), U8(8),
B(Star), R(4),
B(LdaSmi), I8(2),
B(Star), R(3),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(0), U8(1),
B(Ldar), R(5),
B(SetPendingMessage),
B(Ldar), R(3),
B(SwitchOnSmiNoFeedback), U8(7), U8(3), I8(0),
B(Jump), U8(34),
B(LdaTrue),
B(Star), R(8),
B(Mov), R(0), R(6),
B(Mov), R(4), R(7),
B(InvokeIntrinsic), U8(Runtime::k_AsyncGeneratorResolve), R(6), U8(3),
B(Star), R(9),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(1), U8(1),
B(Ldar), R(9),
/* 22 S> */ B(Return),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(1), U8(1),
B(Ldar), R(4),
/* 22 S> */ B(Return),
B(Ldar), R(4),
B(ReThrow),
B(LdaUndefined),
B(Star), R(3),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(1), U8(1),
B(Ldar), R(3),
/* 22 S> */ B(Return),
]
constant pool: [
Smi [46],
Smi [87],
Smi [139],
Smi [59],
Smi [7],
ONE_BYTE_INTERNALIZED_STRING_TYPE [".catch"],
FIXED_ARRAY_TYPE,
Smi [6],
Smi [28],
Smi [35],
]
handlers: [
[52, 231, 237],
[55, 192, 194],
]
---
snippet: "
async function* f() { yield 42 }
f();
"
frame size: 10
parameter count: 1
bytecode array length: 446
bytecodes: [
B(Mov), R(new_target), R(1),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(1), U8(1),
B(PushContext), R(3),
B(RestoreGeneratorState), R(1),
B(Star), R(2),
B(SwitchOnSmiNoFeedback), U8(0), U8(6), I8(0),
B(LdaSmi), I8(46),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(2),
B(Mov), R(closure), R(3),
B(Mov), R(this), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(Star), R(0),
/* 17 E> */ B(StackCheck),
B(Star), R(1),
B(Mov), R(context), R(5),
B(Mov), R(context), R(6),
B(Ldar), R(0),
/* 17 E> */ B(SuspendGenerator), R(1), R(0), U8(7), U8(0),
/* 31 S> */ B(Return),
B(RestoreGeneratorRegisters), R(1), R(0), U8(7),
B(LdaSmi), I8(-2),
B(Star), R(2),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(1), U8(1),
B(Star), R(7),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(1), U8(1),
B(SwitchOnSmiNoFeedback), U8(6), U8(2), I8(0),
B(Ldar), R(7),
/* 17 E> */ B(Throw),
B(Mov), R(1), R(8),
B(Mov), R(7), R(9),
B(CallJSRuntime), U8(%async_generator_await_uncaught), R(8), U8(2),
B(SuspendGenerator), R(1), R(0), U8(8), U8(1),
/* 31 S> */ B(Return),
B(RestoreGeneratorRegisters), R(1), R(0), U8(8),
B(LdaSmi), I8(-2),
B(Star), R(2),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(1), U8(1),
B(Star), R(8),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(1), U8(1),
B(Star), R(9),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(5),
B(Ldar), R(8),
B(ReThrow),
B(LdaZero),
B(Star), R(3),
B(Mov), R(8), R(4),
B(Jump), U8(247),
/* 22 S> */ B(LdaSmi), I8(42),
B(Star), R(8),
B(Mov), R(1), R(7),
B(CallJSRuntime), U8(%async_generator_await_uncaught), R(7), U8(2),
B(SuspendGenerator), R(1), R(0), U8(7), U8(4),
/* 31 S> */ B(Return),
B(RestoreGeneratorRegisters), R(1), R(0), U8(7),
B(LdaSmi), I8(-2),
B(Star), R(2),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(1), U8(1),
B(Star), R(7),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(1), U8(1),
B(Star), R(8),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(8),
B(JumpIfTrue), U8(5),
B(Ldar), R(7),
B(ReThrow),
B(Ldar), R(7),
B(Star), R(8),
B(LdaFalse),
B(Star), R(9),
B(Mov), R(1), R(7),
B(InvokeIntrinsic), U8(Runtime::k_AsyncGeneratorResolve), R(7), U8(3),
B(SuspendGenerator), R(1), R(0), U8(7), U8(2),
/* 31 S> */ B(Return),
B(RestoreGeneratorRegisters), R(1), R(0), U8(7),
B(LdaSmi), I8(-2),
B(Star), R(2),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(1), U8(1),
B(Star), R(7),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(1), U8(1),
B(SwitchOnSmiNoFeedback), U8(8), U8(2), I8(0),
B(Ldar), R(7),
/* 22 E> */ B(Throw),
B(Mov), R(1), R(8),
B(Mov), R(7), R(9),
B(CallJSRuntime), U8(%async_generator_await_uncaught), R(8), U8(2),
B(SuspendGenerator), R(1), R(0), U8(8), U8(3),
/* 31 S> */ B(Return),
B(RestoreGeneratorRegisters), R(1), R(0), U8(8),
B(LdaSmi), I8(-2),
B(Star), R(2),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(1), U8(1),
B(Star), R(8),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(1), U8(1),
B(Star), R(9),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(5),
B(Ldar), R(8),
B(ReThrow),
B(LdaZero),
B(Star), R(3),
B(Mov), R(8), R(4),
B(Jump), U8(105),
B(LdaUndefined),
B(Star), R(8),
B(Mov), R(1), R(7),
B(CallJSRuntime), U8(%async_generator_await_uncaught), R(7), U8(2),
B(SuspendGenerator), R(1), R(0), U8(7), U8(5),
/* 31 S> */ B(Return),
B(RestoreGeneratorRegisters), R(1), R(0), U8(7),
B(LdaSmi), I8(-2),
B(Star), R(2),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(1), U8(1),
B(Star), R(7),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(1), U8(1),
B(Star), R(8),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(8),
B(JumpIfTrue), U8(5),
B(Ldar), R(7),
B(ReThrow),
B(LdaZero),
B(Star), R(3),
B(Mov), R(7), R(4),
B(Jump), U8(53),
B(Jump), U8(39),
B(Star), R(7),
B(Ldar), R(closure),
B(CreateCatchContext), R(7), U8(10), U8(11),
B(Star), R(6),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(6),
B(PushContext), R(7),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(9),
B(Mov), R(0), R(8),
B(InvokeIntrinsic), U8(Runtime::k_AsyncGeneratorReject), R(8), U8(2),
B(PopContext), R(7),
B(Star), R(4),
B(LdaSmi), I8(1),
B(Star), R(3),
B(Jump), U8(14),
B(LdaSmi), I8(-1),
B(Star), R(3),
B(Jump), U8(8),
B(Star), R(4),
B(LdaSmi), I8(2),
B(Star), R(3),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(0), U8(1),
B(Ldar), R(5),
B(SetPendingMessage),
B(Ldar), R(3),
B(SwitchOnSmiNoFeedback), U8(12), U8(3), I8(0),
B(Jump), U8(34),
B(LdaTrue),
B(Star), R(8),
B(Mov), R(0), R(6),
B(Mov), R(4), R(7),
B(InvokeIntrinsic), U8(Runtime::k_AsyncGeneratorResolve), R(6), U8(3),
B(Star), R(9),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(1), U8(1),
B(Ldar), R(9),
/* 31 S> */ B(Return),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(1), U8(1),
B(Ldar), R(4),
/* 31 S> */ B(Return),
B(Ldar), R(4),
B(ReThrow),
B(LdaUndefined),
B(Star), R(3),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(1), U8(1),
B(Ldar), R(3),
/* 31 S> */ B(Return),
]
constant pool: [
Smi [46],
Smi [87],
Smi [188],
Smi [229],
Smi [140],
Smi [281],
Smi [59],
Smi [7],
Smi [59],
Smi [7],
ONE_BYTE_INTERNALIZED_STRING_TYPE [".catch"],
FIXED_ARRAY_TYPE,
Smi [6],
Smi [28],
Smi [35],
]
handlers: [
[52, 373, 379],
[55, 334, 336],
]
---
snippet: "
async function* f() { for (let x of [42]) yield x }
f();
"
frame size: 23
parameter count: 1
bytecode array length: 742
bytecodes: [
B(Mov), R(new_target), R(10),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(10), U8(1),
B(PushContext), R(12),
B(RestoreGeneratorState), R(10),
B(Star), R(11),
B(SwitchOnSmiNoFeedback), U8(0), U8(6), I8(0),
B(LdaSmi), I8(46),
B(Star), R(12),
B(CallRuntime), U16(Runtime::kAbort), R(12), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(Mov), R(closure), R(12),
B(Mov), R(this), R(13),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(12), U8(2),
B(Star), R(2),
/* 17 E> */ B(StackCheck),
B(Star), R(10),
B(Mov), R(context), R(14),
B(Mov), R(context), R(15),
B(Ldar), R(2),
/* 17 E> */ B(SuspendGenerator), R(10), R(0), U8(16), U8(0),
/* 50 S> */ B(Return),
B(RestoreGeneratorRegisters), R(10), R(0), U8(16),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(10), U8(1),
B(Star), R(16),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(10), U8(1),
B(SwitchOnSmiNoFeedback), U8(6), U8(2), I8(0),
B(Ldar), R(16),
/* 17 E> */ B(Throw),
B(Mov), R(10), R(17),
B(Mov), R(16), R(18),
B(CallJSRuntime), U8(%async_generator_await_uncaught), R(17), U8(2),
B(SuspendGenerator), R(10), R(0), U8(17), U8(1),
/* 50 S> */ B(Return),
B(RestoreGeneratorRegisters), R(10), R(0), U8(17),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(10), U8(1),
B(Star), R(17),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(10), U8(1),
B(Star), R(18),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(18),
B(JumpIfTrue), U8(5),
B(Ldar), R(17),
B(ReThrow),
B(LdaZero),
B(Star), R(12),
B(Mov), R(17), R(13),
B(JumpConstant), U8(26),
B(LdaTheHole),
B(Star), R(1),
B(LdaZero),
B(Star), R(6),
B(Mov), R(context), R(18),
B(Mov), R(context), R(19),
/* 36 S> */ B(CreateArrayLiteral), U8(8), U8(0), U8(37),
B(Star), R(20),
B(LdaNamedProperty), R(20), U8(9), U8(1),
B(Star), R(21),
B(CallProperty0), R(21), R(20), U8(3),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(4),
B(Ldar), R(11),
B(SwitchOnSmiNoFeedback), U8(10), U8(3), I8(2),
B(LdaSmi), I8(-2),
/* 36 E> */ B(TestEqualStrictNoFeedback), R(11),
B(JumpIfTrue), U8(11),
B(LdaSmi), I8(46),
B(Star), R(20),
B(CallRuntime), U16(Runtime::kAbort), R(20), U8(1),
/* 31 S> */ B(LdaNamedProperty), R(4), U8(13), U8(7),
B(Star), R(20),
B(CallProperty0), R(20), R(4), U8(5),
B(Star), R(5),
/* 31 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(5), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(5), U8(1),
B(LdaNamedProperty), R(5), U8(14), U8(9),
B(JumpIfToBooleanTrue), U8(166),
B(LdaNamedProperty), R(5), U8(15), U8(11),
B(Star), R(7),
B(LdaSmi), I8(2),
B(Star), R(6),
B(Mov), R(7), R(3),
/* 22 E> */ B(StackCheck),
B(Mov), R(3), R(0),
/* 42 S> */ B(Mov), R(10), R(20),
B(Mov), R(0), R(21),
B(CallJSRuntime), U8(%async_generator_await_uncaught), R(20), U8(2),
B(SuspendGenerator), R(10), R(0), U8(20), U8(4),
/* 50 S> */ B(Return),
B(RestoreGeneratorRegisters), R(10), R(0), U8(20),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(10), U8(1),
B(Star), R(20),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(10), U8(1),
B(Star), R(21),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(21),
B(JumpIfTrue), U8(5),
B(Ldar), R(20),
B(ReThrow),
B(Ldar), R(20),
B(Star), R(21),
B(LdaFalse),
B(Star), R(22),
B(Mov), R(10), R(20),
B(InvokeIntrinsic), U8(Runtime::k_AsyncGeneratorResolve), R(20), U8(3),
B(SuspendGenerator), R(10), R(0), U8(20), U8(2),
/* 50 S> */ B(Return),
B(RestoreGeneratorRegisters), R(10), R(0), U8(20),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(10), U8(1),
B(Star), R(20),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(10), U8(1),
B(SwitchOnSmiNoFeedback), U8(16), U8(2), I8(0),
B(Ldar), R(20),
/* 42 E> */ B(Throw),
B(Mov), R(10), R(21),
B(Mov), R(20), R(22),
B(CallJSRuntime), U8(%async_generator_await_uncaught), R(21), U8(2),
B(SuspendGenerator), R(10), R(0), U8(21), U8(3),
/* 50 S> */ B(Return),
B(RestoreGeneratorRegisters), R(10), R(0), U8(21),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(10), U8(1),
B(Star), R(21),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(10), U8(1),
B(Star), R(22),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(22),
B(JumpIfTrue), U8(5),
B(Ldar), R(21),
B(ReThrow),
B(LdaZero),
B(Star), R(16),
B(Mov), R(21), R(17),
B(Jump), U8(60),
B(LdaZero),
B(Star), R(6),
B(JumpLoop), U8(212), I8(0),
B(Jump), U8(40),
B(Star), R(20),
B(Ldar), R(closure),
B(CreateCatchContext), R(20), U8(18), U8(19),
B(Star), R(19),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(19),
B(PushContext), R(20),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(6), U8(13),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(6),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(21),
B(CallRuntime), U16(Runtime::kReThrow), R(21), U8(1),
B(PopContext), R(20),
B(LdaSmi), I8(-1),
B(Star), R(16),
B(Jump), U8(8),
B(Star), R(17),
B(LdaSmi), I8(1),
B(Star), R(16),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(18),
B(LdaZero),
B(TestEqualStrict), R(6), U8(14),
B(JumpIfTrue), U8(104),
B(LdaNamedProperty), R(4), U8(20), U8(15),
B(Star), R(8),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(93),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(6), U8(18),
B(JumpIfFalse), U8(61),
B(Ldar), R(8),
B(TestTypeOf), U8(5),
B(JumpIfFalse), U8(4),
B(Jump), U8(18),
B(Wide), B(LdaSmi), I16(134),
B(Star), R(19),
B(LdaConstant), U8(21),
B(Star), R(20),
B(CallRuntime), U16(Runtime::kNewTypeError), R(19), U8(2),
B(Throw),
B(Mov), R(context), R(19),
B(Mov), R(8), R(20),
B(Mov), R(4), R(21),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(20), U8(2),
B(Jump), U8(20),
B(Star), R(20),
B(Ldar), R(closure),
B(CreateCatchContext), R(20), U8(18), U8(22),
B(Star), R(19),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(19),
B(PushContext), R(20),
B(PopContext), R(20),
B(Jump), U8(27),
B(Mov), R(8), R(19),
B(Mov), R(4), R(20),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(19), U8(2),
B(Star), R(9),
B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(9), U8(1),
B(JumpIfToBooleanFalse), U8(4),
B(Jump), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(9), U8(1),
B(Ldar), R(18),
B(SetPendingMessage),
B(Ldar), R(16),
B(SwitchOnSmiNoFeedback), U8(23), U8(2), I8(0),
B(Jump), U8(13),
B(LdaZero),
B(Star), R(12),
B(Mov), R(17), R(13),
B(Jump), U8(108),
B(Ldar), R(17),
B(ReThrow),
B(LdaUndefined),
B(Star), R(17),
B(Mov), R(10), R(16),
B(CallJSRuntime), U8(%async_generator_await_uncaught), R(16), U8(2),
B(SuspendGenerator), R(10), R(0), U8(16), U8(5),
/* 50 S> */ B(Return),
B(RestoreGeneratorRegisters), R(10), R(0), U8(16),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(10), U8(1),
B(Star), R(16),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(10), U8(1),
B(Star), R(17),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(17),
B(JumpIfTrue), U8(5),
B(Ldar), R(16),
B(ReThrow),
B(LdaZero),
B(Star), R(12),
B(Mov), R(16), R(13),
B(Jump), U8(53),
B(Jump), U8(39),
B(Star), R(16),
B(Ldar), R(closure),
B(CreateCatchContext), R(16), U8(18), U8(25),
B(Star), R(15),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(15),
B(PushContext), R(16),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(18),
B(Mov), R(2), R(17),
B(InvokeIntrinsic), U8(Runtime::k_AsyncGeneratorReject), R(17), U8(2),
B(PopContext), R(16),
B(Star), R(13),
B(LdaSmi), I8(1),
B(Star), R(12),
B(Jump), U8(14),
B(LdaSmi), I8(-1),
B(Star), R(12),
B(Jump), U8(8),
B(Star), R(13),
B(LdaSmi), I8(2),
B(Star), R(12),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(14),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(2), U8(1),
B(Ldar), R(14),
B(SetPendingMessage),
B(Ldar), R(12),
B(SwitchOnSmiNoFeedback), U8(27), U8(3), I8(0),
B(Jump), U8(34),
B(LdaTrue),
B(Star), R(17),
B(Mov), R(2), R(15),
B(Mov), R(13), R(16),
B(InvokeIntrinsic), U8(Runtime::k_AsyncGeneratorResolve), R(15), U8(3),
B(Star), R(18),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(10), U8(1),
B(Ldar), R(18),
/* 50 S> */ B(Return),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(10), U8(1),
B(Ldar), R(13),
/* 50 S> */ B(Return),
B(Ldar), R(13),
B(ReThrow),
B(LdaUndefined),
B(Star), R(12),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(10), U8(1),
B(Ldar), R(12),
/* 50 S> */ B(Return),
]
constant pool: [
Smi [46],
Smi [87],
Smi [160],
Smi [160],
Smi [160],
Smi [577],
Smi [59],
Smi [7],
TUPLE2_TYPE,
SYMBOL_TYPE,
Smi [130],
Smi [171],
Smi [82],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["next"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["done"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["value"],
Smi [59],
Smi [7],
ONE_BYTE_INTERNALIZED_STRING_TYPE [".catch"],
FIXED_ARRAY_TYPE,
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
FIXED_ARRAY_TYPE,
Smi [6],
Smi [14],
FIXED_ARRAY_TYPE,
Smi [543],
Smi [6],
Smi [28],
Smi [35],
]
handlers: [
[52, 669, 675],
[55, 630, 632],
[149, 432, 438],
[152, 392, 394],
[499, 509, 511],
]
---
snippet: "
function* g() { yield 42 }
async function* f() { yield* g() }
f();
"
frame size: 19
parameter count: 1
bytecode array length: 1084
bytecodes: [
B(Mov), R(new_target), R(9),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(9), U8(1),
B(PushContext), R(11),
B(RestoreGeneratorState), R(9),
B(Star), R(10),
B(SwitchOnSmiNoFeedback), U8(0), U8(13), I8(0),
B(LdaSmi), I8(46),
B(Star), R(11),
B(CallRuntime), U16(Runtime::kAbort), R(11), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(10),
B(Mov), R(closure), R(11),
B(Mov), R(this), R(12),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(11), U8(2),
B(Star), R(0),
/* 44 E> */ B(StackCheck),
B(Star), R(9),
B(Mov), R(context), R(13),
B(Mov), R(context), R(14),
B(Ldar), R(0),
/* 44 E> */ B(SuspendGenerator), R(9), R(0), U8(15), U8(0),
/* 60 S> */ B(Return),
B(RestoreGeneratorRegisters), R(9), R(0), U8(15),
B(LdaSmi), I8(-2),
B(Star), R(10),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(9), U8(1),
B(Star), R(15),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(9), U8(1),
B(SwitchOnSmiNoFeedback), U8(13), U8(2), I8(0),
B(Ldar), R(15),
/* 44 E> */ B(Throw),
B(Mov), R(9), R(16),
B(Mov), R(15), R(17),
B(CallJSRuntime), U8(%async_generator_await_uncaught), R(16), U8(2),
B(SuspendGenerator), R(9), R(0), U8(16), U8(1),
/* 60 S> */ B(Return),
B(RestoreGeneratorRegisters), R(9), R(0), U8(16),
B(LdaSmi), I8(-2),
B(Star), R(10),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(9), U8(1),
B(Star), R(16),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(9), U8(1),
B(Star), R(17),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(17),
B(JumpIfTrue), U8(5),
B(Ldar), R(16),
B(ReThrow),
B(LdaZero),
B(Star), R(11),
B(Mov), R(16), R(12),
B(JumpConstant), U8(39),
/* 49 S> */ B(LdaUndefined),
B(Star), R(1),
B(LdaZero),
B(Star), R(2),
B(LdaUndefined),
B(Star), R(3),
B(LdaGlobal), U8(15), U8(2),
B(Star), R(17),
/* 56 E> */ B(CallUndefinedReceiver0), R(17), U8(0),
B(Star), R(15),
B(LdaNamedProperty), R(15), U8(16), U8(8),
B(JumpIfUndefined), U8(17),
B(JumpIfNull), U8(15),
B(Star), R(16),
B(CallProperty0), R(16), R(15), U8(10),
B(JumpIfJSReceiver), U8(23),
B(CallRuntime), U16(Runtime::kThrowSymbolAsyncIteratorInvalid), R(0), U8(0),
B(LdaNamedProperty), R(15), U8(17), U8(4),
B(Star), R(16),
B(CallProperty0), R(16), R(15), U8(6),
B(Star), R(16),
B(InvokeIntrinsic), U8(Runtime::k_CreateAsyncFromSyncIterator), R(16), U8(1),
B(Star), R(4),
B(Ldar), R(10),
B(SwitchOnSmiNoFeedback), U8(18), U8(9), I8(2),
B(LdaSmi), I8(-2),
B(TestEqualStrictNoFeedback), R(10),
B(JumpIfTrue), U8(11),
B(LdaSmi), I8(46),
B(Star), R(15),
B(CallRuntime), U16(Runtime::kAbort), R(15), U8(1),
B(StackCheck),
B(LdaZero),
B(TestEqualStrict), R(2), U8(16),
B(Mov), R(2), R(15),
B(JumpIfTrue), U8(18),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(15), U8(20),
B(JumpIfTrue), U8(83),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(15), U8(29),
B(JumpIfTrue), U8(211),
B(JumpConstant), U8(33),
B(LdaNamedProperty), R(4), U8(27), U8(14),
B(Star), R(16),
B(CallProperty1), R(16), R(4), R(1), U8(12),
B(Star), R(17),
B(Mov), R(9), R(16),
B(CallJSRuntime), U8(%async_generator_await_uncaught), R(16), U8(2),
B(SuspendGenerator), R(9), R(0), U8(16), U8(2),
/* 60 S> */ B(Return),
B(RestoreGeneratorRegisters), R(9), R(0), U8(16),
B(LdaSmi), I8(-2),
B(Star), R(10),
[generators] remove SuspendFlags enum and related code SuspendFlags was originally used by the suspend operation to determine which field to record the bytecode offset of a suspended generator, and the value the generator was resumed with. For async generators, await operations would use a separate field, in order to preserve the previous yield input value. This was important to ensure `function.sent` continued to function correctly. As function.sent is being retired, this allows the removal of support for that. Given that this was the only real need for SuspendFlags in the first place (with other uses tacked on as a hack), this involves several other changes as well: - Modification of MacroAssembler AssertGeneratorObject. No longer accepts a SuspendFlags parameter to determine which type of check to perform. - Removal of `flags` operand from SuspendGenerator bytecode, and the GeneratorStore js-operator. - Removal of `flags` parameter from ResumeGeneratorTrampoline builtins. - Removal of Runtime functions, interpreter intrinsics and AccessBuilders associated with the [[await_input_or_debug_pos]] field in JSAsyncGeneratorObject, as this field no longer exists. - Addition of a new `Yield` AST node (subclass of Suspend) in order to prevent the need for the other SuspendFlag values. BUG=v8:5855 TBR=bmeurer@chromium.org Change-Id: Iff2881e4742497fe5b774915e988c3d9d8fbe487 Reviewed-on: https://chromium-review.googlesource.com/570485 Commit-Queue: Caitlin Potter <caitp@igalia.com> Reviewed-by: Ross McIlroy <rmcilroy@chromium.org> Reviewed-by: Georg Neis <neis@chromium.org> Cr-Commit-Position: refs/heads/master@{#46683}
2017-07-14 15:20:23 +00:00
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(9), U8(1),
B(Star), R(16),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(9), U8(1),
B(Star), R(17),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(17),
B(JumpIfTrue), U8(5),
B(Ldar), R(16),
B(ReThrow),
B(Mov), R(16), R(3),
B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(16), U8(1),
B(JumpIfToBooleanFalse), U8(4),
B(Jump), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(3), U8(1),
B(JumpConstant), U8(34),
B(LdaNamedProperty), R(4), U8(28), U8(17),
B(Star), R(3),
B(TestUndetectable),
B(JumpIfFalse), U8(54),
B(Mov), R(9), R(16),
B(Mov), R(1), R(17),
B(CallJSRuntime), U8(%async_generator_await_uncaught), R(16), U8(2),
B(SuspendGenerator), R(9), R(0), U8(16), U8(3),
/* 60 S> */ B(Return),
B(RestoreGeneratorRegisters), R(9), R(0), U8(16),
B(LdaSmi), I8(-2),
B(Star), R(10),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(9), U8(1),
B(Star), R(16),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(9), U8(1),
B(Star), R(17),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(17),
B(JumpIfTrue), U8(5),
B(Ldar), R(16),
B(ReThrow),
B(LdaZero),
B(Star), R(11),
B(Mov), R(16), R(12),
B(JumpConstant), U8(40),
B(Mov), R(3), R(16),
B(Mov), R(4), R(17),
B(Mov), R(1), R(18),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(16), U8(3),
B(Star), R(17),
B(Mov), R(9), R(16),
B(CallJSRuntime), U8(%async_generator_await_uncaught), R(16), U8(2),
B(SuspendGenerator), R(9), R(0), U8(16), U8(4),
/* 60 S> */ B(Return),
B(RestoreGeneratorRegisters), R(9), R(0), U8(16),
B(LdaSmi), I8(-2),
B(Star), R(10),
[generators] remove SuspendFlags enum and related code SuspendFlags was originally used by the suspend operation to determine which field to record the bytecode offset of a suspended generator, and the value the generator was resumed with. For async generators, await operations would use a separate field, in order to preserve the previous yield input value. This was important to ensure `function.sent` continued to function correctly. As function.sent is being retired, this allows the removal of support for that. Given that this was the only real need for SuspendFlags in the first place (with other uses tacked on as a hack), this involves several other changes as well: - Modification of MacroAssembler AssertGeneratorObject. No longer accepts a SuspendFlags parameter to determine which type of check to perform. - Removal of `flags` operand from SuspendGenerator bytecode, and the GeneratorStore js-operator. - Removal of `flags` parameter from ResumeGeneratorTrampoline builtins. - Removal of Runtime functions, interpreter intrinsics and AccessBuilders associated with the [[await_input_or_debug_pos]] field in JSAsyncGeneratorObject, as this field no longer exists. - Addition of a new `Yield` AST node (subclass of Suspend) in order to prevent the need for the other SuspendFlag values. BUG=v8:5855 TBR=bmeurer@chromium.org Change-Id: Iff2881e4742497fe5b774915e988c3d9d8fbe487 Reviewed-on: https://chromium-review.googlesource.com/570485 Commit-Queue: Caitlin Potter <caitp@igalia.com> Reviewed-by: Ross McIlroy <rmcilroy@chromium.org> Reviewed-by: Georg Neis <neis@chromium.org> Cr-Commit-Position: refs/heads/master@{#46683}
2017-07-14 15:20:23 +00:00
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(9), U8(1),
B(Star), R(16),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(9), U8(1),
B(Star), R(17),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(17),
B(JumpIfTrue), U8(5),
B(Ldar), R(16),
B(ReThrow),
B(Mov), R(16), R(3),
B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(16), U8(1),
B(JumpIfToBooleanFalse), U8(4),
B(Jump), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(3), U8(1),
B(JumpConstant), U8(35),
B(LdaNamedProperty), R(4), U8(29), U8(21),
B(Star), R(5),
B(TestUndetectable),
B(JumpIfFalse), U8(212),
B(LdaNamedProperty), R(4), U8(28), U8(24),
B(Star), R(6),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(185),
B(LdaZero),
B(Star), R(16),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(16), U8(27),
B(JumpIfFalse), U8(106),
B(Ldar), R(6),
B(TestTypeOf), U8(5),
B(JumpIfFalse), U8(4),
B(Jump), U8(18),
B(Wide), B(LdaSmi), I16(134),
B(Star), R(16),
B(LdaConstant), U8(30),
B(Star), R(17),
B(CallRuntime), U16(Runtime::kNewTypeError), R(16), U8(2),
B(Throw),
B(Mov), R(context), R(16),
B(Mov), R(6), R(17),
B(Mov), R(4), R(18),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(17), U8(2),
B(Star), R(18),
B(Mov), R(9), R(17),
B(CallJSRuntime), U8(%async_generator_await_caught), R(17), U8(2),
B(SuspendGenerator), R(9), R(0), U8(17), U8(5),
/* 60 S> */ B(Return),
B(RestoreGeneratorRegisters), R(9), R(0), U8(17),
B(LdaSmi), I8(-2),
B(Star), R(10),
[generators] remove SuspendFlags enum and related code SuspendFlags was originally used by the suspend operation to determine which field to record the bytecode offset of a suspended generator, and the value the generator was resumed with. For async generators, await operations would use a separate field, in order to preserve the previous yield input value. This was important to ensure `function.sent` continued to function correctly. As function.sent is being retired, this allows the removal of support for that. Given that this was the only real need for SuspendFlags in the first place (with other uses tacked on as a hack), this involves several other changes as well: - Modification of MacroAssembler AssertGeneratorObject. No longer accepts a SuspendFlags parameter to determine which type of check to perform. - Removal of `flags` operand from SuspendGenerator bytecode, and the GeneratorStore js-operator. - Removal of `flags` parameter from ResumeGeneratorTrampoline builtins. - Removal of Runtime functions, interpreter intrinsics and AccessBuilders associated with the [[await_input_or_debug_pos]] field in JSAsyncGeneratorObject, as this field no longer exists. - Addition of a new `Yield` AST node (subclass of Suspend) in order to prevent the need for the other SuspendFlag values. BUG=v8:5855 TBR=bmeurer@chromium.org Change-Id: Iff2881e4742497fe5b774915e988c3d9d8fbe487 Reviewed-on: https://chromium-review.googlesource.com/570485 Commit-Queue: Caitlin Potter <caitp@igalia.com> Reviewed-by: Ross McIlroy <rmcilroy@chromium.org> Reviewed-by: Georg Neis <neis@chromium.org> Cr-Commit-Position: refs/heads/master@{#46683}
2017-07-14 15:20:23 +00:00
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(9), U8(1),
B(Star), R(17),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(9), U8(1),
B(Star), R(18),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(18),
B(JumpIfTrue), U8(5),
B(Ldar), R(17),
B(ReThrow),
B(Ldar), R(17),
B(Jump), U8(20),
B(Star), R(17),
B(Ldar), R(closure),
B(CreateCatchContext), R(17), U8(31), U8(32),
B(Star), R(16),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(16),
B(PushContext), R(17),
B(PopContext), R(17),
B(Jump), U8(71),
B(Mov), R(6), R(16),
B(Mov), R(4), R(17),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(16), U8(2),
B(Star), R(17),
B(Mov), R(9), R(16),
B(CallJSRuntime), U8(%async_generator_await_uncaught), R(16), U8(2),
B(SuspendGenerator), R(9), R(0), U8(16), U8(6),
/* 60 S> */ B(Return),
B(RestoreGeneratorRegisters), R(9), R(0), U8(16),
B(LdaSmi), I8(-2),
B(Star), R(10),
[generators] remove SuspendFlags enum and related code SuspendFlags was originally used by the suspend operation to determine which field to record the bytecode offset of a suspended generator, and the value the generator was resumed with. For async generators, await operations would use a separate field, in order to preserve the previous yield input value. This was important to ensure `function.sent` continued to function correctly. As function.sent is being retired, this allows the removal of support for that. Given that this was the only real need for SuspendFlags in the first place (with other uses tacked on as a hack), this involves several other changes as well: - Modification of MacroAssembler AssertGeneratorObject. No longer accepts a SuspendFlags parameter to determine which type of check to perform. - Removal of `flags` operand from SuspendGenerator bytecode, and the GeneratorStore js-operator. - Removal of `flags` parameter from ResumeGeneratorTrampoline builtins. - Removal of Runtime functions, interpreter intrinsics and AccessBuilders associated with the [[await_input_or_debug_pos]] field in JSAsyncGeneratorObject, as this field no longer exists. - Addition of a new `Yield` AST node (subclass of Suspend) in order to prevent the need for the other SuspendFlag values. BUG=v8:5855 TBR=bmeurer@chromium.org Change-Id: Iff2881e4742497fe5b774915e988c3d9d8fbe487 Reviewed-on: https://chromium-review.googlesource.com/570485 Commit-Queue: Caitlin Potter <caitp@igalia.com> Reviewed-by: Ross McIlroy <rmcilroy@chromium.org> Reviewed-by: Georg Neis <neis@chromium.org> Cr-Commit-Position: refs/heads/master@{#46683}
2017-07-14 15:20:23 +00:00
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(9), U8(1),
B(Star), R(16),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(9), U8(1),
B(Star), R(17),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(17),
B(JumpIfTrue), U8(5),
B(Ldar), R(16),
B(ReThrow),
B(Mov), R(16), R(7),
B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(16), U8(1),
B(JumpIfToBooleanFalse), U8(4),
B(Jump), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(7), U8(1),
B(Wide), B(LdaSmi), I16(148),
B(Star), R(16),
B(LdaConstant), U8(30),
B(Star), R(17),
B(CallRuntime), U16(Runtime::kNewTypeError), R(16), U8(2),
B(Throw),
B(Mov), R(5), R(16),
B(Mov), R(4), R(17),
B(Mov), R(1), R(18),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(16), U8(3),
B(Star), R(17),
B(Mov), R(9), R(16),
B(CallJSRuntime), U8(%async_generator_await_uncaught), R(16), U8(2),
B(SuspendGenerator), R(9), R(0), U8(16), U8(7),
/* 60 S> */ B(Return),
B(RestoreGeneratorRegisters), R(9), R(0), U8(16),
B(LdaSmi), I8(-2),
B(Star), R(10),
[generators] remove SuspendFlags enum and related code SuspendFlags was originally used by the suspend operation to determine which field to record the bytecode offset of a suspended generator, and the value the generator was resumed with. For async generators, await operations would use a separate field, in order to preserve the previous yield input value. This was important to ensure `function.sent` continued to function correctly. As function.sent is being retired, this allows the removal of support for that. Given that this was the only real need for SuspendFlags in the first place (with other uses tacked on as a hack), this involves several other changes as well: - Modification of MacroAssembler AssertGeneratorObject. No longer accepts a SuspendFlags parameter to determine which type of check to perform. - Removal of `flags` operand from SuspendGenerator bytecode, and the GeneratorStore js-operator. - Removal of `flags` parameter from ResumeGeneratorTrampoline builtins. - Removal of Runtime functions, interpreter intrinsics and AccessBuilders associated with the [[await_input_or_debug_pos]] field in JSAsyncGeneratorObject, as this field no longer exists. - Addition of a new `Yield` AST node (subclass of Suspend) in order to prevent the need for the other SuspendFlag values. BUG=v8:5855 TBR=bmeurer@chromium.org Change-Id: Iff2881e4742497fe5b774915e988c3d9d8fbe487 Reviewed-on: https://chromium-review.googlesource.com/570485 Commit-Queue: Caitlin Potter <caitp@igalia.com> Reviewed-by: Ross McIlroy <rmcilroy@chromium.org> Reviewed-by: Georg Neis <neis@chromium.org> Cr-Commit-Position: refs/heads/master@{#46683}
2017-07-14 15:20:23 +00:00
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(9), U8(1),
B(Star), R(16),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(9), U8(1),
B(Star), R(17),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(17),
B(JumpIfTrue), U8(5),
B(Ldar), R(16),
B(ReThrow),
B(Mov), R(16), R(3),
B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(16), U8(1),
B(JumpIfToBooleanFalse), U8(4),
B(Jump), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(3), U8(1),
B(Jump), U8(2),
B(LdaNamedProperty), R(3), U8(36), U8(30),
B(JumpIfToBooleanFalse), U8(4),
B(Jump), U8(101),
B(LdaNamedProperty), R(3), U8(37), U8(32),
B(Star), R(16),
B(Mov), R(9), R(15),
B(CallJSRuntime), U8(%async_generator_await_uncaught), R(15), U8(2),
B(SuspendGenerator), R(9), R(0), U8(15), U8(8),
/* 60 S> */ B(Return),
B(RestoreGeneratorRegisters), R(9), R(0), U8(15),
B(LdaSmi), I8(-2),
B(Star), R(10),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(9), U8(1),
B(Star), R(15),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(9), U8(1),
B(Star), R(16),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(16),
B(JumpIfTrue), U8(5),
B(Ldar), R(15),
B(ReThrow),
B(Mov), R(15), R(3),
B(LdaFalse),
B(Star), R(17),
B(Mov), R(9), R(15),
B(Mov), R(3), R(16),
B(InvokeIntrinsic), U8(Runtime::k_AsyncGeneratorResolve), R(15), U8(3),
B(SuspendGenerator), R(9), R(0), U8(15), U8(9),
/* 60 S> */ B(Return),
B(RestoreGeneratorRegisters), R(9), R(0), U8(15),
B(LdaSmi), I8(-2),
B(Star), R(10),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(9), U8(1),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(0), U8(1),
B(Star), R(1),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(0), U8(1),
B(Star), R(2),
B(Wide), B(JumpLoop), U16(649), I16(0),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(2), U8(34),
B(JumpIfFalse), U8(57),
B(LdaNamedProperty), R(3), U8(37), U8(35),
B(Star), R(16),
B(Mov), R(9), R(15),
B(CallJSRuntime), U8(%async_generator_await_uncaught), R(15), U8(2),
B(SuspendGenerator), R(9), R(0), U8(15), U8(11),
/* 60 S> */ B(Return),
B(RestoreGeneratorRegisters), R(9), R(0), U8(15),
B(LdaSmi), I8(-2),
B(Star), R(10),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(9), U8(1),
B(Star), R(15),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(9), U8(1),
B(Star), R(16),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(16),
B(JumpIfTrue), U8(5),
B(Ldar), R(15),
B(ReThrow),
B(LdaZero),
B(Star), R(11),
B(Mov), R(15), R(12),
B(Jump), U8(111),
B(LdaNamedProperty), R(3), U8(37), U8(37),
B(Star), R(8),
B(LdaUndefined),
B(Star), R(16),
B(Mov), R(9), R(15),
B(CallJSRuntime), U8(%async_generator_await_uncaught), R(15), U8(2),
B(SuspendGenerator), R(9), R(0), U8(15), U8(12),
/* 60 S> */ B(Return),
B(RestoreGeneratorRegisters), R(9), R(0), U8(15),
B(LdaSmi), I8(-2),
B(Star), R(10),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(9), U8(1),
B(Star), R(15),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(9), U8(1),
B(Star), R(16),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(16),
B(JumpIfTrue), U8(5),
B(Ldar), R(15),
B(ReThrow),
B(LdaZero),
B(Star), R(11),
B(Mov), R(15), R(12),
B(Jump), U8(53),
B(Jump), U8(39),
B(Star), R(15),
B(Ldar), R(closure),
B(CreateCatchContext), R(15), U8(31), U8(38),
B(Star), R(14),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(14),
B(PushContext), R(15),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(17),
B(Mov), R(0), R(16),
B(InvokeIntrinsic), U8(Runtime::k_AsyncGeneratorReject), R(16), U8(2),
B(PopContext), R(15),
B(Star), R(12),
B(LdaSmi), I8(1),
B(Star), R(11),
B(Jump), U8(14),
B(LdaSmi), I8(-1),
B(Star), R(11),
B(Jump), U8(8),
B(Star), R(12),
B(LdaSmi), I8(2),
B(Star), R(11),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(13),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(0), U8(1),
B(Ldar), R(13),
B(SetPendingMessage),
B(Ldar), R(11),
B(SwitchOnSmiNoFeedback), U8(41), U8(3), I8(0),
B(Jump), U8(34),
B(LdaTrue),
B(Star), R(16),
B(Mov), R(0), R(14),
B(Mov), R(12), R(15),
B(InvokeIntrinsic), U8(Runtime::k_AsyncGeneratorResolve), R(14), U8(3),
B(Star), R(17),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(9), U8(1),
B(Ldar), R(17),
/* 60 S> */ B(Return),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(9), U8(1),
B(Ldar), R(12),
/* 60 S> */ B(Return),
B(Ldar), R(12),
B(ReThrow),
B(LdaUndefined),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(9), U8(1),
B(Ldar), R(11),
/* 60 S> */ B(Return),
]
constant pool: [
Smi [46],
Smi [87],
Smi [181],
Smi [181],
Smi [181],
Smi [181],
Smi [181],
Smi [181],
Smi [181],
Smi [181],
Smi [181],
Smi [861],
Smi [919],
Smi [59],
Smi [7],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["g"],
SYMBOL_TYPE,
SYMBOL_TYPE,
Smi [71],
Smi [142],
Smi [206],
Smi [334],
Smi [411],
Smi [499],
Smi [572],
Smi [622],
ODDBALL_TYPE,
ONE_BYTE_INTERNALIZED_STRING_TYPE ["next"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["throw"],
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
ONE_BYTE_INTERNALIZED_STRING_TYPE [".catch"],
FIXED_ARRAY_TYPE,
Smi [502],
Smi [430],
Smi [295],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["done"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["value"],
FIXED_ARRAY_TYPE,
Smi [885],
Smi [647],
Smi [6],
Smi [28],
Smi [35],
]
handlers: [
[52, 1011, 1017],
[55, 972, 974],
[509, 564, 566],
]