#
# Autogenerated by generate-bytecode-expectations.
#

---
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: 12
bytecodes: [
  /*   45 E> */ B(StackCheck),
  /*   50 S> */ B(LdaGlobal), U8(0), U8(0),
                B(Star), R(0),
  /*   57 E> */ B(Construct), R(0), R(0), U8(0), U8(2),
  /*   67 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["bar"],
]
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: 18
bytecodes: [
  /*   58 E> */ B(StackCheck),
  /*   63 S> */ B(LdaGlobal), U8(0), U8(0),
                B(Star), R(0),
                B(LdaSmi), I8(3),
                B(Star), R(1),
                B(Ldar), R(0),
  /*   70 E> */ B(Construct), R(0), R(1), U8(1), U8(2),
  /*   81 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["bar"],
]
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: 26
bytecodes: [
  /*  100 E> */ B(StackCheck),
  /*  105 S> */ B(LdaGlobal), U8(0), U8(0),
                B(Star), R(0),
                B(LdaSmi), I8(3),
                B(Star), R(1),
                B(LdaSmi), I8(4),
                B(Star), R(2),
                B(LdaSmi), I8(5),
                B(Star), R(3),
                B(Ldar), R(0),
  /*  112 E> */ B(Construct), R(0), R(1), U8(3), U8(2),
  /*  129 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["bar"],
]
handlers: [
]

