#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: yes

---
snippet: "
  var x = 0, y = 1;
  return (x = 2, y = 3, x = 4, y = 5);
"
frame size: 2
parameter count: 1
bytecode array length: 25
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaZero),
                B(Star), R(0),
  /*   49 S> */ B(LdaSmi), I8(1),
                B(Star), R(1),
  /*   52 S> */ B(LdaSmi), I8(2),
                B(Star), R(0),
                B(LdaSmi), I8(3),
                B(Star), R(1),
                B(LdaSmi), I8(4),
                B(Star), R(0),
                B(LdaSmi), I8(5),
                B(Star), R(1),
  /*   88 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  var x = 55;
  var y = (x = 100);
  return y;
"
frame size: 2
parameter count: 1
bytecode array length: 12
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), I8(55),
                B(Star), R(0),
  /*   54 S> */ B(LdaSmi), I8(100),
                B(Star), R(0),
                B(Star), R(1),
  /*   74 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  var x = 55;
  x = x + (x = 100) + (x = 101);
  return x;
"
frame size: 2
parameter count: 1
bytecode array length: 27
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), I8(55),
                B(Star), R(0),
  /*   46 S> */ B(LdaSmi), I8(100),
                B(Mov), R(0), R(1),
                B(Star), R(0),
  /*   52 E> */ B(Add), R(1), U8(0),
                B(Star), R(1),
                B(LdaSmi), I8(101),
                B(Star), R(0),
  /*   64 E> */ B(Add), R(1), U8(1),
                B(Star), R(0),
  /*   86 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  var x = 55;
  x = (x = 56) - x + (x = 57);
  x++;
  return x;
"
frame size: 2
parameter count: 1
bytecode array length: 28
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), I8(55),
                B(Star), R(0),
  /*   46 S> */ B(LdaSmi), I8(56),
                B(Star), R(0),
  /*   59 E> */ B(Sub), R(0), U8(1),
                B(Star), R(1),
                B(LdaSmi), I8(57),
                B(Star), R(0),
  /*   63 E> */ B(Add), R(1), U8(0),
                B(Star), R(0),
  /*   75 S> */ B(Inc), U8(2),
                B(Star), R(0),
  /*   89 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  var x = 55;
  var y = x + (x = 1) + (x = 2) + (x = 3);
  return y;
"
frame size: 3
parameter count: 1
bytecode array length: 36
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), I8(55),
                B(Star), R(0),
  /*   54 S> */ B(LdaSmi), I8(1),
                B(Mov), R(0), R(2),
                B(Star), R(0),
  /*   56 E> */ B(Add), R(2), U8(0),
                B(Star), R(2),
                B(LdaSmi), I8(2),
                B(Star), R(0),
  /*   66 E> */ B(Add), R(2), U8(1),
                B(Star), R(2),
                B(LdaSmi), I8(3),
                B(Star), R(0),
  /*   76 E> */ B(Add), R(2), U8(2),
                B(Star), R(1),
  /*   96 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  var x = 55;
  var x = x + (x = 1) + (x = 2) + (x = 3);
  return x;
"
frame size: 2
parameter count: 1
bytecode array length: 36
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), I8(55),
                B(Star), R(0),
  /*   54 S> */ B(LdaSmi), I8(1),
                B(Mov), R(0), R(1),
                B(Star), R(0),
  /*   56 E> */ B(Add), R(1), U8(0),
                B(Star), R(1),
                B(LdaSmi), I8(2),
                B(Star), R(0),
  /*   66 E> */ B(Add), R(1), U8(1),
                B(Star), R(1),
                B(LdaSmi), I8(3),
                B(Star), R(0),
  /*   76 E> */ B(Add), R(1), U8(2),
                B(Star), R(0),
  /*   96 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  var x = 10, y = 20;
  return x + (x = 1) + (x + 1) * (y = 2) + (y = 3) + (x = 4) + (y = 5) + y;
"
frame size: 4
parameter count: 1
bytecode array length: 73
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), I8(10),
                B(Star), R(0),
  /*   50 S> */ B(LdaSmi), I8(20),
                B(Star), R(1),
  /*   54 S> */ B(LdaSmi), I8(1),
                B(Mov), R(0), R(2),
                B(Star), R(0),
  /*   63 E> */ B(Add), R(2), U8(0),
                B(Star), R(2),
                B(Ldar), R(0),
  /*   78 E> */ B(AddSmi), I8(1), U8(2),
                B(Star), R(3),
                B(LdaSmi), I8(2),
                B(Star), R(1),
  /*   83 E> */ B(Mul), R(3), U8(1),
  /*   73 E> */ B(Add), R(2), U8(3),
                B(Star), R(2),
                B(LdaSmi), I8(3),
                B(Star), R(1),
  /*   93 E> */ B(Add), R(2), U8(4),
                B(Star), R(2),
                B(LdaSmi), I8(4),
                B(Star), R(0),
  /*  103 E> */ B(Add), R(2), U8(5),
                B(Star), R(2),
                B(LdaSmi), I8(5),
                B(Star), R(1),
  /*  113 E> */ B(Add), R(2), U8(6),
                B(Star), R(2),
                B(Ldar), R(1),
  /*  123 E> */ B(Add), R(2), U8(7),
  /*  127 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  var x = 17;
  return 1 + x + (x++) + (++x);
"
frame size: 3
parameter count: 1
bytecode array length: 43
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), I8(17),
                B(Star), R(0),
  /*   46 S> */ B(LdaSmi), I8(1),
                B(Star), R(1),
                B(Ldar), R(0),
  /*   55 E> */ B(Add), R(1), U8(0),
                B(Star), R(1),
                B(Ldar), R(0),
                B(ToNumeric), U8(1),
                B(Star), R(2),
                B(Inc), U8(1),
                B(Star), R(0),
                B(Ldar), R(2),
  /*   59 E> */ B(Add), R(1), U8(2),
                B(Star), R(1),
                B(Ldar), R(0),
                B(Inc), U8(3),
                B(Star), R(0),
  /*   67 E> */ B(Add), R(1), U8(4),
  /*   75 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

