@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
72 lines (64 loc) • 1.86 kB
JavaScript
import { assert } from "../../assert.js";
import DataType from "./DataType.js";
import ParserError from "./ParserError.js";
import Token from "./Token.js";
/**
*
* @param {string} text
* @param {number} cursor
* @param {number} length
* @returns {Token}
*/
export function readUnsignedIntegerToken(text, cursor, length) {
assert.isString(text, 'text');
assert.isNonNegativeInteger(cursor, 'cursor');
assert.isNonNegativeInteger(length, 'length');
let i = cursor;
let value = 0;
main_loop: for (; i < length;) {
const char = text.charAt(i);
let digit;
switch (char) {
case '0':
digit = 0;
break;
case '1':
digit = 1;
break;
case '2':
digit = 2;
break;
case '3':
digit = 3;
break;
case '4':
digit = 4;
break;
case '5':
digit = 5;
break;
case '6':
digit = 6;
break;
case '7':
digit = 7;
break;
case '8':
digit = 8;
break;
case '9':
digit = 9;
break;
default:
if (i === cursor) {
//first character is not a digit
throw new ParserError(i, `Expected a digit [0,1,2,3,4,5,6,7,8,9] but got '${char}' instead`, text);
}
//not a digit
break main_loop;
}
i++;
value = value * 10 + digit;
}
return new Token(value, cursor, i, "uint", DataType.Number);
}