Skip to content

Commit 03bcd30

Browse files
crisbetoalxhub
authored andcommitted
fix(compiler-cli): handle enum members without initializers in partial evaluator (#59815)
Fixes that the partial evaluator was interpreting initializer-less enum members as undefined. In this case the value is the same as the index. PR Close #59815
1 parent a88b00c commit 03bcd30

File tree

2 files changed

+3
-2
lines changed

2 files changed

+3
-2
lines changed

packages/compiler-cli/src/ngtsc/partial_evaluator/src/interpreter.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,10 +314,10 @@ export class StaticInterpreter {
314314
private visitEnumDeclaration(node: ts.EnumDeclaration, context: Context): ResolvedValue {
315315
const enumRef = this.getReference(node, context);
316316
const map = new Map<string, EnumValue>();
317-
node.members.forEach((member) => {
317+
node.members.forEach((member, index) => {
318318
const name = this.stringNameFromPropertyName(member.name, context);
319319
if (name !== undefined) {
320-
const resolved = member.initializer && this.visit(member.initializer, context);
320+
const resolved = member.initializer ? this.visit(member.initializer, context) : index;
321321
map.set(name, new EnumValue(enumRef, name, resolved));
322322
}
323323
});

packages/compiler-cli/src/ngtsc/partial_evaluator/test/evaluator_spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,7 @@ runInEachFileSystem(() => {
638638
}
639639
expect((result.enumRef.node as ts.EnumDeclaration).name.text).toBe('Foo');
640640
expect(result.name).toBe('B');
641+
expect(result.resolved).toBe(1);
641642
});
642643

643644
it('variable declaration resolution works', () => {

0 commit comments

Comments
 (0)