xast
Version:
AST parsing library
44 lines • 1.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.readNumber = void 0;
const TokenKind_1 = require("../TokenKind");
const createToken_1 = require("../createToken");
const characterClasses_1 = require("../characterClasses");
const readNumber = (lexer, start, firstCode) => {
const source = lexer.source;
const body = source.body;
let position = start;
let code = firstCode;
if (code === 0x002d) {
code = body.charCodeAt(++position);
}
if (code === 0x0030) {
code = body.charCodeAt(++position);
if ((0, characterClasses_1.isDigit)(code)) {
throw source.syntaxError(position, `Invalid number, unexpected digit after 0: ${source.printCodePointAt(position)}.`);
}
}
else {
position = source.readDigits(position, code);
code = body.charCodeAt(position);
}
if (code === 0x002e) {
code = body.charCodeAt(++position);
position = source.readDigits(position, code);
code = body.charCodeAt(position);
}
if (code === 0x0045 || code === 0x0065) {
code = body.charCodeAt(++position);
if (code === 0x002b || code === 0x002d) {
code = body.charCodeAt(++position);
}
position = source.readDigits(position, code);
code = body.charCodeAt(position);
}
if (code === 0x002e || (0, characterClasses_1.isNameStart)(code)) {
throw source.syntaxError(position, `Invalid number, expected digit but got: ${source.printCodePointAt(position)}.`);
}
return (0, createToken_1.createToken)(lexer, TokenKind_1.TokenKind.NUMBER, start, position, body.slice(start, position));
};
exports.readNumber = readNumber;
//# sourceMappingURL=readNumber.js.map