aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Beregszaszi <alex@rtfs.hu>2017-09-12 19:05:20 +0800
committerAlex Beregszaszi <alex@rtfs.hu>2017-09-13 04:37:06 +0800
commit0259459b21f1f907380ec1f692dda19f7b2388bb (patch)
tree47b45d9eefbf0f165c80d4c114a1f999ac3d6cd9
parent8bb96eaaf533b17cd9c9109642455408f551348c (diff)
downloaddexon-solidity-0259459b21f1f907380ec1f692dda19f7b2388bb.tar.gz
dexon-solidity-0259459b21f1f907380ec1f692dda19f7b2388bb.tar.zst
dexon-solidity-0259459b21f1f907380ec1f692dda19f7b2388bb.zip
Limit each duplicate declaration error to 32 references
-rw-r--r--Changelog.md1
-rw-r--r--libsolidity/analysis/TypeChecker.cpp22
2 files changed, 21 insertions, 2 deletions
diff --git a/Changelog.md b/Changelog.md
index d3627565..71f873a9 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -4,6 +4,7 @@ Features:
* Optimizer: Add new optimization step to remove unused ``JUMPDEST``s.
* Type Checker: Display helpful warning for unused function arguments/return parameters.
* Type Checker: Do not show the same error multiple times for events.
+ * Type Checker: Greatly reduce the number of duplicate errors shown for duplicate constructors and functions.
* Type Checker: Warn on using literals as tight packing parameters in ``keccak256``, ``sha3``, ``sha256`` and ``ripemd160``.
Bugfixes:
diff --git a/libsolidity/analysis/TypeChecker.cpp b/libsolidity/analysis/TypeChecker.cpp
index 87750c6e..c54f4c87 100644
--- a/libsolidity/analysis/TypeChecker.cpp
+++ b/libsolidity/analysis/TypeChecker.cpp
@@ -164,10 +164,18 @@ void TypeChecker::checkContractDuplicateFunctions(ContractDefinition const& _con
for (; it != functions[_contract.name()].end(); ++it)
ssl.append("Another declaration is here:", (*it)->location());
+ string msg = "More than one constructor defined.";
+ size_t occurrences = ssl.infos.size();
+ if (occurrences > 32)
+ {
+ ssl.infos.resize(32);
+ msg += " Truncated from " + boost::lexical_cast<string>(occurrences) + " to the first 32 occurrences.";
+ }
+
m_errorReporter.declarationError(
functions[_contract.name()].front()->location(),
ssl,
- "More than one constructor defined."
+ msg
);
}
for (auto const& it: functions)
@@ -186,11 +194,21 @@ void TypeChecker::checkContractDuplicateFunctions(ContractDefinition const& _con
}
if (ssl.infos.size() > 0)
+ {
+ string msg = "Function with same name and arguments defined twice.";
+ size_t occurrences = ssl.infos.size();
+ if (occurrences > 32)
+ {
+ ssl.infos.resize(32);
+ msg += " Truncated from " + boost::lexical_cast<string>(occurrences) + " to the first 32 occurrences.";
+ }
+
m_errorReporter.declarationError(
overloads[i]->location(),
ssl,
- "Function with same name and arguments defined twice."
+ msg
);
+ }
}
}
}