@@ -411,9 +411,8 @@ function parse(text, reviver, newOptions) {
411411 // Shouldn't be able to reach here with tokens other than type 'eof'.
412412 }
413413
414- function parseNumber ( ) {
415- read ( ) ;
416- literal ( 'aN' ) ;
414+ function parseSymbolicNumber ( text , value ) {
415+ literal ( text ) ;
417416
418417 if ( peek ( ) === UNDERSCORE ) {
419418 read ( ) ;
@@ -422,19 +421,19 @@ function parse(text, reviver, newOptions) {
422421
423422 if ( peek ( ) === LOWER_m ) {
424423 read ( ) ;
425- return newPrimitiveToken ( big . getBigDecimalType ( ) , big . toBigDecimal ( NaN ) ) ;
424+ return newPrimitiveToken ( big . getBigDecimalType ( ) , big . toBigDecimal ( value ) ) ;
426425 }
427426
428427 if ( peek ( ) === LOWER_d ) {
429428 read ( ) ;
430- return newPrimitiveToken ( getDecimalType ( ) , big . toDecimal ( NaN ) ) ;
429+ return newPrimitiveToken ( getDecimalType ( ) , big . toDecimal ( value ) ) ;
431430 }
432431
433432 if ( trailingUnderscore ) {
434433 throw invalidChar ( '_' ) ;
435434 }
436435
437- return newPrimitiveToken ( 'number' , NaN ) ;
436+ return newPrimitiveToken ( 'number' , value ) ;
438437 }
439438
440439 // Faster string reading based on https://github.com/json5/json5/pull/233, by @jlguardi
@@ -645,32 +644,10 @@ function parse(text, reviver, newOptions) {
645644 return ;
646645
647646 case UPPER_I :
648- read ( ) ;
649- literal ( 'nfinity' ) ;
650-
651- if ( peek ( ) === UNDERSCORE ) {
652- read ( ) ;
653- trailingUnderscore = true ;
654- }
655-
656- if ( peek ( ) === LOWER_m ) {
657- read ( ) ;
658- return newPrimitiveToken ( big . getBigDecimalType ( ) , big . toBigDecimal ( Infinity ) ) ;
659- }
660-
661- if ( peek ( ) === LOWER_d ) {
662- read ( ) ;
663- return newPrimitiveToken ( getDecimalType ( ) , big . toDecimal ( Infinity ) ) ;
664- }
665-
666- if ( trailingUnderscore ) {
667- throw invalidChar ( '_' ) ;
668- }
669-
670- return newPrimitiveToken ( 'number' , Infinity ) ;
647+ return parseSymbolicNumber ( 'Infinity' , Infinity ) ;
671648
672649 case UPPER_N :
673- return parseNumber ( ) ;
650+ return parseSymbolicNumber ( 'NaN' , NaN ) ;
674651
675652 case SINGLE_QUOTE :
676653 case QUOTE :
@@ -756,8 +733,6 @@ function parse(text, reviver, newOptions) {
756733 }
757734
758735 function lexSign ( ) {
759- let trailingUnderscore = false ;
760-
761736 switch ( c ) {
762737 case DOT :
763738 buffer = readChar ( ) ;
@@ -788,32 +763,10 @@ function parse(text, reviver, newOptions) {
788763 return ;
789764
790765 case UPPER_I :
791- read ( ) ;
792- literal ( 'nfinity' ) ;
793-
794- if ( peek ( ) === UNDERSCORE ) {
795- read ( ) ;
796- trailingUnderscore = true ;
797- }
798-
799- if ( peek ( ) === LOWER_m ) {
800- read ( ) ;
801- return newPrimitiveToken ( big . getBigDecimalType ( ) , big . toBigDecimal ( sign * Infinity ) ) ;
802- }
803-
804- if ( peek ( ) === LOWER_d ) {
805- read ( ) ;
806- return newPrimitiveToken ( getDecimalType ( ) , big . toDecimal ( sign * Infinity ) ) ;
807- }
808-
809- if ( trailingUnderscore ) {
810- throw invalidChar ( '_' ) ;
811- }
812-
813- return newPrimitiveToken ( 'number' , sign * Infinity ) ;
766+ return parseSymbolicNumber ( 'Infinity' , sign * Infinity ) ;
814767
815768 case UPPER_N :
816- return parseNumber ( ) ;
769+ return parseSymbolicNumber ( 'NaN' , NaN ) ;
817770 }
818771
819772 throw invalidChar ( read ( ) ) ;
0 commit comments