#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: yes

---
snippet: "
  const x = 10; function f1() {return x;}
"
frame size: 2
parameter count: 1
bytecode array length: 20
bytecodes: [
                B(CreateFunctionContext), U8(1),
                B(PushContext), R(1),
                B(LdaTheHole),
                B(StaCurrentContextSlot), U8(4),
                B(CreateClosure), U8(0), U8(0), U8(2),
                B(Star), R(0),
  /*   30 E> */ B(StackCheck),
  /*   44 S> */ B(LdaSmi), I8(10),
  /*   44 E> */ B(StaCurrentContextSlot), U8(4),
                B(LdaUndefined),
  /*   74 S> */ B(Return),
]
constant pool: [
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

---
snippet: "
  const x = 10; function f1() {return x;} return x;
"
frame size: 2
parameter count: 1
bytecode array length: 21
bytecodes: [
                B(CreateFunctionContext), U8(1),
                B(PushContext), R(1),
                B(LdaTheHole),
                B(StaCurrentContextSlot), U8(4),
                B(CreateClosure), U8(0), U8(0), U8(2),
                B(Star), R(0),
  /*   30 E> */ B(StackCheck),
  /*   44 S> */ B(LdaSmi), I8(10),
  /*   44 E> */ B(StaCurrentContextSlot), U8(4),
  /*   74 S> */ B(LdaImmutableCurrentContextSlot), U8(4),
  /*   83 S> */ B(Return),
]
constant pool: [
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

---
snippet: "
  const x = (x = 20); function f1() {return x;}
"
frame size: 3
parameter count: 1
bytecode array length: 31
bytecodes: [
                B(CreateFunctionContext), U8(1),
                B(PushContext), R(1),
                B(LdaTheHole),
                B(StaCurrentContextSlot), U8(4),
                B(CreateClosure), U8(0), U8(0), U8(2),
                B(Star), R(0),
  /*   30 E> */ B(StackCheck),
  /*   44 S> */ B(LdaSmi), I8(20),
                B(Star), R(2),
                B(LdaCurrentContextSlot), U8(4),
  /*   47 E> */ B(ThrowReferenceErrorIfHole), U8(1),
                B(CallRuntime), U16(Runtime::kThrowConstAssignError), R(0), U8(0),
  /*   44 E> */ B(StaCurrentContextSlot), U8(4),
                B(LdaUndefined),
  /*   80 S> */ B(Return),
]
constant pool: [
  SHARED_FUNCTION_INFO_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["x"],
]
handlers: [
]

---
snippet: "
  const x = 10; x = 20; function f1() {return x;}
"
frame size: 2
parameter count: 1
bytecode array length: 27
bytecodes: [
                B(CreateFunctionContext), U8(1),
                B(PushContext), R(1),
                B(LdaTheHole),
                B(StaCurrentContextSlot), U8(4),
                B(CreateClosure), U8(0), U8(0), U8(2),
                B(Star), R(0),
  /*   30 E> */ B(StackCheck),
  /*   44 S> */ B(LdaSmi), I8(10),
  /*   44 E> */ B(StaCurrentContextSlot), U8(4),
  /*   48 S> */ B(LdaSmi), I8(20),
  /*   50 E> */ B(CallRuntime), U16(Runtime::kThrowConstAssignError), R(0), U8(0),
                B(LdaUndefined),
  /*   82 S> */ B(Return),
]
constant pool: [
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

