michael@0: "use strict"; michael@0: michael@0: let global = this; michael@0: let p = {}; michael@0: let q = {}; michael@0: michael@0: let g1 = function() { michael@0: assertEq(this, undefined); michael@0: }; michael@0: g1(...[]); michael@0: michael@0: let g2 = x => { michael@0: assertEq(this, global); michael@0: }; michael@0: g2(...[]); michael@0: michael@0: let g3 = function() { michael@0: assertEq(this, p); michael@0: }; michael@0: g3.apply(p, ...[]); michael@0: g3.call(p, ...[]); michael@0: michael@0: g2.apply(p, ...[]); michael@0: g2.call(p, ...[]); michael@0: michael@0: let o = { michael@0: f1: function() { michael@0: assertEq(this, o); michael@0: michael@0: let g1 = function() { michael@0: assertEq(this, undefined); michael@0: }; michael@0: g1(...[]); michael@0: michael@0: let g2 = x => { michael@0: assertEq(this, o); michael@0: }; michael@0: g2(...[]); michael@0: michael@0: let g3 = function() { michael@0: assertEq(this, q); michael@0: }; michael@0: g3.apply(q, ...[]); michael@0: g3.call(q, ...[]); michael@0: michael@0: let g4 = x => { michael@0: assertEq(this, o); michael@0: }; michael@0: g4.apply(q, ...[]); michael@0: g4.call(q, ...[]); michael@0: }, michael@0: f2: x => { michael@0: assertEq(this, global); michael@0: let g1 = function() { michael@0: assertEq(this, undefined); michael@0: }; michael@0: g1(...[]); michael@0: michael@0: let g2 = x => { michael@0: assertEq(this, global); michael@0: }; michael@0: g2(...[]); michael@0: michael@0: let g3 = function() { michael@0: assertEq(this, q); michael@0: }; michael@0: g3.apply(q, ...[]); michael@0: g3.call(q, ...[]); michael@0: michael@0: let g4 = x => { michael@0: assertEq(this, global); michael@0: }; michael@0: g4.apply(q, ...[]); michael@0: g4.call(q, ...[]); michael@0: }, michael@0: f3: function() { michael@0: assertEq(this, p); michael@0: michael@0: let g1 = function() { michael@0: assertEq(this, undefined); michael@0: }; michael@0: g1(...[]); michael@0: michael@0: let g2 = x => { michael@0: assertEq(this, p); michael@0: }; michael@0: g2(...[]); michael@0: michael@0: let g3 = function() { michael@0: assertEq(this, q); michael@0: }; michael@0: g3.apply(q, ...[]); michael@0: g3.call(q, ...[]); michael@0: michael@0: let g4 = x => { michael@0: assertEq(this, p); michael@0: }; michael@0: g4.apply(q, ...[]); michael@0: g4.call(q, ...[]); michael@0: } michael@0: }; michael@0: o.f1(...[]); michael@0: o.f2(...[]); michael@0: o.f3.apply(p, ...[]); michael@0: o.f2.apply(p, ...[]);