MCPcopy Create free account
hub / github.com/DeusData/codebase-memory-mcp / jl_parse_number

Function jl_parse_number

src/cli/config_json_like.c:410–488  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

408}
409
410static int jl_parse_number(jl_parser_t *parser) {
411 size_t pos = parser->pos;
412 if (pos < parser->length &&
413 (parser->text[pos] == '-' || (!parser->strict && parser->text[pos] == '+'))) {
414 pos++;
415 }
416 if (!parser->strict && parser->length - pos >= 8U &&
417 memcmp(parser->text + pos, "Infinity", 8U) == 0) {
418 parser->pos = pos + 8U;
419 return 0;
420 }
421 if (!parser->strict && parser->length - pos >= 3U &&
422 memcmp(parser->text + pos, "NaN", 3U) == 0) {
423 parser->pos = pos + 3U;
424 return 0;
425 }
426 if (!parser->strict && parser->length - pos >= 3U && parser->text[pos] == '0' &&
427 (parser->text[pos + 1U] == 'x' || parser->text[pos + 1U] == 'X')) {
428 pos += 2U;
429 size_t digits = pos;
430 while (pos < parser->length && jl_is_hex((unsigned char)parser->text[pos])) {
431 pos++;
432 }
433 if (pos == digits) {
434 return -1;
435 }
436 parser->pos = pos;
437 return 0;
438 }
439
440 bool integer_digits = false;
441 if (pos < parser->length && parser->text[pos] == '0') {
442 integer_digits = true;
443 pos++;
444 if (parser->strict && pos < parser->length && parser->text[pos] >= '0' &&
445 parser->text[pos] <= '9') {
446 return -1;
447 }
448 } else {
449 while (pos < parser->length && parser->text[pos] >= '0' && parser->text[pos] <= '9') {
450 pos++;
451 integer_digits = true;
452 }
453 }
454 if (parser->strict && !integer_digits) {
455 return -1;
456 }
457
458 bool fraction_digits = false;
459 if (pos < parser->length && parser->text[pos] == '.') {
460 pos++;
461 while (pos < parser->length && parser->text[pos] >= '0' && parser->text[pos] <= '9') {
462 pos++;
463 fraction_digits = true;
464 }
465 if (parser->strict && !fraction_digits) {
466 return -1;
467 }

Callers 1

jl_parse_valueFunction · 0.85

Calls 1

jl_is_hexFunction · 0.85

Tested by

no test coverage detected