|
|
@ -52,7 +52,6 @@ export default class Statement { |
|
|
|
this.dependantIds = []; |
|
|
|
this.namespaceReplacements = []; |
|
|
|
|
|
|
|
this.hasSideEffects = false; |
|
|
|
this.isIncluded = false; |
|
|
|
|
|
|
|
this.isImportDeclaration = node.type === 'ImportDeclaration'; |
|
|
@ -173,19 +172,6 @@ export default class Statement { |
|
|
|
if ( isFunctionDeclaration( node, parent ) ) writeDepth += 1; |
|
|
|
if ( /Function/.test( node.type ) && !isIife( node, parent ) ) readDepth += 1; |
|
|
|
|
|
|
|
// If this is a top-level call expression, or an assignment to a global,
|
|
|
|
// this statement will need to be marked
|
|
|
|
if ( !readDepth ) { |
|
|
|
if ( node.type === 'CallExpression' ) { |
|
|
|
this.hasSideEffects = true; |
|
|
|
} else if ( node.type in modifierNodes ) { |
|
|
|
let subject = node[ modifierNodes[ node.type ] ]; |
|
|
|
while ( subject.type === 'MemberExpression' ) subject = subject.object; |
|
|
|
|
|
|
|
if ( !this.module.locals.defines( subject.name ) ) this.hasSideEffects = true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if ( node._scope ) scope = node._scope; |
|
|
|
|
|
|
|
this.checkForReads( scope, node, parent, !readDepth ); |
|
|
@ -411,6 +397,29 @@ export default class Statement { |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
markSideEffect () { |
|
|
|
const statement = this; |
|
|
|
|
|
|
|
walk( this.node, { |
|
|
|
enter ( node, parent ) { |
|
|
|
if ( /Function/.test( node.type ) && !isIife( node, parent ) ) return this.skip(); |
|
|
|
|
|
|
|
// If this is a top-level call expression, or an assignment to a global,
|
|
|
|
// this statement will need to be marked
|
|
|
|
if ( node.type === 'CallExpression' ) { |
|
|
|
statement.mark(); |
|
|
|
} |
|
|
|
|
|
|
|
else if ( node.type in modifierNodes ) { |
|
|
|
let subject = node[ modifierNodes[ node.type ] ]; |
|
|
|
while ( subject.type === 'MemberExpression' ) subject = subject.object; |
|
|
|
|
|
|
|
if ( statement.module.bundle.globals.defines( subject.name ) ) statement.mark(); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
replaceIdentifiers ( magicString, names, bundleExports ) { |
|
|
|
const statement = this; |
|
|
|
|
|
|
|