From 64b6c9f52ee683e201498c9d7a73ef565b1dd91e Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Tue, 6 Oct 2015 12:02:55 -0700 Subject: [PATCH] Fix emit for ES6 export default class with static initializers. Fixes #5136. --- src/compiler/emitter.ts | 6 ++++-- ...portDefaultClassWithStaticPropertyAssignmentsInES6.js | 9 +++++++++ ...efaultClassWithStaticPropertyAssignmentsInES6.symbols | 5 +++++ ...tDefaultClassWithStaticPropertyAssignmentsInES6.types | 6 ++++++ ...portDefaultClassWithStaticPropertyAssignmentsInES6.ts | 4 ++++ 5 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 tests/baselines/reference/exportDefaultClassWithStaticPropertyAssignmentsInES6.js create mode 100644 tests/baselines/reference/exportDefaultClassWithStaticPropertyAssignmentsInES6.symbols create mode 100644 tests/baselines/reference/exportDefaultClassWithStaticPropertyAssignmentsInES6.types create mode 100644 tests/cases/conformance/es6/classDeclaration/exportDefaultClassWithStaticPropertyAssignmentsInES6.ts diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 71187b20960..6f228aeb120 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -4785,8 +4785,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi // emit name if // - node has a name - // - this is default export and target is not ES6 (for ES6 `export default` does not need to be compiled downlevel) - if ((node.name || (node.flags & NodeFlags.Default && languageVersion < ScriptTarget.ES6)) && !thisNodeIsDecorated) { + // - this is default export and target is not ES6 (for ES6 `export default` does not need to be compiled downlevel) + // - this is default export with static initializers + if ((node.name || (node.flags & NodeFlags.Default && (languageVersion < ScriptTarget.ES6 + || staticProperties.length > 0))) && !thisNodeIsDecorated) { write(" "); emitDeclarationName(node); } diff --git a/tests/baselines/reference/exportDefaultClassWithStaticPropertyAssignmentsInES6.js b/tests/baselines/reference/exportDefaultClassWithStaticPropertyAssignmentsInES6.js new file mode 100644 index 00000000000..3acb89b8696 --- /dev/null +++ b/tests/baselines/reference/exportDefaultClassWithStaticPropertyAssignmentsInES6.js @@ -0,0 +1,9 @@ +//// [exportDefaultClassWithStaticPropertyAssignmentsInES6.ts] +export default class { + static z: string = "Foo"; +} + +//// [exportDefaultClassWithStaticPropertyAssignmentsInES6.js] +export default class default_1 { +} +default_1.z = "Foo"; diff --git a/tests/baselines/reference/exportDefaultClassWithStaticPropertyAssignmentsInES6.symbols b/tests/baselines/reference/exportDefaultClassWithStaticPropertyAssignmentsInES6.symbols new file mode 100644 index 00000000000..6d08eb93d92 --- /dev/null +++ b/tests/baselines/reference/exportDefaultClassWithStaticPropertyAssignmentsInES6.symbols @@ -0,0 +1,5 @@ +=== tests/cases/conformance/es6/classDeclaration/exportDefaultClassWithStaticPropertyAssignmentsInES6.ts === +export default class { + static z: string = "Foo"; +>z : Symbol(default.z, Decl(exportDefaultClassWithStaticPropertyAssignmentsInES6.ts, 0, 22)) +} diff --git a/tests/baselines/reference/exportDefaultClassWithStaticPropertyAssignmentsInES6.types b/tests/baselines/reference/exportDefaultClassWithStaticPropertyAssignmentsInES6.types new file mode 100644 index 00000000000..657e0301f83 --- /dev/null +++ b/tests/baselines/reference/exportDefaultClassWithStaticPropertyAssignmentsInES6.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/es6/classDeclaration/exportDefaultClassWithStaticPropertyAssignmentsInES6.ts === +export default class { + static z: string = "Foo"; +>z : string +>"Foo" : string +} diff --git a/tests/cases/conformance/es6/classDeclaration/exportDefaultClassWithStaticPropertyAssignmentsInES6.ts b/tests/cases/conformance/es6/classDeclaration/exportDefaultClassWithStaticPropertyAssignmentsInES6.ts new file mode 100644 index 00000000000..485fbdb011d --- /dev/null +++ b/tests/cases/conformance/es6/classDeclaration/exportDefaultClassWithStaticPropertyAssignmentsInES6.ts @@ -0,0 +1,4 @@ +// @target:es6 +export default class { + static z: string = "Foo"; +} \ No newline at end of file