diff options
author | Alex Beregszaszi <alex@rtfs.hu> | 2018-04-05 21:34:03 +0800 |
---|---|---|
committer | Alex Beregszaszi <alex@rtfs.hu> | 2018-04-06 20:44:03 +0800 |
commit | 43d2954de83af5f64f526fd36f1cd5c3b5299498 (patch) | |
tree | f4be890f379db6ef222a7ac74258b9ae82cc6f9e | |
parent | 0812d1189ad3d6ba6338ef7dc39aa61005d731e4 (diff) | |
download | dexon-solidity-43d2954de83af5f64f526fd36f1cd5c3b5299498.tar.gz dexon-solidity-43d2954de83af5f64f526fd36f1cd5c3b5299498.tar.zst dexon-solidity-43d2954de83af5f64f526fd36f1cd5c3b5299498.zip |
Do not abort excessive warnings, just ignore them.
-rw-r--r-- | libsolidity/interface/ErrorReporter.cpp | 44 | ||||
-rw-r--r-- | libsolidity/interface/ErrorReporter.h | 9 |
2 files changed, 38 insertions, 15 deletions
diff --git a/libsolidity/interface/ErrorReporter.cpp b/libsolidity/interface/ErrorReporter.cpp index 436cb64f..368e25e0 100644 --- a/libsolidity/interface/ErrorReporter.cpp +++ b/libsolidity/interface/ErrorReporter.cpp @@ -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 (_type == Error::Type::Warning) + { + 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 (errorCount > 256) + if (m_warningCount >= c_maxWarningsAllowed) + return true; + } + else { - 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_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) diff --git a/libsolidity/interface/ErrorReporter.h b/libsolidity/interface/ErrorReporter.h index 6b3dc221..d1a0030f 100644 --- a/libsolidity/interface/ErrorReporter.h +++ b/libsolidity/interface/ErrorReporter.h @@ -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; }; |