mirror of
https://github.com/gbdev/rgbds.git
synced 2026-07-02 05:58:04 +00:00
Add -Wlarge-constant to RGBLINK as it is for RGBASM
This commit is contained in:
+11
-2
@@ -113,9 +113,18 @@ static yy::parser::symbol_type readNumber(int initial, char const *prefix, char
|
||||
context.file.sbumpc();
|
||||
}
|
||||
for (int c = context.file.sgetc(); isDigit<Base>(c) || c == '_'; c = context.file.snextc()) {
|
||||
if (c != '_') {
|
||||
number = number * Base + parseDigit<Base>(c);
|
||||
if (c == '_') {
|
||||
continue;
|
||||
}
|
||||
uint32_t digit = parseDigit<Base>(c);
|
||||
if (number > (UINT32_MAX - digit) / Base) {
|
||||
scriptWarning(WARNING_LARGE_CONSTANT, "Integer constant is too large");
|
||||
// Discard any additional digits
|
||||
for (c = context.file.snextc(); isDigit<Base>(c) || c == '_';
|
||||
c = context.file.snextc()) {}
|
||||
return yy::parser::make_number(0);
|
||||
}
|
||||
number = number * Base + digit;
|
||||
}
|
||||
return yy::parser::make_number(number);
|
||||
}
|
||||
|
||||
+36
-9
@@ -17,18 +17,19 @@
|
||||
// clang-format off: nested initializers
|
||||
Diagnostics<WarningLevel, WarningID> warnings = {
|
||||
.metaWarnings = {
|
||||
{"all", LEVEL_ALL },
|
||||
{"everything", LEVEL_EVERYTHING},
|
||||
{"all", LEVEL_ALL },
|
||||
{"everything", LEVEL_EVERYTHING},
|
||||
},
|
||||
.warningFlags = {
|
||||
{"assert", LEVEL_DEFAULT },
|
||||
{"div", LEVEL_ALL },
|
||||
{"obsolete", LEVEL_DEFAULT },
|
||||
{"shift", LEVEL_ALL },
|
||||
{"shift-amount", LEVEL_ALL },
|
||||
{"assert", LEVEL_DEFAULT },
|
||||
{"div", LEVEL_ALL },
|
||||
{"large-constant", LEVEL_DEFAULT },
|
||||
{"obsolete", LEVEL_DEFAULT },
|
||||
{"shift", LEVEL_ALL },
|
||||
{"shift-amount", LEVEL_ALL },
|
||||
// Parametric warnings
|
||||
{"truncation", LEVEL_DEFAULT },
|
||||
{"truncation", LEVEL_EVERYTHING},
|
||||
{"truncation", LEVEL_DEFAULT },
|
||||
{"truncation", LEVEL_EVERYTHING},
|
||||
},
|
||||
.paramWarnings = {
|
||||
{WARNING_TRUNCATION_1, WARNING_TRUNCATION_2, 1},
|
||||
@@ -198,3 +199,29 @@ void warning(FileStackNode const *src, uint32_t lineNo, WarningID id, char const
|
||||
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
void scriptWarning(WarningID id, char const *fmt, ...) {
|
||||
char const *flag = warnings.warningFlags[id].name;
|
||||
va_list args;
|
||||
|
||||
va_start(args, fmt);
|
||||
|
||||
switch (warnings.getWarningBehavior(id)) {
|
||||
case WarningBehavior::DISABLED:
|
||||
break;
|
||||
|
||||
case WarningBehavior::ENABLED:
|
||||
printDiag(nullptr, 0, fmt, args, "warning", STYLE_YELLOW, "[-W%s]", flag);
|
||||
break;
|
||||
|
||||
case WarningBehavior::ERROR:
|
||||
printDiag(nullptr, 0, fmt, args, "error", STYLE_RED, "[-Werror=%s]", flag);
|
||||
|
||||
warnings.incrementErrors();
|
||||
break;
|
||||
}
|
||||
|
||||
va_end(args);
|
||||
|
||||
lexer_TraceCurrent();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user