diff options
author | Bad Diode <bd@badd10de.dev> | 2024-06-20 14:30:59 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2024-06-20 14:41:10 +0200 |
commit | d8bdb8be74904ee7b12d3f61dc3afe222aec82ff (patch) | |
tree | b496399cae78397d0ec2696654b86b44cf7232a3 /src/parser.c | |
parent | eca9cb305b08e0e292d01008797b9300d47f72d5 (diff) | |
download | bdl-d8bdb8be74904ee7b12d3f61dc3afe222aec82ff.tar.gz bdl-d8bdb8be74904ee7b12d3f61dc3afe222aec82ff.zip |
Add parsing of funcalls
Diffstat (limited to 'src/parser.c')
-rw-r--r-- | src/parser.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/parser.c b/src/parser.c index dbab4af..a8b9c47 100644 --- a/src/parser.c +++ b/src/parser.c | |||
@@ -183,6 +183,7 @@ typedef struct Node { | |||
183 | struct Node **elements; | 183 | struct Node **elements; |
184 | struct Node **statements; | 184 | struct Node **statements; |
185 | struct Node **expressions; | 185 | struct Node **expressions; |
186 | struct Node **arguments; | ||
186 | struct { | 187 | struct { |
187 | struct Node *func_name; | 188 | struct Node *func_name; |
188 | struct Node **func_params; | 189 | struct Node **func_params; |
@@ -953,6 +954,13 @@ parse_symbol(Parser *parser) { | |||
953 | parse_symbol(parser); | 954 | parse_symbol(parser); |
954 | node->next = array_pop(parser->nodes); | 955 | node->next = array_pop(parser->nodes); |
955 | } | 956 | } |
957 | } else if (parse_match(parser, TOK_LPAREN)) { | ||
958 | node->kind = NODE_FUNCALL; | ||
959 | while (!parse_match(parser, TOK_RPAREN) && !parser->panic) { | ||
960 | parse_expr(parser, PREC_LOW); | ||
961 | array_push(node->arguments, array_pop(parser->nodes), | ||
962 | parser->storage); | ||
963 | } | ||
956 | } else { | 964 | } else { |
957 | node = node_alloc(parser, NODE_SYMBOL, prev); | 965 | node = node_alloc(parser, NODE_SYMBOL, prev); |
958 | if (!node) return; | 966 | if (!node) return; |
@@ -987,6 +995,7 @@ graph_node(Node *node) { | |||
987 | case NODE_STRUCT: | 995 | case NODE_STRUCT: |
988 | case NODE_STRUCT_LIT: print("| Name: %s", node->value.sym); break; | 996 | case NODE_STRUCT_LIT: print("| Name: %s", node->value.sym); break; |
989 | case NODE_SYMBOL: | 997 | case NODE_SYMBOL: |
998 | case NODE_FUNCALL: | ||
990 | case NODE_ARR_TYPE: | 999 | case NODE_ARR_TYPE: |
991 | case NODE_TYPE: { | 1000 | case NODE_TYPE: { |
992 | if (node->is_ptr) { | 1001 | if (node->is_ptr) { |
@@ -1032,6 +1041,7 @@ graph_node(Node *node) { | |||
1032 | graph_node(next); | 1041 | graph_node(next); |
1033 | } | 1042 | } |
1034 | } break; | 1043 | } break; |
1044 | case NODE_FUNCALL: | ||
1035 | case NODE_RETURN: | 1045 | case NODE_RETURN: |
1036 | case NODE_BLOCK: | 1046 | case NODE_BLOCK: |
1037 | case NODE_STRUCT_LIT: | 1047 | case NODE_STRUCT_LIT: |