#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: no
test function name: f

---
snippet: "
  function f() {
    for (let x = 0; x < 10; ++x) { let y = x; }
  }
  f();
"
frame size: 2
parameter count: 1
bytecode array length: 26
bytecodes: [
  /*   10 E> */ B(StackCheck),
  /*   30 S> */ B(LdaZero),
                B(Star), R(1),
  /*   35 S> */ B(LdaSmi), I8(10),
  /*   35 E> */ B(TestLessThan), R(1), U8(0),
                B(JumpIfFalse), U8(15),
  /*   17 E> */ B(StackCheck),
  /*   56 S> */ B(Mov), R(1), R(0),
  /*   43 S> */ B(Ldar), R(0),
                B(Inc), U8(1),
                B(Star), R(1),
                B(JumpLoop), U8(17), I8(0),
                B(LdaUndefined),
  /*   61 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  function f() {
    for (let x = 0; x < 10; ++x) { eval('1'); }
  }
  f();
"
frame size: 15
parameter count: 1
bytecode array length: 168
bytecodes: [
                B(CreateFunctionContext), U8(3),
                B(PushContext), R(4),
                B(Ldar), R(this),
                B(StaCurrentContextSlot), U8(4),
                B(CreateMappedArguments),
                B(StaCurrentContextSlot), U8(6),
                B(Ldar), R(3),
                B(StaCurrentContextSlot), U8(5),
  /*   10 E> */ B(StackCheck),
                B(Ldar), R(closure),
                B(CreateBlockContext), U8(0),
                B(PushContext), R(5),
                B(LdaTheHole),
                B(StaCurrentContextSlot), U8(4),
  /*   30 S> */ B(LdaZero),
  /*   30 E> */ B(StaCurrentContextSlot), U8(4),
                B(LdaCurrentContextSlot), U8(4),
                B(Star), R(0),
                B(LdaSmi), I8(1),
                B(Star), R(1),
  /*   59 E> */ B(StackCheck),
                B(Ldar), R(closure),
                B(CreateBlockContext), U8(1),
                B(PushContext), R(6),
                B(LdaTheHole),
                B(StaCurrentContextSlot), U8(4),
                B(Ldar), R(0),
                B(StaCurrentContextSlot), U8(4),
                B(LdaSmi), I8(1),
                B(TestEqual), R(1), U8(0),
                B(JumpIfFalse), U8(7),
                B(LdaZero),
                B(Star), R(1),
                B(Jump), U8(8),
  /*   43 S> */ B(LdaCurrentContextSlot), U8(4),
                B(Inc), U8(1),
  /*   43 E> */ B(StaCurrentContextSlot), U8(4),
                B(LdaSmi), I8(1),
                B(Star), R(2),
  /*   35 S> */ B(LdaCurrentContextSlot), U8(4),
                B(Star), R(7),
                B(LdaSmi), I8(10),
  /*   35 E> */ B(TestLessThan), R(7), U8(2),
                B(JumpIfFalse), U8(4),
                B(Jump), U8(6),
                B(PopContext), R(6),
                B(Jump), U8(77),
                B(LdaSmi), I8(1),
                B(TestEqual), R(2), U8(3),
                B(JumpIfFalse), U8(54),
  /*   17 E> */ B(StackCheck),
  /*   48 S> */ B(LdaLookupGlobalSlot), U8(2), U8(6), U8(1),
                B(Star), R(7),
                B(LdaConstant), U8(3),
                B(Star), R(8),
                B(LdaZero),
                B(Star), R(12),
                B(LdaSmi), I8(31),
                B(Star), R(13),
                B(LdaSmi), I8(48),
                B(Star), R(14),
                B(Mov), R(7), R(9),
                B(Mov), R(8), R(10),
                B(Mov), R(closure), R(11),
                B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(9), U8(6),
                B(Star), R(7),
  /*   48 E> */ B(CallUndefinedReceiver1), R(7), R(8), U8(4),
                B(LdaZero),
                B(Star), R(2),
                B(LdaCurrentContextSlot), U8(4),
                B(Star), R(0),
                B(JumpLoop), U8(56), I8(1),
                B(LdaSmi), I8(1),
  /*   59 E> */ B(TestEqual), R(2), U8(8),
                B(JumpIfFalse), U8(6),
                B(PopContext), R(6),
                B(Jump), U8(7),
                B(PopContext), R(6),
                B(JumpLoop), U8(125), I8(0),
                B(PopContext), R(5),
                B(LdaUndefined),
  /*   61 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
  FIXED_ARRAY_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["eval"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["1"],
]
handlers: [
]

---
snippet: "
  function f() {
    for (let x = 0; x < 10; ++x) { (function() { return x; })(); }
  }
  f();
"
frame size: 6
parameter count: 1
bytecode array length: 108
bytecodes: [
  /*   10 E> */ B(StackCheck),
  /*   30 S> */ B(LdaZero),
                B(Star), R(0),
                B(Star), R(1),
                B(LdaSmi), I8(1),
                B(Star), R(2),
  /*   78 E> */ B(StackCheck),
                B(Ldar), R(closure),
                B(CreateBlockContext), U8(0),
                B(PushContext), R(4),
                B(LdaTheHole),
                B(StaCurrentContextSlot), U8(4),
                B(Ldar), R(1),
                B(StaCurrentContextSlot), U8(4),
                B(LdaSmi), I8(1),
                B(TestEqual), R(2), U8(0),
                B(JumpIfFalse), U8(7),
                B(LdaZero),
                B(Star), R(2),
                B(Jump), U8(8),
  /*   43 S> */ B(LdaCurrentContextSlot), U8(4),
                B(Inc), U8(1),
  /*   43 E> */ B(StaCurrentContextSlot), U8(4),
                B(LdaSmi), I8(1),
                B(Star), R(3),
  /*   35 S> */ B(LdaCurrentContextSlot), U8(4),
                B(Star), R(5),
                B(LdaSmi), I8(10),
  /*   35 E> */ B(TestLessThan), R(5), U8(2),
                B(JumpIfFalse), U8(4),
                B(Jump), U8(6),
                B(PopContext), R(4),
                B(Jump), U8(45),
                B(LdaSmi), I8(1),
                B(TestEqual), R(3), U8(3),
                B(JumpIfFalse), U8(22),
  /*   17 E> */ B(StackCheck),
  /*   48 S> */ B(CreateClosure), U8(1), U8(6), U8(2),
                B(Star), R(5),
  /*   74 E> */ B(CallUndefinedReceiver0), R(5), U8(4),
                B(LdaZero),
                B(Star), R(3),
                B(LdaCurrentContextSlot), U8(4),
                B(Star), R(1),
                B(JumpLoop), U8(24), I8(1),
                B(LdaSmi), I8(1),
  /*   78 E> */ B(TestEqual), R(3), U8(7),
                B(JumpIfFalse), U8(6),
                B(PopContext), R(4),
                B(Jump), U8(7),
                B(PopContext), R(4),
                B(JumpLoop), U8(93), I8(0),
                B(LdaUndefined),
  /*   80 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

---
snippet: "
  function f() {
    for (let { x, y } = { x: 0, y: 3 }; y > 0; --y) { let z = x + y; }
  }
  f();
"
frame size: 6
parameter count: 1
bytecode array length: 68
bytecodes: [
  /*   10 E> */ B(StackCheck),
                B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(4),
                B(Mov), R(4), R(3),
                B(Ldar), R(3),
                B(JumpIfUndefined), U8(6),
                B(Ldar), R(3),
                B(JumpIfNotNull), U8(16),
                B(LdaSmi), I8(65),
                B(Star), R(4),
                B(LdaConstant), U8(1),
                B(Star), R(5),
                B(CallRuntime), U16(Runtime::kNewTypeError), R(4), U8(2),
  /*   28 E> */ B(Throw),
  /*   37 S> */ B(LdaNamedProperty), R(3), U8(1), U8(3),
                B(Star), R(1),
  /*   37 S> */ B(LdaNamedProperty), R(3), U8(2), U8(5),
                B(Star), R(2),
  /*   55 S> */ B(LdaZero),
  /*   55 E> */ B(TestGreaterThan), R(2), U8(7),
                B(JumpIfFalse), U8(19),
  /*   17 E> */ B(StackCheck),
  /*   75 S> */ B(Ldar), R(2),
  /*   77 E> */ B(Add), R(1), U8(9),
                B(Star), R(0),
  /*   62 S> */ B(Ldar), R(2),
                B(Dec), U8(8),
                B(Star), R(2),
                B(JumpLoop), U8(20), I8(0),
                B(LdaUndefined),
  /*   84 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["x"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["y"],
]
handlers: [
]

---
snippet: "
  function* f() {
    for (let x = 0; x < 10; ++x) { let y = x; }
  }
  f();
"
frame size: 6
parameter count: 1
bytecode array length: 96
bytecodes: [
                B(Ldar), R(2),
                B(JumpIfUndefined), U8(18),
                B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(2), U8(1),
                B(PushContext), R(4),
                B(RestoreGeneratorState), R(2),
                B(Star), R(3),
                B(SwitchOnSmiNoFeedback), U8(0), U8(1), I8(0),
                B(Abort), U8(45),
                B(LdaSmi), I8(-2),
                B(Star), R(3),
                B(Mov), R(closure), R(4),
                B(Mov), R(this), R(5),
                B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(4), U8(2),
                B(Star), R(2),
  /*   11 E> */ B(StackCheck),
  /*   11 E> */ B(SuspendGenerator), R(2), R(0), U8(4), U8(0),
  /*   62 S> */ B(Return),
                B(RestoreGeneratorRegisters), R(2), R(0), U8(4),
                B(LdaSmi), I8(-2),
                B(Star), R(3),
                B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(2), U8(1),
                B(Star), R(4),
                B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1),
                B(SwitchOnSmiNoFeedback), U8(1), U8(2), I8(0),
                B(Ldar), R(4),
  /*   11 E> */ B(Throw),
                B(Ldar), R(4),
  /*   62 S> */ B(Return),
  /*   31 S> */ B(LdaZero),
                B(Star), R(1),
  /*   36 S> */ B(LdaSmi), I8(10),
  /*   36 E> */ B(TestLessThan), R(1), U8(0),
                B(JumpIfFalse), U8(15),
  /*   18 E> */ B(StackCheck),
  /*   57 S> */ B(Mov), R(1), R(0),
  /*   44 S> */ B(Ldar), R(0),
                B(Inc), U8(1),
                B(Star), R(1),
                B(JumpLoop), U8(17), I8(0),
                B(LdaUndefined),
  /*   62 S> */ B(Return),
]
constant pool: [
  Smi [29],
  Smi [10],
  Smi [7],
]
handlers: [
]

