From f30a6e048ccadd33c889caaa8012cfabfd5c2da9 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Tue, 29 Jul 2025 08:51:00 +0900 Subject: feat: implement bitwise or --- parse.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'parse.c') diff --git a/parse.c b/parse.c index 469ed49..057d5c2 100644 --- a/parse.c +++ b/parse.c @@ -474,13 +474,29 @@ AstNode* parse_equality_expr(Parser* p) { return lhs; } -AstNode* parse_logical_and_expr(Parser* p) { +AstNode* parse_bitwise_or_expr(Parser* p) { AstNode* lhs = parse_equality_expr(p); while (1) { TokenKind op = peek_token(p)->kind; - if (op == TokenKind_andand) { + if (op == TokenKind_or) { next_token(p); AstNode* rhs = parse_equality_expr(p); + lhs = ast_new_binary_expr(op, lhs, rhs); + lhs->ty = type_new(TypeKind_int); + } else { + break; + } + } + return lhs; +} + +AstNode* parse_logical_and_expr(Parser* p) { + AstNode* lhs = parse_bitwise_or_expr(p); + while (1) { + TokenKind op = peek_token(p)->kind; + if (op == TokenKind_andand) { + next_token(p); + AstNode* rhs = parse_bitwise_or_expr(p); AstNode* e = ast_new(AstNodeKind_logical_expr); e->node_op = op; e->node_lhs = lhs; -- cgit v1.2.3-70-g09d2