Skip to content

Commit

Permalink
Fix visitLexicalEnvironment to properly merge hoisted declarations (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
rbuckton committed Sep 3, 2019
1 parent 4fe2722 commit 3b96729
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 14 deletions.
7 changes: 2 additions & 5 deletions src/compiler/visitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
//// [instanceMemberWithComputedPropertyName.ts]
// https://github.com/microsoft/TypeScript/issues/30953
"use strict";
const x = 1;
class C {
[x] = true;
Expand All @@ -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() {
Expand Down
Original file line number Diff line number Diff line change
@@ -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))
}
}
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// https://github.com/microsoft/TypeScript/issues/30953
"use strict";
const x = 1;
class C {
[x] = true;
Expand Down

0 comments on commit 3b96729

Please sign in to comment.