#
# 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: [
  /*   10 E> */ B(CreateFunctionContext), U8(0), U8(1),
                B(PushContext), R(0),
                B(Ldar), R(arg0),
                B(StaCurrentContextSlot), U8(2),
  /*   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: 18
bytecodes: [
  /*   10 E> */ B(CreateFunctionContext), U8(0), U8(1),
                B(PushContext), R(1),
                B(Ldar), R(arg0),
                B(StaCurrentContextSlot), U8(2),
  /*   27 S> */ B(CreateClosure), U8(1), U8(0), U8(2),
                B(Star), R(0),
  /*   53 S> */ B(LdaCurrentContextSlot), U8(2),
  /*   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: 18
bytecodes: [
  /*   10 E> */ B(CreateFunctionContext), U8(0), U8(2),
                B(PushContext), R(0),
                B(Ldar), R(arg0),
                B(StaCurrentContextSlot), U8(3),
                B(Ldar), R(arg2),
                B(StaCurrentContextSlot), U8(2),
  /*   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: 14
bytecodes: [
  /*   10 E> */ B(CreateFunctionContext), U8(0), U8(1),
                B(PushContext), R(0),
  /*   26 S> */ B(Ldar), R(this),
  /*   26 E> */ B(StaCurrentContextSlot), U8(2),
  /*   32 S> */ B(CreateClosure), U8(1), U8(0), U8(2),
  /*   64 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

