From 9913d0fa435509845753041f6eb5bbae368e2a04 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Wed, 5 Jun 2019 14:56:46 +0200 Subject: [PATCH] Properly include try-catch-statements even if they have already been included via another means --- src/ast/nodes/TryStatement.ts | 5 ++++- .../include-via-outside-variable/_config.js | 3 +++ .../include-via-outside-variable/_expected.js | 6 ++++++ .../include-via-outside-variable/main.js | 6 ++++++ 4 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 test/form/samples/try-statement-deoptimization/include-via-outside-variable/_config.js create mode 100644 test/form/samples/try-statement-deoptimization/include-via-outside-variable/_expected.js create mode 100644 test/form/samples/try-statement-deoptimization/include-via-outside-variable/main.js diff --git a/src/ast/nodes/TryStatement.ts b/src/ast/nodes/TryStatement.ts index ce9b156f6b0..c31a839c74d 100644 --- a/src/ast/nodes/TryStatement.ts +++ b/src/ast/nodes/TryStatement.ts @@ -10,6 +10,8 @@ export default class TryStatement extends StatementBase { handler!: CatchClause | null; type!: NodeType.tTryStatement; + private directlyIncluded = false; + hasEffects(options: ExecutionPathOptions): boolean { return ( this.block.body.length > 0 || @@ -19,8 +21,9 @@ export default class TryStatement extends StatementBase { } include(includeChildrenRecursively: IncludeChildren) { - if (!this.included) { + if (!this.directlyIncluded) { this.included = true; + this.directlyIncluded = true; this.block.include( this.context.tryCatchDeoptimization ? INCLUDE_VARIABLES : includeChildrenRecursively ); diff --git a/test/form/samples/try-statement-deoptimization/include-via-outside-variable/_config.js b/test/form/samples/try-statement-deoptimization/include-via-outside-variable/_config.js new file mode 100644 index 00000000000..8c0617a56c6 --- /dev/null +++ b/test/form/samples/try-statement-deoptimization/include-via-outside-variable/_config.js @@ -0,0 +1,3 @@ +module.exports = { + description: 'works when the try-statement is included via an outside variable' +}; diff --git a/test/form/samples/try-statement-deoptimization/include-via-outside-variable/_expected.js b/test/form/samples/try-statement-deoptimization/include-via-outside-variable/_expected.js new file mode 100644 index 00000000000..8e943d70840 --- /dev/null +++ b/test/form/samples/try-statement-deoptimization/include-via-outside-variable/_expected.js @@ -0,0 +1,6 @@ +console.log(myVar); + +try { + var myVar = 3; + console.log(myVar); +} catch {} diff --git a/test/form/samples/try-statement-deoptimization/include-via-outside-variable/main.js b/test/form/samples/try-statement-deoptimization/include-via-outside-variable/main.js new file mode 100644 index 00000000000..8e943d70840 --- /dev/null +++ b/test/form/samples/try-statement-deoptimization/include-via-outside-variable/main.js @@ -0,0 +1,6 @@ +console.log(myVar); + +try { + var myVar = 3; + console.log(myVar); +} catch {}