Changes in / [61323a7:3265399]


Ignore:
Location:
src/Common
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/Common/SemanticError.cc

    r61323a7 r3265399  
    6868}
    6969
    70 void SemanticWarningImpl( CodeLocation location, Warning warning, const char * const fmt, ... ) {
    71         Severity severity = WarningFormats[(int)warning].severity;
    72         switch(severity) {
    73         case Severity::Suppress :
    74                 break;
    75         case Severity::Warn :
    76                 {
    77                         va_list args;
    78                         va_start(args, fmt);
    79                         std::string msg = fmtToString( fmt, args );
    80                         va_end(args);
    81                         std::cerr << ErrorHelpers::bold() << location << ErrorHelpers::warning_str() << ErrorHelpers::reset_font() << msg << std::endl;
    82                 }
    83                 break;
    84         case Severity::Error :
    85                 {
    86                         va_list args;
    87                         va_start(args, fmt);
    88                         std::string msg = fmtToString( fmt, args );
    89                         va_end(args);
    90                         SemanticError(location, msg);
    91                 }
    92                 break;
    93         case Severity::Critical :
    94                 assertf(false, "Critical errors not implemented yet");
    95                 break;
    96         }
     70void SemanticWarningImpl( CodeLocation location, Warning, const char * const fmt, ... ) {
     71        va_list args;
     72        va_start(args, fmt);
     73        std::string msg = fmtToString( fmt, args );
     74        va_end(args);
     75        std::cerr << ErrorHelpers::bold() << location << ErrorHelpers::warning_str() << ErrorHelpers::reset_font() << msg << std::endl;
    9776}
    9877
  • src/Common/SemanticError.h

    r61323a7 r3265399  
    3636// Warnings
    3737
    38 enum class Severity {
    39         Suppress,
    40         Warn,
    41         Error,
    42         Critical
    43 };
    44 
    45 struct WarningData {
    46         const char * const name;
    47         const char * const message;
    48         mutable Severity severity;
    49 };
    50 
    51 constexpr const WarningData WarningFormats[] = {
    52         {"self-assign"         , "self assignment of expression: %s"           , Severity::Warn},
    53         {"reference-conversion", "rvalue to reference conversion of rvalue: %s", Severity::Warn},
     38constexpr const char * const WarningFormats[] = {
     39        "self assignment of expression: %s",
     40        "rvalue to reference conversion of rvalue: %s",
    5441};
    5542
     
    6552);
    6653
    67 #define SemanticWarning(loc, id, ...) SemanticWarningImpl(loc, id, WarningFormats[(int)id].message, __VA_ARGS__)
     54// ## used here to allow empty __VA_ARGS__
     55#define SemanticWarning(loc, id, ...) SemanticWarningImpl(loc, id, WarningFormats[(int)id], ## __VA_ARGS__)
    6856
    6957void SemanticWarningImpl (CodeLocation loc, Warning warn, const char * const fmt, ...) __attribute__((format(printf, 3, 4)));
Note: See TracChangeset for help on using the changeset viewer.