#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: yes

---
snippet: "
  var a = 1;
  try { a = 2; } finally { a = 3; }
"
frame size: 4
parameter count: 1
bytecode array length: 46
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), I8(1),
                B(Star), R(0),
                B(Mov), R(context), R(3),
  /*   51 S> */ B(LdaSmi), I8(2),
                B(Star), R(0),
                B(LdaSmi), I8(-1),
                B(Star), R(1),
                B(Jump), U8(7),
                B(Star), R(2),
                B(LdaZero),
                B(Star), R(1),
                B(LdaTheHole),
  /*   53 E> */ B(SetPendingMessage),
                B(Star), R(3),
  /*   70 S> */ B(LdaSmi), I8(3),
                B(Star), R(0),
                B(Ldar), R(3),
  /*   72 E> */ B(SetPendingMessage),
                B(LdaZero),
                B(TestEqualStrictNoFeedback), R(1),
                B(JumpIfTrue), U8(4),
                B(Jump), U8(5),
                B(Ldar), R(2),
                B(ReThrow),
                B(LdaUndefined),
  /*   79 S> */ B(Return),
]
constant pool: [
]
handlers: [
  [8, 12, 18],
]

---
snippet: "
  var a = 1;
  try { a = 2; } catch(e) { a = 20 } finally { a = 3; }
"
frame size: 7
parameter count: 1
bytecode array length: 73
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), I8(1),
                B(Star), R(0),
                B(Mov), R(context), R(4),
                B(Mov), R(context), R(5),
  /*   51 S> */ B(LdaSmi), I8(2),
                B(Star), R(0),
                B(Jump), U8(24),
                B(Star), R(6),
                B(Ldar), R(closure),
  /*   53 E> */ B(CreateCatchContext), R(6), U8(0), U8(1),
                B(Star), R(5),
                B(LdaTheHole),
                B(SetPendingMessage),
                B(Ldar), R(5),
                B(PushContext), R(1),
  /*   71 S> */ B(LdaSmi), I8(20),
                B(Star), R(0),
                B(PopContext), R(1),
                B(LdaSmi), I8(-1),
                B(Star), R(2),
                B(Jump), U8(7),
                B(Star), R(3),
                B(LdaZero),
                B(Star), R(2),
                B(LdaTheHole),
  /*   73 E> */ B(SetPendingMessage),
                B(Star), R(4),
  /*   90 S> */ B(LdaSmi), I8(3),
                B(Star), R(0),
                B(Ldar), R(4),
  /*   92 E> */ B(SetPendingMessage),
                B(LdaZero),
                B(TestEqualStrictNoFeedback), R(2),
                B(JumpIfTrue), U8(4),
                B(Jump), U8(5),
                B(Ldar), R(3),
                B(ReThrow),
                B(LdaUndefined),
  /*   99 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["e"],
  FIXED_ARRAY_TYPE,
]
handlers: [
  [8, 39, 45],
  [11, 15, 17],
]

---
snippet: "
  var a; try {
    try { a = 1 } catch(e) { a = 2 }
  } catch(e) { a = 20 } finally { a = 3; }
"
frame size: 8
parameter count: 1
bytecode array length: 96
bytecodes: [
  /*   30 E> */ B(StackCheck),
                B(Mov), R(context), R(4),
                B(Mov), R(context), R(5),
                B(Mov), R(context), R(6),
  /*   55 S> */ B(LdaSmi), I8(1),
                B(Star), R(0),
                B(Jump), U8(24),
                B(Star), R(7),
                B(Ldar), R(closure),
  /*   57 E> */ B(CreateCatchContext), R(7), U8(0), U8(1),
                B(Star), R(6),
                B(LdaTheHole),
                B(SetPendingMessage),
                B(Ldar), R(6),
                B(PushContext), R(1),
  /*   74 S> */ B(LdaSmi), I8(2),
                B(Star), R(0),
                B(PopContext), R(1),
                B(Jump), U8(24),
                B(Star), R(6),
                B(Ldar), R(closure),
  /*   76 E> */ B(CreateCatchContext), R(6), U8(0), U8(2),
                B(Star), R(5),
                B(LdaTheHole),
                B(SetPendingMessage),
                B(Ldar), R(5),
                B(PushContext), R(1),
  /*   95 S> */ B(LdaSmi), I8(20),
                B(Star), R(0),
                B(PopContext), R(1),
                B(LdaSmi), I8(-1),
                B(Star), R(2),
                B(Jump), U8(7),
                B(Star), R(3),
                B(LdaZero),
                B(Star), R(2),
                B(LdaTheHole),
  /*   97 E> */ B(SetPendingMessage),
                B(Star), R(4),
  /*  114 S> */ B(LdaSmi), I8(3),
                B(Star), R(0),
                B(Ldar), R(4),
  /*  116 E> */ B(SetPendingMessage),
                B(LdaZero),
                B(TestEqualStrictNoFeedback), R(2),
                B(JumpIfTrue), U8(4),
                B(Jump), U8(5),
                B(Ldar), R(3),
                B(ReThrow),
                B(LdaUndefined),
  /*  123 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["e"],
  FIXED_ARRAY_TYPE,
  FIXED_ARRAY_TYPE,
]
handlers: [
  [4, 62, 68],
  [7, 38, 40],
  [10, 14, 16],
]

