// deoptimize `arguments` in the arrow's closest enclosing non-arrow-function // non-arrow-function -> arrow function a = 0; (function() { a = (() => eval("arguments"))(); })(1, 2, 3, 4); assertEq(a.length, 4); // non-arrow-function -> arrow function -> arrow function a = 0; (function() { (() => { a = (() => eval("arguments"))(); })(); })(1, 2, 3, 4); assertEq(a.length, 4); // non-arrow-function -> arrow function -> non-arrow-function -> arrow function a = 0; (function() { (() => { (function () { a = (() => eval("arguments"))(); })(1, 2, 3, 4); })(); })(); assertEq(a.length, 4);