diff -r 64a4504633d4 -r a4f4990d5c66 stage3/visit_expression_type.cc --- a/stage3/visit_expression_type.cc Tue Apr 05 19:42:33 2011 +0100 +++ b/stage3/visit_expression_type.cc Thu Apr 14 17:35:25 2011 +0100 @@ -43,8 +43,25 @@ #include #include - - +/* +static inline symbol_c * FIRST_(symbol_c *symbol1, symbol_c *symbol2) { + if (symbol1->first_file == symbol2->first_file) return symbol1; + + if (symbol1->first_line < symbol2->first_line) return symbol1; + if (symbol1->first_line > symbol2->first_line) return symbol2; + if (symbol1->first_column < symbol2->first_column) return symbol1; + if (symbol1->first_column > symbol2->first_column) return symbol2; + return symbol1; +} + +#define FIRST_(symbol1, symbol2) (((symbol1)->last_file == (symbol2)->first_file) ? (symbol1) : \ + ((symbol1)->first_file == (symbol2)->last_file) ? (symbol2) : \ + ((symbol1)->first_line < (symbol2)->first_line) ? (symbol1) : \ + ((symbol1)->first_line > (symbol2)->first_line) ? (symbol2) : \ + ((symbol1)->first_column < (symbol2)->first_column) ? (symbol1) : \ + ((symbol1)->first_column > (symbol2)->first_column) ? (symbol2) : \ + (symbol1)) +*/ #define FIRST_(symbol1, symbol2) (((symbol1)->first_line < (symbol2)->first_line) ? (symbol1) : \ ((symbol1)->first_line > (symbol2)->first_line) ? (symbol2) : \ ((symbol1)->first_column < (symbol2)->first_column) ? (symbol1) : \ @@ -58,9 +75,9 @@ (symbol1)) #define STAGE3_ERROR(symbol1, symbol2, msg) { \ - fprintf(stderr, "semantic error between (%d:%d) and (%d:%d): %s\n", \ - FIRST_(symbol1,symbol2)->first_line, FIRST_(symbol1,symbol2)->first_column, \ - LAST_(symbol1,symbol2) ->last_line, LAST_(symbol1,symbol2) ->last_column, \ + fprintf(stderr, "%s:(%d:%d) .. %s(%d:%d): %s\n", \ + FIRST_(symbol1,symbol2)->first_file, FIRST_(symbol1,symbol2)->first_line, FIRST_(symbol1,symbol2)->first_column, \ + LAST_(symbol1,symbol2) ->last_file, LAST_(symbol1,symbol2) ->last_line, LAST_(symbol1,symbol2) ->last_column, \ msg); \ il_error = true; \ error_found = true; \