#
# Autogenerated by generate-bytecode-expectations.
#

---
pool type: mixed
execute: yes
wrap: no
test function name: f

---
snippet: "
  var a = {x:13, y:14};
  function f() {
    return delete a.x;
  };
  f();
"
frame size: 1
parameter count: 1
bytecode array length: 11
bytecodes: [
  B(StackCheck),
  B(LdaGlobal), U8(0), U8(1),
  B(Star), R(0),
  B(LdaConstant), U8(1),
  B(DeletePropertySloppy), R(0),
  B(Return),
]
constant pool: [
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
]
handlers: [
]

---
snippet: "
  a = {1:13, 2:14};
  function f() {
    'use strict';
    return delete a[1];
  };
  f();
"
frame size: 1
parameter count: 1
bytecode array length: 11
bytecodes: [
  B(StackCheck),
  B(LdaGlobal), U8(0), U8(1),
  B(Star), R(0),
  B(LdaSmi), U8(1),
  B(DeletePropertyStrict), R(0),
  B(Return),
]
constant pool: [
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
]
handlers: [
]

---
snippet: "
  var a = {x:13, y:14};
  function f() {
    return delete a;
  };
  f();
"
frame size: 2
parameter count: 1
bytecode array length: 16
bytecodes: [
  B(StackCheck),
  B(LdaContextSlot), R(context), U8(3),
  B(Star), R(0),
  B(LdaContextSlot), R(0), U8(2),
  B(Star), R(1),
  B(LdaConstant), U8(0),
  B(DeletePropertySloppy), R(1),
  B(Return),
]
constant pool: [
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
]
handlers: [
]

---
snippet: "
  b = 30;
  function f() {
    return delete b;
  };
  f();
"
frame size: 2
parameter count: 1
bytecode array length: 16
bytecodes: [
  B(StackCheck),
  B(LdaContextSlot), R(context), U8(3),
  B(Star), R(0),
  B(LdaContextSlot), R(0), U8(2),
  B(Star), R(1),
  B(LdaConstant), U8(0),
  B(DeletePropertySloppy), R(1),
  B(Return),
]
constant pool: [
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
]
handlers: [
]

