From 262592dfd2dcf74f4349cf0b58969f7b977a195c Mon Sep 17 00:00:00 2001 From: Mel Date: Fri, 23 May 2025 18:29:17 +0200 Subject: Lex boolean literals Signed-off-by: Mel --- boot/parse.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'boot/parse.c') diff --git a/boot/parse.c b/boot/parse.c index 38cb712..b009656 100644 --- a/boot/parse.c +++ b/boot/parse.c @@ -193,6 +193,17 @@ parser_expression_primary_string(struct Parser* p, struct Parser_Error* error) return expression_new(EXPRESSION_STRING_LITERAL, value, token.span, token.location); } +struct Expression* +parser_expression_primary_boolean(struct Parser* p, struct Parser_Error* error) +{ + struct Token token = parser_next(p); + check(token.kind == TOKEN_WORD_TRUE || token.kind == TOKEN_WORD_FALSE, + "expected boolean literal"); + bool literal = token.kind == TOKEN_WORD_TRUE; + union Expression_Value expr_value = { .bool_literal = { literal } }; + return expression_new(EXPRESSION_BOOLEAN_LITERAL, expr_value, token.span, token.location); +} + struct Expression* parser_expression_primary_group(struct Parser* p, struct Parser_Error* error) { @@ -218,9 +229,11 @@ parser_expression_primary(struct Parser* p, struct Parser_Error* error) return parser_expression_primary_float(p, error); case TOKEN_LITERAL_STRING: return parser_expression_primary_string(p, error); + case TOKEN_WORD_TRUE: + case TOKEN_WORD_FALSE: + return parser_expression_primary_boolean(p, error); case TOKEN_ROUND_OPEN: return parser_expression_primary_group(p, error); - // TODO: boolean literals. default: *error = parser_error(PARSER_ERROR_EXPECTED_PRIMARY_EXPRESSION); return nil; -- cgit 1.4.1