#
# Autogenerated by generate-bytecode-expectations.
#

---
pool type: number
execute: yes
wrap: yes

---
snippet: "
  var x = 0;
  while (x != 10) {
    x = x + 10;
  }
  return x;
"
frame size: 1
parameter count: 1
bytecode array length: 23
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaZero),
                B(Star), R(0),
  /*   54 S> */ B(LdaSmi), U8(10),
  /*   54 E> */ B(TestEqual), R(0),
                B(LogicalNot),
                B(JumpIfFalse), U8(11),
  /*   45 E> */ B(StackCheck),
  /*   65 S> */ B(LdaSmi), U8(10),
                B(Add), R(0),
                B(Star), R(0),
                B(Jump), U8(-14),
  /*   79 S> */ B(Ldar), R(0),
  /*   89 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  var x = false;
  do {
    x = !x;
  } while(x == false);
  return x;
"
frame size: 1
parameter count: 1
bytecode array length: 18
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaFalse),
                B(Star), R(0),
  /*   49 E> */ B(StackCheck),
  /*   56 S> */ B(Ldar), R(0),
                B(ToBooleanLogicalNot),
                B(Star), R(0),
  /*   74 S> */ B(LdaFalse),
  /*   74 E> */ B(TestEqual), R(0),
                B(JumpIfTrue), U8(-9),
  /*   85 S> */ B(Ldar), R(0),
  /*   95 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  var x = 101;
  return void(x * 3);
"
frame size: 1
parameter count: 1
bytecode array length: 11
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), U8(101),
                B(Star), R(0),
  /*   47 S> */ B(LdaSmi), U8(3),
                B(Mul), R(0),
                B(LdaUndefined),
  /*   67 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  var x = 1234;
  var y = void (x * x - 1);
  return y;
"
frame size: 4
parameter count: 1
bytecode array length: 22
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(Wide), B(LdaSmi), U16(1234),
                B(Star), R(0),
  /*   56 S> */ B(Nop),
  /*   66 E> */ B(Mul), R(0),
                B(Star), R(3),
                B(LdaSmi), U8(1),
                B(Sub), R(3),
                B(LdrUndefined), R(1),
                B(Ldar), R(1),
  /*   74 S> */ B(Nop),
  /*   84 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  var x = 13;
  return ~x;
"
frame size: 1
parameter count: 1
bytecode array length: 10
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), U8(13),
                B(Star), R(0),
  /*   46 S> */ B(LdaSmi), U8(-1),
                B(BitwiseXor), R(0),
  /*   57 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  var x = 13;
  return +x;
"
frame size: 1
parameter count: 1
bytecode array length: 10
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), U8(13),
                B(Star), R(0),
  /*   46 S> */ B(LdaSmi), U8(1),
                B(Mul), R(0),
  /*   57 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  var x = 13;
  return -x;
"
frame size: 1
parameter count: 1
bytecode array length: 10
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), U8(13),
                B(Star), R(0),
  /*   46 S> */ B(LdaSmi), U8(-1),
                B(Mul), R(0),
  /*   57 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

