diff options
| author | Federico Angelilli <code@fedang.net> | 2024-06-07 02:26:46 +0200 |
|---|---|---|
| committer | Federico Angelilli <code@fedang.net> | 2024-06-07 02:26:46 +0200 |
| commit | bde2e4df872bcf0cae61805a9b3c1ec400cece16 (patch) | |
| tree | 84046355775ec923c8433d3f1356885876bfb767 /any_sexp.h | |
| parent | c12c5720bd233752f4ce5e7396bb1709c10b55be (diff) | |
Simplify number parsing
Diffstat (limited to 'any_sexp.h')
| -rw-r--r-- | any_sexp.h | 11 |
1 files changed, 5 insertions, 6 deletions
@@ -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); } |
