From bde2e4df872bcf0cae61805a9b3c1ec400cece16 Mon Sep 17 00:00:00 2001 From: Federico Angelilli Date: Fri, 7 Jun 2024 02:26:46 +0200 Subject: Simplify number parsing --- any_sexp.h | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/any_sexp.h b/any_sexp.h index 154d4cf..c419cba 100644 --- a/any_sexp.h +++ b/any_sexp.h @@ -310,21 +310,20 @@ any_sexp_t any_sexp_read(any_sexp_reader_t *reader) // Symbol | Number if (any_sexp_issym(reader->c)) { size_t length = 0; + bool number = true; do { - if (length < ANY_SEXP_READER_BUFFER_LENGTH) + if (length < ANY_SEXP_READER_BUFFER_LENGTH) { + number = number && (length == 0 && reader->c == '-' || isdigit(reader->c)); buffer[length++] = reader->c; + } any_sexp_reader_advance(reader); } while (any_sexp_issym(reader->c)); buffer[length] = '\0'; - size_t numeric = buffer[0] == '-'; - while (numeric < length && isdigit(buffer[numeric])) - numeric++; - - if (numeric == length) { + if (number) { intptr_t value = strtol(buffer, NULL, 10); return any_sexp_number(value); } -- cgit v1.2.3