44 #include <iostream> |
44 #include <iostream> |
45 #include <fstream> |
45 #include <fstream> |
46 #include <stdlib.h> |
46 #include <stdlib.h> |
47 |
47 |
48 #include "stage4.hh" |
48 #include "stage4.hh" |
49 |
49 #include "../main.hh" // required for ERROR() and ERROR_MSG() macros. |
50 |
50 |
51 #define ERROR error_exit(__FILE__,__LINE__) |
51 |
52 /* function defined in main.cc */ |
|
53 extern void error_exit(const char *file_name, int line_no); |
|
54 |
52 |
55 |
53 |
56 #define FIRST_(symbol1, symbol2) (((symbol1)->first_order < (symbol2)->first_order) ? (symbol1) : (symbol2)) |
54 #define FIRST_(symbol1, symbol2) (((symbol1)->first_order < (symbol2)->first_order) ? (symbol1) : (symbol2)) |
57 #define LAST_(symbol1, symbol2) (((symbol1)->last_order > (symbol2)->last_order) ? (symbol1) : (symbol2)) |
55 #define LAST_(symbol1, symbol2) (((symbol1)->last_order > (symbol2)->last_order) ? (symbol1) : (symbol2)) |
58 #include <stdarg.h> |
56 #include <stdarg.h> |
59 |
57 |
60 void stage4err(const char *stage4_generator_id, symbol_c *symbol1, symbol_c *symbol2, const char *errmsg, ...) { |
58 void stage4err(const char *stage4_generator_id, symbol_c *symbol1, symbol_c *symbol2, const char *errmsg, ...) { |
61 va_list argptr; |
59 va_list argptr; |
62 va_start(argptr, errmsg); /* second argument is last fixed pamater of stage4err() */ |
60 va_start(argptr, errmsg); /* second argument is last fixed pamater of stage4err() */ |
63 |
61 |
64 fprintf(stderr, "%s:%d-%d..%d-%d: error %s: ", |
62 if ((symbol1 != NULL) && (symbol2 != NULL)) |
65 FIRST_(symbol1,symbol2)->first_file, FIRST_(symbol1,symbol2)->first_line, FIRST_(symbol1,symbol2)->first_column, |
63 fprintf(stderr, "%s:%d-%d..%d-%d: ", |
66 LAST_(symbol1,symbol2) ->last_line, LAST_(symbol1,symbol2) ->last_column, |
64 FIRST_(symbol1,symbol2)->first_file, FIRST_(symbol1,symbol2)->first_line, FIRST_(symbol1,symbol2)->first_column, |
67 stage4_generator_id); |
65 LAST_(symbol1,symbol2) ->last_line, LAST_(symbol1,symbol2) ->last_column); |
|
66 |
|
67 fprintf(stderr, "error %s: ", stage4_generator_id); |
68 vfprintf(stderr, errmsg, argptr); |
68 vfprintf(stderr, errmsg, argptr); |
69 fprintf(stderr, "\n"); |
69 fprintf(stderr, "\n"); |
70 // error_count++; |
70 // error_count++; |
71 va_end(argptr); |
71 va_end(argptr); |
72 } |
72 } |