From 649b378bb01a6964b9deec4d0fe57aeae1e5cb9e Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Tue, 18 Jun 2024 14:48:56 +0200 Subject: Fix a corner case with symbol indexing --- src/main.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main.c b/src/main.c index 83477d8..13bd469 100644 --- a/src/main.c +++ b/src/main.c @@ -146,8 +146,10 @@ typedef struct Node { struct Node *left; struct Node *right; }; - struct Node *next; - struct Node *arr_size; + struct { + struct Node *next; + struct Node *arr_size; + }; struct { struct Node *var_name; struct Node *var_type; @@ -676,6 +678,13 @@ parse_symbol(Parser *parser) { node->arr_size = array_pop(parser->nodes); parse_consume(parser, TOK_RSQUARE, cstr("unmatched brackets ']' in array type")); + if (parse_match(parser, TOK_DOT)) { + // Symbol chain. + parse_consume(parser, TOK_SYMBOL, + cstr("expected symbol after '.' operator")); + parse_symbol(parser); + node->next = array_pop(parser->nodes); + } } else { node = node_alloc(parser, NODE_SYMBOL, prev); if (!node) return; -- cgit v1.2.1