#
# 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: 9
bytecodes: [
  /*   32 E> */ B(StackCheck),
  /*   39 S> */ B(LdrGlobal), U8(1), R(0),
                B(LdaConstant), U8(0),
                B(DeletePropertySloppy), R(0),
  /*   58 S> */ B(Return),
]
constant pool: [
  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: 9
bytecodes: [
  /*   28 E> */ B(StackCheck),
  /*   51 S> */ B(LdrGlobal), U8(1), R(0),
                B(LdaSmi), U8(1),
                B(DeletePropertyStrict), R(0),
  /*   71 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  var a = {x:13, y:14};
  function f() {
    return delete a;
  };
  f();
"
frame size: 2
parameter count: 1
bytecode array length: 14
bytecodes: [
  /*   32 E> */ B(StackCheck),
  /*   39 S> */ B(LdrContextSlot), R(context), U8(3), R(0),
                B(LdrContextSlot), R(0), U8(2), 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: 14
bytecodes: [
  /*   18 E> */ B(StackCheck),
  /*   25 S> */ B(LdrContextSlot), R(context), U8(3), R(0),
                B(LdrContextSlot), R(0), U8(2), R(1),
                B(LdaConstant), U8(0),
                B(DeletePropertySloppy), R(1),
  /*   42 S> */ B(Return),
]
constant pool: [
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
]
handlers: [
]

