#
# 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(LdrGlobal), U8(3), R(0),
                B(Ldar), R(0),
  /*   57 E> */ B(New), R(0), R(0), U8(0),
  /*   68 S> */ B(Return),
]
constant pool: [
]
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: 15
bytecodes: [
  /*   58 E> */ B(StackCheck),
  /*   63 S> */ B(LdrGlobal), U8(3), R(0),
                B(LdaSmi), U8(3),
                B(Star), R(1),
                B(Ldar), R(0),
  /*   70 E> */ B(New), R(0), R(1), U8(1),
  /*   82 S> */ B(Return),
]
constant pool: [
]
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: 23
bytecodes: [
  /*  100 E> */ B(StackCheck),
  /*  105 S> */ B(LdrGlobal), U8(3), 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),
                B(Ldar), R(0),
  /*  112 E> */ B(New), R(0), R(1), U8(3),
  /*  130 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

