#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: yes

---
snippet: "
  var x = 0;
  while (x != 10) {
    x = x + 10;
  }
  return x;
"
frame size: 1
parameter count: 1
bytecode array length: 25
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaZero),
                B(Star), R(0),
  /*   54 S> */ B(LdaSmi), I8(10),
  /*   54 E> */ B(TestEqual), R(0), U8(2),
                B(JumpIfTrue), U8(13),
  /*   45 E> */ B(StackCheck),
  /*   65 S> */ B(Ldar), R(0),
  /*   71 E> */ B(AddSmi), I8(10), U8(3),
                B(Star), R(0),
                B(JumpLoop), U8(15), I8(0),
  /*   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: 22
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), U8(2),
                B(JumpIfFalse), U8(5),
                B(JumpLoop), U8(12), I8(0),
  /*   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), I8(101),
                B(Star), R(0),
  /*   47 S> */ B(Nop),
  /*   61 E> */ B(MulSmi), I8(3), U8(2),
                B(LdaUndefined),
  /*   67 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  var x = 1234;
  var y = void (x * x - 1);
  return y;
"
frame size: 2
parameter count: 1
bytecode array length: 19
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(Wide), B(LdaSmi), I16(1234),
                B(Star), R(0),
  /*   56 S> */ B(Nop),
  /*   64 E> */ B(Mul), R(0), U8(2),
  /*   68 E> */ B(SubSmi), I8(1), U8(3),
                B(LdaUndefined),
                B(Star), 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), I8(13),
                B(Star), R(0),
  /*   46 S> */ B(Nop),
  /*   53 E> */ B(BitwiseXorSmi), I8(-1), U8(2),
  /*   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), I8(13),
                B(Star), R(0),
  /*   46 S> */ B(Nop),
  /*   53 E> */ B(MulSmi), I8(1), U8(2),
  /*   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), I8(13),
                B(Star), R(0),
  /*   46 S> */ B(Nop),
  /*   53 E> */ B(MulSmi), I8(-1), U8(2),
  /*   57 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

