diff --git a/src/ast/nodes/ReturnStatement.js b/src/ast/nodes/ReturnStatement.js index b869575c1dc..ec9f55889ea 100644 --- a/src/ast/nodes/ReturnStatement.js +++ b/src/ast/nodes/ReturnStatement.js @@ -1,4 +1,5 @@ import Statement from './shared/Statement.js'; +import {UNKNOWN_ASSIGNMENT} from '../values'; export default class ReturnStatement extends Statement { hasEffects ( options ) { @@ -7,6 +8,6 @@ export default class ReturnStatement extends Statement { } initialiseNode () { - this.scope.addReturnExpression( this.argument ); + this.scope.addReturnExpression( this.argument || UNKNOWN_ASSIGNMENT ); } } diff --git a/test/function/samples/associate-function-return-values-4/_config.js b/test/function/samples/associate-function-return-values-4/_config.js new file mode 100644 index 00000000000..b33c6c2d2d2 --- /dev/null +++ b/test/function/samples/associate-function-return-values-4/_config.js @@ -0,0 +1,8 @@ +var assert = require( 'assert' ); + +module.exports = { + description: 'Handles empty return statements (#1702)', + exports: function ( exports ) { + assert.equal( exports.bar, 'present' ); + } +}; diff --git a/test/function/samples/associate-function-return-values-4/main.js b/test/function/samples/associate-function-return-values-4/main.js new file mode 100644 index 00000000000..d157c4ae6ec --- /dev/null +++ b/test/function/samples/associate-function-return-values-4/main.js @@ -0,0 +1,15 @@ +const foo = {mightBeExported: {}}; +const exported = {}; + +function getFooOrUndefined() { + if (Math.random() < 0.5) { + return; + } + return foo; +} + +const returnedFoo = getFooOrUndefined() || foo; +returnedFoo.mightBeExported = exported; +foo.mightBeExported.bar = 'present'; + +export default exported;