Added support in lexer for negative numbers

Though we deal with unsigned numbers internally, it should be possible
to read and manipulate negative numbers through 2s complement.  Later
on we'll add support for signed operations via 2s complement, so this
should be allowed.
This commit is contained in:
2023-10-26 11:17:01 +01:00
parent e9c54e045a
commit dca51106a2

View File

@@ -68,6 +68,8 @@ token_t tokenise_symbol(buffer_t *buffer)
token_t tokenise_number_literal(buffer_t *buffer) token_t tokenise_number_literal(buffer_t *buffer)
{ {
token_t token = {.type = TOKEN_LITERAL_NUMBER, .str_size = 0}; token_t token = {.type = TOKEN_LITERAL_NUMBER, .str_size = 0};
if (buffer->data[buffer->used] == '-')
++token.str_size;
for (; token.str_size < space_left(buffer) && for (; token.str_size < space_left(buffer) &&
isdigit(buffer->data[buffer->used + token.str_size]); isdigit(buffer->data[buffer->used + token.str_size]);
++token.str_size) ++token.str_size)
@@ -105,7 +107,8 @@ token_stream_t tokenise_buffer(buffer_t *buffer)
continue; continue;
is_token = false; is_token = false;
} }
else if (isdigit(c)) else if (isdigit(c) || (space_left(buffer) > 1 && c == '-' &&
isdigit(buffer->data[buffer->used + 1])))
t = tokenise_number_literal(buffer); t = tokenise_number_literal(buffer);
else if (is_symbol(c)) else if (is_symbol(c))
t = tokenise_symbol(buffer); t = tokenise_symbol(buffer);