@@ -23769,22 +23769,23 @@ func (c *Checker) computeEnumMemberValues(node *ast.Node) {
2376923769 nodeLinks := c.nodeLinks.Get(node)
2377023770 if !(nodeLinks.flags&NodeCheckFlagsEnumValuesComputed != 0) {
2377123771 nodeLinks.flags |= NodeCheckFlagsEnumValuesComputed
23772- var autoValue jsnum.Number
23772+ autoValue := new( jsnum.Number)
2377323773 var previous *ast.Node
2377423774 for _, member := range node.Members() {
2377523775 result := c.computeEnumMemberValue(member, autoValue, previous)
2377623776 c.enumMemberLinks.Get(member).value = result
2377723777 if value, isNumber := result.Value.(jsnum.Number); isNumber {
23778- autoValue = value + 1
23778+ nextValue := value + 1
23779+ autoValue = &nextValue
2377923780 } else {
23780- autoValue = jsnum.NaN()
23781+ autoValue = nil
2378123782 }
2378223783 previous = member
2378323784 }
2378423785 }
2378523786}
2378623787
23787- func (c *Checker) computeEnumMemberValue(member *ast.Node, autoValue jsnum.Number, previous *ast.Node) evaluator.Result {
23788+ func (c *Checker) computeEnumMemberValue(member *ast.Node, autoValue * jsnum.Number, previous *ast.Node) evaluator.Result {
2378823789 if ast.IsComputedNonLiteralName(member.Name()) {
2378923790 c.error(member.Name(), diagnostics.Computed_property_names_are_not_allowed_in_enums)
2379023791 } else if ast.IsBigIntLiteral(member.Name()) {
@@ -23807,7 +23808,7 @@ func (c *Checker) computeEnumMemberValue(member *ast.Node, autoValue jsnum.Numbe
2380723808 // If the member is the first member in the enum declaration, it is assigned the value zero.
2380823809 // Otherwise, it is assigned the value of the immediately preceding member plus one, and an error
2380923810 // occurs if the immediately preceding member is not a constant enum member.
23810- if autoValue.IsNaN() {
23811+ if autoValue == nil {
2381123812 c.error(member.Name(), diagnostics.Enum_member_must_have_initializer)
2381223813 return evaluator.NewResult(nil, false, false, false)
2381323814 }
@@ -23818,7 +23819,7 @@ func (c *Checker) computeEnumMemberValue(member *ast.Node, autoValue jsnum.Numbe
2381823819 c.error(member.Name(), diagnostics.Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is_enabled)
2381923820 }
2382023821 }
23821- return evaluator.NewResult(autoValue, false, false, false)
23822+ return evaluator.NewResult(* autoValue, false, false, false)
2382223823}
2382323824
2382423825func (c *Checker) computeConstantEnumMemberValue(member *ast.Node) evaluator.Result {
0 commit comments