From 157e76cf3156ea204058e0ab236e25ea2fce02e2 Mon Sep 17 00:00:00 2001
From: FlorianKrull <floriankrull1507@yahoo.de>
Date: Thu, 13 Jun 2019 10:02:14 +0200
Subject: [PATCH] Fixed symbol table printing

---
 src/symbol_table_parse.c |  6 ++++--
 src/symbol_table_print.c | 18 +++++++++++++-----
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/src/symbol_table_parse.c b/src/symbol_table_parse.c
index 5c05ce8..38e8dbe 100644
--- a/src/symbol_table_parse.c
+++ b/src/symbol_table_parse.c
@@ -3,6 +3,7 @@
 #include <stdlib.h>
 #include <assert.h>
 #include "mcc/ast.h"
+#include "mcc/ast_print.h"
 #include "mcc/symbol_table_parse.h"
 #include "utils/unused.h"
 
@@ -137,7 +138,7 @@ int mcc_symbol_table_parse_statement(
     struct mcc_symbol_table *table = symbol_table;
 
     if (create_new) {
-        table = mcc_symbol_table_create_inner_table(symbol_table,symbol_table->parent->sym_table_name);
+        table = mcc_symbol_table_create_inner_table(symbol_table,"COMPOUND_STMT");
     }
 
     switch(statement->type) {
@@ -340,6 +341,7 @@ struct mcc_symbol_table *mcc_symbol_table_build_program(struct mcc_ast_program *
     assert(program);
 
     struct mcc_symbol_table *st = mcc_symbol_table_new_table(NULL);
+    st->sym_table_name = "functions";
 
     mcc_symbol_table_add_builtins(st);
 
@@ -361,7 +363,7 @@ struct mcc_symbol_table *mcc_symbol_table_build_function(struct mcc_ast_function
     assert(function);
 
     struct mcc_symbol_table *st = mcc_symbol_table_new_table(NULL);
-
+    st->sym_table_name = "functions";
     mcc_symbol_table_add_builtins(st);
 
     int parse_function = mcc_symbol_table_add_function_declaration(function, st, ec);
diff --git a/src/symbol_table_print.c b/src/symbol_table_print.c
index e842160..f264e74 100644
--- a/src/symbol_table_print.c
+++ b/src/symbol_table_print.c
@@ -5,6 +5,8 @@
 #include "mcc/symbol_table.h"
 #include "mcc/symbol_table_print.h"
 
+int global_level;
+
 static char *type_to_string(enum mcc_ast_data_type type){
     switch (type)
     {
@@ -29,13 +31,20 @@ static char *symbol_type_to_string(enum mcc_symbol_type type){
 }
 
 void mcc_symbol_table_print(struct mcc_symbol_table *symbol_table, FILE *out, int level){
+    printf("----------------------------------\n");
+	printf("Table: %s // Child of: %s\n", symbol_table ? symbol_table->sym_table_name : "no name",
+	       symbol_table->parent ? symbol_table->parent->sym_table_name : "no parent");
+	printf("----------------------------------\n");
      for(int i = 0; i < symbol_table->symbols->size; i++){
         struct mcc_symbol *sym = (struct mcc_symbol *) symbol_table->symbols->arr[i];
 
              if(sym->symbol_type != MCC_SYMBOL_TYPE_FUNCTION){
                 fprintf(out,"\t");
             }
-        
+            for(int j = 1;j < global_level;j++){
+                fprintf(out,"\t");
+            }     
+       
             fprintf(out,"%*s | ", 15, symbol_type_to_string(sym->symbol_type));
             fprintf(out,"%*s | ", 6, type_to_string(sym->data_type));
 
@@ -43,7 +52,7 @@ void mcc_symbol_table_print(struct mcc_symbol_table *symbol_table, FILE *out, in
                 case MCC_SYMBOL_TYPE_BUILTIN_FUNCTION:
                 case MCC_SYMBOL_TYPE_VARIABLE: 
                     fprintf(out,"%s", sym->variable_name); 
-                    break;
+                break;   
                 case MCC_SYMBOL_TYPE_ARRAY: 
                     fprintf(out,"%s[%ld]", sym->variable_name, sym->array_size);
                     break;
@@ -63,15 +72,14 @@ void mcc_symbol_table_print(struct mcc_symbol_table *symbol_table, FILE *out, in
                     }else{
                         fprintf(out,"%s()", sym->variable_name);
                     }
-                     fprintf(out,"\n");
-                
+                    fprintf(out,"\n");
                     break;
 
             }
             
             fprintf(out,"\n");
     }
-    for (int i = 0; i < symbol_table->inner_tables->size; i++) {
+    for (int i = 0; i < symbol_table->inner_tables->size; i++) {     
 		mcc_symbol_table_print(symbol_table->inner_tables->arr[i],out,i);
 	}
 }
-- 
GitLab