absyntax_utils/debug_ast.cc
changeset 979 f8f1d89ff7d5
parent 965 c9eeb67ba939
child 1052 f91488700835
equal deleted inserted replaced
978:efab3a94d3c0 979:f8f1d89ff7d5
    46 #include "absyntax_utils.hh"
    46 #include "absyntax_utils.hh"
    47 #include "../absyntax/visitor.hh"
    47 #include "../absyntax/visitor.hh"
    48 
    48 
    49 
    49 
    50 
    50 
       
    51 
       
    52 static void dump_cvalue(const_value_c const_value) {
       
    53   fprintf(stderr, "constv{");
       
    54   if      (const_value._real64.is_valid   ()) fprintf(stderr, "%f",        const_value._real64.get());
       
    55   else if (const_value._real64.is_overflow()) fprintf(stderr, "ov");
       
    56   else if (const_value._real64.is_nonconst()) fprintf(stderr, "nc");
       
    57   else                                        fprintf(stderr, "?");
       
    58   fprintf(stderr, ", i=");
       
    59   if      (const_value. _int64.is_valid   ()) fprintf(stderr, "%"PRId64"", const_value. _int64.get());
       
    60   else if (const_value. _int64.is_overflow()) fprintf(stderr, "ov");
       
    61   else if (const_value. _int64.is_nonconst()) fprintf(stderr, "nc");
       
    62   else                                        fprintf(stderr, "?");
       
    63   fprintf(stderr, ", u=");
       
    64   if      (const_value._uint64.is_valid   ()) fprintf(stderr, "%"PRIu64"", const_value._uint64.get());
       
    65   else if (const_value._uint64.is_overflow()) fprintf(stderr, "ov");
       
    66   else if (const_value._uint64.is_nonconst()) fprintf(stderr, "nc");
       
    67   else                                        fprintf(stderr, "?");
       
    68   fprintf(stderr, ", b=");
       
    69   if      (const_value.  _bool.is_valid   ()) fprintf(stderr, "%d",        const_value.  _bool.get()?1:0);
       
    70   else if (const_value.  _bool.is_overflow()) fprintf(stderr, "ov");
       
    71   else if (const_value.  _bool.is_nonconst()) fprintf(stderr, "nc");
       
    72   else                                        fprintf(stderr, "?");
       
    73   fprintf(stderr, "}");
       
    74 }
    51 
    75 
    52 
    76 
    53 
    77 
    54 /*********************************/
    78 /*********************************/
    55 /* Class to print a symbol       */
    79 /* Class to print a symbol       */
    90 
   114 
    91 void print_symbol_c::fcall(symbol_c* symbol) {
   115 void print_symbol_c::fcall(symbol_c* symbol) {
    92   dump_symbol(symbol);
   116   dump_symbol(symbol);
    93   fprintf(stderr, "\n");
   117   fprintf(stderr, "\n");
    94 }
   118 }
       
   119 
    95 
   120 
    96 
   121 
    97 void print_symbol_c::dump_symbol(symbol_c* symbol) {
   122 void print_symbol_c::dump_symbol(symbol_c* symbol) {
    98   fprintf(stderr, "(%s->%03d:%03d..%03d:%03d) \t%s\t", symbol->first_file, symbol->first_line, symbol->first_column, symbol->last_line, symbol->last_column, symbol->absyntax_cname());
   123   fprintf(stderr, "(%s->%03d:%03d..%03d:%03d) \t%s\t", symbol->first_file, symbol->first_line, symbol->first_column, symbol->last_line, symbol->last_column, symbol->absyntax_cname());
    99 
   124 
   113       else
   138       else
   114         fprintf(stderr, "\t\t\t");
   139         fprintf(stderr, "\t\t\t");
   115   } else {
   140   } else {
   116     fprintf(stderr, "(%lu)\t\t\t\t\t", (unsigned long int)symbol->candidate_datatypes.size());
   141     fprintf(stderr, "(%lu)\t\t\t\t\t", (unsigned long int)symbol->candidate_datatypes.size());
   117   }
   142   }
   118   fprintf(stderr, "}\t");         
   143   fprintf(stderr, "}\t ");         
   119   
   144   
   120   /* print the const values... */
   145   /* print the const values... */
   121   fprintf(stderr, " constv{f=%f, i=%"PRId64", u=%"PRIu64", b=%d}\t", symbol->const_value._real64.get(), symbol->const_value._int64.get(), symbol->const_value._uint64.get(), symbol->const_value._bool.get()?1:0);
   146   dump_cvalue(symbol->const_value);
   122   
   147   fprintf(stderr, "\t");
   123 }
   148 }
   124 
   149 
   125 
   150 
   126 
   151 
   127 void *print_symbol_c::visit(il_instruction_c *symbol) {
   152 void *print_symbol_c::visit(il_instruction_c *symbol) {
   210 
   235 
   211 void debug_c::print(const char *str) {
   236 void debug_c::print(const char *str) {
   212   fprintf(stderr, "%s", str);
   237   fprintf(stderr, "%s", str);
   213 }
   238 }
   214 
   239 
       
   240 void debug_c::print(const_value_c cvalue) {
       
   241   dump_cvalue(cvalue);
       
   242 }
       
   243 
   215 void debug_c::print(symbol_c *symbol) {
   244 void debug_c::print(symbol_c *symbol) {
   216   print_symbol_c::print(symbol);
   245   print_symbol_c::print(symbol);
   217 }
   246 }
   218 
   247 
   219 void debug_c::print_ast(symbol_c *symbol) {
   248 void debug_c::print_ast(symbol_c *symbol) {