Limit each duplicate declaration error to 32 references

This commit is contained in:
Alex Beregszaszi 2017-09-12 12:05:20 +01:00
parent 8bb96eaaf5
commit 0259459b21
2 changed files with 21 additions and 2 deletions

View File

@ -4,6 +4,7 @@ Features:
* Optimizer: Add new optimization step to remove unused ``JUMPDEST``s. * Optimizer: Add new optimization step to remove unused ``JUMPDEST``s.
* Type Checker: Display helpful warning for unused function arguments/return parameters. * 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: 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``. * Type Checker: Warn on using literals as tight packing parameters in ``keccak256``, ``sha3``, ``sha256`` and ``ripemd160``.
Bugfixes: Bugfixes:

View File

@ -164,10 +164,18 @@ void TypeChecker::checkContractDuplicateFunctions(ContractDefinition const& _con
for (; it != functions[_contract.name()].end(); ++it) for (; it != functions[_contract.name()].end(); ++it)
ssl.append("Another declaration is here:", (*it)->location()); 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( m_errorReporter.declarationError(
functions[_contract.name()].front()->location(), functions[_contract.name()].front()->location(),
ssl, ssl,
"More than one constructor defined." msg
); );
} }
for (auto const& it: functions) for (auto const& it: functions)
@ -186,13 +194,23 @@ void TypeChecker::checkContractDuplicateFunctions(ContractDefinition const& _con
} }
if (ssl.infos.size() > 0) 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( m_errorReporter.declarationError(
overloads[i]->location(), overloads[i]->location(),
ssl, ssl,
"Function with same name and arguments defined twice." msg
); );
} }
} }
}
} }
void TypeChecker::checkContractAbstractFunctions(ContractDefinition const& _contract) void TypeChecker::checkContractAbstractFunctions(ContractDefinition const& _contract)