#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: no
test function name: f

---
snippet: "
  function f() { return arguments; }
  f();
"
frame size: 1
parameter count: 1
bytecode array length: 5
bytecodes: [
                B(CreateMappedArguments),
                B(Star), R(0),
  /*   10 E> */ B(StackCheck),
  /*   32 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  function f() { return arguments[0]; }
  f();
"
frame size: 1
parameter count: 1
bytecode array length: 9
bytecodes: [
                B(CreateMappedArguments),
                B(Star), R(0),
  /*   10 E> */ B(StackCheck),
  /*   15 S> */ B(LdaZero),
  /*   31 E> */ B(LdaKeyedProperty), R(0), U8(0),
  /*   35 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  function f() { 'use strict'; return arguments; }
  f();
"
frame size: 1
parameter count: 1
bytecode array length: 5
bytecodes: [
                B(CreateUnmappedArguments),
                B(Star), R(0),
  /*   10 E> */ B(StackCheck),
  /*   46 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  function f(a) { return arguments[0]; }
  f();
"
frame size: 2
parameter count: 2
bytecode array length: 18
bytecodes: [
                B(CreateFunctionContext), U8(0), U8(1),
                B(PushContext), R(1),
                B(Ldar), R(arg0),
                B(StaCurrentContextSlot), U8(4),
                B(CreateMappedArguments),
                B(Star), R(0),
  /*   10 E> */ B(StackCheck),
  /*   16 S> */ B(LdaZero),
  /*   32 E> */ B(LdaKeyedProperty), R(0), U8(0),
  /*   36 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_TYPE,
]
handlers: [
]

---
snippet: "
  function f(a, b, c) { return arguments; }
  f();
"
frame size: 2
parameter count: 4
bytecode array length: 22
bytecodes: [
                B(CreateFunctionContext), U8(0), U8(3),
                B(PushContext), R(1),
                B(Ldar), R(arg0),
                B(StaCurrentContextSlot), U8(6),
                B(Ldar), R(arg1),
                B(StaCurrentContextSlot), U8(5),
                B(Ldar), R(arg2),
                B(StaCurrentContextSlot), U8(4),
                B(CreateMappedArguments),
                B(Star), R(0),
  /*   10 E> */ B(StackCheck),
  /*   39 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_TYPE,
]
handlers: [
]

---
snippet: "
  function f(a, b, c) { 'use strict'; return arguments; }
  f();
"
frame size: 1
parameter count: 4
bytecode array length: 5
bytecodes: [
                B(CreateUnmappedArguments),
                B(Star), R(0),
  /*   10 E> */ B(StackCheck),
  /*   53 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

