Factor out program-independent warning diagnostic code (#1725)

This commit is contained in:
Rangi
2025-07-07 18:34:34 -04:00
committed by GitHub
parent 202c91471c
commit c9765ec158
10 changed files with 353 additions and 306 deletions

View File

@@ -7,7 +7,6 @@
#include <string>
extern bool verbose;
extern bool warnings; // True to enable warnings, false to disable them.
extern FILE *dependFile;
extern std::string targetFileName;

View File

@@ -3,8 +3,17 @@
#ifndef RGBDS_ASM_WARNING_HPP
#define RGBDS_ASM_WARNING_HPP
#include "diagnostics.hpp"
extern unsigned int nbErrors, maxErrors;
enum WarningLevel {
LEVEL_DEFAULT, // Warnings that are enabled by default
LEVEL_ALL, // Warnings that probably indicate an error
LEVEL_EXTRA, // Warnings that are less likely to indicate an error
LEVEL_EVERYTHING, // Literally every warning
};
enum WarningID {
WARNING_ASSERT, // Assertions
WARNING_BACKWARDS_FOR, // `FOR` loop with backwards range
@@ -43,24 +52,7 @@ enum WarningID {
NB_WARNINGS,
};
enum WarningAbled { WARNING_DEFAULT, WARNING_ENABLED, WARNING_DISABLED };
struct WarningState {
WarningAbled state;
WarningAbled error;
void update(WarningState other);
};
struct Diagnostics {
WarningState flagStates[NB_WARNINGS];
WarningState metaStates[NB_WARNINGS];
};
extern Diagnostics warningStates;
extern bool warningsAreErrors;
void processWarningFlag(char const *flag);
extern Diagnostics<WarningLevel, WarningID> warnings;
// Used to warn the user about problems that don't prevent the generation of
// valid code.