From 91c5bae6e5b86834b9dd88f7777ec4e5ddde971d Mon Sep 17 00:00:00 2001 From: Yui T Date: Mon, 16 Mar 2015 15:41:51 -0700 Subject: [PATCH] Address code review --- src/compiler/emitter.ts | 42 ++++--------------- ...itClassDeclarationWithGetterSetterInES6.js | 21 ++++++++++ ...lassDeclarationWithGetterSetterInES6.types | 13 ++++++ ...DeclarationWithLiteralPropertyNameInES6.js | 37 ++++++++++++++++ ...larationWithLiteralPropertyNameInES6.types | 19 +++++++++ ...itClassDeclarationWithThisKeywordInES6.js} | 4 +- ...lassDeclarationWithThisKeywordInES6.types} | 2 +- ...rationWithTypeArgumentAndOverloadInES6.js} | 4 +- ...ionWithTypeArgumentAndOverloadInES6.types} | 2 +- tests/baselines/reference/symbolProperty44.js | 3 ++ ...itClassDeclarationWithGetterSetterInES6.ts | 11 +++++ ...DeclarationWithLiteralPropertyNameInES6.ts | 15 +++++++ ...itClassDeclarationWithThisKeywordInES6.ts} | 0 ...rationWithTypeArgumentAndOverloadInES6.ts} | 0 14 files changed, 134 insertions(+), 39 deletions(-) create mode 100644 tests/baselines/reference/emitClassDeclarationWithLiteralPropertyNameInES6.js create mode 100644 tests/baselines/reference/emitClassDeclarationWithLiteralPropertyNameInES6.types rename tests/baselines/reference/{emitClassDeclarationWithThisKeyword.js => emitClassDeclarationWithThisKeywordInES6.js} (79%) rename tests/baselines/reference/{emitClassDeclarationWithThisKeyword.types => emitClassDeclarationWithThisKeywordInES6.types} (89%) rename tests/baselines/reference/{emitClassDeclarationWithTypeArgumentAndOverload.js => emitClassDeclarationWithTypeArgumentAndOverloadInES6.js} (77%) rename tests/baselines/reference/{emitClassDeclarationWithTypeArgumentAndOverload.types => emitClassDeclarationWithTypeArgumentAndOverloadInES6.types} (88%) create mode 100644 tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithLiteralPropertyNameInES6.ts rename tests/cases/conformance/es6/classDeclaration/{emitClassDeclarationWithThisKeyword.ts => emitClassDeclarationWithThisKeywordInES6.ts} (100%) rename tests/cases/conformance/es6/classDeclaration/{emitClassDeclarationWithTypeArgumentAndOverload.ts => emitClassDeclarationWithTypeArgumentAndOverloadInES6.ts} (100%) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 8e53b3e96c4..fbaaf2493c7 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -4511,50 +4511,26 @@ module ts { return emitPinnedOrTripleSlashComments(member); } + } + if (member.kind === SyntaxKind.MethodDeclaration || node.kind === SyntaxKind.MethodSignature || member.kind === SyntaxKind.GetAccessor || member.kind === SyntaxKind.SetAccessor) { writeLine(); emitLeadingComments(member); emitStart(member); if (member.flags & NodeFlags.Static) { write("static "); } + + if (member.kind === SyntaxKind.GetAccessor) { + write("get "); + } + else if (member.kind === SyntaxKind.SetAccessor) { + write("set "); + } emit((member).name); emitSignatureAndBody(member); emitEnd(member); emitTrailingComments(member); } - else if (member.kind === SyntaxKind.GetAccessor || member.kind === SyntaxKind.SetAccessor) { - var accessors = getAllAccessorDeclarations(node.members, member); - if (member === accessors.firstAccessor) { - writeLine(); - if (accessors.getAccessor) { - writeLine(); - emitLeadingComments(accessors.getAccessor); - emitStart(accessors.getAccessor); - if (member.flags & NodeFlags.Static) { - write("static "); - } - write("get "); - emit((member).name); - emitSignatureAndBody(accessors.getAccessor); - emitEnd(accessors.getAccessor); - emitTrailingComments(accessors.getAccessor); - } - if (accessors.setAccessor) { - // We will only write new line if we just emit getAccessor - writeLine(); - emitLeadingComments(accessors.setAccessor); - emitStart(accessors.setAccessor); - if (member.flags & NodeFlags.Static) { - write("static "); - } - write("set "); - emit((member).name); - emitSignatureAndBody(accessors.setAccessor); - emitEnd(accessors.setAccessor); - emitTrailingComments(accessors.setAccessor);; - } - } - } }); } diff --git a/tests/baselines/reference/emitClassDeclarationWithGetterSetterInES6.js b/tests/baselines/reference/emitClassDeclarationWithGetterSetterInES6.js index 55d72a8b8d5..68ccd1568ed 100644 --- a/tests/baselines/reference/emitClassDeclarationWithGetterSetterInES6.js +++ b/tests/baselines/reference/emitClassDeclarationWithGetterSetterInES6.js @@ -10,6 +10,17 @@ class C { static get ["computedname"]() { return ""; } + get ["computedname"]() { + return ""; + } + get ["computedname"]() { + return ""; + } + + set ["computedname"](x: any) { + } + set ["computedname"](y: string) { + } set foo(a: string) { } static set bar(b: number) { } @@ -27,6 +38,16 @@ class C { static get ["computedname"]() { return ""; } + get ["computedname"]() { + return ""; + } + get ["computedname"]() { + return ""; + } + set ["computedname"](x) { + } + set ["computedname"](y) { + } set foo(a) { } static set bar(b) { diff --git a/tests/baselines/reference/emitClassDeclarationWithGetterSetterInES6.types b/tests/baselines/reference/emitClassDeclarationWithGetterSetterInES6.types index 4e4673a228f..83d4fcd0d80 100644 --- a/tests/baselines/reference/emitClassDeclarationWithGetterSetterInES6.types +++ b/tests/baselines/reference/emitClassDeclarationWithGetterSetterInES6.types @@ -21,6 +21,19 @@ class C { static get ["computedname"]() { return ""; } + get ["computedname"]() { + return ""; + } + get ["computedname"]() { + return ""; + } + + set ["computedname"](x: any) { +>x : any + } + set ["computedname"](y: string) { +>y : string + } set foo(a: string) { } >foo : string diff --git a/tests/baselines/reference/emitClassDeclarationWithLiteralPropertyNameInES6.js b/tests/baselines/reference/emitClassDeclarationWithLiteralPropertyNameInES6.js new file mode 100644 index 00000000000..d82750f276f --- /dev/null +++ b/tests/baselines/reference/emitClassDeclarationWithLiteralPropertyNameInES6.js @@ -0,0 +1,37 @@ +//// [emitClassDeclarationWithLiteralPropertyNameInES6.ts] +class B { + "hello" = 10; + 0b110 = "world"; + 0o23534 = "WORLD"; + 20 = "twenty"; + "foo"() { } + 0b1110() {} + 11() { } + interface() { } + static "hi" = 10000; + static 22 = "twenty-two"; + static 0b101 = "binary"; + static 0o3235 = "octal"; +} + +//// [emitClassDeclarationWithLiteralPropertyNameInES6.js] +class B { + constructor() { + this["hello"] = 10; + this[0b110] = "world"; + this[0o23534] = "WORLD"; + this[20] = "twenty"; + } + "foo"() { + } + 0b1110() { + } + 11() { + } + interface() { + } +} +B["hi"] = 10000; +B[22] = "twenty-two"; +B[0b101] = "binary"; +B[0o3235] = "octal"; diff --git a/tests/baselines/reference/emitClassDeclarationWithLiteralPropertyNameInES6.types b/tests/baselines/reference/emitClassDeclarationWithLiteralPropertyNameInES6.types new file mode 100644 index 00000000000..65ba8f7d2b9 --- /dev/null +++ b/tests/baselines/reference/emitClassDeclarationWithLiteralPropertyNameInES6.types @@ -0,0 +1,19 @@ +=== tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithLiteralPropertyNameInES6.ts === +class B { +>B : B + + "hello" = 10; + 0b110 = "world"; + 0o23534 = "WORLD"; + 20 = "twenty"; + "foo"() { } + 0b1110() {} + 11() { } + interface() { } +>interface : () => void + + static "hi" = 10000; + static 22 = "twenty-two"; + static 0b101 = "binary"; + static 0o3235 = "octal"; +} diff --git a/tests/baselines/reference/emitClassDeclarationWithThisKeyword.js b/tests/baselines/reference/emitClassDeclarationWithThisKeywordInES6.js similarity index 79% rename from tests/baselines/reference/emitClassDeclarationWithThisKeyword.js rename to tests/baselines/reference/emitClassDeclarationWithThisKeywordInES6.js index de100457aa9..14f74682c00 100644 --- a/tests/baselines/reference/emitClassDeclarationWithThisKeyword.js +++ b/tests/baselines/reference/emitClassDeclarationWithThisKeywordInES6.js @@ -1,4 +1,4 @@ -//// [emitClassDeclarationWithThisKeyword.ts] +//// [emitClassDeclarationWithThisKeywordInES6.ts] class B { x = 10; constructor() { @@ -18,7 +18,7 @@ class B { } } -//// [emitClassDeclarationWithThisKeyword.js] +//// [emitClassDeclarationWithThisKeywordInES6.js] class B { constructor() { this.x = 10; diff --git a/tests/baselines/reference/emitClassDeclarationWithThisKeyword.types b/tests/baselines/reference/emitClassDeclarationWithThisKeywordInES6.types similarity index 89% rename from tests/baselines/reference/emitClassDeclarationWithThisKeyword.types rename to tests/baselines/reference/emitClassDeclarationWithThisKeywordInES6.types index ebb6f26598d..bb0f7e99939 100644 --- a/tests/baselines/reference/emitClassDeclarationWithThisKeyword.types +++ b/tests/baselines/reference/emitClassDeclarationWithThisKeywordInES6.types @@ -1,4 +1,4 @@ -=== tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithThisKeyword.ts === +=== tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithThisKeywordInES6.ts === class B { >B : B diff --git a/tests/baselines/reference/emitClassDeclarationWithTypeArgumentAndOverload.js b/tests/baselines/reference/emitClassDeclarationWithTypeArgumentAndOverloadInES6.js similarity index 77% rename from tests/baselines/reference/emitClassDeclarationWithTypeArgumentAndOverload.js rename to tests/baselines/reference/emitClassDeclarationWithTypeArgumentAndOverloadInES6.js index 69801d6be12..8dc5b6cddaa 100644 --- a/tests/baselines/reference/emitClassDeclarationWithTypeArgumentAndOverload.js +++ b/tests/baselines/reference/emitClassDeclarationWithTypeArgumentAndOverloadInES6.js @@ -1,4 +1,4 @@ -//// [emitClassDeclarationWithTypeArgumentAndOverload.ts] +//// [emitClassDeclarationWithTypeArgumentAndOverloadInES6.ts] class B { x: T; B: T; @@ -22,7 +22,7 @@ class B { } } -//// [emitClassDeclarationWithTypeArgumentAndOverload.js] +//// [emitClassDeclarationWithTypeArgumentAndOverloadInES6.js] class B { constructor(a) { this.B = a; diff --git a/tests/baselines/reference/emitClassDeclarationWithTypeArgumentAndOverload.types b/tests/baselines/reference/emitClassDeclarationWithTypeArgumentAndOverloadInES6.types similarity index 88% rename from tests/baselines/reference/emitClassDeclarationWithTypeArgumentAndOverload.types rename to tests/baselines/reference/emitClassDeclarationWithTypeArgumentAndOverloadInES6.types index 8b0feb72d2b..ba515168a5d 100644 --- a/tests/baselines/reference/emitClassDeclarationWithTypeArgumentAndOverload.types +++ b/tests/baselines/reference/emitClassDeclarationWithTypeArgumentAndOverloadInES6.types @@ -1,4 +1,4 @@ -=== tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithTypeArgumentAndOverload.ts === +=== tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithTypeArgumentAndOverloadInES6.ts === class B { >B : B >T : T diff --git a/tests/baselines/reference/symbolProperty44.js b/tests/baselines/reference/symbolProperty44.js index a3de33640af..1f4aaf73b3c 100644 --- a/tests/baselines/reference/symbolProperty44.js +++ b/tests/baselines/reference/symbolProperty44.js @@ -13,4 +13,7 @@ class C { get [Symbol.hasInstance]() { return ""; } + get [Symbol.hasInstance]() { + return ""; + } } diff --git a/tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithGetterSetterInES6.ts b/tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithGetterSetterInES6.ts index 18ff3fa424d..70c0b35763e 100644 --- a/tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithGetterSetterInES6.ts +++ b/tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithGetterSetterInES6.ts @@ -10,6 +10,17 @@ class C { static get ["computedname"]() { return ""; } + get ["computedname"]() { + return ""; + } + get ["computedname"]() { + return ""; + } + + set ["computedname"](x: any) { + } + set ["computedname"](y: string) { + } set foo(a: string) { } static set bar(b: number) { } diff --git a/tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithLiteralPropertyNameInES6.ts b/tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithLiteralPropertyNameInES6.ts new file mode 100644 index 00000000000..87114db7739 --- /dev/null +++ b/tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithLiteralPropertyNameInES6.ts @@ -0,0 +1,15 @@ +// @target: es6 +class B { + "hello" = 10; + 0b110 = "world"; + 0o23534 = "WORLD"; + 20 = "twenty"; + "foo"() { } + 0b1110() {} + 11() { } + interface() { } + static "hi" = 10000; + static 22 = "twenty-two"; + static 0b101 = "binary"; + static 0o3235 = "octal"; +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithThisKeyword.ts b/tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithThisKeywordInES6.ts similarity index 100% rename from tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithThisKeyword.ts rename to tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithThisKeywordInES6.ts diff --git a/tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithTypeArgumentAndOverload.ts b/tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithTypeArgumentAndOverloadInES6.ts similarity index 100% rename from tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithTypeArgumentAndOverload.ts rename to tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithTypeArgumentAndOverloadInES6.ts