Do not abort excessive warnings, just ignore them.

This commit is contained in:
Alex Beregszaszi 2018-04-05 15:34:03 +02:00
parent 0812d1189a
commit 43d2954de8
2 changed files with 39 additions and 16 deletions

View File

@ -61,8 +61,8 @@ void ErrorReporter::warning(
void ErrorReporter::error(Error::Type _type, SourceLocation const& _location, string const& _description)
{
if (_type != Error::Type::Warning)
abortIfExcessive();
if (checkForExcessiveErrors(_type))
return;
auto err = make_shared<Error>(_type);
*err <<
@ -74,8 +74,8 @@ void ErrorReporter::error(Error::Type _type, SourceLocation const& _location, st
void ErrorReporter::error(Error::Type _type, SourceLocation const& _location, SecondarySourceLocation const& _secondaryLocation, string const& _description)
{
if (_type != Error::Type::Warning)
abortIfExcessive();
if (checkForExcessiveErrors(_type))
return;
auto err = make_shared<Error>(_type);
*err <<
@ -86,20 +86,36 @@ void ErrorReporter::error(Error::Type _type, SourceLocation const& _location, Se
m_errorList.push_back(err);
}
void ErrorReporter::abortIfExcessive()
bool ErrorReporter::checkForExcessiveErrors(Error::Type _type)
{
unsigned errorCount = 0;
for (auto const& error: m_errorList)
if (error->type() != Error::Type::Warning)
errorCount++;
if (errorCount > 256)
if (_type == Error::Type::Warning)
{
auto err = make_shared<Error>(Error::Type::Warning);
*err << errinfo_comment("There are more than 256 errors. Aborting.");
m_errorList.push_back(err);
BOOST_THROW_EXCEPTION(FatalError());
m_warningCount++;
if (m_warningCount == c_maxWarningsAllowed)
{
auto err = make_shared<Error>(Error::Type::Warning);
*err << errinfo_comment("There are more than 256 warnings. Ignoring the rest.");
m_errorList.push_back(err);
}
if (m_warningCount >= c_maxWarningsAllowed)
return true;
}
else
{
m_errorCount++;
if (m_errorCount > c_maxErrorsAllowed)
{
auto err = make_shared<Error>(Error::Type::Warning);
*err << errinfo_comment("There are more than 256 errors. Aborting.");
m_errorList.push_back(err);
BOOST_THROW_EXCEPTION(FatalError());
}
}
return false;
}
void ErrorReporter::fatalError(Error::Type _type, SourceLocation const& _location, string const& _description)

View File

@ -102,9 +102,16 @@ private:
SourceLocation const& _location = SourceLocation(),
std::string const& _description = std::string());
void abortIfExcessive();
// @returns true if error shouldn't be stored
bool checkForExcessiveErrors(Error::Type _type);
ErrorList& m_errorList;
unsigned m_errorCount = 0;
unsigned m_warningCount = 0;
const unsigned c_maxWarningsAllowed = 256;
const unsigned c_maxErrorsAllowed = 256;
};