#
# 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: 29
bytecodes: [
  /*   30 E> */ B(StackCheck),
                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(1),
  /*   53 S> */ B(LdaSmi), I8(10),
  /*   53 E> */ B(StaCurrentContextSlot), U8(4),
  /*   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: 53
bytecodes: [
                B(CreateFunctionContext), U8(0), 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(CreateBlockContext), U8(1),
                B(PushContext), R(3),
                B(LdaTheHole),
                B(StaCurrentContextSlot), U8(4),
                B(CreateClosure), U8(2), U8(0), U8(2),
                B(Star), R(1),
  /*   76 S> */ B(LdaSmi), I8(2),
  /*   76 E> */ B(StaCurrentContextSlot), U8(4),
  /*  113 S> */ B(Mov), R(1), R(0),
  /*  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: [
  SCOPE_INFO_TYPE,
  SCOPE_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