---
snippet: "
  function* f() {
    for (let x = 0; x < 10; ++x) yield x;
  }
  f();
"
frame size: 5
parameter count: 1
bytecode array length: 151
bytecodes: [
                B(Ldar), R(1),
                B(JumpIfUndefined), U8(18),
                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(2), I8(0),
                B(Abort), U8(45),
                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(1),
  /*   11 E> */ B(StackCheck),
  /*   11 E> */ B(SuspendGenerator), R(1), R(0), U8(3), U8(0),
  /*   56 S> */ B(Return),
                B(RestoreGeneratorRegisters), R(1), R(0), U8(3),
                B(LdaSmi), I8(-2),
                B(Star), R(2),
                B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(1), U8(1),
                B(Star), R(3),
                B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(1), U8(1),
                B(SwitchOnSmiNoFeedback), U8(2), U8(2), I8(0),
                B(Ldar), R(3),
  /*   11 E> */ B(Throw),
                B(Ldar), R(3),
  /*   56 S> */ B(Return),
  /*   31 S> */ B(LdaZero),
                B(Star), R(0),
                B(Ldar), R(2),
                B(SwitchOnSmiNoFeedback), U8(4), U8(1), I8(1),
                B(LdaSmi), I8(-2),
  /*   31 E> */ B(TestEqualStrictNoFeedback), R(2),
                B(JumpIfTrue), U8(4),
                B(Abort), U8(45),
  /*   36 S> */ B(LdaSmi), I8(10),
  /*   36 E> */ B(TestLessThan), R(0), U8(0),
                B(JumpIfFalse), U8(56),
  /*   18 E> */ B(StackCheck),
  /*   47 S> */ B(LdaFalse),
                B(Star), R(4),
                B(Mov), R(0), R(3),
                B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(3), U8(2),
                B(SuspendGenerator), R(1), R(0), U8(3), U8(1),
  /*   56 S> */ B(Return),
                B(RestoreGeneratorRegisters), R(1), R(0), U8(3),
                B(LdaSmi), I8(-2),
                B(Star), R(2),
                B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(1), U8(1),
                B(Star), R(3),
                B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(1), U8(1),
                B(SwitchOnSmiNoFeedback), U8(5), U8(2), I8(0),
                B(Ldar), R(3),
  /*   47 E> */ B(Throw),
                B(Ldar), R(3),
  /*   56 S> */ B(Return),
  /*   44 S> */ B(Ldar), R(0),
                B(Inc), U8(1),
                B(Star), R(0),
                B(JumpLoop), U8(72), I8(0),
                B(LdaUndefined),
  /*   56 S> */ B(Return),
]
constant pool: [
  Smi [29],
  Smi [60],
  Smi [10],
  Smi [7],
  Smi [36],
  Smi [10],
  Smi [7],
]
handlers: [
]

