#
# 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(2),
                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(TestReferenceEqual), R(1),
                B(JumpIfFalse), U8(5),
                B(Ldar), R(2),
                B(ReThrow),
                B(LdaUndefined),
  /*   79 S> */ B(Return),
]
constant pool: [
]
handlers: [
  [8, 12, 20],
]

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

---
snippet: "
  var a; try {
    try { a = 1 } catch(e) { a = 2 }
  } catch(e) { a = 20 } finally { a = 3; }
"
frame size: 7
parameter count: 1
bytecode array length: 90
bytecodes: [
  /*   30 E> */ B(StackCheck),
                B(Mov), R(context), R(3),
                B(Mov), R(context), R(4),
                B(Mov), R(context), R(5),
  /*   55 S> */ B(LdaSmi), I8(1),
                B(Star), R(0),
                B(Jump), U8(21),
                B(Star), R(6),
  /*   57 E> */ B(CreateCatchContext), R(6), U8(0),
                B(Star), R(5),
                B(LdaTheHole),
                B(SetPendingMessage),
                B(Ldar), R(5),
                B(PushContext), R(6),
  /*   74 S> */ B(LdaSmi), I8(2),
                B(Star), R(0),
                B(PopContext), R(6),
                B(Jump), U8(21),
                B(Star), R(5),
  /*   76 E> */ B(CreateCatchContext), R(5), U8(1),
                B(Star), R(4),
                B(LdaTheHole),
                B(SetPendingMessage),
                B(Ldar), R(4),
                B(PushContext), R(5),
  /*   95 S> */ B(LdaSmi), I8(20),
                B(Star), R(0),
                B(PopContext), R(5),
                B(LdaSmi), I8(-1),
                B(Star), R(2),
                B(Star), R(1),
                B(Jump), U8(7),
                B(Star), R(2),
                B(LdaZero),
                B(Star), R(1),
                B(LdaTheHole),
  /*   97 E> */ B(SetPendingMessage),
                B(Star), R(3),
  /*  114 S> */ B(LdaSmi), I8(3),
                B(Star), R(0),
                B(Ldar), R(3),
  /*  116 E> */ B(SetPendingMessage),
                B(LdaZero),
                B(TestReferenceEqual), R(1),
                B(JumpIfFalse), U8(5),
                B(Ldar), R(2),
                B(ReThrow),
                B(LdaUndefined),
  /*  123 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_TYPE,
  SCOPE_INFO_TYPE,
]
handlers: [
  [4, 56, 64],
  [7, 35, 37],
  [10, 14, 16],
]

