absyntax_utils/debug_ast.cc
changeset 1052 f91488700835
parent 979 f8f1d89ff7d5
equal deleted inserted replaced
1051:e483512edbeb 1052:f91488700835
   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 };