@@ -2630,7 +2630,6 @@ module ts {
2630
2630
}
2631
2631
2632
2632
function emitSuper ( node : Node ) {
2633
- debugger ;
2634
2633
if ( languageVersion >= ScriptTarget . ES6 ) {
2635
2634
write ( "super" ) ;
2636
2635
}
@@ -2639,9 +2638,6 @@ module ts {
2639
2638
if ( flags & NodeCheckFlags . SuperInstance ) {
2640
2639
write ( "_super.prototype" ) ;
2641
2640
}
2642
- else if ( ( flags & NodeCheckFlags . SuperStatic ) || ( node . parent . kind === SyntaxKind . Constructor ) ) {
2643
- write ( "_super" ) ;
2644
- }
2645
2641
else {
2646
2642
write ( "_super" ) ;
2647
2643
}
@@ -4403,23 +4399,7 @@ module ts {
4403
4399
emitComputedPropertyName ( < ComputedPropertyName > memberName ) ;
4404
4400
}
4405
4401
else {
4406
- // For ES6 and above, we want to emit memberName by itself without prefix ".",
4407
- // For ES5 and below, we want to prefix memberName with ".". For example,
4408
- // Typescript:
4409
- // class C {
4410
- // x = 10;
4411
- // foo () {}
4412
- // }
4413
- // Javascript:
4414
- // var C = (function () {
4415
- // function C() {
4416
- // this.x = 10; // Property "x" need to be prefixed with "."
4417
- // }
4418
- // C.prototype.foo = function() {}; // Similarly property "foo" need to be prefixed with "."
4419
- // }
4420
- if ( languageVersion < ScriptTarget . ES6 || memberName . parent . kind === SyntaxKind . PropertyDeclaration ) {
4421
- write ( "." ) ;
4422
- }
4402
+ write ( "." ) ;
4423
4403
emitNodeWithoutSourceMap ( memberName ) ;
4424
4404
}
4425
4405
}
@@ -4458,14 +4438,18 @@ module ts {
4458
4438
writeLine ( ) ;
4459
4439
emitLeadingComments ( member ) ;
4460
4440
emitStart ( member ) ;
4441
+ emitStart ( ( < MethodDeclaration > member ) . name ) ;
4461
4442
emitDeclarationName ( node ) ;
4462
4443
if ( ! ( member . flags & NodeFlags . Static ) ) {
4463
4444
write ( ".prototype" ) ;
4464
4445
}
4465
4446
emitMemberAccessForPropertyName ( ( < MethodDeclaration > member ) . name ) ;
4447
+ emitEnd ( ( < MethodDeclaration > member ) . name ) ;
4466
4448
write ( " = " ) ;
4449
+ emitStart ( member ) ;
4467
4450
emitFunctionDeclaration ( < MethodDeclaration > member ) ;
4468
4451
emitEnd ( member ) ;
4452
+ emitEnd ( member ) ;
4469
4453
write ( ";" ) ;
4470
4454
emitTrailingComments ( member ) ;
4471
4455
}
@@ -4475,12 +4459,14 @@ module ts {
4475
4459
writeLine ( ) ;
4476
4460
emitStart ( member ) ;
4477
4461
write ( "Object.defineProperty(" ) ;
4462
+ emitStart ( ( < AccessorDeclaration > member ) . name ) ;
4478
4463
emitDeclarationName ( node ) ;
4479
4464
if ( ! ( member . flags & NodeFlags . Static ) ) {
4480
4465
write ( ".prototype" ) ;
4481
4466
}
4482
4467
write ( ", " ) ;
4483
4468
emitExpressionForPropertyName ( ( < AccessorDeclaration > member ) . name ) ;
4469
+ emitEnd ( ( < AccessorDeclaration > member ) . name ) ;
4484
4470
write ( ", {" ) ;
4485
4471
increaseIndent ( ) ;
4486
4472
if ( accessors . getAccessor ) {
@@ -4531,14 +4517,15 @@ module ts {
4531
4517
if ( member . flags & NodeFlags . Static ) {
4532
4518
write ( "static " ) ;
4533
4519
}
4534
- emitMemberAccessForPropertyName ( ( < MethodDeclaration > member ) . name ) ;
4520
+ emit ( ( < MethodDeclaration > member ) . name ) ;
4535
4521
emitSignatureAndBody ( < MethodDeclaration > member ) ;
4536
4522
emitEnd ( member ) ;
4537
4523
emitTrailingComments ( member ) ;
4538
4524
}
4539
4525
else if ( member . kind === SyntaxKind . GetAccessor || member . kind === SyntaxKind . SetAccessor ) {
4540
4526
var accessors = getAllAccessorDeclarations ( node . members , < AccessorDeclaration > member ) ;
4541
4527
if ( member === accessors . firstAccessor ) {
4528
+ writeLine ( ) ;
4542
4529
if ( accessors . getAccessor ) {
4543
4530
writeLine ( ) ;
4544
4531
emitLeadingComments ( accessors . getAccessor ) ;
@@ -4547,7 +4534,7 @@ module ts {
4547
4534
write ( "static " ) ;
4548
4535
}
4549
4536
write ( "get " ) ;
4550
- emitMemberAccessForPropertyName ( ( < MethodDeclaration > member ) . name ) ;
4537
+ emit ( ( < MethodDeclaration > member ) . name ) ;
4551
4538
emitSignatureAndBody ( accessors . getAccessor ) ;
4552
4539
emitEnd ( accessors . getAccessor ) ;
4553
4540
emitTrailingComments ( accessors . getAccessor ) ;
@@ -4561,7 +4548,7 @@ module ts {
4561
4548
write ( "static " ) ;
4562
4549
}
4563
4550
write ( "set " ) ;
4564
- emitMemberAccessForPropertyName ( ( < MethodDeclaration > member ) . name ) ;
4551
+ emit ( ( < MethodDeclaration > member ) . name ) ;
4565
4552
emitSignatureAndBody ( accessors . setAccessor ) ;
4566
4553
emitEnd ( accessors . setAccessor ) ;
4567
4554
emitTrailingComments ( accessors . setAccessor ) ; ;
@@ -4572,42 +4559,42 @@ module ts {
4572
4559
}
4573
4560
4574
4561
function emitConstructor ( node : ClassDeclaration , baseTypeNode : TypeReferenceNode ) {
4575
- debugger ;
4576
- var saveTempCount = tempCount ;
4577
- var saveTempVariables = tempVariables ;
4578
- var saveTempParameters = tempParameters ;
4562
+ let saveTempCount = tempCount ;
4563
+ let saveTempVariables = tempVariables ;
4564
+ let saveTempParameters = tempParameters ;
4579
4565
tempCount = 0 ;
4580
4566
tempVariables = undefined ;
4581
4567
tempParameters = undefined ;
4582
4568
4583
- var popFrame = enterNameScope ( ) ;
4569
+ let popFrame = enterNameScope ( ) ;
4584
4570
// Check if we have property assignment inside class declaration.
4585
4571
// If there is property assignment, we need to emit constructor whether users define it or not
4586
4572
// If there is no property assignment, we can omit constructor if users do not define it
4587
- var hasPropertyAssignment = false ;
4573
+ let hasInstancePropertyWithInitializer = false ;
4588
4574
4589
4575
// Emit the constructor overload pinned comments
4590
4576
forEach ( node . members , member => {
4591
4577
if ( member . kind === SyntaxKind . Constructor && ! ( < ConstructorDeclaration > member ) . body ) {
4592
4578
emitPinnedOrTripleSlashComments ( member ) ;
4593
4579
}
4594
- if ( member . kind === SyntaxKind . PropertyDeclaration && ( < PropertyDeclaration > member ) . initializer ) {
4595
- hasPropertyAssignment = true ;
4580
+ // Check if there is any non-static property assignment
4581
+ if ( member . kind === SyntaxKind . PropertyDeclaration && ( < PropertyDeclaration > member ) . initializer && ( member . flags & NodeFlags . Static ) === 0 ) {
4582
+ hasInstancePropertyWithInitializer = true ;
4596
4583
}
4597
4584
} ) ;
4598
4585
4599
- var ctor = getFirstConstructorWithBody ( node ) ;
4586
+ let ctor = getFirstConstructorWithBody ( node ) ;
4600
4587
4601
4588
// For target ES6 and above, if there is no user-defined constructor and there is no property assignment
4602
4589
// do not emit constructor in class declaration.
4603
- if ( languageVersion >= ScriptTarget . ES6 && ! ctor && ! hasPropertyAssignment ) {
4590
+ if ( languageVersion >= ScriptTarget . ES6 && ! ctor && ! hasInstancePropertyWithInitializer ) {
4604
4591
return ;
4605
4592
}
4606
4593
4607
4594
if ( ctor ) {
4608
4595
emitLeadingComments ( ctor ) ;
4609
4596
}
4610
- emitStart ( < Node > ctor || node ) ;
4597
+ emitStart ( ctor || node ) ;
4611
4598
4612
4599
if ( languageVersion < ScriptTarget . ES6 ) {
4613
4600
write ( "function " ) ;
@@ -4639,7 +4626,7 @@ module ts {
4639
4626
scopeEmitStart ( node , "constructor" ) ;
4640
4627
increaseIndent ( ) ;
4641
4628
if ( ctor ) {
4642
- emitDetachedComments ( ( < Block > ctor . body ) . statements ) ;
4629
+ emitDetachedComments ( ctor . body . statements ) ;
4643
4630
}
4644
4631
emitCaptureThisForNodeIfNecessary ( node ) ;
4645
4632
if ( ctor ) {
@@ -4662,10 +4649,12 @@ module ts {
4662
4649
emitEnd ( baseTypeNode ) ;
4663
4650
}
4664
4651
}
4665
- emitMemberAssignments ( node , /*nonstatic */ 0 ) ;
4652
+ emitMemberAssignments ( node , /*staticFlag */ 0 ) ;
4666
4653
if ( ctor ) {
4667
4654
var statements : Node [ ] = ( < Block > ctor . body ) . statements ;
4668
- if ( superCall ) statements = statements . slice ( 1 ) ;
4655
+ if ( superCall ) {
4656
+ statements = statements . slice ( 1 ) ;
4657
+ }
4669
4658
emitLines ( statements ) ;
4670
4659
}
4671
4660
emitTempDeclarations ( /*newLine*/ true ) ;
@@ -4696,6 +4685,7 @@ module ts {
4696
4685
write ( "default " ) ;
4697
4686
}
4698
4687
}
4688
+
4699
4689
write ( "class " ) ;
4700
4690
emitDeclarationName ( node ) ;
4701
4691
var baseTypeNode = getClassBaseTypeNode ( node ) ;
0 commit comments