diff options
author | David Robillard <d@drobilla.net> | 2025-02-25 09:56:01 -0500 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2025-03-16 20:22:36 -0400 |
commit | e0c3ff08acbc25040e73838770435e1d2a89265e (patch) | |
tree | ea28a29a85f74b8d42bf41cff7230c6fa595fbfa /src | |
parent | 5ecac71066475b2bb55758ae138afeebeaa5b948 (diff) | |
download | serd-e0c3ff08acbc25040e73838770435e1d2a89265e.tar.gz serd-e0c3ff08acbc25040e73838770435e1d2a89265e.tar.bz2 serd-e0c3ff08acbc25040e73838770435e1d2a89265e.zip |
Fix reading numbers with no space before the final dot
Diffstat (limited to 'src')
-rw-r--r-- | src/n3.c | 12 |
1 files changed, 5 insertions, 7 deletions
@@ -814,18 +814,16 @@ read_number(SerdReader* const reader, // all other cases ::= ( '-' | '+' ) [0-9]+ ( . )? ( [0-9]+ )? ... TRY(st, read_0_9(reader, *dest, true)); if ((c = peek_byte(reader)) == '.') { - has_decimal = true; - // Annoyingly, dot can be end of statement, so tentatively eat skip_byte(reader, c); c = peek_byte(reader); if (!is_digit(c) && c != 'e' && c != 'E') { - *ate_dot = true; // Force caller to deal with stupid grammar - return SERD_SUCCESS; // Next byte is not a number character + *ate_dot = true; // Force caller to deal with silly grammar + } else { + has_decimal = true; + push_byte(reader, *dest, '.'); + read_0_9(reader, *dest, false); } - - push_byte(reader, *dest, '.'); - read_0_9(reader, *dest, false); } } c = peek_byte(reader); |