#
# Autogenerated by generate-bytecode-expectations.
#

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

---
snippet: "
  function f(arg1) { return function() { arg1 = 2; }; }
  f();
"
frame size: 1
parameter count: 2
bytecode array length: 17
bytecodes: [
                B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), U8(1),
                B(PushContext), R(0),
                B(Ldar), R(arg0),
                B(StaContextSlot), R(context), U8(4),
  /*   10 E> */ B(StackCheck),
  /*   19 S> */ B(CreateClosure), U8(0), U8(0),
  /*   52 S> */ B(Return),
]
constant pool: [
  InstanceType::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: 22
bytecodes: [
                B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), U8(1),
                B(PushContext), R(1),
                B(Ldar), R(arg0),
                B(StaContextSlot), R(context), U8(4),
  /*   10 E> */ B(StackCheck),
  /*   27 S> */ B(CreateClosure), U8(0), U8(0),
                B(Star), R(0),
  /*   53 S> */ B(LdaContextSlot), R(context), U8(4),
  /*   66 S> */ B(Return),
]
constant pool: [
  InstanceType::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: 22
bytecodes: [
                B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), U8(1),
                B(PushContext), R(0),
                B(Ldar), R(arg0),
                B(StaContextSlot), R(context), U8(5),
                B(Ldar), R(arg2),
                B(StaContextSlot), R(context), U8(4),
  /*   10 E> */ B(StackCheck),
  /*   29 S> */ B(CreateClosure), U8(0), U8(0),
  /*   61 S> */ B(Return),
]
constant pool: [
  InstanceType::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: 17
bytecodes: [
                B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), U8(1),
                B(PushContext), R(0),
  /*   10 E> */ B(StackCheck),
  /*   26 S> */ B(Ldar), R(this),
  /*   26 E> */ B(StaContextSlot), R(context), U8(4),
  /*   32 S> */ B(CreateClosure), U8(0), U8(0),
  /*   65 S> */ B(Return),
]
constant pool: [
  InstanceType::SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

