From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1.migadu.com ([2001:41d0:303:e16b::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms5.migadu.com with LMTPS id mDOjJ1aaIWbsEwAA62LTzQ:P1 (envelope-from ) for ; Fri, 19 Apr 2024 00:10:30 +0200 Received: from aspmx1.migadu.com ([2001:41d0:303:e16b::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1.migadu.com with LMTPS id mDOjJ1aaIWbsEwAA62LTzQ (envelope-from ) for ; Fri, 19 Apr 2024 00:10:30 +0200 X-Envelope-To: patches@johnnyrichard.com Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=lists.sr.ht header.s=20240113 header.b=eO9jBt42; dkim=pass header.d=johnnyrichard.com header.s=key1 header.b=HVP0Oai4; spf=pass (aspmx1.migadu.com: domain of lists@sr.ht designates 46.23.81.152 as permitted sender) smtp.mailfrom=lists@sr.ht; dmarc=pass (policy=quarantine) header.from=johnnyrichard.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=johnnyrichard.com; s=key1; t=1713478230; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding:list-id: list-unsubscribe:list-subscribe:list-post:dkim-signature; bh=qIOeaMR36SFAmch1ELxtx9SEVR7oKnh1U2RuFK5gT90=; b=cMivHXbZm9eZnmXZzsVv5nF6kv38JmqkGBrBztnfw8yAdBdF8o8a8TGf7fvjmpiYWWPgo1 3F0kWS+Qhyj8iGpPiRDybIFLusDDvDKhniLShHZuWyzy0nQm/mXtEQfliXsQKmxu+fCXA9 YpJN6iJ49fF99+G1GB9+q7NcP+v5ouVVXDYmyKe1kUm9o4CgACKR5wU/T2bDd+z9NjPCJC LIzcRtP99bjGIGXTYtZugQ/kmsJbcWMF41MT5x6zZhLRjLk0ScI5Fin+Xrg9Za04g7pLE2 /j14h/waoOmilRWySSvcw39i5TeLNsKOisz5JagT7bHY3gFQee5UErS34TS7mw== ARC-Seal: i=1; s=key1; d=johnnyrichard.com; t=1713478230; a=rsa-sha256; cv=none; b=F+ocqfBuC0OQSuobggDSELNyrwo2tKi/ac1CKj1HDlNmO/XqQUVwiljg3kUjxUgPaahvXY SziLwtKi7FD1wWKwgjLBmQ2cF1m+KPfWTyAyNbcFodzrjO0deIT96a5hAir0AjFyx5fjDC LKF+LK4q0IWf38TuQX6w2bVn/Fof9FZDwlVCNJ0nJ0VArSMF4iLuVAydX4vu4mvSUCslrB wrjwKUYY+YsZ7DKo0vX6ZgEW2TojkjyvHGpLncHb23+TpFdbZbklaG86+fZzov75U4VIyu hybeFjo+llGDOsqBmwLIfG5F6b1y8nFkUhAqGV6oVM1fzzOIz9FOtSB+Hl+FKw== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=pass header.d=lists.sr.ht header.s=20240113 header.b=eO9jBt42; dkim=pass header.d=johnnyrichard.com header.s=key1 header.b=HVP0Oai4; spf=pass (aspmx1.migadu.com: domain of lists@sr.ht designates 46.23.81.152 as permitted sender) smtp.mailfrom=lists@sr.ht; dmarc=pass (policy=quarantine) header.from=johnnyrichard.com Received: from mail-a.sr.ht (mail-a.sr.ht [46.23.81.152]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 252F83B36B for ; Fri, 19 Apr 2024 00:10:30 +0200 (CEST) DKIM-Signature: a=rsa-sha256; bh=d4boEr+CwFI6hR9wEIoSOUldgFZ/szI97jmI81fsRyw=; c=simple/simple; d=lists.sr.ht; h=From:To:Cc:Subject:Date:List-Unsubscribe:List-Subscribe:List-Archive:List-Post:List-ID; q=dns/txt; s=20240113; t=1713478230; v=1; b=eO9jBt42zjzEmIAGJycxbrNCQYSCp7TAiOzk7G7b1MKdILVIGRD9MyUyqlmAdc/E09yttLjW 4GybNZPb3PzTwL2exdYXlOkx+NFF0PX7NSkwwzpxGSjiRCA7f39SF/bOVUvxffKwPO99hWZ4m5K THrItzjtmLkevPJ2lt5jrNcjZiOXdwq0QqUs7FCA+9noASilknqhfn9ybNzBtP9DTusdAnNXaSW /ND77BCRnCC+kdMO63c5/tPWKKEMfm2WewHXkwdFvrGuNTPYCvu8vBPVGXuZ5sxBVDEpYKjmgJn TLkFxjAv/MkDx1globGexpMn8SMQLnkOm6qeed6iIlMbg== Received: from lists.sr.ht (unknown [IPv6:2a03:6000:1813:1337::154]) by mail-a.sr.ht (Postfix) with ESMTPSA id F0A2E20337 for ; Thu, 18 Apr 2024 22:10:29 +0000 (UTC) Received: from out-184.mta0.migadu.com (out-184.mta0.migadu.com [IPv6:2001:41d0:1004:224b::b8]) by mail-a.sr.ht (Postfix) with ESMTPS id 3E4702032F for <~johnnyrichard/olang-devel@lists.sr.ht>; Thu, 18 Apr 2024 22:10:29 +0000 (UTC) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=johnnyrichard.com; s=key1; t=1713478228; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=qIOeaMR36SFAmch1ELxtx9SEVR7oKnh1U2RuFK5gT90=; b=HVP0Oai4+YrX9RNCOXtH8UDAVrh4GC8BjPh4EIojcWZTJhm+iucx2WieQejrLjOzfcZCgO nJXcp4hsSCSmWI1q5f+3Bxmnlc8B7Bpor5xx0wLsCGlB/YVzdP5ho+l9M6pgiM4RE3nz5c sKfq5rqHcRKJUNP37BL1hq1rC/prBqWWaNyhd97gaKjNbNGa3UVbnCr7oBeXkpX+PY25JZ PBlOIFGHgs1uhRfF+ko3nM4QK+8iZTd9UYX+C4CHbrxXZtnnpYVJJPT0Ey2muGrTiN0Gs3 xE8GWia2TFa/q+scqzg5BXxbkZQo8jw0PwskUVLkUdxmTe7vlpFowd+iwVJ76g== From: Johnny Richard To: ~johnnyrichard/olang-devel@lists.sr.ht Cc: Johnny Richard Subject: [PATCH olang v1] parser: fix parse expression with binop chain Date: Fri, 19 Apr 2024 01:08:05 +0200 Message-ID: <20240418230824.22782-1-johnny@johnnyrichard.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Sourcehut-Patchset-Status: PROPOSED List-Unsubscribe: List-Subscribe: List-Archive: Archived-At: List-Post: List-ID: ~johnnyrichard/olang-devel <~johnnyrichard/olang-devel.lists.sr.ht> Sender: ~johnnyrichard/olang-devel <~johnnyrichard/olang-devel@lists.sr.ht> X-Migadu-Country: NL X-Migadu-Flow: FLOW_IN X-Migadu-Spam-Score: -9.14 X-Spam-Score: -9.14 X-Migadu-Queue-Id: 252F83B36B X-Migadu-Scanner: mx13.migadu.com X-TUID: BR6tBEEWfYOi The parsing of expression was dropping the lhs with higher precedence due to a bug where we never changed the first lhs. Consider the following code: 1 fn main(): u32 { 2 return 1 * 2 + 3 3 } With the bug it is generating the following AST: Translation_Unit `-Function_Definition `-Block `-Return_Statement `-Binary_Operation (+) |-Literal `-Literal After this fix being applied, the same code generates the following AST: Translation_Unit `-Function_Definition `-Block `-Return_Statement `-Binary_Operation (+) |-Binary_Operation (*) | |-Literal | `-Literal `-Literal As soon as we get a better functional test for the compiler we can cover these corner cases easily. Signed-off-by: Johnny Richard --- src/parser.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/parser.c b/src/parser.c index b800870..db79072 100644 --- a/src/parser.c +++ b/src/parser.c @@ -171,8 +171,6 @@ get_binary_op_precedence(token_kind_t kind) static ast_node_t * parser_parse_expr_1(parser_t *parser, ast_node_t *lhs, size_t prev_precedence) { - ast_node_t *expr = NULL; - token_t lookahead_token; lexer_peek_next(parser->lexer, &lookahead_token); @@ -194,17 +192,13 @@ parser_parse_expr_1(parser_t *parser, ast_node_t *lhs, size_t prev_precedence) lexer_peek_next(parser->lexer, &lookahead_token); } - expr = ast_new_node_bin_op(parser->arena, token_kind_to_binary_op_kind(token_op.kind), lhs, rhs); - if (expr == NULL) { + lhs = ast_new_node_bin_op(parser->arena, token_kind_to_binary_op_kind(token_op.kind), lhs, rhs); + if (lhs == NULL) { return NULL; } } - if (expr == NULL) { - return lhs; - } - - return expr; + return lhs; } static ast_node_t * base-commit: dc6b44ddd2673a9a377430684ce37a80fbbaace3 -- 2.44.0