diff --git a/ps4/src/symbols.c b/ps4/src/symbols.c index b78f1f0..f16c305 100644 --- a/ps4/src/symbols.c +++ b/ps4/src/symbols.c @@ -20,16 +20,14 @@ static void destroy_string_list(void); // All strings are entered into the string_list void create_tables(void) { - // TODO: - // First use find_globals() to create the global symbol table. - // As global symbols are added, function symbols get their own local symbol tables as well. - // - // Once all global symbols are added, go through all functions bodies and bind references. - // - // Binding should performed by bind_names(function symbol table, function body AST node). - // IDENTIFIERs that reference declarations should point to the symbol_t they reference. - // It handles pushing and popping scopes, and adding variables to the local symbol table. - // A final task performed by bind_names(...), is adding strings to the global string list. + find_globals(); + + for (int i = 0; i < global_symbols->n_symbols; i++) { + symbol_t *symbol = global_symbols->symbols[i]; + if (symbol->type == SYMBOL_FUNCTION) { + bind_names(symbol->function_symtable, symbol->node); + } + } } // Prints the global symbol table, and the local symbol tables for each function.