#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: yes

---
snippet: "
  var a = {x:13, y:14}; return delete a.x;
"
frame size: 2
parameter count: 1
bytecode array length: 14
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(1), R(1),
                B(Mov), R(1), R(0),
  /*   56 S> */ B(LdaConstant), U8(1),
                B(DeletePropertySloppy), R(0),
  /*   75 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["x"],
]
handlers: [
]

---
snippet: "
  'use strict'; var a = {x:13, y:14}; return delete a.x;
"
frame size: 2
parameter count: 1
bytecode array length: 14
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   56 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(1), R(1),
                B(Mov), R(1), R(0),
  /*   70 S> */ B(LdaConstant), U8(1),
                B(DeletePropertyStrict), R(0),
  /*   89 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["x"],
]
handlers: [
]

---
snippet: "
  var a = {1:13, 2:14}; return delete a[2];
"
frame size: 2
parameter count: 1
bytecode array length: 14
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(1), R(1),
                B(Mov), R(1), R(0),
  /*   56 S> */ B(LdaSmi), U8(2),
                B(DeletePropertySloppy), R(0),
  /*   76 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
]
handlers: [
]

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

---
snippet: "
  'use strict';
  var a = {1:10};
  (function f1() {return a;});
  return delete a[1];
"
frame size: 2
parameter count: 1
bytecode array length: 27
bytecodes: [
                B(CreateFunctionContext), U8(1),
                B(PushContext), R(0),
  /*   30 E> */ B(StackCheck),
  /*   56 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(1), R(1),
                B(Ldar), R(1),
  /*   56 E> */ B(StaCurrentContextSlot), U8(4),
  /*   64 S> */ B(CreateClosure), U8(1), U8(2), U8(2),
  /*   93 S> */ B(LdaCurrentContextSlot), U8(4),
                B(Star), R(1),
                B(LdaSmi), U8(1),
                B(DeletePropertyStrict), R(1),
  /*  113 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

---
snippet: "
  return delete 'test';
"
frame size: 0
parameter count: 1
bytecode array length: 3
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   34 S> */ B(LdaTrue),
  /*   56 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

