#
# Autogenerated by generate-bytecode-expectations.
#

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

---
snippet: "
  function bar() { this.value = 0; }
  function f() { return new bar(); }
  f();
"
frame size: 1
parameter count: 1
bytecode array length: 11
bytecodes: [
  /*   45 E> */ B(StackCheck),
  /*   50 S> */ B(LdaGlobal), U8(0), U8(2),
                B(Star), R(0),
  /*   57 E> */ B(New), R(0), R(0), U8(0),
  /*   68 S> */ B(Return),
]
constant pool: [
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
]
handlers: [
]

---
snippet: "
  function bar(x) { this.value = 18; this.x = x;}
  function f() { return new bar(3); }
  f();
"
frame size: 2
parameter count: 1
bytecode array length: 17
bytecodes: [
  /*   58 E> */ B(StackCheck),
  /*   63 S> */ B(LdaGlobal), U8(0), U8(2),
                B(Star), R(0),
                B(LdaSmi), U8(3),
                B(Star), R(1),
  /*   70 E> */ B(Ldar), R(0),
                B(New), R(0), R(1), U8(1),
  /*   82 S> */ B(Return),
]
constant pool: [
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
]
handlers: [
]

---
snippet: "
  function bar(w, x, y, z) {
    this.value = 18;
    this.x = x;
    this.y = y;
    this.z = z;
  }
  function f() { return new bar(3, 4, 5); }
  f();
"
frame size: 4
parameter count: 1
bytecode array length: 25
bytecodes: [
  /*  100 E> */ B(StackCheck),
  /*  105 S> */ B(LdaGlobal), U8(0), U8(2),
                B(Star), R(0),
                B(LdaSmi), U8(3),
                B(Star), R(1),
                B(LdaSmi), U8(4),
                B(Star), R(2),
                B(LdaSmi), U8(5),
                B(Star), R(3),
  /*  112 E> */ B(Ldar), R(0),
                B(New), R(0), R(1), U8(3),
  /*  130 S> */ B(Return),
]
constant pool: [
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
]
handlers: [
]

