#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: yes

---
snippet: "
  g = function(){}; eval(''); return g();
"
frame size: 10
parameter count: 1
bytecode array length: 74
bytecodes: [
                B(CreateFunctionContext), U8(3),
                B(PushContext), R(1),
                B(Ldar), R(this),
                B(StaCurrentContextSlot), U8(4),
                B(CreateMappedArguments),
                B(StaCurrentContextSlot), U8(6),
                B(Ldar), R(0),
                B(StaCurrentContextSlot), U8(5),
  /*   30 E> */ B(StackCheck),
  /*   34 S> */ B(CreateClosure), U8(0), U8(0), U8(2),
  /*   36 E> */ B(StaLookupSlot), U8(1), U8(0),
  /*   52 S> */ B(LdaLookupGlobalSlot), U8(2), U8(1), U8(1),
                B(Star), R(2),
                B(LdaConstant), U8(3),
                B(Star), R(3),
                B(LdaZero),
                B(Star), R(7),
                B(LdaSmi), I8(30),
                B(Star), R(8),
                B(LdaSmi), I8(52),
                B(Star), R(9),
                B(Mov), R(2), R(4),
                B(Mov), R(3), R(5),
                B(Mov), R(closure), R(6),
                B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(4), U8(6),
                B(Star), R(2),
  /*   52 E> */ B(CallUndefinedReceiver1), R(2), R(3), U8(3),
  /*   62 S> */ B(LdaLookupGlobalSlot), U8(1), U8(5), U8(1),
                B(Star), R(2),
  /*   69 E> */ B(CallUndefinedReceiver0), R(2), U8(7),
  /*   73 S> */ B(Return),
]
constant pool: [
  SHARED_FUNCTION_INFO_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["g"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["eval"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
]
handlers: [
]

