aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Beregszaszi <alex@rtfs.hu>2018-04-05 21:34:03 +0800
committerAlex Beregszaszi <alex@rtfs.hu>2018-04-06 20:44:03 +0800
commit43d2954de83af5f64f526fd36f1cd5c3b5299498 (patch)
treef4be890f379db6ef222a7ac74258b9ae82cc6f9e
parent0812d1189ad3d6ba6338ef7dc39aa61005d731e4 (diff)
downloaddexon-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.cpp44
-rw-r--r--libsolidity/interface/ErrorReporter.h9
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;
};