stage3/visit_expression_type.cc
changeset 286 a4f4990d5c66
parent 284 64a4504633d4
child 287 9df7fcb9bde5
equal deleted inserted replaced
284:64a4504633d4 286:a4f4990d5c66
    41 #include <list>
    41 #include <list>
    42 #include <string>
    42 #include <string>
    43 #include <string.h>
    43 #include <string.h>
    44 #include <strings.h>
    44 #include <strings.h>
    45 
    45 
    46 
    46 /*
    47 
    47 static inline symbol_c * FIRST_(symbol_c *symbol1, symbol_c *symbol2) {
       
    48   if (symbol1->first_file  == symbol2->first_file)   return symbol1;
       
    49 
       
    50   if (symbol1->first_line   < symbol2->first_line)   return symbol1;
       
    51   if (symbol1->first_line   > symbol2->first_line)   return symbol2;
       
    52   if (symbol1->first_column < symbol2->first_column) return symbol1;
       
    53   if (symbol1->first_column > symbol2->first_column) return symbol2;
       
    54   return symbol1;
       
    55 }
       
    56 
       
    57 #define FIRST_(symbol1, symbol2) (((symbol1)->last_file   == (symbol2)->first_file)   ? (symbol1) :    \
       
    58                                   ((symbol1)->first_file  == (symbol2)->last_file)    ? (symbol2) :    \
       
    59                                   ((symbol1)->first_line   < (symbol2)->first_line)   ? (symbol1) :    \
       
    60                                   ((symbol1)->first_line   > (symbol2)->first_line)   ? (symbol2) :    \
       
    61                                   ((symbol1)->first_column < (symbol2)->first_column) ? (symbol1) :    \
       
    62                                   ((symbol1)->first_column > (symbol2)->first_column) ? (symbol2) :    \
       
    63                                   (symbol1))
       
    64 */
    48 #define FIRST_(symbol1, symbol2) (((symbol1)->first_line   < (symbol2)->first_line)   ? (symbol1) :    \
    65 #define FIRST_(symbol1, symbol2) (((symbol1)->first_line   < (symbol2)->first_line)   ? (symbol1) :    \
    49                                   ((symbol1)->first_line   > (symbol2)->first_line)   ? (symbol2) :    \
    66                                   ((symbol1)->first_line   > (symbol2)->first_line)   ? (symbol2) :    \
    50                                   ((symbol1)->first_column < (symbol2)->first_column) ? (symbol1) :    \
    67                                   ((symbol1)->first_column < (symbol2)->first_column) ? (symbol1) :    \
    51                                   ((symbol1)->first_column > (symbol2)->first_column) ? (symbol2) :    \
    68                                   ((symbol1)->first_column > (symbol2)->first_column) ? (symbol2) :    \
    52                                   (symbol1))
    69                                   (symbol1))
    56                                   ((symbol1)->last_column  < (symbol2)->last_column)  ? (symbol2) :    \
    73                                   ((symbol1)->last_column  < (symbol2)->last_column)  ? (symbol2) :    \
    57                                   ((symbol1)->last_column  > (symbol2)->last_column)  ? (symbol1) :    \
    74                                   ((symbol1)->last_column  > (symbol2)->last_column)  ? (symbol1) :    \
    58                                   (symbol1))
    75                                   (symbol1))
    59 
    76 
    60 #define STAGE3_ERROR(symbol1, symbol2, msg) {                                          \
    77 #define STAGE3_ERROR(symbol1, symbol2, msg) {                                          \
    61     fprintf(stderr, "semantic error between (%d:%d) and (%d:%d): %s\n",                \
    78     fprintf(stderr, "%s:(%d:%d) .. %s(%d:%d): %s\n",                                   \
    62            FIRST_(symbol1,symbol2)->first_line, FIRST_(symbol1,symbol2)->first_column, \
    79            FIRST_(symbol1,symbol2)->first_file, FIRST_(symbol1,symbol2)->first_line, FIRST_(symbol1,symbol2)->first_column, \
    63            LAST_(symbol1,symbol2) ->last_line,  LAST_(symbol1,symbol2) ->last_column,  \
    80            LAST_(symbol1,symbol2) ->last_file,  LAST_(symbol1,symbol2) ->last_line,  LAST_(symbol1,symbol2) ->last_column,  \
    64            msg);                                                                       \
    81            msg);                                                                       \
    65     il_error = true;                                                                   \
    82     il_error = true;                                                                   \
    66     error_found = true;                                                                \
    83     error_found = true;                                                                \
    67   }
    84   }
    68 
    85