#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: yes
test function name: f

---
snippet: "
  eval('var x = 10;'); return x;
"
frame size: 10
parameter count: 1
bytecode array length: 62
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),
  /*   10 E> */ B(StackCheck),
  /*   14 S> */ B(LdaLookupGlobalSlot), U8(0), U8(0), U8(1),
                B(Star), R(2),
                B(LdaConstant), U8(1),
                B(Star), R(3),
                B(LdaZero),
                B(Star), R(7),
                B(LdaSmi), I8(10),
                B(Star), R(8),
                B(LdaSmi), I8(14),
                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),
  /*   14 E> */ B(CallUndefinedReceiver1), R(2), R(3), U8(2),
  /*   35 S> */ B(LdaLookupGlobalSlot), U8(2), U8(4), U8(1),
  /*   44 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["eval"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["var x = 10;"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["x"],
]
handlers: [
]

---
snippet: "
  eval('var x = 10;'); return typeof x;
"
frame size: 10
parameter count: 1
bytecode array length: 63
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),
  /*   10 E> */ B(StackCheck),
  /*   14 S> */ B(LdaLookupGlobalSlot), U8(0), U8(0), U8(1),
                B(Star), R(2),
                B(LdaConstant), U8(1),
                B(Star), R(3),
                B(LdaZero),
                B(Star), R(7),
                B(LdaSmi), I8(10),
                B(Star), R(8),
                B(LdaSmi), I8(14),
                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),
  /*   14 E> */ B(CallUndefinedReceiver1), R(2), R(3), U8(2),
  /*   35 S> */ B(LdaLookupGlobalSlotInsideTypeof), U8(2), U8(4), U8(1),
                B(TypeOf),
  /*   51 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["eval"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["var x = 10;"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["x"],
]
handlers: [
]

---
snippet: "
  x = 20; return eval('');
"
frame size: 10
parameter count: 1
bytecode array length: 63
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),
  /*   10 E> */ B(StackCheck),
  /*   14 S> */ B(LdaSmi), I8(20),
  /*   16 E> */ B(StaLookupSlot), U8(0), U8(0),
  /*   22 S> */ B(LdaLookupGlobalSlot), U8(1), U8(0), U8(1),
                B(Star), R(2),
                B(LdaConstant), U8(2),
                B(Star), R(3),
                B(LdaZero),
                B(Star), R(7),
                B(LdaSmi), I8(10),
                B(Star), R(8),
                B(LdaSmi), I8(29),
                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),
  /*   29 E> */ B(CallUndefinedReceiver1), R(2), R(3), U8(2),
  /*   38 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["x"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["eval"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
]
handlers: [
]

---
snippet: "
  var x = 20;
  f = function(){
    eval('var x = 10');
    return x;
  }
  f();
"
frame size: 10
parameter count: 1
bytecode array length: 62
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),
  /*   38 E> */ B(StackCheck),
  /*   44 S> */ B(LdaLookupGlobalSlot), U8(0), U8(0), U8(1),
                B(Star), R(2),
                B(LdaConstant), U8(1),
                B(Star), R(3),
                B(LdaZero),
                B(Star), R(7),
                B(LdaSmi), I8(38),
                B(Star), R(8),
                B(LdaSmi), I8(44),
                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),
  /*   44 E> */ B(CallUndefinedReceiver1), R(2), R(3), U8(2),
  /*   66 S> */ B(LdaLookupContextSlot), U8(2), U8(6), U8(1),
  /*   75 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["eval"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["var x = 10"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["x"],
]
handlers: [
]

---
snippet: "
  x = 20;
  f = function(){
    eval('var x = 10');
    return x;
  }
  f();
"
frame size: 10
parameter count: 1
bytecode array length: 62
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),
  /*   34 E> */ B(StackCheck),
  /*   40 S> */ B(LdaLookupGlobalSlot), U8(0), U8(0), U8(1),
                B(Star), R(2),
                B(LdaConstant), U8(1),
                B(Star), R(3),
                B(LdaZero),
                B(Star), R(7),
                B(LdaSmi), I8(34),
                B(Star), R(8),
                B(LdaSmi), I8(40),
                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),
  /*   40 E> */ B(CallUndefinedReceiver1), R(2), R(3), U8(2),
  /*   62 S> */ B(LdaLookupGlobalSlot), U8(2), U8(4), U8(1),
  /*   71 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["eval"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["var x = 10"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["x"],
]
handlers: [
]

