diff --git a/src/ast/nodes/ThrowStatement.js b/src/ast/nodes/ThrowStatement.js index 4e9047b..b9a8aa3 100644 --- a/src/ast/nodes/ThrowStatement.js +++ b/src/ast/nodes/ThrowStatement.js @@ -1,7 +1,7 @@ import Node from '../Node.js'; export default class ThrowStatement extends Node { - hasEffects ( scope ) { - return scope.findLexicalBoundary().isModuleScope; // TODO should this just be `true`? probably... + hasEffects () { + return true; } } diff --git a/test/form/side-effect-h/_config.js b/test/form/side-effect-h/_config.js index 835691b..538fccc 100644 --- a/test/form/side-effect-h/_config.js +++ b/test/form/side-effect-h/_config.js @@ -1,5 +1,5 @@ module.exports = { - description: 'excludes non-top-level throw statements', + description: 'includes throw statements', options: { moduleName: 'myBundle' } diff --git a/test/form/side-effect-h/_expected/amd.js b/test/form/side-effect-h/_expected/amd.js index 37d2571..ab252ed 100644 --- a/test/form/side-effect-h/_expected/amd.js +++ b/test/form/side-effect-h/_expected/amd.js @@ -1,5 +1,13 @@ define(function () { 'use strict'; + function foo ( ok ) { + if ( !ok ) { + throw new Error( 'this will be ignored' ); + } + } + + foo(); + var main = 42; return main; diff --git a/test/form/side-effect-h/_expected/cjs.js b/test/form/side-effect-h/_expected/cjs.js index 5a370cd..1d43729 100644 --- a/test/form/side-effect-h/_expected/cjs.js +++ b/test/form/side-effect-h/_expected/cjs.js @@ -1,5 +1,13 @@ 'use strict'; +function foo ( ok ) { + if ( !ok ) { + throw new Error( 'this will be ignored' ); + } +} + +foo(); + var main = 42; module.exports = main; diff --git a/test/form/side-effect-h/_expected/es.js b/test/form/side-effect-h/_expected/es.js index d862de8..1462a92 100644 --- a/test/form/side-effect-h/_expected/es.js +++ b/test/form/side-effect-h/_expected/es.js @@ -1,3 +1,11 @@ +function foo ( ok ) { + if ( !ok ) { + throw new Error( 'this will be ignored' ); + } +} + +foo(); + var main = 42; export default main; diff --git a/test/form/side-effect-h/_expected/iife.js b/test/form/side-effect-h/_expected/iife.js index 69d1387..286de2a 100644 --- a/test/form/side-effect-h/_expected/iife.js +++ b/test/form/side-effect-h/_expected/iife.js @@ -1,6 +1,14 @@ var myBundle = (function () { 'use strict'; + function foo ( ok ) { + if ( !ok ) { + throw new Error( 'this will be ignored' ); + } + } + + foo(); + var main = 42; return main; diff --git a/test/form/side-effect-h/_expected/umd.js b/test/form/side-effect-h/_expected/umd.js index 2194031..8fabe32 100644 --- a/test/form/side-effect-h/_expected/umd.js +++ b/test/form/side-effect-h/_expected/umd.js @@ -4,8 +4,16 @@ (global.myBundle = factory()); }(this, (function () { 'use strict'; + function foo ( ok ) { + if ( !ok ) { + throw new Error( 'this will be ignored' ); + } + } + + foo(); + var main = 42; return main; -}))); \ No newline at end of file +}))); diff --git a/test/form/side-effect-t/_config.js b/test/form/side-effect-t/_config.js new file mode 100644 index 0000000..2e437d7 --- /dev/null +++ b/test/form/side-effect-t/_config.js @@ -0,0 +1,6 @@ +module.exports = { + description: 'throw statement is a side effect', + options: { + moduleName: 'myBundle' + } +}; diff --git a/test/form/side-effect-t/_expected/amd.js b/test/form/side-effect-t/_expected/amd.js new file mode 100644 index 0000000..aeb4d72 --- /dev/null +++ b/test/form/side-effect-t/_expected/amd.js @@ -0,0 +1,9 @@ +define(function () { 'use strict'; + + function foo () { + throw new Error( 'throw side effect' ); + } + + foo(); + +}); diff --git a/test/form/side-effect-t/_expected/cjs.js b/test/form/side-effect-t/_expected/cjs.js new file mode 100644 index 0000000..1e475de --- /dev/null +++ b/test/form/side-effect-t/_expected/cjs.js @@ -0,0 +1,7 @@ +'use strict'; + +function foo () { + throw new Error( 'throw side effect' ); +} + +foo(); diff --git a/test/form/side-effect-t/_expected/es.js b/test/form/side-effect-t/_expected/es.js new file mode 100644 index 0000000..d37b574 --- /dev/null +++ b/test/form/side-effect-t/_expected/es.js @@ -0,0 +1,5 @@ +function foo () { + throw new Error( 'throw side effect' ); +} + +foo(); diff --git a/test/form/side-effect-t/_expected/iife.js b/test/form/side-effect-t/_expected/iife.js new file mode 100644 index 0000000..79110d1 --- /dev/null +++ b/test/form/side-effect-t/_expected/iife.js @@ -0,0 +1,10 @@ +(function () { + 'use strict'; + + function foo () { + throw new Error( 'throw side effect' ); + } + + foo(); + +}()); diff --git a/test/form/side-effect-t/_expected/umd.js b/test/form/side-effect-t/_expected/umd.js new file mode 100644 index 0000000..e55832a --- /dev/null +++ b/test/form/side-effect-t/_expected/umd.js @@ -0,0 +1,13 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory() : + typeof define === 'function' && define.amd ? define(factory) : + (factory()); +}(this, (function () { 'use strict'; + + function foo () { + throw new Error( 'throw side effect' ); + } + + foo(); + +}))); diff --git a/test/form/side-effect-t/main.js b/test/form/side-effect-t/main.js new file mode 100644 index 0000000..d37b574 --- /dev/null +++ b/test/form/side-effect-t/main.js @@ -0,0 +1,5 @@ +function foo () { + throw new Error( 'throw side effect' ); +} + +foo();