#
# 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: 24
bytecodes: [
  /*   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: 11
bytecodes: [
  /*   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: 26
bytecodes: [
  /*   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: 27
bytecodes: [
  /*   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: 35
bytecodes: [
  /*   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: 35
bytecodes: [
  /*   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: 72
bytecodes: [
  /*   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: 42
bytecodes: [
  /*   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: [
]

