stage3/visit_expression_type.cc
changeset 286 a4f4990d5c66
parent 284 64a4504633d4
child 287 9df7fcb9bde5
--- 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 <string.h>
 #include <strings.h>
 
-
-
+/*
+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;                                                                \