diff options
Diffstat (limited to 'src/parser.c')
-rw-r--r-- | src/parser.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/parser.c b/src/parser.c index baa2ef5..22313a6 100644 --- a/src/parser.c +++ b/src/parser.c @@ -84,6 +84,11 @@ parser_parse_type(parser_t *parser, type_t *type) return true; } + if (string_view_eq(token.value, string_view_from_str("bool"))) { + *type = TYPE_BOOL; + return true; + } + parser_error_t error; error.token = token; @@ -102,6 +107,12 @@ parser_literal_integer_node(token_t *token) return ast_node_new_literal_integer(atoi(number_as_str)); } +static ast_node_t * +parser_literal_bool_node(token_t *token) +{ + return ast_node_new_literal_bool(token->kind == TOKEN_TRUE); +} + static ast_binary_operation_kind_t token_to_binary_operation_kind(token_t *token) { @@ -128,6 +139,10 @@ parser_parse_factor(parser_t *parser) switch (token.kind) { case TOKEN_NUMBER: return parser_literal_integer_node(&token); + case TOKEN_TRUE: + return parser_literal_bool_node(&token); + case TOKEN_FALSE: + return parser_literal_bool_node(&token); case TOKEN_OPAREN: { ast_node_t *expression = parser_parse_expression(parser); |