#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: no
top level: yes
print callee: yes
oneshot opt: yes

---
snippet: "
  
        (function() {
          l = {};
          l.aa = 2;
          l.bb = l.aa;
          return arguments.callee;
        })();
  
"
frame size: 3
parameter count: 1
bytecode array length: 40
bytecodes: [
                B(CreateMappedArguments),
                B(Star), R(0),
  /*   16 E> */ B(StackCheck),
  /*   29 S> */ B(CreateEmptyObjectLiteral),
  /*   31 E> */ B(StaGlobal), U8(0), U8(0),
  /*   45 S> */ B(LdaGlobal), U8(0), U8(2),
                B(Star), R(1),
                B(LdaSmi), I8(2),
  /*   50 E> */ B(StaNamedPropertyNoFeedback), R(1), U8(1), U8(0),
  /*   63 S> */ B(LdaGlobal), U8(0), U8(2),
                B(Star), R(1),
  /*   70 E> */ B(LdaGlobal), U8(0), U8(2),
                B(Star), R(2),
  /*   72 E> */ B(LdaNamedPropertyNoFeedback), R(2), U8(1),
  /*   68 E> */ B(StaNamedPropertyNoFeedback), R(1), U8(2), U8(0),
  /*  101 S> */ B(LdaNamedPropertyNoFeedback), R(0), U8(3),
  /*  108 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["l"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["aa"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["bb"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["callee"],
]
handlers: [
]

---
snippet: "
  
        (function() {
          l = {};
          for (i = 0; i < 5; ++i) {
            l.aa = 2;
            l.bb = l.aa;
          }
          return arguments.callee;
        })();
  
"
frame size: 3
parameter count: 1
bytecode array length: 69
bytecodes: [
                B(CreateMappedArguments),
                B(Star), R(0),
  /*   16 E> */ B(StackCheck),
  /*   29 S> */ B(CreateEmptyObjectLiteral),
  /*   31 E> */ B(StaGlobal), U8(0), U8(0),
  /*   50 S> */ B(LdaZero),
  /*   52 E> */ B(StaGlobal), U8(1), U8(2),
  /*   59 S> */ B(LdaGlobal), U8(1), U8(4),
                B(Star), R(1),
                B(LdaSmi), I8(5),
  /*   59 E> */ B(TestLessThan), R(1), U8(6),
                B(JumpIfFalse), U8(43),
  /*   45 E> */ B(StackCheck),
  /*   81 S> */ B(LdaGlobal), U8(0), U8(7),
                B(Star), R(1),
                B(LdaSmi), I8(2),
  /*   86 E> */ B(StaNamedProperty), R(1), U8(2), U8(9),
  /*  101 S> */ B(LdaGlobal), U8(0), U8(7),
                B(Star), R(1),
  /*  108 E> */ B(LdaGlobal), U8(0), U8(7),
                B(Star), R(2),
  /*  110 E> */ B(LdaNamedProperty), R(2), U8(2), U8(11),
  /*  106 E> */ B(StaNamedProperty), R(1), U8(3), U8(13),
  /*   66 S> */ B(LdaGlobal), U8(1), U8(4),
                B(Inc), U8(15),
  /*   66 E> */ B(StaGlobal), U8(1), U8(2),
                B(JumpLoop), U8(50), I8(0),
  /*  149 S> */ B(LdaNamedPropertyNoFeedback), R(0), U8(4),
  /*  156 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["l"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["i"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["aa"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["bb"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["callee"],
]
handlers: [
]

---
snippet: "
  
        (function() {
          l = {};
          c = 4;
          while(c > 4) {
            l.aa = 2;
            l.bb = l.aa;
            c--;
          }
          return arguments.callee;
        })();
  
"
frame size: 3
parameter count: 1
bytecode array length: 70
bytecodes: [
                B(CreateMappedArguments),
                B(Star), R(0),
  /*   16 E> */ B(StackCheck),
  /*   29 S> */ B(CreateEmptyObjectLiteral),
  /*   31 E> */ B(StaGlobal), U8(0), U8(0),
  /*   45 S> */ B(LdaSmi), I8(4),
  /*   47 E> */ B(StaGlobal), U8(1), U8(2),
  /*   68 S> */ B(LdaGlobal), U8(1), U8(4),
                B(Star), R(1),
                B(LdaSmi), I8(4),
  /*   68 E> */ B(TestGreaterThan), R(1), U8(6),
                B(JumpIfFalse), U8(43),
  /*   60 E> */ B(StackCheck),
  /*   85 S> */ B(LdaGlobal), U8(0), U8(7),
                B(Star), R(1),
                B(LdaSmi), I8(2),
  /*   90 E> */ B(StaNamedProperty), R(1), U8(2), U8(9),
  /*  105 S> */ B(LdaGlobal), U8(0), U8(7),
                B(Star), R(1),
  /*  112 E> */ B(LdaGlobal), U8(0), U8(7),
                B(Star), R(2),
  /*  114 E> */ B(LdaNamedProperty), R(2), U8(2), U8(11),
  /*  110 E> */ B(StaNamedProperty), R(1), U8(3), U8(13),
  /*  128 S> */ B(LdaGlobal), U8(1), U8(4),
                B(Dec), U8(15),
  /*  129 E> */ B(StaGlobal), U8(1), U8(2),
                B(JumpLoop), U8(50), I8(0),
  /*  168 S> */ B(LdaNamedPropertyNoFeedback), R(0), U8(4),
  /*  175 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["l"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["c"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["aa"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["bb"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["callee"],
]
handlers: [
]

---
snippet: "
  
        (function() {
          l = {};
          c = 4;
          do {
            l.aa = 2;
            l.bb = l.aa;
            c--;
          } while(c > 4)
          return arguments.callee;
        })();
  
"
frame size: 3
parameter count: 1
bytecode array length: 70
bytecodes: [
                B(CreateMappedArguments),
                B(Star), R(0),
  /*   16 E> */ B(StackCheck),
  /*   29 S> */ B(CreateEmptyObjectLiteral),
  /*   31 E> */ B(StaGlobal), U8(0), U8(0),
  /*   45 S> */ B(LdaSmi), I8(4),
  /*   47 E> */ B(StaGlobal), U8(1), U8(2),
  /*   60 E> */ B(StackCheck),
  /*   75 S> */ B(LdaGlobal), U8(0), U8(4),
                B(Star), R(1),
                B(LdaSmi), I8(2),
  /*   80 E> */ B(StaNamedProperty), R(1), U8(2), U8(6),
  /*   95 S> */ B(LdaGlobal), U8(0), U8(4),
                B(Star), R(1),
  /*  102 E> */ B(LdaGlobal), U8(0), U8(4),
                B(Star), R(2),
  /*  104 E> */ B(LdaNamedProperty), R(2), U8(2), U8(8),
  /*  100 E> */ B(StaNamedProperty), R(1), U8(3), U8(10),
  /*  118 S> */ B(LdaGlobal), U8(1), U8(12),
                B(Dec), U8(14),
  /*  119 E> */ B(StaGlobal), U8(1), U8(2),
  /*  141 S> */ B(LdaGlobal), U8(1), U8(12),
                B(Star), R(1),
                B(LdaSmi), I8(4),
  /*  141 E> */ B(TestGreaterThan), R(1), U8(15),
                B(JumpIfFalse), U8(5),
                B(JumpLoop), U8(50), I8(0),
  /*  171 S> */ B(LdaNamedPropertyNoFeedback), R(0), U8(4),
  /*  178 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["l"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["c"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["aa"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["bb"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["callee"],
]
handlers: [
]

---
snippet: "
  
        (function() {
          l = {
            'aa': 3.3,
            'bb': 4.4
          };
          if (l.aa < 3) {
            l.aa = 3;
          } else {
            l.aa = l.bb;
          }
          return arguments.callee;
        })();
  
"
frame size: 4
parameter count: 1
bytecode array length: 71
bytecodes: [
                B(CreateMappedArguments),
                B(Star), R(0),
  /*   16 E> */ B(StackCheck),
  /*   29 S> */ B(LdaConstant), U8(0),
                B(Star), R(2),
                B(LdaSmi), I8(41),
                B(Star), R(3),
                B(CallRuntime), U16(Runtime::kCreateObjectLiteralWithoutAllocationSite), R(2), U8(2),
  /*   31 E> */ B(StaGlobal), U8(1), U8(0),
  /*   95 S> */ B(LdaGlobal), U8(1), U8(2),
                B(Star), R(1),
  /*  101 E> */ B(LdaNamedPropertyNoFeedback), R(1), U8(2),
                B(Star), R(1),
                B(LdaSmi), I8(3),
  /*  104 E> */ B(TestLessThan), R(1), U8(4),
                B(JumpIfFalse), U8(15),
  /*  121 S> */ B(LdaGlobal), U8(1), U8(2),
                B(Star), R(1),
                B(LdaSmi), I8(3),
  /*  126 E> */ B(StaNamedPropertyNoFeedback), R(1), U8(2), U8(0),
                B(Jump), U8(19),
  /*  158 S> */ B(LdaGlobal), U8(1), U8(2),
                B(Star), R(1),
  /*  165 E> */ B(LdaGlobal), U8(1), U8(2),
                B(Star), R(2),
  /*  167 E> */ B(LdaNamedPropertyNoFeedback), R(2), U8(3),
  /*  163 E> */ B(StaNamedPropertyNoFeedback), R(1), U8(2), U8(0),
  /*  206 S> */ B(LdaNamedPropertyNoFeedback), R(0), U8(4),
  /*  213 S> */ B(Return),
]
constant pool: [
  OBJECT_BOILERPLATE_DESCRIPTION_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["l"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["aa"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["bb"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["callee"],
]
handlers: [
]

---
snippet: "
  
        (function() {
          a = [0, [1, 1,2,], 3];
          return arguments.callee;
        })();
  
"
frame size: 5
parameter count: 1
bytecode array length: 24
bytecodes: [
                B(CreateMappedArguments),
                B(Star), R(0),
  /*   16 E> */ B(StackCheck),
  /*   29 S> */ B(LdaConstant), U8(0),
                B(Star), R(3),
                B(LdaSmi), I8(4),
                B(Star), R(4),
                B(CallRuntime), U16(Runtime::kCreateArrayLiteralWithoutAllocationSite), R(3), U8(2),
  /*   31 E> */ B(StaGlobal), U8(1), U8(0),
  /*   77 S> */ B(LdaNamedPropertyNoFeedback), R(0), U8(2),
  /*   84 S> */ B(Return),
]
constant pool: [
  ARRAY_BOILERPLATE_DESCRIPTION_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["a"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["callee"],
]
handlers: [
]

---
snippet: "
  
        (function() {
          a = [];
          return arguments.callee;
        })();
  
"
frame size: 5
parameter count: 1
bytecode array length: 24
bytecodes: [
                B(CreateMappedArguments),
                B(Star), R(0),
  /*   16 E> */ B(StackCheck),
  /*   29 S> */ B(LdaConstant), U8(0),
                B(Star), R(3),
                B(LdaSmi), I8(37),
                B(Star), R(4),
                B(CallRuntime), U16(Runtime::kCreateArrayLiteralWithoutAllocationSite), R(3), U8(2),
  /*   31 E> */ B(StaGlobal), U8(1), U8(0),
  /*   62 S> */ B(LdaNamedPropertyNoFeedback), R(0), U8(2),
  /*   69 S> */ B(Return),
]
constant pool: [
  ARRAY_BOILERPLATE_DESCRIPTION_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["a"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["callee"],
]
handlers: [
]

---
snippet: "
  
        this.f0 = function() {};
        this.f1 = function(a) {};
        this.f2 = function(a, b) {};
        this.f3 = function(a, b, c) {};
        this.f4 = function(a, b, c, d) {};
        this.f5 = function(a, b, c, d, e) {};
        (function() {
          this.f0();
          this.f1(1);
          this.f2(1, 2);
          this.f3(1, 2, 3);
          this.f4(1, 2, 3, 4);
          this.f5(1, 2, 3, 4, 5);
          return arguments.callee;
        })();
  
"
frame size: 8
parameter count: 1
bytecode array length: 137
bytecodes: [
                B(CreateMappedArguments),
                B(Star), R(0),
  /*  237 E> */ B(StackCheck),
  /*  255 S> */ B(LdaNamedPropertyNoFeedback), R(this), U8(0),
                B(Star), R(1),
  /*  255 E> */ B(CallNoFeedback), R(1), R(this), U8(1),
  /*  274 S> */ B(LdaNamedPropertyNoFeedback), R(this), U8(1),
                B(Star), R(1),
                B(LdaSmi), I8(1),
                B(Star), R(3),
                B(Mov), R(this), R(2),
  /*  274 E> */ B(CallNoFeedback), R(1), R(2), U8(2),
  /*  294 S> */ B(LdaNamedPropertyNoFeedback), R(this), U8(2),
                B(Star), R(1),
                B(LdaSmi), I8(1),
                B(Star), R(3),
                B(LdaSmi), I8(2),
                B(Star), R(4),
                B(Mov), R(this), R(2),
  /*  294 E> */ B(CallNoFeedback), R(1), R(2), U8(3),
  /*  317 S> */ B(LdaNamedPropertyNoFeedback), R(this), U8(3),
                B(Star), R(1),
                B(LdaSmi), I8(1),
                B(Star), R(3),
                B(LdaSmi), I8(2),
                B(Star), R(4),
                B(LdaSmi), I8(3),
                B(Star), R(5),
                B(Mov), R(this), R(2),
  /*  317 E> */ B(CallNoFeedback), R(1), R(2), U8(4),
  /*  343 S> */ B(LdaNamedPropertyNoFeedback), R(this), U8(4),
                B(Star), R(1),
                B(LdaSmi), I8(1),
                B(Star), R(3),
                B(LdaSmi), I8(2),
                B(Star), R(4),
                B(LdaSmi), I8(3),
                B(Star), R(5),
                B(LdaSmi), I8(4),
                B(Star), R(6),
                B(Mov), R(this), R(2),
  /*  343 E> */ B(CallNoFeedback), R(1), R(2), U8(5),
  /*  372 S> */ B(LdaNamedPropertyNoFeedback), R(this), U8(5),
                B(Star), R(1),
                B(LdaSmi), I8(1),
                B(Star), R(3),
                B(LdaSmi), I8(2),
                B(Star), R(4),
                B(LdaSmi), I8(3),
                B(Star), R(5),
                B(LdaSmi), I8(4),
                B(Star), R(6),
                B(LdaSmi), I8(5),
                B(Star), R(7),
                B(Mov), R(this), R(2),
  /*  372 E> */ B(CallNoFeedback), R(1), R(2), U8(6),
  /*  416 S> */ B(LdaNamedPropertyNoFeedback), R(0), U8(6),
  /*  423 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["f0"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["f1"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["f2"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["f3"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["f4"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["f5"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["callee"],
]
handlers: [
]

---
snippet: "
  
        function f0() {}
        function f1(a) {}
        function f2(a, b) {}
        function f3(a, b, c) {}
        function f4(a, b, c, d) {}
        function f5(a, b, c, d, e) {}
        (function() {
          f0();
          f1(1);
          f2(1, 2);
          f3(1, 2, 3);
          f4(1, 2, 3, 4);
          f5(1, 2, 3, 4, 5);
          return arguments.callee;
        })();
  
"
frame size: 8
parameter count: 1
bytecode array length: 140
bytecodes: [
                B(CreateMappedArguments),
                B(Star), R(0),
  /*  189 E> */ B(StackCheck),
  /*  202 S> */ B(LdaUndefined),
                B(Star), R(2),
                B(LdaGlobal), U8(0), U8(0),
                B(Star), R(1),
  /*  202 E> */ B(CallNoFeedback), R(1), R(2), U8(1),
  /*  216 S> */ B(LdaUndefined),
                B(Star), R(2),
                B(LdaGlobal), U8(1), U8(2),
                B(Star), R(1),
                B(LdaSmi), I8(1),
                B(Star), R(3),
  /*  216 E> */ B(CallNoFeedback), R(1), R(2), U8(2),
  /*  231 S> */ B(LdaUndefined),
                B(Star), R(2),
                B(LdaGlobal), U8(2), U8(4),
                B(Star), R(1),
                B(LdaSmi), I8(1),
                B(Star), R(3),
                B(LdaSmi), I8(2),
                B(Star), R(4),
  /*  231 E> */ B(CallNoFeedback), R(1), R(2), U8(3),
  /*  249 S> */ B(LdaUndefined),
                B(Star), R(2),
                B(LdaGlobal), U8(3), U8(6),
                B(Star), R(1),
                B(LdaSmi), I8(1),
                B(Star), R(3),
                B(LdaSmi), I8(2),
                B(Star), R(4),
                B(LdaSmi), I8(3),
                B(Star), R(5),
  /*  249 E> */ B(CallNoFeedback), R(1), R(2), U8(4),
  /*  270 S> */ B(LdaUndefined),
                B(Star), R(2),
                B(LdaGlobal), U8(4), U8(8),
                B(Star), R(1),
                B(LdaSmi), I8(1),
                B(Star), R(3),
                B(LdaSmi), I8(2),
                B(Star), R(4),
                B(LdaSmi), I8(3),
                B(Star), R(5),
                B(LdaSmi), I8(4),
                B(Star), R(6),
  /*  270 E> */ B(CallNoFeedback), R(1), R(2), U8(5),
  /*  294 S> */ B(LdaUndefined),
                B(Star), R(2),
                B(LdaGlobal), U8(5), U8(10),
                B(Star), R(1),
                B(LdaSmi), I8(1),
                B(Star), R(3),
                B(LdaSmi), I8(2),
                B(Star), R(4),
                B(LdaSmi), I8(3),
                B(Star), R(5),
                B(LdaSmi), I8(4),
                B(Star), R(6),
                B(LdaSmi), I8(5),
                B(Star), R(7),
  /*  294 E> */ B(CallNoFeedback), R(1), R(2), U8(6),
  /*  338 S> */ B(LdaNamedPropertyNoFeedback), R(0), U8(6),
  /*  345 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["f0"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["f1"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["f2"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["f3"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["f4"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["f5"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["callee"],
]
handlers: [
]

---
snippet: "
  
        var t = 0;
        function f2() {};
        if (t == 0) {
          (function(){
            l = {};
            l.a = 3;
            l.b = 4;
            f2();
            return arguments.callee;
          })();
        }
  
"
frame size: 2
parameter count: 1
bytecode array length: 43
bytecodes: [
                B(CreateMappedArguments),
                B(Star), R(0),
  /*   79 E> */ B(StackCheck),
  /*   93 S> */ B(CreateEmptyObjectLiteral),
  /*   95 E> */ B(StaGlobal), U8(0), U8(0),
  /*  111 S> */ B(LdaGlobal), U8(0), U8(2),
                B(Star), R(1),
                B(LdaSmi), I8(3),
  /*  115 E> */ B(StaNamedProperty), R(1), U8(1), U8(4),
  /*  130 S> */ B(LdaGlobal), U8(0), U8(2),
                B(Star), R(1),
                B(LdaSmi), I8(4),
  /*  134 E> */ B(StaNamedProperty), R(1), U8(2), U8(6),
  /*  149 S> */ B(LdaGlobal), U8(3), U8(8),
                B(Star), R(1),
  /*  149 E> */ B(CallUndefinedReceiver0), R(1), U8(10),
  /*  182 S> */ B(LdaNamedProperty), R(0), U8(4), U8(12),
  /*  189 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["l"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["a"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["b"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["f2"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["callee"],
]
handlers: [
]

---
snippet: "
  
          function f2() {};
          function f() {
            return (function(){
              l = {};
              l.a = 3;
              l.b = 4;
              f2();
              return arguments.callee;
            })();
          }
          f();
  
"
frame size: 2
parameter count: 1
bytecode array length: 43
bytecodes: [
                B(CreateMappedArguments),
                B(Star), R(0),
  /*   76 E> */ B(StackCheck),
  /*   92 S> */ B(CreateEmptyObjectLiteral),
  /*   94 E> */ B(StaGlobal), U8(0), U8(0),
  /*  112 S> */ B(LdaGlobal), U8(0), U8(2),
                B(Star), R(1),
                B(LdaSmi), I8(3),
  /*  116 E> */ B(StaNamedProperty), R(1), U8(1), U8(4),
  /*  133 S> */ B(LdaGlobal), U8(0), U8(2),
                B(Star), R(1),
                B(LdaSmi), I8(4),
  /*  137 E> */ B(StaNamedProperty), R(1), U8(2), U8(6),
  /*  154 S> */ B(LdaGlobal), U8(3), U8(8),
                B(Star), R(1),
  /*  154 E> */ B(CallUndefinedReceiver0), R(1), U8(10),
  /*  189 S> */ B(LdaNamedProperty), R(0), U8(4), U8(12),
  /*  196 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["l"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["a"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["b"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["f2"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["callee"],
]
handlers: [
]

---
snippet: "
  
          var f = function(l) {  l.a = 3; return l; };
          f({});
          f;
  
"
frame size: 0
parameter count: 2
bytecode array length: 10
bytecodes: [
  /*   25 E> */ B(StackCheck),
  /*   32 S> */ B(LdaSmi), I8(3),
  /*   36 E> */ B(StaNamedProperty), R(arg0), U8(0), U8(0),
  /*   41 S> */ B(Ldar), R(arg0),
  /*   50 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["a"],
]
handlers: [
]

---
snippet: "
  
          var f = (function(l) {  l.a = 3; return l; });
          f;
  
"
frame size: 0
parameter count: 2
bytecode array length: 10
bytecodes: [
  /*   26 E> */ B(StackCheck),
  /*   33 S> */ B(LdaSmi), I8(3),
  /*   37 E> */ B(StaNamedProperty), R(arg0), U8(0), U8(0),
  /*   42 S> */ B(Ldar), R(arg0),
  /*   51 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["a"],
]
handlers: [
]

---
snippet: "
  
          var f = (function foo(l) {  l.a = 3; return l; });
          f;
  
"
frame size: 0
parameter count: 2
bytecode array length: 10
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   37 S> */ B(LdaSmi), I8(3),
  /*   41 E> */ B(StaNamedProperty), R(arg0), U8(0), U8(0),
  /*   46 S> */ B(Ldar), R(arg0),
  /*   55 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["a"],
]
handlers: [
]

---
snippet: "
  
          var f = function foo(l) {  l.a = 3; return l; };
          f({});
          f;
  
"
frame size: 0
parameter count: 2
bytecode array length: 10
bytecodes: [
  /*   29 E> */ B(StackCheck),
  /*   36 S> */ B(LdaSmi), I8(3),
  /*   40 E> */ B(StaNamedProperty), R(arg0), U8(0), U8(0),
  /*   45 S> */ B(Ldar), R(arg0),
  /*   54 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["a"],
]
handlers: [
]

---
snippet: "
  
          l = {};
          var f = (function foo(l) {  l.a = 3; return arguments.callee; })(l);
          f;
  
"
frame size: 3
parameter count: 2
bytecode array length: 27
bytecodes: [
                B(CreateFunctionContext), U8(0), U8(1),
                B(PushContext), R(1),
                B(Ldar), R(arg0),
                B(StaCurrentContextSlot), U8(4),
                B(CreateMappedArguments),
                B(Star), R(0),
  /*   46 E> */ B(StackCheck),
  /*   53 S> */ B(LdaCurrentContextSlot), U8(4),
                B(Star), R(2),
                B(LdaSmi), I8(3),
  /*   57 E> */ B(StaNamedPropertyNoFeedback), R(2), U8(1), U8(0),
  /*   79 S> */ B(LdaNamedPropertyNoFeedback), R(0), U8(2),
  /*   86 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["a"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["callee"],
]
handlers: [
]

---
snippet: "
  
          var f = (function foo(l) {  l.a = 3; return arguments.callee; })({});
          f;
  
"
frame size: 3
parameter count: 2
bytecode array length: 27
bytecodes: [
                B(CreateFunctionContext), U8(0), U8(1),
                B(PushContext), R(1),
                B(Ldar), R(arg0),
                B(StaCurrentContextSlot), U8(4),
                B(CreateMappedArguments),
                B(Star), R(0),
  /*   30 E> */ B(StackCheck),
  /*   37 S> */ B(LdaCurrentContextSlot), U8(4),
                B(Star), R(2),
                B(LdaSmi), I8(3),
  /*   41 E> */ B(StaNamedPropertyNoFeedback), R(2), U8(1), U8(0),
  /*   63 S> */ B(LdaNamedPropertyNoFeedback), R(0), U8(2),
  /*   70 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["a"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["callee"],
]
handlers: [
]

