diff options
author | chriseth <chris@ethereum.org> | 2017-09-13 18:55:51 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-13 18:55:51 +0800 |
commit | 25d8436b4c9bd5e27c70a9d1ad1b03fbc1b73ce6 (patch) | |
tree | 47b45d9eefbf0f165c80d4c114a1f999ac3d6cd9 | |
parent | 8bb96eaaf533b17cd9c9109642455408f551348c (diff) | |
parent | 0259459b21f1f907380ec1f692dda19f7b2388bb (diff) | |
download | dexon-solidity-25d8436b4c9bd5e27c70a9d1ad1b03fbc1b73ce6.tar dexon-solidity-25d8436b4c9bd5e27c70a9d1ad1b03fbc1b73ce6.tar.gz dexon-solidity-25d8436b4c9bd5e27c70a9d1ad1b03fbc1b73ce6.tar.bz2 dexon-solidity-25d8436b4c9bd5e27c70a9d1ad1b03fbc1b73ce6.tar.lz dexon-solidity-25d8436b4c9bd5e27c70a9d1ad1b03fbc1b73ce6.tar.xz dexon-solidity-25d8436b4c9bd5e27c70a9d1ad1b03fbc1b73ce6.tar.zst dexon-solidity-25d8436b4c9bd5e27c70a9d1ad1b03fbc1b73ce6.zip |
Merge pull request #2892 from ethereum/limit-duplicate-declaration-errors
Limit each duplicate declaration error to 32 references
-rw-r--r-- | Changelog.md | 1 | ||||
-rw-r--r-- | libsolidity/analysis/TypeChecker.cpp | 22 |
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 ); + } } } } |