#
# Autogenerated by generate-bytecode-expectations.
#

---
pool type: mixed
execute: yes
wrap: yes

---
snippet: "
  var x = 0;
  label: {
    x = x + 1;
    break label;
    x = x + 1;
  }
  return x;
"
frame size: 1
parameter count: 1
bytecode array length: 15
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaZero),
                B(Star), R(0),
  /*   56 S> */ B(LdaSmi), U8(1),
                B(Add), R(0),
                B(Star), R(0),
  /*   69 S> */ B(Jump), U8(2),
  /*   97 S> */ B(Ldar), R(0),
  /*  107 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  var sum = 0;
  outer: {
    for (var x = 0; x < 10; ++x) {
      for (var y = 0; y < 3; ++y) {
        ++sum;
        if (x + y == 12) { break outer; }
      }
    }
  }
  return sum;
"
frame size: 5
parameter count: 1
bytecode array length: 60
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   44 S> */ B(LdaZero),
                B(Star), R(0),
  /*   71 S> */ B(LdaZero),
                B(Star), R(1),
  /*   76 S> */ B(LdaSmi), U8(10),
  /*   76 E> */ B(TestLessThan), R(1),
                B(JumpIfFalse), U8(46),
  /*   58 E> */ B(StackCheck),
  /*  106 S> */ B(LdaZero),
                B(Star), R(2),
  /*  111 S> */ B(LdaSmi), U8(3),
  /*  111 E> */ B(TestLessThan), R(2),
                B(JumpIfFalse), U8(29),
  /*   93 E> */ B(StackCheck),
  /*  129 S> */ B(Ldar), R(0),
                B(Inc),
                B(Star), R(0),
  /*  142 S> */ B(Ldar), R(2),
  /*  150 E> */ B(Add), R(1),
                B(Star), R(4),
                B(LdaSmi), U8(12),
  /*  152 E> */ B(TestEqual), R(4),
                B(JumpIfFalse), U8(4),
  /*  161 S> */ B(Jump), U8(16),
  /*  118 S> */ B(Ldar), R(2),
                B(Inc),
                B(Star), R(2),
                B(Jump), U8(-31),
  /*   84 S> */ B(Ldar), R(1),
                B(Inc),
                B(Star), R(1),
                B(Jump), U8(-48),
  /*  188 S> */ B(Ldar), R(0),
  /*  200 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  outer: {
    let y = 10;
    function f() { return y; }
    break outer;
  }
"
frame size: 5
parameter count: 1
bytecode array length: 50
bytecodes: [
  /*   30 E> */ B(StackCheck),
                B(LdaConstant), U8(0),
                B(Star), R(3),
                B(Mov), R(closure), R(4),
                B(CallRuntime), U16(Runtime::kPushBlockContext), R(3), U8(2),
                B(PushContext), R(2),
                B(LdaTheHole),
                B(StaContextSlot), R(context), U8(4),
                B(CreateClosure), U8(1), U8(0),
                B(Star), R(0),
  /*   53 S> */ B(LdaSmi), U8(10),
  /*   53 E> */ B(StaContextSlot), R(context), U8(4),
                B(Ldar), R(0),
                B(JumpIfNotHole), U8(11),
                B(LdaConstant), U8(2),
                B(Star), R(3),
                B(CallRuntime), U16(Runtime::kThrowReferenceError), R(3), U8(1),
                B(Star), R(1),
  /*   88 S> */ B(Jump), U8(2),
                B(PopContext), R(2),
                B(LdaUndefined),
  /*  103 S> */ B(Return),
]
constant pool: [
  InstanceType::FIXED_ARRAY_TYPE,
  InstanceType::SHARED_FUNCTION_INFO_TYPE,
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
]
handlers: [
]

---
snippet: "
  let x = 1;
  outer: {
    inner: {
     let y = 2;
      function f() { return x + y; }
      if (y) break outer;
      y = 3;
    }
  }
  x = 4;
"
frame size: 6
parameter count: 1
bytecode array length: 130
bytecodes: [
                B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), U8(1),
                B(PushContext), R(2),
                B(LdaTheHole),
                B(StaContextSlot), R(context), U8(4),
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), U8(1),
  /*   42 E> */ B(StaContextSlot), R(context), U8(4),
                B(LdaConstant), U8(0),
                B(Star), R(4),
                B(Mov), R(closure), R(5),
                B(CallRuntime), U16(Runtime::kPushBlockContext), R(4), U8(2),
                B(PushContext), R(3),
                B(LdaTheHole),
                B(StaContextSlot), R(context), U8(4),
                B(CreateClosure), U8(1), U8(0),
                B(Star), R(0),
  /*   76 S> */ B(LdaSmi), U8(2),
  /*   76 E> */ B(StaContextSlot), R(context), U8(4),
                B(Ldar), R(0),
                B(JumpIfNotHole), U8(11),
                B(LdaConstant), U8(2),
                B(Star), R(4),
                B(CallRuntime), U16(Runtime::kThrowReferenceError), R(4), U8(1),
                B(Star), R(1),
  /*  118 S> */ B(LdaContextSlot), R(context), U8(4),
                B(JumpIfNotHole), U8(11),
                B(LdaConstant), U8(3),
                B(Star), R(4),
                B(CallRuntime), U16(Runtime::kThrowReferenceError), R(4), U8(1),
                B(JumpIfToBooleanFalse), U8(6),
  /*  125 S> */ B(PopContext), R(3),
                B(Jump), U8(27),
  /*  142 S> */ B(LdaSmi), U8(3),
                B(Star), R(4),
  /*  144 E> */ B(LdaContextSlot), R(context), U8(4),
                B(JumpIfNotHole), U8(11),
                B(LdaConstant), U8(3),
                B(Star), R(5),
                B(CallRuntime), U16(Runtime::kThrowReferenceError), R(5), U8(1),
                B(Ldar), R(4),
                B(StaContextSlot), R(context), U8(4),
                B(PopContext), R(3),
  /*  155 S> */ B(LdaSmi), U8(4),
                B(Star), R(4),
  /*  157 E> */ B(LdaContextSlot), R(context), U8(4),
                B(JumpIfNotHole), U8(11),
                B(LdaConstant), U8(4),
                B(Star), R(5),
                B(CallRuntime), U16(Runtime::kThrowReferenceError), R(5), U8(1),
                B(Ldar), R(4),
                B(StaContextSlot), R(context), U8(4),
                B(LdaUndefined),
  /*  162 S> */ B(Return),
]
constant pool: [
  InstanceType::FIXED_ARRAY_TYPE,
  InstanceType::SHARED_FUNCTION_INFO_TYPE,
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
]
handlers: [
]

