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) { |