diff --git a/src/ast/nodes/SequenceExpression.js b/src/ast/nodes/SequenceExpression.js index 80077a4128c..72c8fbcd6b3 100644 --- a/src/ast/nodes/SequenceExpression.js +++ b/src/ast/nodes/SequenceExpression.js @@ -34,6 +34,10 @@ export default class SequenceExpression extends Node { const last = this.expressions[ this.expressions.length - 1 ]; last.render( code, es ); + if ( this.parent.type === 'CallExpression' && last.type === 'MemberExpression' && this.expressions.length > 1 ) { + this.expressions[0].included = true + } + const included = this.expressions.slice( 0, this.expressions.length - 1 ).filter( expression => expression.included ); if ( included.length === 0 ) { code.remove( this.start, last.start ); diff --git a/test/form/samples/sequence-expression/_expected/amd.js b/test/form/samples/sequence-expression/_expected/amd.js index 902ad8005b0..d611db56d40 100644 --- a/test/form/samples/sequence-expression/_expected/amd.js +++ b/test/form/samples/sequence-expression/_expected/amd.js @@ -20,4 +20,9 @@ define(function () { 'use strict'; // should properly render complex sub-expressions var g = ((() => {console.log(foo$1());})(), 1); + // should maintain this context + var module$1 = {}; + module$1.bar = function () { console.log( 'bar' );}; + var h = (0, module$1.bar)(); + }); diff --git a/test/form/samples/sequence-expression/_expected/cjs.js b/test/form/samples/sequence-expression/_expected/cjs.js index 01c5cdcbf11..411b417a05d 100644 --- a/test/form/samples/sequence-expression/_expected/cjs.js +++ b/test/form/samples/sequence-expression/_expected/cjs.js @@ -19,3 +19,8 @@ var e = (foo$1()); // should properly render complex sub-expressions var g = ((() => {console.log(foo$1());})(), 1); + +// should maintain this context +var module$1 = {}; +module$1.bar = function () { console.log( 'bar' );}; +var h = (0, module$1.bar)(); diff --git a/test/form/samples/sequence-expression/_expected/es.js b/test/form/samples/sequence-expression/_expected/es.js index 694de8abb64..34fe97a3298 100644 --- a/test/form/samples/sequence-expression/_expected/es.js +++ b/test/form/samples/sequence-expression/_expected/es.js @@ -17,3 +17,8 @@ var e = (foo$1()); // should properly render complex sub-expressions var g = ((() => {console.log(foo$1());})(), 1); + +// should maintain this context +var module$1 = {}; +module$1.bar = function () { console.log( 'bar' );}; +var h = (0, module$1.bar)(); diff --git a/test/form/samples/sequence-expression/_expected/iife.js b/test/form/samples/sequence-expression/_expected/iife.js index ad367be83c2..6bc76179c50 100644 --- a/test/form/samples/sequence-expression/_expected/iife.js +++ b/test/form/samples/sequence-expression/_expected/iife.js @@ -21,4 +21,9 @@ // should properly render complex sub-expressions var g = ((() => {console.log(foo$1());})(), 1); + // should maintain this context + var module$1 = {}; + module$1.bar = function () { console.log( 'bar' );}; + var h = (0, module$1.bar)(); + }()); diff --git a/test/form/samples/sequence-expression/_expected/umd.js b/test/form/samples/sequence-expression/_expected/umd.js index e75a869f169..518622dc5cb 100644 --- a/test/form/samples/sequence-expression/_expected/umd.js +++ b/test/form/samples/sequence-expression/_expected/umd.js @@ -24,4 +24,9 @@ // should properly render complex sub-expressions var g = ((() => {console.log(foo$1());})(), 1); + // should maintain this context + var module$1 = {}; + module$1.bar = function () { console.log( 'bar' );}; + var h = (0, module$1.bar)(); + }))); diff --git a/test/form/samples/sequence-expression/main.js b/test/form/samples/sequence-expression/main.js index c50e6cef4a2..df07eb0f1fb 100644 --- a/test/form/samples/sequence-expression/main.js +++ b/test/form/samples/sequence-expression/main.js @@ -21,3 +21,8 @@ var e = (0, f.foo()); // should properly render complex sub-expressions var g = ((() => {})(), (() => {console.log(f.foo())})(), 1); + +// should maintain this context +var module = {}; +module.bar = function () { console.log( 'bar' )}; +var h = (0, module.bar)(); diff --git a/test/function/samples/sequence-expression/_config.js b/test/function/samples/sequence-expression/_config.js new file mode 100644 index 00000000000..fbf4519aace --- /dev/null +++ b/test/function/samples/sequence-expression/_config.js @@ -0,0 +1,3 @@ +module.exports = { + description: 'do not change context of callable in sequence expressions' +}; diff --git a/test/function/samples/sequence-expression/main.js b/test/function/samples/sequence-expression/main.js new file mode 100644 index 00000000000..87f5db07c15 --- /dev/null +++ b/test/function/samples/sequence-expression/main.js @@ -0,0 +1,5 @@ + +// should maintain this context +var module = {}; +module.bar = function () { assert.notEqual(this, module); }; +var h = (0, module.bar)();