#
# 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: [
  /*   32 E> */ B(StackCheck),
  /*   39 S> */ B(LdaGlobal), U8(0), U8(1),
                B(Star), R(0),
                B(LdaConstant), U8(1),
                B(DeletePropertySloppy), R(0),
  /*   58 S> */ 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: [
  /*   28 E> */ B(StackCheck),
  /*   51 S> */ B(LdaGlobal), U8(0), U8(1),
                B(Star), R(0),
                B(LdaSmi), U8(1),
                B(DeletePropertyStrict), R(0),
  /*   71 S> */ 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: [
  /*   32 E> */ B(StackCheck),
  /*   39 S> */ 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),
  /*   56 S> */ 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: [
  /*   18 E> */ B(StackCheck),
  /*   25 S> */ 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),
  /*   42 S> */ B(Return),
]
constant pool: [
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
]
handlers: [
]

