summaryrefslogtreecommitdiff
path: root/src/parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.c')
-rw-r--r--src/parser.c15
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);