#
# Autogenerated by generate-bytecode-expectations.
#

---
pool type: mixed
execute: yes
wrap: yes

---
snippet: "
  var a = 1; a += 2;
"
frame size: 2
parameter count: 1
bytecode array length: 16
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), U8(1),
                B(Star), R(0),
  /*   45 S> */ B(LdaSmi), U8(2),
                B(Add), R(0),
                B(Mov), R(0), R(1),
                B(Star), R(0),
                B(LdaUndefined),
  /*   53 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  var a = 1; a /= 2;
"
frame size: 2
parameter count: 1
bytecode array length: 16
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), U8(1),
                B(Star), R(0),
  /*   45 S> */ B(LdaSmi), U8(2),
                B(Div), R(0),
                B(Mov), R(0), R(1),
                B(Star), R(0),
                B(LdaUndefined),
  /*   53 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  var a = { val: 2 }; a.name *= 2;
"
frame size: 3
parameter count: 1
bytecode array length: 24
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(1),
                B(Star), R(1),
                B(Star), R(0),
  /*   54 S> */ B(LdrNamedProperty), R(0), U8(1), U8(1), R(2),
                B(LdaSmi), U8(2),
                B(Mul), R(2),
  /*   61 E> */ B(StaNamedPropertySloppy), R(0), U8(1), U8(3),
                B(LdaUndefined),
  /*   67 S> */ B(Return),
]
constant pool: [
  InstanceType::FIXED_ARRAY_TYPE,
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
]
handlers: [
]

---
snippet: "
  var a = { 1: 2 }; a[1] ^= 2;
"
frame size: 4
parameter count: 1
bytecode array length: 27
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(1),
                B(Star), R(1),
                B(Star), R(0),
  /*   52 S> */ B(LdaSmi), U8(1),
                B(Star), R(2),
                B(LdrKeyedProperty), R(0), U8(1), R(3),
                B(LdaSmi), U8(2),
                B(BitwiseXor), R(3),
  /*   57 E> */ B(StaKeyedPropertySloppy), R(0), R(2), U8(3),
                B(LdaUndefined),
  /*   63 S> */ B(Return),
]
constant pool: [
  InstanceType::FIXED_ARRAY_TYPE,
]
handlers: [
]

---
snippet: "
  var a = 1; (function f() { return a; }); a |= 24;
"
frame size: 2
parameter count: 1
bytecode array length: 29
bytecodes: [
                B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), U8(1),
                B(PushContext), R(0),
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(LdaSmi), U8(1),
  /*   42 E> */ B(StaContextSlot), R(context), U8(4),
  /*   45 S> */ B(CreateClosure), U8(0), U8(0),
  /*   75 S> */ B(LdrContextSlot), R(context), U8(4), R(1),
                B(LdaSmi), U8(24),
                B(BitwiseOr), R(1),
  /*   77 E> */ B(StaContextSlot), R(context), U8(4),
                B(LdaUndefined),
  /*   84 S> */ B(Return),
]
constant pool: [
  InstanceType::SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

