@@ -36,8 +36,8 @@ namespace ts {
36
36
initializer ?: Expression ;
37
37
} ;
38
38
}
39
- const privateNameEnvironmentStack : PrivateNameEnvironment [ ] = [ ] ;
40
- let privateNameEnvironmentIndex = - 1 ;
39
+
40
+ let privateNameEnvironment : PrivateNameEnvironment = { } ;
41
41
42
42
return chainBundle ( transformSourceFile ) ;
43
43
@@ -125,29 +125,23 @@ namespace ts {
125
125
}
126
126
}
127
127
128
- function currentPrivateNameEnvironment ( ) {
129
- return privateNameEnvironmentStack [ privateNameEnvironmentIndex ] ;
130
- }
131
-
132
128
function addPrivateName ( name : PrivateName , initializer ?: Expression ) {
133
- const environment = currentPrivateNameEnvironment ( ) ;
134
129
const nameString = name . escapedText as string ;
135
- if ( nameString in environment ) {
130
+ if ( nameString in privateNameEnvironment ) {
136
131
throw new Error ( "Redeclaring private name " + nameString + "." ) ;
137
132
}
138
133
const weakMap = createFileLevelUniqueName ( "_" + nameString . substring ( 1 ) ) ;
139
- environment [ nameString ] = {
134
+ privateNameEnvironment [ nameString ] = {
140
135
weakMap,
141
136
initializer
142
137
} ;
143
138
return weakMap ;
144
139
}
145
140
146
141
function accessPrivateName ( name : PrivateName ) {
147
- const environment = currentPrivateNameEnvironment ( ) ;
148
142
const nameString = name . escapedText as string ;
149
- if ( nameString in environment ) {
150
- return environment [ nameString ] . weakMap ;
143
+ if ( nameString in privateNameEnvironment ) {
144
+ return privateNameEnvironment [ nameString ] . weakMap ;
151
145
}
152
146
// Undeclared private name.
153
147
return undefined ;
@@ -183,11 +177,12 @@ namespace ts {
183
177
}
184
178
185
179
function visitClassDeclaration ( node : ClassDeclaration ) {
186
- startPrivateNameEnvironment ( ) ;
180
+ const savedPrivateNameEnvironment = privateNameEnvironment ;
181
+ privateNameEnvironment = { } ;
187
182
node = visitEachChild ( node , visitorCollectPrivateNames , context ) ;
188
183
node = visitEachChild ( node , visitor , context ) ;
189
184
const statements = createPrivateNameWeakMapDeclarations (
190
- currentPrivateNameEnvironment ( )
185
+ privateNameEnvironment
191
186
) ;
192
187
if ( statements . length ) {
193
188
node = updateClassDeclaration (
@@ -201,16 +196,17 @@ namespace ts {
201
196
) ;
202
197
}
203
198
statements . unshift ( node ) ;
204
- endPrivateNameEnvironment ( ) ;
199
+ privateNameEnvironment = savedPrivateNameEnvironment ;
205
200
return statements ;
206
201
}
207
202
208
203
function visitClassExpression ( node : ClassExpression ) {
209
- startPrivateNameEnvironment ( ) ;
204
+ const savedPrivateNameEnvironment = privateNameEnvironment ;
205
+ privateNameEnvironment = { } ;
210
206
node = visitEachChild ( node , visitorCollectPrivateNames , context ) ;
211
207
node = visitEachChild ( node , visitor , context ) ;
212
208
const expressions = createPrivateNameWeakMapAssignments (
213
- currentPrivateNameEnvironment ( )
209
+ privateNameEnvironment
214
210
) ;
215
211
if ( expressions . length ) {
216
212
node = updateClassExpression (
@@ -223,23 +219,10 @@ namespace ts {
223
219
) ;
224
220
}
225
221
expressions . push ( node ) ;
226
- endPrivateNameEnvironment ( ) ;
222
+ privateNameEnvironment = savedPrivateNameEnvironment ;
227
223
return expressions . length > 1 ? createCommaList ( expressions ) : expressions [ 0 ] ;
228
224
}
229
225
230
- function startPrivateNameEnvironment ( ) {
231
- // Create private name environment.
232
- privateNameEnvironmentStack [ ++ privateNameEnvironmentIndex ] = { } ;
233
- return currentPrivateNameEnvironment ( ) ;
234
- }
235
-
236
- function endPrivateNameEnvironment ( ) : PrivateNameEnvironment {
237
- const privateNameEnvironment = currentPrivateNameEnvironment ( ) ;
238
- // Destroy private name environment.
239
- delete privateNameEnvironmentStack [ privateNameEnvironmentIndex -- ] ;
240
- return privateNameEnvironment ;
241
- }
242
-
243
226
function createPrivateNameWeakMapDeclarations ( environment : PrivateNameEnvironment ) : Statement [ ] {
244
227
return Object . keys ( environment ) . map ( name => {
245
228
const privateName = environment [ name ] ;
@@ -270,7 +253,6 @@ namespace ts {
270
253
271
254
function transformClassMembers ( members : ReadonlyArray < ClassElement > ) : ClassElement [ ] {
272
255
// Rewrite constructor with private name initializers.
273
- const privateNameEnvironment = currentPrivateNameEnvironment ( ) ;
274
256
// Initialize private properties.
275
257
const initializerStatements = Object . keys ( privateNameEnvironment ) . map ( name => {
276
258
const privateName = privateNameEnvironment [ name ] ;
0 commit comments