---
snippet: "
  async function f() {
    for (let x = 0; x < 10; ++x) { let y = x; }
  }
  f();
"
frame size: 12
parameter count: 1
bytecode array length: 137
bytecodes: [
  /*   16 E> */ B(StackCheck),
                B(CallJSRuntime), U8(%async_function_promise_create), R(0), U8(0),
                B(Star), R(3),
                B(Mov), R(context), R(6),
                B(Mov), R(context), R(7),
  /*   36 S> */ B(LdaZero),
                B(Star), R(1),
  /*   41 S> */ B(LdaSmi), I8(10),
  /*   41 E> */ B(TestLessThan), R(1), U8(0),
                B(JumpIfFalse), U8(15),
  /*   23 E> */ B(StackCheck),
  /*   62 S> */ B(Mov), R(1), R(0),
  /*   49 S> */ B(Ldar), R(0),
                B(Inc), U8(1),
                B(Star), R(1),
                B(JumpLoop), U8(17), I8(0),
                B(LdaUndefined),
                B(Star), R(9),
                B(Mov), R(3), R(8),
  /*   49 E> */ B(CallJSRuntime), U8(%promise_resolve), R(8), U8(2),
                B(LdaZero),
                B(Star), R(4),
                B(Mov), R(3), R(5),
                B(Jump), U8(58),
                B(Jump), U8(42),
                B(Star), R(8),
                B(Ldar), R(closure),
                B(CreateCatchContext), R(8), U8(0), U8(1),
                B(Star), R(7),
                B(LdaTheHole),
                B(SetPendingMessage),
                B(Ldar), R(7),
                B(PushContext), R(8),
                B(LdaImmutableCurrentContextSlot), U8(4),
                B(Star), R(10),
                B(LdaFalse),
                B(Star), R(11),
                B(Mov), R(3), R(9),
                B(CallJSRuntime), U8(%promise_internal_reject), R(9), U8(3),
                B(PopContext), R(8),
                B(LdaZero),
                B(Star), R(4),
                B(Mov), R(3), R(5),
                B(Jump), U8(16),
                B(LdaSmi), I8(-1),
                B(Star), R(5),
                B(Star), R(4),
                B(Jump), U8(8),
                B(Star), R(5),
                B(LdaSmi), I8(1),
                B(Star), R(4),
                B(LdaTheHole),
                B(SetPendingMessage),
                B(Star), R(6),
                B(CallJSRuntime), U8(%async_function_promise_release), R(3), U8(1),
                B(Ldar), R(6),
                B(SetPendingMessage),
                B(Ldar), R(4),
                B(SwitchOnSmiNoFeedback), U8(2), U8(2), I8(0),
                B(Jump), U8(8),
                B(Ldar), R(5),
  /*   67 S> */ B(Return),
                B(Ldar), R(5),
                B(ReThrow),
                B(LdaUndefined),
  /*   67 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE [".catch"],
  FIXED_ARRAY_TYPE,
  Smi [6],
  Smi [9],
]
handlers: [
  [10, 96, 104],
  [13, 54, 56],
]

---
snippet: "
  async function f() {
    for (let x = 0; x < 10; ++x) await x;
  }
  f();
"
frame size: 12
parameter count: 1
bytecode array length: 231
bytecodes: [
                B(Ldar), R(1),
                B(JumpIfUndefined), U8(18),
                B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(1), U8(1),
                B(PushContext), R(4),
                B(RestoreGeneratorState), R(1),
                B(Star), R(3),
                B(SwitchOnSmiNoFeedback), U8(0), U8(1), I8(0),
                B(Abort), U8(45),
                B(LdaSmi), I8(-2),
                B(Star), R(3),
                B(Mov), R(closure), R(4),
                B(Mov), R(this), R(5),
                B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(4), U8(2),
                B(Star), R(1),
  /*   16 E> */ B(StackCheck),
                B(CallJSRuntime), U8(%async_function_promise_create), R(0), U8(0),
                B(Star), R(2),
                B(Mov), R(context), R(6),
                B(Mov), R(context), R(7),
  /*   36 S> */ B(LdaZero),
                B(Star), R(0),
                B(Ldar), R(3),
                B(SwitchOnSmiNoFeedback), U8(1), U8(1), I8(0),
                B(LdaSmi), I8(-2),
  /*   36 E> */ B(TestEqualStrictNoFeedback), R(3),
                B(JumpIfTrue), U8(4),
                B(Abort), U8(45),
  /*   41 S> */ B(LdaSmi), I8(10),
  /*   41 E> */ B(TestLessThan), R(0), U8(0),
                B(JumpIfFalse), U8(59),
  /*   23 E> */ B(StackCheck),
  /*   52 S> */ B(Mov), R(1), R(8),
                B(Mov), R(0), R(9),
                B(Mov), R(2), R(10),
                B(CallJSRuntime), U8(%async_function_await_uncaught), R(8), U8(3),
                B(SuspendGenerator), R(1), R(0), U8(8), U8(0),
  /*   61 S> */ B(Return),
                B(RestoreGeneratorRegisters), R(1), R(0), U8(8),
                B(LdaSmi), I8(-2),
                B(Star), R(3),
                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),
  /*   49 S> */ B(Ldar), R(0),
                B(Inc), U8(1),
                B(Star), R(0),
                B(JumpLoop), U8(75), I8(0),
                B(LdaUndefined),
                B(Star), R(9),
                B(Mov), R(2), R(8),
  /*   49 E> */ B(CallJSRuntime), U8(%promise_resolve), R(8), U8(2),
                B(LdaZero),
                B(Star), R(4),
                B(Mov), R(2), R(5),
                B(Jump), U8(58),
                B(Jump), U8(42),
                B(Star), R(8),
                B(Ldar), R(closure),
                B(CreateCatchContext), R(8), U8(2), U8(3),
                B(Star), R(7),
                B(LdaTheHole),
                B(SetPendingMessage),
                B(Ldar), R(7),
                B(PushContext), R(8),
                B(LdaImmutableCurrentContextSlot), U8(4),
                B(Star), R(10),
                B(LdaFalse),
                B(Star), R(11),
                B(Mov), R(2), R(9),
                B(CallJSRuntime), U8(%promise_internal_reject), R(9), U8(3),
                B(PopContext), R(8),
                B(LdaZero),
                B(Star), R(4),
                B(Mov), R(2), R(5),
                B(Jump), U8(16),
                B(LdaSmi), I8(-1),
                B(Star), R(5),
                B(Star), R(4),
                B(Jump), U8(8),
                B(Star), R(5),
                B(LdaSmi), I8(1),
                B(Star), R(4),
                B(LdaTheHole),
                B(SetPendingMessage),
                B(Star), R(6),
                B(CallJSRuntime), U8(%async_function_promise_release), R(2), U8(1),
                B(Ldar), R(6),
                B(SetPendingMessage),
                B(Ldar), R(4),
                B(SwitchOnSmiNoFeedback), U8(4), U8(2), I8(0),
                B(Jump), U8(8),
                B(Ldar), R(5),
  /*   61 S> */ B(Return),
                B(Ldar), R(5),
                B(ReThrow),
                B(LdaUndefined),
  /*   61 S> */ B(Return),
]
constant pool: [
  Smi [38],
  Smi [39],
  ONE_BYTE_INTERNALIZED_STRING_TYPE [".catch"],
  FIXED_ARRAY_TYPE,
  Smi [6],
  Smi [9],
]
handlers: [
  [46, 190, 198],
  [49, 148, 150],
]

