stage4/stage4.cc
changeset 596 4efb11e44065
parent 594 c8092e909886
equal deleted inserted replaced
595:c41975a290ce 596:4efb11e44065
    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 }