#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: no
test function name: f

---
snippet: "
  function f(arg1) { return function() { arg1 = 2; }; }
  f();
"
frame size: 1
parameter count: 2
bytecode array length: 15
bytecodes: [
                B(CreateFunctionContext), U8(0), U8(1),
                B(PushContext), R(0),
                B(Ldar), R(arg0),
                B(StaCurrentContextSlot), U8(4),
  /*   10 E> */ B(StackCheck),
  /*   19 S> */ B(CreateClosure), U8(1), U8(0), U8(2),
  /*   51 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

---
snippet: "
  function f(arg1) { var a = function() { arg1 = 2; }; return arg1; }
  f();
"
frame size: 2
parameter count: 2
bytecode array length: 19
bytecodes: [
                B(CreateFunctionContext), U8(0), U8(1),
                B(PushContext), R(1),
                B(Ldar), R(arg0),
                B(StaCurrentContextSlot), U8(4),
  /*   10 E> */ B(StackCheck),
  /*   27 S> */ B(CreateClosure), U8(1), U8(0), U8(2),
                B(Star), R(0),
  /*   53 S> */ B(LdaCurrentContextSlot), U8(4),
  /*   65 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

---
snippet: "
  function f(a1, a2, a3, a4) { return function() { a1 = a3; }; }
  f();
"
frame size: 1
parameter count: 5
bytecode array length: 19
bytecodes: [
                B(CreateFunctionContext), U8(0), U8(2),
                B(PushContext), R(0),
                B(Ldar), R(arg0),
                B(StaCurrentContextSlot), U8(5),
                B(Ldar), R(arg2),
                B(StaCurrentContextSlot), U8(4),
  /*   10 E> */ B(StackCheck),
  /*   29 S> */ B(CreateClosure), U8(1), U8(0), U8(2),
  /*   60 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

---
snippet: "
  function f() { var self = this; return function() { self = 2; }; }
  f();
"
frame size: 1
parameter count: 1
bytecode array length: 15
bytecodes: [
                B(CreateFunctionContext), U8(0), U8(1),
                B(PushContext), R(0),
  /*   10 E> */ B(StackCheck),
  /*   26 S> */ B(Ldar), R(this),
  /*   26 E> */ B(StaCurrentContextSlot), U8(4),
  /*   32 S> */ B(CreateClosure), U8(1), U8(0), U8(2),
  /*   64 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

