#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: yes

---
snippet: "
  let 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),
  /*   42 S> */ B(LdaSmi), I8(10),
  /*   42 E> */ B(StaCurrentContextSlot), U8(4),
                B(LdaUndefined),
  /*   72 S> */ B(Return),
]
constant pool: [
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

---
snippet: "
  let 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),
  /*   42 S> */ B(LdaSmi), I8(10),
  /*   42 E> */ B(StaCurrentContextSlot), U8(4),
  /*   72 S> */ B(LdaImmutableCurrentContextSlot), U8(4),
  /*   81 S> */ B(Return),
]
constant pool: [
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

---
snippet: "
  let x = (x = 20); function f1() {return x;}
"
frame size: 3
parameter count: 1
bytecode array length: 30
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),
  /*   42 S> */ B(LdaSmi), I8(20),
                B(Star), R(2),
                B(LdaCurrentContextSlot), U8(4),
  /*   45 E> */ B(ThrowReferenceErrorIfHole), U8(1),
                B(Ldar), R(2),
                B(StaCurrentContextSlot), U8(4),
  /*   42 E> */ B(StaCurrentContextSlot), U8(4),
                B(LdaUndefined),
  /*   78 S> */ B(Return),
]
constant pool: [
  SHARED_FUNCTION_INFO_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["x"],
]
handlers: [
]

---
snippet: "
  let x = 10; x = 20; function f1() {return x;}
"
frame size: 2
parameter count: 1
bytecode array length: 24
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),
  /*   42 S> */ B(LdaSmi), I8(10),
  /*   42 E> */ B(StaCurrentContextSlot), U8(4),
  /*   46 S> */ B(LdaSmi), I8(20),
  /*   48 E> */ B(StaCurrentContextSlot), U8(4),
                B(LdaUndefined),
  /*   80 S> */ B(Return),
]
constant pool: [
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

