Skip to content

Commit 4c2fa02

Browse files
committed
A little refactoring.
1 parent 9b0e88b commit 4c2fa02

1 file changed

Lines changed: 9 additions & 56 deletions

File tree

lib/parse.js

Lines changed: 9 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)