Cherry-pick PR #33219 into release-3.6 (#33222)

Component commits:
ffc82db6fc Fix visitLexicalEnvironment to properly merge hoisted declarations
This commit is contained in:
TypeScript Bot 2019-09-03 15:28:35 -07:00 committed by Ron Buckton
parent a109d14644
commit cd32df66ec
5 changed files with 18 additions and 14 deletions

View File

@ -141,11 +141,8 @@ namespace ts {
export function visitLexicalEnvironment(statements: NodeArray<Statement>, visitor: Visitor, context: TransformationContext, start?: number, ensureUseStrict?: boolean) {
context.startLexicalEnvironment();
statements = visitNodes(statements, visitor, isStatement, start);
if (ensureUseStrict && !startsWithUseStrict(statements)) {
statements = setTextRange(createNodeArray([createExpressionStatement(createLiteral("use strict")), ...statements]), statements);
}
const declarations = context.endLexicalEnvironment();
return setTextRange(createNodeArray(concatenate(declarations, statements)), statements);
if (ensureUseStrict) statements = ts.ensureUseStrict(statements); // tslint:disable-line no-unnecessary-qualifier
return mergeLexicalEnvironment(statements, context.endLexicalEnvironment());
}
/**

View File

@ -1,5 +1,6 @@
//// [instanceMemberWithComputedPropertyName.ts]
// https://github.com/microsoft/TypeScript/issues/30953
"use strict";
const x = 1;
class C {
[x] = true;
@ -9,8 +10,9 @@ class C {
}
//// [instanceMemberWithComputedPropertyName.js]
var _a;
// https://github.com/microsoft/TypeScript/issues/30953
"use strict";
var _a;
var x = 1;
var C = /** @class */ (function () {
function C() {

View File

@ -1,20 +1,21 @@
=== tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberWithComputedPropertyName.ts ===
// https://github.com/microsoft/TypeScript/issues/30953
"use strict";
const x = 1;
>x : Symbol(x, Decl(instanceMemberWithComputedPropertyName.ts, 1, 5))
>x : Symbol(x, Decl(instanceMemberWithComputedPropertyName.ts, 2, 5))
class C {
>C : Symbol(C, Decl(instanceMemberWithComputedPropertyName.ts, 1, 12))
>C : Symbol(C, Decl(instanceMemberWithComputedPropertyName.ts, 2, 12))
[x] = true;
>[x] : Symbol(C[x], Decl(instanceMemberWithComputedPropertyName.ts, 2, 9))
>x : Symbol(x, Decl(instanceMemberWithComputedPropertyName.ts, 1, 5))
>[x] : Symbol(C[x], Decl(instanceMemberWithComputedPropertyName.ts, 3, 9))
>x : Symbol(x, Decl(instanceMemberWithComputedPropertyName.ts, 2, 5))
constructor() {
const { a, b } = { a: 1, b: 2 };
>a : Symbol(a, Decl(instanceMemberWithComputedPropertyName.ts, 5, 15))
>b : Symbol(b, Decl(instanceMemberWithComputedPropertyName.ts, 5, 18))
>a : Symbol(a, Decl(instanceMemberWithComputedPropertyName.ts, 5, 26))
>b : Symbol(b, Decl(instanceMemberWithComputedPropertyName.ts, 5, 32))
>a : Symbol(a, Decl(instanceMemberWithComputedPropertyName.ts, 6, 15))
>b : Symbol(b, Decl(instanceMemberWithComputedPropertyName.ts, 6, 18))
>a : Symbol(a, Decl(instanceMemberWithComputedPropertyName.ts, 6, 26))
>b : Symbol(b, Decl(instanceMemberWithComputedPropertyName.ts, 6, 32))
}
}

View File

@ -1,5 +1,8 @@
=== tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberWithComputedPropertyName.ts ===
// https://github.com/microsoft/TypeScript/issues/30953
"use strict";
>"use strict" : "use strict"
const x = 1;
>x : 1
>1 : 1

View File

@ -1,4 +1,5 @@
// https://github.com/microsoft/TypeScript/issues/30953
"use strict";
const x = 1;
class C {
[x] = true;