#
# 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: 13
bytecodes: [
  /*   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: 66
bytecodes: [
  /*   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(52),
  /*  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(33),
  /*  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),
  /*   93 E> */ B(JumpLoop), U8(35), I8(1),
  /*   84 S> */ B(Ldar), R(1),
                B(Inc), U8(6),
                B(Star), R(1),
  /*   58 E> */ B(JumpLoop), U8(54), 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: 28
bytecodes: [
  /*   30 E> */ B(CreateBlockContext), U8(0),
                B(PushContext), R(2),
                B(LdaTheHole),
                B(StaCurrentContextSlot), U8(2),
                B(CreateClosure), U8(1), U8(0), U8(2),
                B(Star), R(1),
  /*   53 S> */ B(LdaSmi), I8(10),
  /*   53 E> */ B(StaCurrentContextSlot), U8(2),
  /*   85 S> */ B(Mov), R(1), R(0),
                B(Ldar), R(1),
  /*   88 S> */ B(Jump), U8(2),
                B(PopContext), R(2),
                B(LdaUndefined),
  /*  103 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_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: 52
bytecodes: [
  /*   30 E> */ B(CreateFunctionContext), U8(0), U8(1),
                B(PushContext), R(2),
                B(LdaTheHole),
                B(StaCurrentContextSlot), U8(2),
  /*   42 S> */ B(LdaSmi), I8(1),
  /*   42 E> */ B(StaCurrentContextSlot), U8(2),
                B(CreateBlockContext), U8(1),
                B(PushContext), R(3),
                B(LdaTheHole),
                B(StaCurrentContextSlot), U8(2),
                B(CreateClosure), U8(2), U8(0), U8(2),
                B(Star), R(1),
  /*   76 S> */ B(LdaSmi), I8(2),
  /*   76 E> */ B(StaCurrentContextSlot), U8(2),
  /*  113 S> */ B(Mov), R(1), R(0),
  /*  118 S> */ B(LdaCurrentContextSlot), U8(2),
                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(2),
                B(PopContext), R(3),
  /*  155 S> */ B(LdaSmi), I8(4),
  /*  157 E> */ B(StaCurrentContextSlot), U8(2),
                B(LdaUndefined),
  /*  162 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_TYPE,
  SCOPE_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

