#
# Autogenerated by generate-bytecode-expectations.
#

---
pool type: string
execute: yes
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), U8(1),
                B(Star), R(1),
  /*   52 S> */ B(LdaSmi), U8(2),
                B(Star), R(0),
                B(LdaSmi), U8(3),
                B(Star), R(1),
                B(LdaSmi), U8(4),
                B(Star), R(0),
                B(LdaSmi), U8(5),
                B(Star), R(1),
  /*   89 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: 13
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), U8(55),
                B(Star), R(0),
  /*   57 S> */ B(LdaSmi), U8(100),
                B(Star), R(0),
                B(Star), R(1),
  /*   65 S> */ B(Nop),
  /*   75 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

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

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

---
snippet: "
  var x = 55;
  var y = x + (x = 1) + (x = 2) + (x = 3);
  return y;
"
frame size: 4
parameter count: 1
bytecode array length: 37
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), U8(55),
                B(Star), R(0),
  /*   76 S> */ B(LdaSmi), U8(1),
                B(Mov), R(0), R(2),
                B(Star), R(0),
  /*   61 E> */ B(Add), R(2), U8(1),
                B(Star), R(3),
                B(LdaSmi), U8(2),
                B(Star), R(0),
  /*   71 E> */ B(Add), R(3), U8(2),
                B(Star), R(2),
                B(LdaSmi), U8(3),
                B(Star), R(0),
  /*   81 E> */ B(Add), R(2), U8(3),
                B(Star), R(1),
  /*   87 S> */ B(Nop),
  /*   97 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  var x = 55;
  var x = x + (x = 1) + (x = 2) + (x = 3);
  return x;
"
frame size: 3
parameter count: 1
bytecode array length: 37
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), U8(55),
                B(Star), R(0),
  /*   76 S> */ B(LdaSmi), U8(1),
                B(Mov), R(0), R(1),
                B(Star), R(0),
  /*   61 E> */ B(Add), R(1), U8(1),
                B(Star), R(2),
                B(LdaSmi), U8(2),
                B(Star), R(0),
  /*   71 E> */ B(Add), R(2), U8(2),
                B(Star), R(1),
                B(LdaSmi), U8(3),
                B(Star), R(0),
  /*   81 E> */ B(Add), R(1), U8(3),
                B(Star), R(0),
  /*   87 S> */ B(Nop),
  /*   97 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: 5
parameter count: 1
bytecode array length: 71
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), U8(10),
                B(Star), R(0),
  /*   50 S> */ B(LdaSmi), U8(20),
                B(Star), R(1),
  /*   54 S> */ B(LdaSmi), U8(1),
                B(Mov), R(0), R(2),
                B(Star), R(0),
  /*   68 E> */ B(Add), R(2), U8(1),
                B(Star), R(3),
  /*   76 E> */ B(AddSmi), U8(1), R(0),
                B(Star), R(4),
                B(LdaSmi), U8(2),
                B(Star), R(1),
  /*   88 E> */ B(Mul), R(4), U8(3),
                B(Add), R(3), U8(4),
                B(Star), R(2),
                B(LdaSmi), U8(3),
                B(Star), R(1),
  /*   98 E> */ B(Add), R(2), U8(5),
                B(Star), R(3),
                B(LdaSmi), U8(4),
                B(Star), R(0),
  /*  108 E> */ B(Add), R(3), U8(6),
                B(Star), R(2),
                B(LdaSmi), U8(5),
                B(Star), R(1),
  /*  118 E> */ B(Add), R(2), U8(7),
                B(Star), R(3),
                B(Ldar), R(1),
  /*  125 E> */ B(Add), R(3), U8(8),
  /*  128 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  var x = 17;
  return 1 + x + (x++) + (++x);
"
frame size: 4
parameter count: 1
bytecode array length: 41
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), U8(17),
                B(Star), R(0),
  /*   46 S> */ B(LdaSmi), U8(1),
                B(Star), R(1),
                B(Ldar), R(0),
  /*   57 E> */ B(Add), R(1), U8(1),
                B(Star), R(2),
                B(Ldar), R(0),
                B(ToNumber), R(1),
                B(Inc), U8(2),
                B(Star), R(0),
                B(Ldar), R(1),
  /*   63 E> */ B(Add), R(2), U8(3),
                B(Star), R(3),
                B(Ldar), R(0),
                B(Inc), U8(4),
                B(Star), R(0),
  /*   72 E> */ B(Add), R(3), U8(5),
  /*   76 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

