#
# Autogenerated by generate-bytecode-expectations.
#

---
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(0),
                B(Star), R(0),
                B(LdaConstant), U8(1),
                B(DeletePropertySloppy), R(0),
  /*   57 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["a"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["x"],
]
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(0),
                B(Star), R(0),
                B(LdaSmi), I8(1),
                B(DeletePropertyStrict), R(0),
  /*   70 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["a"],
]
handlers: [
]

---
snippet: "
  var a = {x:13, y:14};
  function f() {
    return delete a;
  };
  f();
"
frame size: 1
parameter count: 1
bytecode array length: 11
bytecodes: [
  /*   32 E> */ B(StackCheck),
  /*   39 S> */ B(LdaConstant), U8(0),
                B(Star), R(0),
                B(CallRuntime), U16(Runtime::kDeleteLookupSlot), R(0), U8(1),
  /*   55 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["a"],
]
handlers: [
]

---
snippet: "
  b = 30;
  function f() {
    return delete b;
  };
  f();
"
frame size: 1
parameter count: 1
bytecode array length: 11
bytecodes: [
  /*   18 E> */ B(StackCheck),
  /*   25 S> */ B(LdaConstant), U8(0),
                B(Star), R(0),
                B(CallRuntime), U16(Runtime::kDeleteLookupSlot), R(0), U8(1),
  /*   41 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["b"],
]
handlers: [
]

