From 9dc06d01c2224ee1dbeb11ebee7c8afecfac8b05 Mon Sep 17 00:00:00 2001 From: hachem Date: Mon, 31 Aug 2026 23:14:26 +0200 Subject: feat: add support for floats through xmm registers --- src/lexer/lexer.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/lexer/lexer.c') diff --git a/src/lexer/lexer.c b/src/lexer/lexer.c index 22a671c..b4fb7d7 100644 --- a/src/lexer/lexer.c +++ b/src/lexer/lexer.c @@ -191,18 +191,28 @@ struct Token scan_token(struct Lexer* lexer) advance(lexer); while (is_hex_digit(peek(lexer))) advance(lexer); + return make_token(lexer, TOKEN_INTEGER, start); } - else if (character == '0' && (peek(lexer) == 'b' || peek(lexer) == 'B')) + + if (character == '0' && (peek(lexer) == 'b' || peek(lexer) == 'B')) { advance(lexer); while (peek(lexer) == '0' || peek(lexer) == '1') advance(lexer); + return make_token(lexer, TOKEN_INTEGER, start); } - else + + while (is_digit(peek(lexer))) + advance(lexer); + + if (peek(lexer) == '.' && is_digit(lexer->current[1])) { + advance(lexer); while (is_digit(peek(lexer))) advance(lexer); + return make_token(lexer, TOKEN_FLOAT, start); } + return make_token(lexer, TOKEN_INTEGER, start); } @@ -244,6 +254,7 @@ const char* token_type_name(enum TokenType type) case TOKEN_EOF: return "eof"; case TOKEN_IDENTIFIER: return "identifier"; case TOKEN_INTEGER: return "integer"; + case TOKEN_FLOAT: return "float"; case TOKEN_STRING: return "string"; case TOKEN_CHAR: return "char"; case TOKEN_CONST: return "const"; -- cgit v1.3