diff --git a/src/compiler/visitor.ts b/src/compiler/visitor.ts index 5f35a3027dc..cda3158afeb 100644 --- a/src/compiler/visitor.ts +++ b/src/compiler/visitor.ts @@ -1468,7 +1468,7 @@ namespace ts { } return isNodeArray(statements) - ? setTextRange(createNodeArray(concatenate(declarations, statements)), statements) + ? setTextRange(createNodeArray(prependStatements(statements.slice(), declarations)), statements) : prependStatements(statements, declarations); } diff --git a/tests/baselines/reference/destructuringTempOccursAfterPrologue.js b/tests/baselines/reference/destructuringTempOccursAfterPrologue.js new file mode 100644 index 00000000000..a7390708560 --- /dev/null +++ b/tests/baselines/reference/destructuringTempOccursAfterPrologue.js @@ -0,0 +1,12 @@ +//// [destructuringTempOccursAfterPrologue.ts] +function test(p: any) { + 'use strict'; + p = { prop: p } = p; +} + +//// [destructuringTempOccursAfterPrologue.js] +function test(p) { + 'use strict'; + var _a; + p = (_a = p, p = _a.prop, _a); +} diff --git a/tests/baselines/reference/destructuringTempOccursAfterPrologue.symbols b/tests/baselines/reference/destructuringTempOccursAfterPrologue.symbols new file mode 100644 index 00000000000..0e68259e6cf --- /dev/null +++ b/tests/baselines/reference/destructuringTempOccursAfterPrologue.symbols @@ -0,0 +1,12 @@ +=== tests/cases/compiler/destructuringTempOccursAfterPrologue.ts === +function test(p: any) { +>test : Symbol(test, Decl(destructuringTempOccursAfterPrologue.ts, 0, 0)) +>p : Symbol(p, Decl(destructuringTempOccursAfterPrologue.ts, 0, 14)) + + 'use strict'; + p = { prop: p } = p; +>p : Symbol(p, Decl(destructuringTempOccursAfterPrologue.ts, 0, 14)) +>prop : Symbol(prop, Decl(destructuringTempOccursAfterPrologue.ts, 2, 9)) +>p : Symbol(p, Decl(destructuringTempOccursAfterPrologue.ts, 0, 14)) +>p : Symbol(p, Decl(destructuringTempOccursAfterPrologue.ts, 0, 14)) +} diff --git a/tests/baselines/reference/destructuringTempOccursAfterPrologue.types b/tests/baselines/reference/destructuringTempOccursAfterPrologue.types new file mode 100644 index 00000000000..8a62e25b685 --- /dev/null +++ b/tests/baselines/reference/destructuringTempOccursAfterPrologue.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/destructuringTempOccursAfterPrologue.ts === +function test(p: any) { +>test : (p: any) => void +>p : any + + 'use strict'; +>'use strict' : "use strict" + + p = { prop: p } = p; +>p = { prop: p } = p : any +>p : any +>{ prop: p } = p : any +>{ prop: p } : { prop: any; } +>prop : any +>p : any +>p : any +} diff --git a/tests/cases/compiler/destructuringTempOccursAfterPrologue.ts b/tests/cases/compiler/destructuringTempOccursAfterPrologue.ts new file mode 100644 index 00000000000..96dec6e6083 --- /dev/null +++ b/tests/cases/compiler/destructuringTempOccursAfterPrologue.ts @@ -0,0 +1,4 @@ +function test(p: any) { + 'use strict'; + p = { prop: p } = p; +} \ No newline at end of file