Skip to content

Commit 1c652ae

Browse files
author
Max Heiber
committed
no private name environment stack
Signed-off-by: Max Heiber <[email protected]>
1 parent a63b52d commit 1c652ae

File tree

1 file changed

+14
-32
lines changed

1 file changed

+14
-32
lines changed

src/compiler/transformers/esnext.ts

Lines changed: 14 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ namespace ts {
3636
initializer?: Expression;
3737
};
3838
}
39-
const privateNameEnvironmentStack: PrivateNameEnvironment[] = [];
40-
let privateNameEnvironmentIndex = -1;
39+
40+
let privateNameEnvironment: PrivateNameEnvironment = {};
4141

4242
return chainBundle(transformSourceFile);
4343

@@ -125,29 +125,23 @@ namespace ts {
125125
}
126126
}
127127

128-
function currentPrivateNameEnvironment() {
129-
return privateNameEnvironmentStack[privateNameEnvironmentIndex];
130-
}
131-
132128
function addPrivateName(name: PrivateName, initializer?: Expression) {
133-
const environment = currentPrivateNameEnvironment();
134129
const nameString = name.escapedText as string;
135-
if (nameString in environment) {
130+
if (nameString in privateNameEnvironment) {
136131
throw new Error("Redeclaring private name " + nameString + ".");
137132
}
138133
const weakMap = createFileLevelUniqueName("_" + nameString.substring(1));
139-
environment[nameString] = {
134+
privateNameEnvironment[nameString] = {
140135
weakMap,
141136
initializer
142137
};
143138
return weakMap;
144139
}
145140

146141
function accessPrivateName(name: PrivateName) {
147-
const environment = currentPrivateNameEnvironment();
148142
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;
151145
}
152146
// Undeclared private name.
153147
return undefined;
@@ -183,11 +177,12 @@ namespace ts {
183177
}
184178

185179
function visitClassDeclaration(node: ClassDeclaration) {
186-
startPrivateNameEnvironment();
180+
const savedPrivateNameEnvironment = privateNameEnvironment;
181+
privateNameEnvironment = {};
187182
node = visitEachChild(node, visitorCollectPrivateNames, context);
188183
node = visitEachChild(node, visitor, context);
189184
const statements = createPrivateNameWeakMapDeclarations(
190-
currentPrivateNameEnvironment()
185+
privateNameEnvironment
191186
);
192187
if (statements.length) {
193188
node = updateClassDeclaration(
@@ -201,16 +196,17 @@ namespace ts {
201196
);
202197
}
203198
statements.unshift(node);
204-
endPrivateNameEnvironment();
199+
privateNameEnvironment = savedPrivateNameEnvironment;
205200
return statements;
206201
}
207202

208203
function visitClassExpression(node: ClassExpression) {
209-
startPrivateNameEnvironment();
204+
const savedPrivateNameEnvironment = privateNameEnvironment;
205+
privateNameEnvironment = {};
210206
node = visitEachChild(node, visitorCollectPrivateNames, context);
211207
node = visitEachChild(node, visitor, context);
212208
const expressions = createPrivateNameWeakMapAssignments(
213-
currentPrivateNameEnvironment()
209+
privateNameEnvironment
214210
);
215211
if (expressions.length) {
216212
node = updateClassExpression(
@@ -223,23 +219,10 @@ namespace ts {
223219
);
224220
}
225221
expressions.push(node);
226-
endPrivateNameEnvironment();
222+
privateNameEnvironment = savedPrivateNameEnvironment;
227223
return expressions.length > 1 ? createCommaList(expressions) : expressions[0];
228224
}
229225

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-
243226
function createPrivateNameWeakMapDeclarations(environment: PrivateNameEnvironment): Statement[] {
244227
return Object.keys(environment).map(name => {
245228
const privateName = environment[name];
@@ -270,7 +253,6 @@ namespace ts {
270253

271254
function transformClassMembers(members: ReadonlyArray<ClassElement>): ClassElement[] {
272255
// Rewrite constructor with private name initializers.
273-
const privateNameEnvironment = currentPrivateNameEnvironment();
274256
// Initialize private properties.
275257
const initializerStatements = Object.keys(privateNameEnvironment).map(name => {
276258
const privateName = privateNameEnvironment[name];

0 commit comments

Comments
 (0)