From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1.migadu.com ([2001:41d0:403:58f0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms5.migadu.com with LMTPS id uM0PBvRo72ZLLwAA62LTzQ:P1 (envelope-from ) for ; Sun, 22 Sep 2024 02:46:44 +0200 Received: from aspmx1.migadu.com ([2001:41d0:403:58f0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1.migadu.com with LMTPS id uM0PBvRo72ZLLwAA62LTzQ (envelope-from ) for ; Sun, 22 Sep 2024 02:46:44 +0200 X-Envelope-To: patches@johnnyrichard.com Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=lists.sr.ht header.s=20240113 header.b=qdNEaSxg; dkim=pass header.d=maniero.me header.s=hostingermail1 header.b=xwHbVrbO; 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=none) header.from=maniero.me; arc=pass ("mailchannels.net:s=arc-2022:i=1") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=johnnyrichard.com; s=key1; t=1726966004; 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: in-reply-to:in-reply-to:references:references:list-id: list-unsubscribe:list-subscribe:list-post:dkim-signature; bh=ukKC5xwP2wFMfP2oCSXyI7hap5o+2OcujueQD2ZATv8=; b=HM+rov5g6P/aL9AOFT/AnkBFv0RqcVFaF6JEyoc460xeQXI6HS/bvFADBkUR+UXDAWdy7z t6kRwOkNyvULr37BLivbluliY3HVm6KVA+UJid9rfNL7SU+DtawasX0Lw790fQfNy5dI3C hNsqTbSPzdogZMWmhxpHe0E9EwBGHcKi6B7CIk0euhZfjickefd6D4EvrxwATKYtYDTc6F Cw9rQCkesyNnwMdH+sSrk7Z7zJXNUFoS6Lx/T+/mIKidGkcUl+lFZPF9xGrW+P9ADl5nsz AmW2NOxZbWsvkFIoJk2Gg8IBLhjqa0SihURMTzMEPxtrXQ+KR/Pv60A7/yQf6A== ARC-Authentication-Results: i=2; aspmx1.migadu.com; dkim=pass header.d=lists.sr.ht header.s=20240113 header.b=qdNEaSxg; dkim=pass header.d=maniero.me header.s=hostingermail1 header.b=xwHbVrbO; 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=none) header.from=maniero.me; arc=pass ("mailchannels.net:s=arc-2022:i=1") ARC-Seal: i=2; s=key1; d=johnnyrichard.com; t=1726966004; a=rsa-sha256; cv=pass; b=WeyTY9k9v543ZYPOS8Gt6cB0JTTUqptFIEVBgvNejFX5uuTupt1LS8RRaCOusBF/C2Ogiw X+jjG66q3760fWXBX8J+SHBjgPQKg9qisOAQ7ztRI2JhPNOsqRYrXWslpk58D7mmbBo+Pv DrQGpXrFZ5bsnLYTLAlcowFBgPhEjH3H2xfmil5kgKQ5S5JXbBFcMTCdUmKskTBr111WRd aJkCVHuSPANXYbUw6uI1X3ztREcJr1cnJjVQLmoG8bdfcVo78l0Z5JpkIRH2AJcNdUwkLV D7hohiynkZmSiwr6ecXT+3x9b1z+jHSYTWod6qxuAAKecWnBOW77xmyWY1noow== 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 74E437D7FB for ; Sun, 22 Sep 2024 02:46:43 +0200 (CEST) DKIM-Signature: a=rsa-sha256; bh=U5FmAZFFI1RqqcNq0lPftzUToCJ6R63CD1rg7NZtaac=; c=simple/simple; d=lists.sr.ht; h=From:To:Cc:Subject:In-Reply-To:References:Date:List-Unsubscribe:List-Subscribe:List-Archive:List-Post:List-ID; q=dns/txt; s=20240113; t=1726966003; v=1; b=qdNEaSxge4HmpdV9paZrwekpIsmO2MgDsGOA8XJU6jr9nmSt3EMDn80BIqF4NLui4NBN11Nf OHHaaQpEP8QDgTT8to9J+yHJ/dsE/6fVzsN/75OZ5ZjFkedwOjwN6/vuyNLKn3BXqM4gAtCdKgi WiUKwpeKSZ6frBvRAIi7kXO/Ja8xJtuaATvwRhFiUBCQ4KIcJGNQVU1GQ6VCcJJNTJ1dUFnzl4U BV7t2E7jBjiWVA7AyRRChRG4eFtobeiukX7ryFkJykt86b1iF0UuYY1ndrm13NvkiqeKJbPVlXN G8UEZAmiFmXZT/i0fiyg4YeHvTvj8lZOmBB4WsTxhnrPA== Received: from lists.sr.ht (unknown [46.23.81.154]) by mail-a.sr.ht (Postfix) with ESMTPSA id 45155202E7 for ; Sun, 22 Sep 2024 00:46:43 +0000 (UTC) Received: from sienna.cherry.relay.mailchannels.net (sienna.cherry.relay.mailchannels.net [23.83.223.165]) by mail-a.sr.ht (Postfix) with ESMTPS id 07D67202CB for <~johnnyrichard/olang-devel@lists.sr.ht>; Sun, 22 Sep 2024 00:46:38 +0000 (UTC) X-Sender-Id: hostingeremail|x-authuser|carlos@maniero.me Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 86D618A3438 for <~johnnyrichard/olang-devel@lists.sr.ht>; Sun, 22 Sep 2024 00:46:37 +0000 (UTC) Received: from nl-srv-smtpout1.hostinger.io (trex-13.trex.outbound.svc.cluster.local [100.99.103.168]) (Authenticated sender: hostingeremail) by relay.mailchannels.net (Postfix) with ESMTPA id F12598A3449 for <~johnnyrichard/olang-devel@lists.sr.ht>; Sun, 22 Sep 2024 00:46:36 +0000 (UTC) ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1726965997; a=rsa-sha256; cv=none; b=1XRpGMAhNIi3JGS+wqF1JyBolfTvsiDSnD8lvu7fn9GcJ9kY1JRDhqFZKU/L0DgTyHwJgo raOV+Qd9hOumZNBnMrP3XSllinEaExM4AcyRNkg83IOuL+4wXILu3EkPBMhfxQyYiZG1Nj FvRqquF6b5aKSEfvFb22mH7McqZyCX+dRvjN4/gyK+deLFe9OspCtwk8woyZW3l14S2PBx SXCbsSAh21p/DSCZoE8S4d3OnY2Ctl/mTNduNhtP/IfDLcSbyWOg3RDvgtsvKuQja5n6Rb +0ey966asI0buRBcWolJLQXMlHQCVHvJSuQnLwEnx93Pvms0+14ZO+noyVs/Qg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1726965997; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ukKC5xwP2wFMfP2oCSXyI7hap5o+2OcujueQD2ZATv8=; b=FC8ojbgcBT/rPIREMeFQ1v8tWPwXJKRrIALETqAbNzhe/nyC0zB/5SzDQSb3pX37CDZmX0 jLKGuxXX4iFZ7f1qLuGLBcRHc9y/PzSB5+HrGE4LwVv0Yi/NWxn3yZNUbJhAviyIv6Nv1o NWLRxrrQ5oJeeWfZOYdOU7CXj+PmQZVhyXyh/zOJjvlXkHaMbDc8GXNzD5Vn6VAKIVN2Df bYuXUBsYRALQ7R5hO6XxZ8pg/4q3xmgtKXyW72ijtmpX5wKKnWAKIQSYthtpsnNkwVga2v S3zghdekgasn9l0tlDykex+iBpUZlLCnX4MRWpxSc4+je1QsQYcOROKx3B3Few== ARC-Authentication-Results: i=1; rspamd-5b46bcd97f-lhx9s; auth=pass smtp.auth=hostingeremail smtp.mailfrom=carlos@maniero.me X-Sender-Id: hostingeremail|x-authuser|carlos@maniero.me X-MC-Relay: Neutral X-MailChannels-SenderId: hostingeremail|x-authuser|carlos@maniero.me X-MailChannels-Auth-Id: hostingeremail X-Trade-Shrill: 4b923df017b82452_1726965997456_4051962838 X-MC-Loop-Signature: 1726965997456:2735607992 X-MC-Ingress-Time: 1726965997456 Received: from nl-srv-smtpout1.hostinger.io (nl-srv-smtpout1.hostinger.io [145.14.150.87]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.99.103.168 (trex/7.0.2); Sun, 22 Sep 2024 00:46:37 +0000 From: Carlos Maniero DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=maniero.me; s=hostingermail1; t=1726965995; 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: in-reply-to:in-reply-to:references:references; bh=ukKC5xwP2wFMfP2oCSXyI7hap5o+2OcujueQD2ZATv8=; b=xwHbVrbOa/xIoh8AbYfS6euKIRXW5vgZqkc98qAPi45eWzacojoVFjiw+U3W/IlHmQ8WQH S2paZIP2urAN+4FgajNI/Nlhe+YHE5hHm+O0SRd+lzwQKYDYmZh3MXkGkg/vKNsgHQThnZ MX/RdfMhizljvxmw3fwqOTbgH6EvzqZb+mmiX91d/xUUxAzg5blELP5KV8fUY15Zbk2IBA N5yJV8LzvIICNwYPgnGnFN7vzJ+qUnNfuAs0KpV19W9nVAXBc3XMlP4XK9NHZO2syjU880 n0WkoR96CzbJEaZ7AG0YZPsotPgwKtQ0Pw0DjaUGUGqpd4r8FzAi7gQkkWkh9Q== To: ~johnnyrichard/olang-devel@lists.sr.ht Cc: Carlos Maniero Subject: [PATCH olang v2 1/4] parser: replace type enum to a string view Message-Id: <20240922004619.518310-2-carlos@maniero.me> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240922004619.518310-1-carlos@maniero.me> References: <20240922004619.518310-1-carlos@maniero.me> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Date: Sun, 22 Sep 2024 00:46:35 +0000 (UTC) X-CM-Envelope: MS4xfHTC0xafDqumRzpO2fRS4U08UQcJyRdJVLqO7GL+k6b+JTB6HShHjQbZWKhiAaz4CHpiJFnL9S09dhdhXhxuN6L04r0S7UaYN3zJZ94Ci+QIgoOxgs8x 1utnn4H8p2w7sTiYizQtBNckVacF7nbKWgyDG0h1XVl1yiTn1d217OkFKeoi++UNf/cBu6DNYrm4gi7lryCtCh1JFqW1b1wDSnCS19sgQwvagOEuKJsNod5W X-CM-Analysis: v=2.4 cv=b6rg4cGx c=1 sm=1 tr=0 ts=66ef68eb a=WwxFCuf3mf1fs3oSi6/dng==:117 a=WwxFCuf3mf1fs3oSi6/dng==:17 a=MKtGQD3n3ToA:10 a=1oJP67jkp3AA:10 a=HWnzk_IeIn91OLDDCCkA:9 a=BXDaF_L80NY05PYiAFlV:22 X-AuthUser: carlos@maniero.me X-Sourcehut-Patchset-Status: UNKNOWN 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-Flow: FLOW_IN X-Migadu-Country: NL X-Migadu-Queue-Id: 74E437D7FB X-Migadu-Scanner: mx11.migadu.com X-Spam-Score: -5.80 X-Migadu-Spam-Score: -5.80 X-TUID: nzBas1gttEJe Ensuring the type is correct is a semantics/checker role. Instead of trying to convert it to an enum on the parser, it just stores the identifier of the given type. Once our spec always expects a TOKEN_COLON (:) before the type identifier, this constraint was moved to the type parser function. The string_view is enough until we decide how we gonna handle pointers and arrays. Signed-off-by: Carlos Maniero --- src/ast.c | 4 +-- src/ast.h | 13 +++---- src/parser.c | 35 ++++++++----------- src/pretty_print_ast.c | 4 +-- tests/integration/tests/0001_main_exit.ol | 2 +- tests/integration/tests/0020_if_statement.ol | 2 +- .../integration/tests/0023_else_statement.ol | 2 +- .../integration/tests/0024_var_definition.ol | 2 +- tests/unit/parser_test.c | 2 +- 9 files changed, 27 insertions(+), 39 deletions(-) diff --git a/src/ast.c b/src/ast.c index d2fd2fa..02b938e 100644 --- a/src/ast.c +++ b/src/ast.c @@ -37,7 +37,7 @@ ast_new_program(arena_t *arena, ast_node_t *fn_def) } ast_node_t * -ast_new_node_fn_def(arena_t *arena, string_view_t identifier, type_t return_type, ast_node_t *block) +ast_new_node_fn_def(arena_t *arena, string_view_t identifier, string_view_t return_type, ast_node_t *block) { ast_node_t *node_fn_def = (ast_node_t *)arena_alloc(arena, sizeof(ast_node_t)); assert(node_fn_def); @@ -53,7 +53,7 @@ ast_new_node_fn_def(arena_t *arena, string_view_t identifier, type_t return_type } ast_node_t * -ast_new_node_var_def(arena_t *arena, string_view_t identifier, type_t type, ast_node_t *value) +ast_new_node_var_def(arena_t *arena, string_view_t identifier, string_view_t type, ast_node_t *value) { ast_node_t *node_var_def = (ast_node_t *)arena_alloc(arena, sizeof(ast_node_t)); assert(node_var_def); diff --git a/src/ast.h b/src/ast.h index a45a271..ff26ed8 100644 --- a/src/ast.h +++ b/src/ast.h @@ -40,11 +40,6 @@ typedef enum AST_NODE_UNKNOWN } ast_node_kind_t; -typedef enum -{ - TYPE_U32 -} type_t; - typedef struct ast_block { list_t *nodes; @@ -58,7 +53,7 @@ typedef struct ast_program typedef struct ast_fn_definition { string_view_t identifier; - type_t return_type; + string_view_t return_type; ast_node_t *block; scope_t *scope; } ast_fn_definition_t; @@ -66,7 +61,7 @@ typedef struct ast_fn_definition typedef struct ast_var_definition { string_view_t identifier; - type_t type; + string_view_t type; ast_node_t *value; scope_t *scope; } ast_var_definition_t; @@ -154,10 +149,10 @@ ast_node_t * ast_new_program(arena_t *arena, ast_node_t *fn_def); ast_node_t * -ast_new_node_fn_def(arena_t *arena, string_view_t identifier, type_t return_type, ast_node_t *block); +ast_new_node_fn_def(arena_t *arena, string_view_t identifier, string_view_t return_type, ast_node_t *block); ast_node_t * -ast_new_node_var_def(arena_t *arena, string_view_t identifier, type_t type, ast_node_t *value); +ast_new_node_var_def(arena_t *arena, string_view_t identifier, string_view_t type, ast_node_t *value); ast_node_t * ast_new_node_bin_op(arena_t *arena, ast_binary_op_kind_t kind, ast_node_t *lhs, ast_node_t *rhs); diff --git a/src/parser.c b/src/parser.c index d71500f..e4d0c56 100644 --- a/src/parser.c +++ b/src/parser.c @@ -34,7 +34,7 @@ static bool expected_token(parser_t *parser, token_t *token, token_kind_t kind); static bool -parser_parse_type(parser_t *parser, type_t *type); +parser_parse_type(parser_t *parser, string_view_t *type); static ast_node_t * parser_parse_block(parser_t *parser); @@ -285,15 +285,7 @@ parser_parse_fn_definition(parser_t *parser) return NULL; } - skip_line_feeds(parser->lexer); - - if (!skip_expected_token(parser, TOKEN_COLON)) { - return NULL; - } - - skip_line_feeds(parser->lexer); - - type_t fn_return_type; + string_view_t fn_return_type; if (!parser_parse_type(parser, &fn_return_type)) { return NULL; } @@ -309,20 +301,25 @@ parser_parse_fn_definition(parser_t *parser) } static bool -parser_parse_type(parser_t *parser, type_t *type) +parser_parse_type(parser_t *parser, string_view_t *type) { + skip_line_feeds(parser->lexer); + + if (!skip_expected_token(parser, TOKEN_COLON)) { + return false; + } + + skip_line_feeds(parser->lexer); + token_t token; if (!expected_next_token(parser, &token, TOKEN_IDENTIFIER)) { return false; } - if (string_view_eq_to_cstr(token.value, "u32")) { - *type = TYPE_U32; - return true; - } + *type = token.value; - return false; + return true; } static ast_node_t * @@ -469,11 +466,7 @@ parser_parse_var_def(parser_t *parser) return NULL; } - if (!skip_expected_token(parser, TOKEN_COLON)) { - return NULL; - } - - type_t var_type; + string_view_t var_type; if (!parser_parse_type(parser, &var_type)) { return NULL; } diff --git a/src/pretty_print_ast.c b/src/pretty_print_ast.c index d6eef67..1fc6dff 100644 --- a/src/pretty_print_ast.c +++ b/src/pretty_print_ast.c @@ -126,9 +126,9 @@ ast_node_to_pretty_print_node(ast_node_t *ast, arena_t *arena) char name[256]; sprintf(name, - "Function_Definition ", + "Function_Definition ", SV_ARG(fn_def.identifier), - fn_def.return_type); + SV_ARG(fn_def.return_type)); node->name = (char *)arena_alloc(arena, sizeof(char) * (strlen(name) + 1)); strcpy(node->name, name); diff --git a/tests/integration/tests/0001_main_exit.ol b/tests/integration/tests/0001_main_exit.ol index f446eb9..9068434 100644 --- a/tests/integration/tests/0001_main_exit.ol +++ b/tests/integration/tests/0001_main_exit.ol @@ -24,7 +24,7 @@ fn main(): u32 { # # TEST test_ast WITH # Translation_Unit -# `-Function_Definition +# `-Function_Definition # `-Block # `-Return_Statement # `-Literal diff --git a/tests/integration/tests/0020_if_statement.ol b/tests/integration/tests/0020_if_statement.ol index d48122f..460a05e 100644 --- a/tests/integration/tests/0020_if_statement.ol +++ b/tests/integration/tests/0020_if_statement.ol @@ -29,7 +29,7 @@ fn main(): u32 { # TEST test_ast WITH # Translation_Unit -# `-Function_Definition +# `-Function_Definition # `-Block # |-If_Statement # | |-Binary_Operation (==) diff --git a/tests/integration/tests/0023_else_statement.ol b/tests/integration/tests/0023_else_statement.ol index fafb22e..f3ddc64 100644 --- a/tests/integration/tests/0023_else_statement.ol +++ b/tests/integration/tests/0023_else_statement.ol @@ -31,7 +31,7 @@ fn main(): u32 { # TEST test_ast WITH # Translation_Unit -# `-Function_Definition +# `-Function_Definition # `-Block # `-If_Statement # |-Binary_Operation (!=) diff --git a/tests/integration/tests/0024_var_definition.ol b/tests/integration/tests/0024_var_definition.ol index 5c23449..ebbcda4 100644 --- a/tests/integration/tests/0024_var_definition.ol +++ b/tests/integration/tests/0024_var_definition.ol @@ -28,7 +28,7 @@ fn main(): u32 { # TEST test_ast WITH # Translation_Unit -# `-Function_Definition +# `-Function_Definition # `-Block # |-Var_Definition # | `-Literal diff --git a/tests/unit/parser_test.c b/tests/unit/parser_test.c index 3cdac41..2256ffd 100644 --- a/tests/unit/parser_test.c +++ b/tests/unit/parser_test.c @@ -51,7 +51,7 @@ parse_program_test(const MunitParameter params[], void *user_data_or_fixture) ast_fn_definition_t fn = program.fn->as_fn_def; assert_memory_equal(fn.identifier.size, fn.identifier.chars, "main"); - assert_uint(fn.return_type, ==, TYPE_U32); + assert_memory_equal(fn.return_type.size, fn.return_type.chars, "u32"); ast_node_t *block = fn.block; assert_not_null(block); -- 2.34.1