diff options
-rw-r--r-- | node.c | 3 | ||||
-rw-r--r-- | node.h | 13 | ||||
-rw-r--r-- | pc.y | 12 |
3 files changed, 27 insertions, 1 deletions
@@ -17,6 +17,9 @@ char *str; p->var_type = -1; + p->func_info = NULL; + p->array_info = NULL; + return p; } @@ -1,5 +1,15 @@ #ifndef NODE_H #define NODE_H +/*function/array info structs*/ +struct fi { + int argc; + int *argv; +}; + +struct ai { + int size; + int start_idx; +}; /* Linked list */ @@ -7,6 +17,9 @@ typedef struct node_s { char *name; struct node_s *next; int var_type; + + struct fi* func_info; + struct ai* array_info; } node; /*constructor*/ @@ -172,8 +172,18 @@ sub_prog_declaration sub_prog_head :FUNC ID arguments ':' standard_type ';' { + node *tmp; + int i = -1; + check_id(cur_scope->prev, $2); - scope_insert(cur_scope->prev, $2); + tmp = scope_insert(cur_scope->prev, $2); + + assert(tmp->func_info = malloc(sizeof struct fi)); + /*TODO add count of parameters*/ + tmp->func_info->argc = i; + assert(tmp->func_info->argv = malloc(i * sizeof int)); + + tmp->var_type = $5 cur_scope->ret_var = scope_insert(cur_scope, $2); cur_scope->ret_var->var_type = $5; |