#
# 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),
  /*   42 E> */ B(Star), R(0),
  /*   49 S> */ B(LdaSmi), U8(1),
  /*   49 E> */ B(Star), R(1),
  /*   52 S> */ B(LdaSmi), U8(2),
  /*   62 E> */ B(Star), R(0),
                B(LdaSmi), U8(3),
  /*   69 E> */ B(Star), R(1),
                B(LdaSmi), U8(4),
  /*   76 E> */ B(Star), R(0),
                B(LdaSmi), U8(5),
  /*   83 E> */ 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: 12
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), U8(55),
  /*   42 E> */ B(Star), R(0),
  /*   57 S> */ B(LdaSmi), U8(100),
  /*   57 E> */ B(Star), R(0),
  /*   57 E> */ B(Star), R(1),
  /*   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: 24
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), U8(55),
  /*   42 E> */ B(Star), R(0),
  /*   46 S> */ B(Star), R(1),
                B(LdaSmi), U8(100),
  /*   57 E> */ B(Star), R(0),
                B(Add), R(1),
                B(Star), R(2),
                B(LdaSmi), U8(101),
  /*   69 E> */ B(Star), R(0),
                B(Add), R(2),
  /*   48 E> */ B(Star), R(0),
  /*   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: 32
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), U8(55),
  /*   42 E> */ B(Star), R(0),
  /*   46 S> */ B(LdaSmi), U8(56),
  /*   53 E> */ B(Star), R(0),
                B(Star), R(1),
  /*   61 E> */ B(Ldar), R(0),
                B(Sub), R(1),
                B(Star), R(2),
                B(LdaSmi), U8(57),
  /*   68 E> */ B(Star), R(0),
                B(Add), R(2),
  /*   48 E> */ B(Star), R(0),
  /*   75 S> */ B(ToNumber),
                B(Star), R(1),
                B(Inc),
  /*   76 E> */ B(Star), R(0),
  /*   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: 32
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), U8(55),
  /*   42 E> */ B(Star), R(0),
  /*   76 S> */ B(Star), R(2),
                B(LdaSmi), U8(1),
  /*   61 E> */ B(Star), R(0),
                B(Add), R(2),
                B(Star), R(3),
                B(LdaSmi), U8(2),
  /*   71 E> */ B(Star), R(0),
                B(Add), R(3),
                B(Star), R(2),
                B(LdaSmi), U8(3),
  /*   81 E> */ B(Star), R(0),
                B(Add), R(2),
  /*   76 E> */ B(Star), R(1),
  /*   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: 32
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), U8(55),
  /*   42 E> */ B(Star), R(0),
  /*   76 S> */ B(Star), R(1),
                B(LdaSmi), U8(1),
  /*   61 E> */ B(Star), R(0),
                B(Add), R(1),
                B(Star), R(2),
                B(LdaSmi), U8(2),
  /*   71 E> */ B(Star), R(0),
                B(Add), R(2),
                B(Star), R(1),
                B(LdaSmi), U8(3),
  /*   81 E> */ B(Star), R(0),
                B(Add), R(1),
  /*   76 E> */ B(Star), R(0),
  /*   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: 70
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), U8(10),
  /*   42 E> */ B(Star), R(0),
  /*   50 S> */ B(LdaSmi), U8(20),
  /*   50 E> */ B(Star), R(1),
  /*   54 S> */ B(Ldar), R(0),
                B(Star), R(2),
                B(LdaSmi), U8(1),
  /*   68 E> */ B(Star), R(0),
                B(Add), R(2),
                B(Star), R(3),
  /*   76 E> */ B(Ldar), R(0),
                B(Star), R(2),
                B(LdaSmi), U8(1),
                B(Add), R(2),
                B(Star), R(4),
                B(LdaSmi), U8(2),
  /*   88 E> */ B(Star), R(1),
                B(Mul), R(4),
                B(Add), R(3),
                B(Star), R(2),
                B(LdaSmi), U8(3),
  /*   98 E> */ B(Star), R(1),
                B(Add), R(2),
                B(Star), R(3),
                B(LdaSmi), U8(4),
  /*  108 E> */ B(Star), R(0),
                B(Add), R(3),
                B(Star), R(2),
                B(LdaSmi), U8(5),
  /*  118 E> */ B(Star), R(1),
                B(Add), R(2),
                B(Star), R(3),
  /*  125 E> */ B(Ldar), R(1),
                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),
  /*   42 E> */ B(Star), R(0),
  /*   46 S> */ B(LdaSmi), U8(1),
                B(Star), R(1),
  /*   57 E> */ B(Ldar), R(0),
                B(Add), R(1),
                B(Star), R(2),
                B(Ldar), R(0),
                B(ToNumber),
                B(Star), R(1),
                B(Inc),
  /*   63 E> */ B(Star), R(0),
                B(Ldar), R(1),
                B(Add), R(2),
                B(Star), R(3),
                B(Ldar), R(0),
                B(Inc),
  /*   72 E> */ B(Star), R(0),
                B(Add), R(3),
  /*   76 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

