#
# Autogenerated by generate-bytecode-expectations.
#

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

---
snippet: "
  function Outer() {
    var outerVar = 1;
    function Inner(innerArg) {
      this.innerFunc = function() { return outerVar * innerArg; }
    }
    this.getInnerFunc = function() { return new Inner(1).innerFunc; }
  }
  var f = new Outer().getInnerFunc();
  f();
"
frame size: 2
parameter count: 1
bytecode array length: 15
bytecodes: [
  /*   97 E> */ B(StackCheck),
  /*  102 S> */ B(LdrContextSlot), R(context), U8(1), R(0),
                B(LdrContextSlot), R(0), U8(4), R(1),
  /*  120 E> */ B(LdaContextSlot), R(context), U8(4),
                B(Mul), R(1),
  /*  130 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  function Outer() {
    var outerVar = 1;
    function Inner(innerArg) {
      this.innerFunc = function() { outerVar = innerArg; }
    }
    this.getInnerFunc = function() { return new Inner(1).innerFunc; }
  }
  var f = new Outer().getInnerFunc();
  f();
"
frame size: 2
parameter count: 1
bytecode array length: 16
bytecodes: [
  /*   97 E> */ B(StackCheck),
  /*  102 S> */ B(LdrContextSlot), R(context), U8(4), R(0),
  /*  111 E> */ B(LdrContextSlot), R(context), U8(1), R(1),
                B(Ldar), R(0),
                B(StaContextSlot), R(1), U8(4),
                B(LdaUndefined),
  /*  123 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

