diff --git a/include/lexer/lexer.h b/include/lexer/lexer.h index 5306c7c..8edfe7c 100644 --- a/include/lexer/lexer.h +++ b/include/lexer/lexer.h @@ -16,8 +16,7 @@ typedef enum { TK_L_BRACKET, TK_R_BRACKET, TK_NULL, - TK_TRUE, - TK_FALSE, + TK_BOOL, TK_STR_KEY, TK_STR_VAL, TK_INTEGER, @@ -29,6 +28,7 @@ typedef union { i64 num_int; f64 num_frac; str_view_t string; + bool boolean; } token_value_t; typedef struct { diff --git a/src/lexer/lexer.c b/src/lexer/lexer.c index 14fabfc..680fd0d 100644 --- a/src/lexer/lexer.c +++ b/src/lexer/lexer.c @@ -301,11 +301,9 @@ void print_token(token_t token) { case TK_NULL: printf("%15s, VALUE: N/A", "TK_NULL"); break; - case TK_TRUE: - printf("%15s, VALUE: N/A", "TK_TRUE"); - break; - case TK_FALSE: - printf("%15s, VALUE: N/A", "TK_FALSE"); + case TK_BOOL: + printf("%15s, VALUE: %s", "TK_BOOL", + token.value.boolean ? "true" : "false"); break; case TK_STR_KEY: printf("%15s, VALUE: %s", "TK_STR_KEY", token.value.string); @@ -1070,9 +1068,11 @@ lexer_state_t handle_keyword_end(lexer_t *lexer, char input) { if (strequal(keyword, "null")) { set_token(token, lexer->line, column, TK_NULL, (token_value_t){0}); } else if (strequal(keyword, "true")) { - set_token(token, lexer->line, column, TK_TRUE, (token_value_t){0}); + set_token(token, lexer->line, column, TK_BOOL, + (token_value_t){.boolean = true}); } else if (strequal(keyword, "false")) { - set_token(token, lexer->line, column, TK_FALSE, (token_value_t){0}); + set_token(token, lexer->line, column, TK_BOOL, + (token_value_t){.boolean = false}); } clear_lex_str(&(lexer->keyword));