#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: yes

---
snippet: "
  g = function(){}; eval(''); return g();
"
frame size: 10
parameter count: 1
bytecode array length: 74
bytecodes: [
  /*   30 E> */ B(CreateFunctionContext), U8(0), U8(4),
                B(PushContext), R(1),
                B(Ldar), R(this),
                B(StaCurrentContextSlot), U8(3),
                B(CreateMappedArguments),
                B(StaCurrentContextSlot), U8(5),
                B(Ldar), R(0),
                B(StaCurrentContextSlot), U8(4),
  /*   34 S> */ B(CreateClosure), U8(1), U8(0), U8(2),
  /*   36 E> */ B(StaLookupSlot), U8(2), U8(0),
  /*   52 S> */ B(LdaLookupGlobalSlot), U8(3), U8(0), U8(1),
                B(Star), R(2),
                B(LdaConstant), U8(4),
                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(2),
  /*   62 S> */ B(LdaLookupGlobalSlot), U8(2), U8(4), U8(1),
                B(Star), R(2),
  /*   69 E> */ B(CallUndefinedReceiver0), R(2), U8(6),
  /*   73 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["g"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["eval"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
]
handlers: [
]

