#
# Autogenerated by generate-bytecode-expectations.
#

---
pool type: string
execute: yes
wrap: no
test function name: f

---
snippet: "
  var global = 1;
  function f() { return ++global; }
  f();
"
frame size: 0
parameter count: 1
bytecode array length: 8
bytecodes: [
  /*   26 E> */ B(StackCheck),
  /*   31 S> */ B(LdaGlobal), U8(1),
                B(Inc),
  /*   40 E> */ B(StaGlobalSloppy), U8(0), U8(3),
  /*   48 S> */ B(Return),
]
constant pool: [
  "global",
]
handlers: [
]

---
snippet: "
  var global = 1;
  function f() { return global--; }
  f();
"
frame size: 1
parameter count: 1
bytecode array length: 12
bytecodes: [
  /*   26 E> */ B(StackCheck),
  /*   31 S> */ B(LdaGlobal), U8(1),
                B(ToNumber), R(0),
                B(Dec),
  /*   44 E> */ B(StaGlobalSloppy), U8(0), U8(3),
                B(Ldar), R(0),
  /*   48 S> */ B(Return),
]
constant pool: [
  "global",
]
handlers: [
]

---
snippet: "
  unallocated = 1;
  function f() { 'use strict'; return --unallocated; }
  f();
"
frame size: 0
parameter count: 1
bytecode array length: 8
bytecodes: [
  /*   27 E> */ B(StackCheck),
  /*   46 S> */ B(LdaGlobal), U8(1),
                B(Dec),
  /*   55 E> */ B(StaGlobalStrict), U8(0), U8(3),
  /*   68 S> */ B(Return),
]
constant pool: [
  "unallocated",
]
handlers: [
]

---
snippet: "
  unallocated = 1;
  function f() { return unallocated++; }
  f();
"
frame size: 1
parameter count: 1
bytecode array length: 12
bytecodes: [
  /*   27 E> */ B(StackCheck),
  /*   32 S> */ B(LdaGlobal), U8(1),
                B(ToNumber), R(0),
                B(Inc),
  /*   50 E> */ B(StaGlobalSloppy), U8(0), U8(3),
                B(Ldar), R(0),
  /*   54 S> */ B(Return),
]
constant pool: [
  "unallocated",
]
handlers: [
]

