#
# 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: 14
bytecodes: [
                B(CreateFunctionContext), U8(1),
                B(PushContext), R(0),
                B(Ldar), R(arg0),
                B(StaCurrentContextSlot), U8(4),
  /*   10 E> */ B(StackCheck),
  /*   19 S> */ B(CreateClosure), U8(0), U8(0), U8(2),
  /*   51 S> */ B(Return),
]
constant pool: [
  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: 18
bytecodes: [
                B(CreateFunctionContext), U8(1),
                B(PushContext), R(1),
                B(Ldar), R(arg0),
                B(StaCurrentContextSlot), U8(4),
  /*   10 E> */ B(StackCheck),
  /*   27 S> */ B(CreateClosure), U8(0), U8(0), U8(2),
                B(Star), R(0),
  /*   53 S> */ B(LdaCurrentContextSlot), U8(4),
  /*   65 S> */ B(Return),
]
constant pool: [
  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: 18
bytecodes: [
                B(CreateFunctionContext), 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(0), U8(0), U8(2),
  /*   60 S> */ B(Return),
]
constant pool: [
  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: 14
bytecodes: [
                B(CreateFunctionContext), 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(0), U8(0), U8(2),
  /*   64 S> */ B(Return),
]
constant pool: [
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

