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 */ |
|
65 #define FIRST_(symbol1, symbol2) (((symbol1)->first_line < (symbol2)->first_line) ? (symbol1) : \ |
48 #define FIRST_(symbol1, symbol2) (((symbol1)->first_line < (symbol2)->first_line) ? (symbol1) : \ |
66 ((symbol1)->first_line > (symbol2)->first_line) ? (symbol2) : \ |
49 ((symbol1)->first_line > (symbol2)->first_line) ? (symbol2) : \ |
67 ((symbol1)->first_column < (symbol2)->first_column) ? (symbol1) : \ |
50 ((symbol1)->first_column < (symbol2)->first_column) ? (symbol1) : \ |
68 ((symbol1)->first_column > (symbol2)->first_column) ? (symbol2) : \ |
51 ((symbol1)->first_column > (symbol2)->first_column) ? (symbol2) : \ |
69 (symbol1)) |
52 (symbol1)) |
71 #define LAST_(symbol1, symbol2) (((symbol1)->last_line < (symbol2)->last_line) ? (symbol2) : \ |
54 #define LAST_(symbol1, symbol2) (((symbol1)->last_line < (symbol2)->last_line) ? (symbol2) : \ |
72 ((symbol1)->last_line > (symbol2)->last_line) ? (symbol1) : \ |
55 ((symbol1)->last_line > (symbol2)->last_line) ? (symbol1) : \ |
73 ((symbol1)->last_column < (symbol2)->last_column) ? (symbol2) : \ |
56 ((symbol1)->last_column < (symbol2)->last_column) ? (symbol2) : \ |
74 ((symbol1)->last_column > (symbol2)->last_column) ? (symbol1) : \ |
57 ((symbol1)->last_column > (symbol2)->last_column) ? (symbol1) : \ |
75 (symbol1)) |
58 (symbol1)) |
|
59 */ |
|
60 #define FIRST_(symbol1, symbol2) (((symbol1)->first_order < (symbol2)->first_order) ? (symbol1) : (symbol2)) |
|
61 #define LAST_(symbol1, symbol2) (((symbol1)->last_order > (symbol2)->last_order) ? (symbol1) : (symbol2)) |
76 |
62 |
77 #define STAGE3_ERROR(symbol1, symbol2, msg) { \ |
63 #define STAGE3_ERROR(symbol1, symbol2, msg) { \ |
78 fprintf(stderr, "%s:(%d:%d) .. %s(%d:%d): %s\n", \ |
64 fprintf(stderr, "%s:(%d:%d) .. %s(%d:%d): %s\n", \ |
79 FIRST_(symbol1,symbol2)->first_file, FIRST_(symbol1,symbol2)->first_line, FIRST_(symbol1,symbol2)->first_column, \ |
65 FIRST_(symbol1,symbol2)->first_file, FIRST_(symbol1,symbol2)->first_line, FIRST_(symbol1,symbol2)->first_column, \ |
80 LAST_(symbol1,symbol2) ->last_file, LAST_(symbol1,symbol2) ->last_line, LAST_(symbol1,symbol2) ->last_column, \ |
66 LAST_(symbol1,symbol2) ->last_file, LAST_(symbol1,symbol2) ->last_line, LAST_(symbol1,symbol2) ->last_column, \ |