mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Adds warning if function is shadowing a contract.
This commit is contained in:
parent
de6cd2425b
commit
b0b35e1e6b
@ -482,14 +482,6 @@ bool DeclarationRegistrationHelper::registerDeclaration(
|
|||||||
Declaration const* shadowedDeclaration = nullptr;
|
Declaration const* shadowedDeclaration = nullptr;
|
||||||
if (_warnOnShadow && !name.empty() && _container.enclosingContainer())
|
if (_warnOnShadow && !name.empty() && _container.enclosingContainer())
|
||||||
for (auto const* decl: _container.enclosingContainer()->resolveName(name, true, true))
|
for (auto const* decl: _container.enclosingContainer()->resolveName(name, true, true))
|
||||||
// Do not warn about functions shadowing a contract.
|
|
||||||
if (
|
|
||||||
!(
|
|
||||||
dynamic_cast<ContractDefinition const*>(decl) &&
|
|
||||||
dynamic_cast<FunctionDefinition const*>(&_declaration) &&
|
|
||||||
name == decl->name()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
shadowedDeclaration = decl;
|
shadowedDeclaration = decl;
|
||||||
|
|
||||||
// We use "invisible" for both inactive variables in blocks and for members invisible in contracts.
|
// We use "invisible" for both inactive variables in blocks and for members invisible in contracts.
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
contract A { function A() public {} }
|
contract A { function A() public {} }
|
||||||
// ----
|
// ----
|
||||||
// SyntaxError: (13-35): Functions are not allowed to have the same name as the contract. If you intend this to be a constructor, use "constructor(...) { ... }" to define it.
|
// SyntaxError: (13-35): Functions are not allowed to have the same name as the contract. If you intend this to be a constructor, use "constructor(...) { ... }" to define it.
|
||||||
|
// Warning: (13-35): This declaration shadows an existing declaration.
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
contract A { constructor() public {} }
|
contract A { function f() public {} }
|
||||||
contract B is A { function A() public pure returns (uint8) {} }
|
contract B is A {
|
||||||
contract C is A { function A() public pure returns (uint8) {} }
|
function A() public pure returns (uint8) {}
|
||||||
contract D is B { function B() public pure returns (uint8) {} }
|
function g() public {
|
||||||
contract E is D { function B() public pure returns (uint8) {} }
|
A.f();
|
||||||
|
}
|
||||||
|
}
|
||||||
// ----
|
// ----
|
||||||
|
// Warning: (58-101): This declaration shadows an existing declaration.
|
||||||
|
// TypeError: (130-133): Member "f" not found or not visible after argument-dependent lookup in function () pure returns (uint8).
|
||||||
|
Loading…
Reference in New Issue
Block a user