@@ -346,14 +346,15 @@ namespace ts {
346
346
}
347
347
348
348
function transformClassMembers ( node : ClassDeclaration | ClassExpression , isDerivedClass : boolean ) {
349
+ // Declare private names.
350
+ const privateProperties = filter ( node . members , isPrivatePropertyDeclaration ) ;
351
+ privateProperties . forEach ( property => addPrivateNameToEnvironment ( property . name ) ) ;
352
+
349
353
const members : ClassElement [ ] = [ ] ;
350
354
const constructor = transformConstructor ( node , isDerivedClass ) ;
351
355
if ( constructor ) {
352
356
members . push ( constructor ) ;
353
357
}
354
- // Declare private names.
355
- const privateProperties = filter ( node . members , isPrivatePropertyDeclaration ) ;
356
- privateProperties . forEach ( property => addPrivateNameToEnvironment ( property . name ) ) ;
357
358
358
359
addRange ( members , visitNodes ( node . members , classElementVisitor , isClassElement ) ) ;
359
360
return setTextRange ( createNodeArray ( members ) , /*location*/ node . members ) ;
@@ -497,6 +498,21 @@ namespace ts {
497
498
? updateComputedPropertyName ( property . name , getGeneratedNameForNode ( property . name ) )
498
499
: property . name ;
499
500
const initializer = visitNode ( property . initializer ! , visitor , isExpression ) ;
501
+
502
+ if ( isPrivateName ( propertyName ) ) {
503
+ const privateNameInfo = accessPrivateName ( propertyName ) ;
504
+ if ( privateNameInfo ) {
505
+ switch ( privateNameInfo . type ) {
506
+ case PrivateNameType . InstanceField : {
507
+ return createCall (
508
+ createPropertyAccess ( privateNameInfo . weakMapName , "set" ) ,
509
+ /*typeArguments*/ undefined ,
510
+ [ receiver , initializer ]
511
+ ) ;
512
+ }
513
+ }
514
+ }
515
+ }
500
516
const memberAccess = createMemberAccessForPropertyName ( receiver , propertyName , /*location*/ propertyName ) ;
501
517
502
518
return createAssignment ( memberAccess , initializer ) ;
@@ -530,6 +546,16 @@ namespace ts {
530
546
) ;
531
547
}
532
548
549
+ function accessPrivateName ( name : PrivateName ) {
550
+ for ( let i = privateNameEnvironmentStack . length - 1 ; i >= 0 ; -- i ) {
551
+ const env = privateNameEnvironmentStack [ i ] ;
552
+ if ( env . has ( name . escapedText ) ) {
553
+ return env . get ( name . escapedText ) ;
554
+ }
555
+ }
556
+ return undefined ;
557
+ }
558
+
533
559
function enableSubstitutionForClassAliases ( ) {
534
560
if ( ( enabledSubstitutions & ESNextSubstitutionFlags . ClassAliases ) === 0 ) {
535
561
enabledSubstitutions |= ESNextSubstitutionFlags . ClassAliases ;
0 commit comments