118 } |
118 } |
119 |
119 |
120 |
120 |
121 |
121 |
122 void print_symbol_c::dump_symbol(symbol_c* symbol) { |
122 void print_symbol_c::dump_symbol(symbol_c* symbol) { |
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()); |
123 fprintf(stderr, "(%s->%03d:%03d..%03d:%03d) \t%s", symbol->first_file, symbol->first_line, symbol->first_column, symbol->last_line, symbol->last_column, symbol->absyntax_cname()); |
124 |
124 |
125 fprintf(stderr, " datatype="); |
125 if ((NULL != symbol->token) && (NULL != symbol->token->value)) |
|
126 fprintf(stderr, "(%s)", symbol->token->value); |
|
127 |
|
128 fprintf(stderr, "\t datatype="); |
126 if (NULL == symbol->datatype) |
129 if (NULL == symbol->datatype) |
127 fprintf(stderr, "NULL\t\t"); |
130 fprintf(stderr, "NULL\t\t"); |
128 else { |
131 else { |
129 fprintf(stderr, "%s", symbol->datatype->absyntax_cname()); |
132 fprintf(stderr, "%s", symbol->datatype->absyntax_cname()); |
130 } |
133 } |
131 fprintf(stderr, "\t<-{"); |
134 fprintf(stderr, "\t<-{"); |
132 if (symbol->candidate_datatypes.size() == 0) { |
135 if (symbol->candidate_datatypes.size() == 0) { |
133 fprintf(stderr, "\t\t\t\t\t"); |
136 fprintf(stderr, "\t\t\t\t\t"); |
134 } else if (symbol->candidate_datatypes.size() <= 2) { |
137 } else if (symbol->candidate_datatypes.size() <= 2) { |
151 |
154 |
152 void *print_symbol_c::visit(il_instruction_c *symbol) { |
155 void *print_symbol_c::visit(il_instruction_c *symbol) { |
153 dump_symbol(symbol); |
156 dump_symbol(symbol); |
154 |
157 |
155 /* NOTE: std::map.size() returns a size_type, whose type is dependent on compiler/platform. To be portable, we need to do an explicit type cast. */ |
158 /* NOTE: std::map.size() returns a size_type, whose type is dependent on compiler/platform. To be portable, we need to do an explicit type cast. */ |
|
159 fprintf(stderr, " prev_il_=%lu ", (unsigned long int)symbol->prev_il_instruction.size()); |
|
160 if (symbol->prev_il_instruction.size() == 0) |
|
161 fprintf(stderr, "(----)"); |
|
162 else if (symbol->prev_il_instruction[0]->datatype == NULL) |
|
163 fprintf(stderr, "(NULL)"); |
|
164 else if (!get_datatype_info_c::is_type_valid(symbol->prev_il_instruction[0]->datatype)) |
|
165 fprintf(stderr, "(****)"); |
|
166 else |
|
167 fprintf(stderr, "( )"); |
|
168 |
156 fprintf(stderr, " next_il_=%lu ", (unsigned long int)symbol->next_il_instruction.size()); |
169 fprintf(stderr, " next_il_=%lu ", (unsigned long int)symbol->next_il_instruction.size()); |
157 fprintf(stderr, " prev_il_=%lu ", (unsigned long int)symbol->prev_il_instruction.size()); |
|
158 |
|
159 if (symbol->prev_il_instruction.size() == 0) |
|
160 fprintf(stderr, "(----,"); |
|
161 else if (symbol->prev_il_instruction[0]->datatype == NULL) |
|
162 fprintf(stderr, "(NULL,"); |
|
163 else if (!get_datatype_info_c::is_type_valid(symbol->prev_il_instruction[0]->datatype)) |
|
164 fprintf(stderr, "(****,"); |
|
165 else |
|
166 fprintf(stderr, "( ,"); |
|
167 |
|
168 if (symbol->next_il_instruction.size() == 0) |
170 if (symbol->next_il_instruction.size() == 0) |
169 fprintf(stderr, "----)"); |
171 fprintf(stderr, "(----)"); |
170 else if (symbol->next_il_instruction[0]->datatype == NULL) |
172 else if (symbol->next_il_instruction[0]->datatype == NULL) |
171 fprintf(stderr, "NULL)"); |
173 fprintf(stderr, "(NULL)"); |
172 else if (!get_datatype_info_c::is_type_valid(symbol->next_il_instruction[0]->datatype)) |
174 else if (!get_datatype_info_c::is_type_valid(symbol->next_il_instruction[0]->datatype)) |
173 fprintf(stderr, "****)"); |
175 fprintf(stderr, "(****)"); |
174 else |
176 else |
175 fprintf(stderr, " )"); |
177 fprintf(stderr, "( )"); |
176 |
178 |
177 fprintf(stderr, "\n"); |
179 fprintf(stderr, "\n"); |
178 |
180 |
179 return NULL; |
181 return NULL; |
180 }; |
182 }; |