From 1b84f1d1d09f57cde9d02c49f8b07b7cb05c8a83 Mon Sep 17 00:00:00 2001 From: Yui T Date: Tue, 10 Mar 2015 17:22:33 -0700 Subject: [PATCH] emit get/set member function --- src/compiler/emitter.ts | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 8047d911ca7..db1cdee432c 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -4465,15 +4465,12 @@ module ts { writeLine(); emitStart(member); write("Object.defineProperty("); - emitStart((member).name); emitDeclarationName(node); if (!(member.flags & NodeFlags.Static)) { write(".prototype"); } write(", "); - // TODO: Shouldn't emitStart on name occur *here*? emitExpressionForPropertyName((member).name); - emitEnd((member).name); write(", {"); increaseIndent(); if (accessors.getAccessor) { @@ -4529,6 +4526,36 @@ module ts { 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) { + emitLeadingComments(accessors.getAccessor); + emitStart(accessors.getAccessor); + if (member.flags & NodeFlags.Static) { + write("static "); + } + write("get "); + emitMemberAccessForPropertyName((member).name); + emitSignatureAndBody(accessors.getAccessor); + emitEnd(accessors.getAccessor); + emitTrailingComments(accessors.getAccessor); + } + else if (accessors.setAccessor) { + emitLeadingComments(accessors.setAccessor); + emitStart(accessors.setAccessor); + if (member.flags & NodeFlags.Static) { + write("static "); + } + write("set "); + emitMemberAccessForPropertyName((member).name); + emitSignatureAndBody(accessors.setAccessor); + emitEnd(accessors.setAccessor); + emitTrailingComments(accessors.setAccessor);; + } + } + } }); } @@ -4567,7 +4594,7 @@ module ts { emitSignatureParameters(ctor); } else { - // Based on EcmaScript6 section 14.15.14: Runtime Semantics: ClassDefinitionEvaluation. + // Based on EcmaScript6 section 14.5.14: Runtime Semantics: ClassDefinitionEvaluation. // If constructor is empty, then, // If ClassHeritageopt is present, then // Let constructor be the result of parsing the String "constructor(... args){ super (...args);}" using the syntactic grammar with the goal symbol MethodDefinition.