#
# Autogenerated by generate-bytecode-expectations.
#

---
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: 14
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaZero),
                B(Star), R(0),
  /*   62 S> */ B(AddSmi), I8(1), U8(0),
                B(Star), R(0),
  /*   69 S> */ B(Jump), U8(2),
  /*   97 S> */ B(Ldar), R(0),
  /*  106 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), I8(10),
  /*   76 E> */ B(TestLessThan), R(1), U8(0),
                B(JumpIfFalse), U8(54),
  /*   58 E> */ B(StackCheck),
  /*  106 S> */ B(LdaZero),
                B(Star), R(2),
  /*  111 S> */ B(LdaSmi), I8(3),
  /*  111 E> */ B(TestLessThan), R(2), U8(1),
                B(JumpIfFalse), U8(34),
  /*   93 E> */ B(StackCheck),
  /*  129 S> */ B(Ldar), R(0),
                B(Inc), U8(2),
                B(Star), R(0),
  /*  142 S> */ B(Ldar), R(2),
  /*  148 E> */ B(Add), R(1), U8(3),
                B(Star), R(3),
                B(LdaSmi), I8(12),
  /*  152 E> */ B(TestEqual), R(3), U8(4),
                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), I8(1),
  /*   84 S> */ B(Ldar), R(1),
                B(Inc), U8(6),
                B(Star), R(1),
                B(JumpLoop), U8(56), I8(0),
  /*  188 S> */ B(Ldar), R(0),
  /*  199 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: 31
bytecodes: [
  /*   30 E> */ B(StackCheck),
                B(Ldar), R(closure),
                B(CreateBlockContext), U8(0),
                B(PushContext), R(2),
                B(LdaTheHole),
                B(StaCurrentContextSlot), U8(4),
                B(CreateClosure), U8(1), U8(0), U8(2),
                B(Star), R(0),
  /*   53 S> */ B(LdaSmi), I8(10),
  /*   53 E> */ B(StaCurrentContextSlot), U8(4),
                B(Mov), R(0), R(1),
                B(Ldar), R(1),
  /*   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: 4
parameter count: 1
bytecode array length: 54
bytecodes: [
                B(CreateFunctionContext), U8(1),
                B(PushContext), R(2),
                B(LdaTheHole),
                B(StaCurrentContextSlot), U8(4),
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), I8(1),
  /*   42 E> */ B(StaCurrentContextSlot), U8(4),
                B(Ldar), R(closure),
                B(CreateBlockContext), U8(0),
                B(PushContext), R(3),
                B(LdaTheHole),
                B(StaCurrentContextSlot), U8(4),
                B(CreateClosure), U8(1), U8(0), U8(2),
                B(Star), R(0),
  /*   76 S> */ B(LdaSmi), I8(2),
  /*   76 E> */ B(StaCurrentContextSlot), U8(4),
                B(Mov), R(0), R(1),
  /*  118 S> */ B(LdaCurrentContextSlot), U8(4),
                B(JumpIfToBooleanFalse), U8(6),
  /*  125 S> */ B(PopContext), R(3),
                B(Jump), U8(8),
  /*  142 S> */ B(LdaSmi), I8(3),
  /*  144 E> */ B(StaCurrentContextSlot), U8(4),
                B(PopContext), R(3),
  /*  155 S> */ B(LdaSmi), I8(4),
  /*  157 E> */ B(StaCurrentContextSlot), U8(4),
                B(LdaUndefined),
  /*  162 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

