aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--node.c3
-rw-r--r--node.h13
-rw-r--r--pc.y12
3 files changed, 27 insertions, 1 deletions
diff --git a/node.c b/node.c
index 0e87370..40ed47c 100644
--- a/node.c
+++ b/node.c
@@ -17,6 +17,9 @@ char *str;
p->var_type = -1;
+ p->func_info = NULL;
+ p->array_info = NULL;
+
return p;
}
diff --git a/node.h b/node.h
index 90e3936..e59cb86 100644
--- a/node.h
+++ b/node.h
@@ -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*/
diff --git a/pc.y b/pc.y
index 81cb69b..cd993ec 100644
--- a/pc.y
+++ b/pc.y
@@ -167,8 +167,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;