#
# 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: 26
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),
                B(Star), R(2),
                B(LdaSmi), U8(101),
                B(Star), R(0),
  /*   69 E> */ B(Add), R(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),
                B(Star), R(2),
                B(LdaSmi), U8(57),
                B(Star), R(0),
  /*   68 E> */ B(Add), R(2),
                B(Star), R(0),
  /*   75 S> */ B(ToNumber),
                B(Star), R(1),
                B(Inc),
                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: 34
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),
                B(Star), R(3),
                B(LdaSmi), U8(2),
                B(Star), R(0),
  /*   71 E> */ B(Add), R(3),
                B(Star), R(2),
                B(LdaSmi), U8(3),
                B(Star), R(0),
  /*   81 E> */ B(Add), R(2),
                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: 34
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),
                B(Star), R(2),
                B(LdaSmi), U8(2),
                B(Star), R(0),
  /*   71 E> */ B(Add), R(2),
                B(Star), R(1),
                B(LdaSmi), U8(3),
                B(Star), R(0),
  /*   81 E> */ B(Add), R(1),
                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: 65
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),
                B(Star), R(3),
                B(LdaSmi), U8(1),
  /*   76 E> */ B(Add), R(0),
                B(Star), R(4),
                B(LdaSmi), U8(2),
                B(Star), R(1),
  /*   88 E> */ B(Mul), R(4),
                B(Add), R(3),
                B(Star), R(2),
                B(LdaSmi), U8(3),
                B(Star), R(1),
  /*   98 E> */ B(Add), R(2),
                B(Star), R(3),
                B(LdaSmi), U8(4),
                B(Star), R(0),
  /*  108 E> */ B(Add), R(3),
                B(Star), R(2),
                B(LdaSmi), U8(5),
                B(Star), R(1),
  /*  118 E> */ B(Add), R(2),
                B(Star), R(3),
                B(Ldar), R(1),
  /*  125 E> */ B(Add), R(3),
  /*  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: 37
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),
                B(Star), R(2),
                B(Ldar), R(0),
                B(ToNumber),
                B(Star), R(1),
                B(Inc),
                B(Star), R(0),
                B(Ldar), R(1),
  /*   63 E> */ B(Add), R(2),
                B(Star), R(3),
                B(Ldar), R(0),
                B(Inc),
                B(Star), R(0),
  /*   72 E> */ B(Add), R(3),
  /*   76 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

