diff options
-rw-r--r-- | src/main.c | 13 |
1 files changed, 11 insertions, 2 deletions
@@ -146,8 +146,10 @@ typedef struct Node { | |||
146 | struct Node *left; | 146 | struct Node *left; |
147 | struct Node *right; | 147 | struct Node *right; |
148 | }; | 148 | }; |
149 | struct Node *next; | 149 | struct { |
150 | struct Node *arr_size; | 150 | struct Node *next; |
151 | struct Node *arr_size; | ||
152 | }; | ||
151 | struct { | 153 | struct { |
152 | struct Node *var_name; | 154 | struct Node *var_name; |
153 | struct Node *var_type; | 155 | struct Node *var_type; |
@@ -676,6 +678,13 @@ parse_symbol(Parser *parser) { | |||
676 | node->arr_size = array_pop(parser->nodes); | 678 | node->arr_size = array_pop(parser->nodes); |
677 | parse_consume(parser, TOK_RSQUARE, | 679 | parse_consume(parser, TOK_RSQUARE, |
678 | cstr("unmatched brackets ']' in array type")); | 680 | cstr("unmatched brackets ']' in array type")); |
681 | if (parse_match(parser, TOK_DOT)) { | ||
682 | // Symbol chain. | ||
683 | parse_consume(parser, TOK_SYMBOL, | ||
684 | cstr("expected symbol after '.' operator")); | ||
685 | parse_symbol(parser); | ||
686 | node->next = array_pop(parser->nodes); | ||
687 | } | ||
679 | } else { | 688 | } else { |
680 | node = node_alloc(parser, NODE_SYMBOL, prev); | 689 | node = node_alloc(parser, NODE_SYMBOL, prev); |
681 | if (!node) return; | 690 | if (!node) return; |