| let global = this; |
| let p = {}; |
| let q = {}; |
| |
| let g1 = function() { |
| assertEq(this, global); |
| assertEq(arguments.callee, g1); |
| }; |
| g1(...[]); |
| |
| let g2 = x => { |
| assertEq(this, global); |
| // arguments.callee is unbound function object, and following assertion fails. |
| // see Bug 889158 |
| //assertEq(arguments.callee, g2); |
| }; |
| g2(...[]); |
| |
| let g3 = function() { |
| assertEq(this, p); |
| assertEq(arguments.callee, g3); |
| }; |
| g3.apply(p, ...[]); |
| g3.call(p, ...[]); |
| |
| g2.apply(p, ...[]); |
| g2.call(p, ...[]); |
| |
| let o = { |
| f1: function() { |
| assertEq(this, o); |
| assertEq(arguments.callee, o.f1); |
| |
| let g1 = function() { |
| assertEq(this, global); |
| assertEq(arguments.callee, g1); |
| }; |
| g1(...[]); |
| |
| let g2 = x => { |
| assertEq(this, o); |
| //assertEq(arguments.callee, g2); |
| }; |
| g2(...[]); |
| |
| let g3 = function() { |
| assertEq(this, q); |
| assertEq(arguments.callee, g3); |
| }; |
| g3.apply(q, ...[]); |
| g3.call(q, ...[]); |
| |
| let g4 = x => { |
| assertEq(this, o); |
| //assertEq(arguments.callee, g4); |
| }; |
| g4.apply(q, ...[]); |
| g4.call(q, ...[]); |
| }, |
| f2: x => { |
| assertEq(this, global); |
| //assertEq(arguments.callee, o.f2); |
| let g1 = function() { |
| assertEq(this, global); |
| assertEq(arguments.callee, g1); |
| }; |
| g1(...[]); |
| |
| let g2 = x => { |
| assertEq(this, global); |
| //assertEq(arguments.callee, g2); |
| }; |
| g2(...[]); |
| |
| let g3 = function() { |
| assertEq(this, q); |
| assertEq(arguments.callee, g3); |
| }; |
| g3.apply(q, ...[]); |
| g3.call(q, ...[]); |
| |
| let g4 = x => { |
| assertEq(this, global); |
| //assertEq(arguments.callee, g4); |
| }; |
| g4.apply(q, ...[]); |
| g4.call(q, ...[]); |
| }, |
| f3: function() { |
| assertEq(this, p); |
| assertEq(arguments.callee, o.f3); |
| |
| let g1 = function() { |
| assertEq(this, global); |
| assertEq(arguments.callee, g1); |
| }; |
| g1(...[]); |
| |
| let g2 = x => { |
| assertEq(this, p); |
| //assertEq(arguments.callee, g2); |
| }; |
| g2(...[]); |
| |
| let g3 = function() { |
| assertEq(this, q); |
| assertEq(arguments.callee, g3); |
| }; |
| g3.apply(q, ...[]); |
| g3.call(q, ...[]); |
| |
| let g4 = x => { |
| assertEq(this, p); |
| //assertEq(arguments.callee, g4); |
| }; |
| g4.apply(q, ...[]); |
| g4.call(q, ...[]); |
| } |
| }; |
| o.f1(...[]); |
| o.f2(...[]); |
| o.f3.apply(p, ...[]); |
| o.f2.apply(p, ...[]); |