summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--symbol-table.c17
-rw-r--r--symbol-table.h2
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: