| 356 | } |
| 357 | |
| 358 | void fxGetNextNumberB(txParser* parser) |
| 359 | { |
| 360 | txString p = parser->buffer; |
| 361 | txString q = p + parser->bufferSize; |
| 362 | int c; |
| 363 | fxGetNextCharacter(parser); |
| 364 | p = fxGetNextDigits(parser, fxGetNextDigitsB, p, q, 1); |
| 365 | c = parser->character; |
| 366 | if (p == q) { |
| 367 | fxReportMemoryError(parser, parser->states[2].line, "number overflow"); |
| 368 | } |
| 369 | if (c == 'n') |
| 370 | fxGetNextCharacter(parser); |
| 371 | if (fxIsIdentifierFirst(parser->character)) { |
| 372 | fxReportParserError(parser, parser->states[2].line, "invalid number"); |
| 373 | } |
| 374 | *p = 0; |
| 375 | q = parser->buffer; |
| 376 | if (c == 'n') { |
| 377 | parser->states[2].bigint.data = fxNewParserChunk(parser, fxBigIntMaximumB(mxPtrDiff(p - q))); |
| 378 | fxBigIntParseB(&parser->states[2].bigint, q, mxPtrDiff(p - q)); |
| 379 | parser->states[2].token = XS_TOKEN_BIGINT; |
| 380 | } |
| 381 | else { |
| 382 | txNumber n = 0; |
| 383 | while ((c = *q++)) |
| 384 | n = (n * 2) + (c - '0'); |
| 385 | fxGetNextNumber(parser, n); |
| 386 | } |
| 387 | } |
| 388 | |
| 389 | void fxGetNextNumberE(txParser* parser, int dot) |
| 390 | { |
no test coverage detected