#
# Autogenerated by generate-bytecode-expectations.
#

---
pool type: string
execute: yes
wrap: yes

---
snippet: "
  eval('var x = 10;'); return x;
"
frame size: 10
parameter count: 1
bytecode array length: 71
bytecodes: [
                B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), U8(1),
                B(PushContext), R(0),
                B(Ldar), R(this),
                B(StaContextSlot), R(context), U8(4),
                B(CreateMappedArguments),
                B(StaContextSlot), R(context), U8(5),
                B(Ldar), R(new_target),
                B(StaContextSlot), R(context), U8(6),
  /*   30 E> */ B(StackCheck),
  /*   34 S> */ B(LdaConstant), U8(0),
                B(Star), R(3),
                B(CallRuntimeForPair), U16(Runtime::kLoadLookupSlotForCall), R(3), U8(1), R(1),
                B(LdaConstant), U8(1),
                B(Star), R(3),
                B(LdaZero),
                B(Star), R(7),
                B(LdaSmi), U8(30),
                B(Star), R(8),
                B(LdaSmi), U8(34),
                B(Star), R(9),
                B(Mov), R(1), 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(1),
  /*   34 E> */ B(Call), R(1), R(2), U8(2), U8(0),
  /*   55 S> */ B(LdaLookupSlot), U8(2),
  /*   65 S> */ B(Return),
]
constant pool: [
  "eval",
  "var x = 10;",
  "x",
]
handlers: [
]

---
snippet: "
  eval('var x = 10;'); return typeof x;
"
frame size: 10
parameter count: 1
bytecode array length: 72
bytecodes: [
                B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), U8(1),
                B(PushContext), R(0),
                B(Ldar), R(this),
                B(StaContextSlot), R(context), U8(4),
                B(CreateMappedArguments),
                B(StaContextSlot), R(context), U8(5),
                B(Ldar), R(new_target),
                B(StaContextSlot), R(context), U8(6),
  /*   30 E> */ B(StackCheck),
  /*   34 S> */ B(LdaConstant), U8(0),
                B(Star), R(3),
                B(CallRuntimeForPair), U16(Runtime::kLoadLookupSlotForCall), R(3), U8(1), R(1),
                B(LdaConstant), U8(1),
                B(Star), R(3),
                B(LdaZero),
                B(Star), R(7),
                B(LdaSmi), U8(30),
                B(Star), R(8),
                B(LdaSmi), U8(34),
                B(Star), R(9),
                B(Mov), R(1), 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(1),
  /*   34 E> */ B(Call), R(1), R(2), U8(2), U8(0),
  /*   55 S> */ B(LdaLookupSlotInsideTypeof), U8(2),
                B(TypeOf),
  /*   72 S> */ B(Return),
]
constant pool: [
  "eval",
  "var x = 10;",
  "x",
]
handlers: [
]

---
snippet: "
  x = 20; return eval('');
"
frame size: 10
parameter count: 1
bytecode array length: 73
bytecodes: [
                B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), U8(1),
                B(PushContext), R(0),
                B(Ldar), R(this),
                B(StaContextSlot), R(context), U8(4),
                B(CreateMappedArguments),
                B(StaContextSlot), R(context), U8(5),
                B(Ldar), R(new_target),
                B(StaContextSlot), R(context), U8(6),
  /*   30 E> */ B(StackCheck),
  /*   34 S> */ B(LdaSmi), U8(20),
  /*   36 E> */ B(StaLookupSlotSloppy), U8(0),
  /*   42 S> */ B(LdaConstant), U8(1),
                B(Star), R(3),
                B(CallRuntimeForPair), U16(Runtime::kLoadLookupSlotForCall), R(3), U8(1), R(1),
                B(LdaConstant), U8(2),
                B(Star), R(3),
                B(LdaZero),
                B(Star), R(7),
                B(LdaSmi), U8(30),
                B(Star), R(8),
                B(LdaSmi), U8(49),
                B(Star), R(9),
                B(Mov), R(1), 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(1),
  /*   49 E> */ B(Call), R(1), R(2), U8(2), U8(0),
  /*   59 S> */ B(Return),
]
constant pool: [
  "x",
  "eval",
  "",
]
handlers: [
]

