diff options
-rw-r--r-- | symbol-table.c | 17 | ||||
-rw-r--r-- | symbol-table.h | 2 |
2 files changed, 16 insertions, 3 deletions
diff --git a/symbol-table.c b/symbol-table.c index ca8dd3f..665c39c 100644 --- a/symbol-table.c +++ b/symbol-table.c @@ -83,18 +83,31 @@ void printSymTab(void) { } } -int fillTab(symtab **tp) { +symtab **fillTab(int *len) { int cnt = 0; for (int i = 0; i < TABLE_SIZE; i++) { symtab *symptr = hash_table[i]; while (symptr != NULL) { + cnt++; + symptr = symptr->front; + } + } + + symtab **tp = malloc(sizeof(symtab*)*cnt); + cnt = 0; + for (int i = 0; i < TABLE_SIZE; i++) + { + symtab *symptr = hash_table[i]; + while (symptr != NULL) + { tp[cnt++] = symptr; symptr = symptr->front; } } - return cnt; + *len = cnt; + return tp; } // vim: set sw=4 ts=4 sts=4 et: diff --git a/symbol-table.h b/symbol-table.h index c92986d..774b46c 100644 --- a/symbol-table.h +++ b/symbol-table.h @@ -10,6 +10,6 @@ typedef struct symtab symtab; symtab* lookup(char *name); void insertID(char *name); void printSymTab(void); -int fillTab(symtab **tp); +symtab **fillTab(int *len); // vim: set sw=4 ts=4 sts=4 et: |