export function readNumber()

in src/language/json/JSON.ts [274:332]


export function readNumber(iterator: Iterator<basic.Token>): basic.Token[] {
    const numberBasicTokens: basic.Token[] = [];

    // tslint:disable-next-line:no-non-null-assertion no-unnecessary-type-assertion // Precondition is that current points to Dash or Digits
    const dashOrDigitsToken = iterator.current()!;
    if (dashOrDigitsToken.getType() === basic.TokenType.Dash) {
        // Negative sign
        numberBasicTokens.push(dashOrDigitsToken);
        iterator.moveNext();
    }

    const digits = iterator.current();
    if (digits && digits.getType() === basic.TokenType.Digits) {
        // Whole number digits
        numberBasicTokens.push(digits);
        iterator.moveNext();
    }

    const decimal = iterator.current();
    if (decimal && decimal.getType() === basic.TokenType.Period) {
        // Decimal point
        numberBasicTokens.push(decimal);
        iterator.moveNext();

        const fractionalDigits = iterator.current();
        if (fractionalDigits && fractionalDigits.getType() === basic.TokenType.Digits) {
            // Fractional number digits
            numberBasicTokens.push(fractionalDigits);
            iterator.moveNext();
        }
    }

    const exponentLetter = iterator.current();
    if (exponentLetter) {
        if (exponentLetter.getType() === basic.TokenType.Letters && exponentLetter.toString().toLowerCase() === "e") {
            // e
            numberBasicTokens.push(exponentLetter);
            iterator.moveNext();

            const exponentSign = iterator.current();
            if (exponentSign
                && (exponentSign.getType() === basic.TokenType.Dash || exponentSign.getType() === basic.TokenType.Plus)
            ) {
                // Exponent number sign
                numberBasicTokens.push(exponentSign);
                iterator.moveNext();
            }

            const exponentDigits = iterator.current();
            if (exponentDigits && exponentDigits.getType() === basic.TokenType.Digits) {
                // Exponent number digits
                numberBasicTokens.push(exponentDigits);
                iterator.moveNext();
            }
        }
    }

    return numberBasicTokens;
}