aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/analysis/DeclarationContainer.cpp
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2017-01-13 16:36:00 +0800
committerGitHub <noreply@github.com>2017-01-13 16:36:00 +0800
commitbde0b40634121e761133ff1d4c28ae7657a46149 (patch)
tree0108593b65c0650763509f14952e6cc4e18b3506 /libsolidity/analysis/DeclarationContainer.cpp
parent14703ca002adba39e18f3f0d1aef1cf74b191349 (diff)
parentabc24420a7837557e5160db8af83ea3be5a371c3 (diff)
downloaddexon-solidity-bde0b40634121e761133ff1d4c28ae7657a46149.tar.gz
dexon-solidity-bde0b40634121e761133ff1d4c28ae7657a46149.tar.zst
dexon-solidity-bde0b40634121e761133ff1d4c28ae7657a46149.zip
Merge pull request #1479 from ethereum/function_variable_mixin
Disallow mixin of functions and attributes under the same name
Diffstat (limited to 'libsolidity/analysis/DeclarationContainer.cpp')
-rw-r--r--libsolidity/analysis/DeclarationContainer.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/libsolidity/analysis/DeclarationContainer.cpp b/libsolidity/analysis/DeclarationContainer.cpp
index 1599b83a..f8c12c5b 100644
--- a/libsolidity/analysis/DeclarationContainer.cpp
+++ b/libsolidity/analysis/DeclarationContainer.cpp
@@ -44,10 +44,19 @@ Declaration const* DeclarationContainer::conflictingDeclaration(
if (dynamic_cast<FunctionDefinition const*>(&_declaration))
{
- // check that all other declarations with the same name are functions
+ // check that all other declarations with the same name are functions or a public state variable
for (Declaration const* declaration: declarations)
- if (!dynamic_cast<FunctionDefinition const*>(declaration))
+ {
+ if (dynamic_cast<FunctionDefinition const*>(declaration))
+ continue;
+ if (auto variableDeclaration = dynamic_cast<VariableDeclaration const*>(declaration))
+ {
+ if (variableDeclaration->isStateVariable() && !variableDeclaration->isConstant() && variableDeclaration->isPublic())
+ continue;
return declaration;
+ }
+ return declaration;
+ }
}
else if (declarations.size() == 1 && declarations.front() == &_declaration)
return nullptr;