#
# Autogenerated by generate-bytecode-expectations.
#

---
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(AddSmi), U8(1), R(0), U8(2),
                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: 4
parameter count: 1
bytecode array length: 69
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), U8(2),
                B(JumpIfFalse), U8(54),
  /*   58 E> */ B(StackCheck),
  /*  106 S> */ B(LdaZero),
                B(Star), R(2),
  /*  111 S> */ B(LdaSmi), U8(3),
  /*  111 E> */ B(TestLessThan), R(2), U8(4),
                B(JumpIfFalse), U8(34),
  /*   93 E> */ B(StackCheck),
  /*  129 S> */ B(Ldar), R(0),
                B(Inc), U8(6),
                B(Star), R(0),
  /*  142 S> */ B(Ldar), R(2),
  /*  150 E> */ B(Add), R(1), U8(7),
                B(Star), R(3),
                B(LdaSmi), U8(12),
  /*  152 E> */ B(TestEqual), R(3), U8(8),
                B(JumpIfFalse), U8(4),
  /*  161 S> */ B(Jump), U8(20),
  /*  118 S> */ B(Ldar), R(2),
                B(Inc), U8(5),
                B(Star), R(2),
                B(JumpLoop), U8(-36), U8(1),
  /*   84 S> */ B(Ldar), R(1),
                B(Inc), U8(3),
                B(Star), R(1),
                B(JumpLoop), U8(-56), U8(0),
  /*  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: 3
parameter count: 1
bytecode array length: 34
bytecodes: [
  /*   30 E> */ B(StackCheck),
                B(Ldar), R(closure),
                B(CreateBlockContext), U8(0),
                B(PushContext), R(2),
                B(LdaTheHole),
                B(StaContextSlot), R(context), U8(4), U8(0),
                B(CreateClosure), U8(1), U8(2),
                B(Star), R(0),
  /*   53 S> */ B(LdaSmi), U8(10),
  /*   53 E> */ B(StaContextSlot), R(context), U8(4), U8(0),
                B(Mov), R(0), R(1),
                B(Ldar), R(0),
  /*   88 S> */ B(Jump), U8(2),
                B(PopContext), R(2),
                B(LdaUndefined),
  /*  103 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_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: 116
bytecodes: [
                B(CreateFunctionContext), U8(1),
                B(PushContext), R(2),
                B(LdaTheHole),
                B(StaContextSlot), R(context), U8(4), U8(0),
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), U8(1),
  /*   42 E> */ B(StaContextSlot), R(context), U8(4), U8(0),
                B(Ldar), R(closure),
                B(CreateBlockContext), U8(0),
                B(PushContext), R(3),
                B(LdaTheHole),
                B(StaContextSlot), R(context), U8(4), U8(0),
                B(CreateClosure), U8(1), U8(2),
                B(Star), R(0),
  /*   76 S> */ B(LdaSmi), U8(2),
  /*   76 E> */ B(StaContextSlot), R(context), U8(4), U8(0),
                B(Mov), R(0), R(1),
  /*  118 S> */ B(LdaContextSlot), R(context), U8(4), U8(0),
                B(JumpIfNotHole), U8(11),
                B(LdaConstant), U8(2),
                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(29),
  /*  142 S> */ B(LdaSmi), U8(3),
                B(Star), R(4),
  /*  144 E> */ B(LdaContextSlot), R(context), U8(4), U8(0),
                B(JumpIfNotHole), U8(11),
                B(LdaConstant), U8(2),
                B(Star), R(5),
                B(CallRuntime), U16(Runtime::kThrowReferenceError), R(5), U8(1),
                B(Ldar), R(4),
                B(StaContextSlot), R(context), U8(4), U8(0),
                B(PopContext), R(3),
  /*  155 S> */ B(LdaSmi), U8(4),
                B(Star), R(4),
  /*  157 E> */ B(LdaContextSlot), R(context), U8(4), U8(0),
                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), U8(0),
                B(LdaUndefined),
  /*  162 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["y"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["x"],
]
handlers: [
]

