diff options
author | Yoichi Hirai <i@yoichihirai.com> | 2016-12-02 23:24:53 +0800 |
---|---|---|
committer | Yoichi Hirai <i@yoichihirai.com> | 2017-01-12 01:28:11 +0800 |
commit | 91d4e8e0bab6f5285103af6ef84a7813cfbb61a2 (patch) | |
tree | 87f3a1c7fb668b65dc47fdda0e1ced171f262a04 /libsolidity/analysis/TypeChecker.cpp | |
parent | 42b672617392ecb294447f73fd011092cd58702b (diff) | |
download | dexon-solidity-91d4e8e0bab6f5285103af6ef84a7813cfbb61a2.tar dexon-solidity-91d4e8e0bab6f5285103af6ef84a7813cfbb61a2.tar.gz dexon-solidity-91d4e8e0bab6f5285103af6ef84a7813cfbb61a2.tar.bz2 dexon-solidity-91d4e8e0bab6f5285103af6ef84a7813cfbb61a2.tar.lz dexon-solidity-91d4e8e0bab6f5285103af6ef84a7813cfbb61a2.tar.xz dexon-solidity-91d4e8e0bab6f5285103af6ef84a7813cfbb61a2.tar.zst dexon-solidity-91d4e8e0bab6f5285103af6ef84a7813cfbb61a2.zip |
analysis: changes necessary to compile std/StandardToken.sol
Diffstat (limited to 'libsolidity/analysis/TypeChecker.cpp')
-rw-r--r-- | libsolidity/analysis/TypeChecker.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/libsolidity/analysis/TypeChecker.cpp b/libsolidity/analysis/TypeChecker.cpp index e414e27c..67c8ac17 100644 --- a/libsolidity/analysis/TypeChecker.cpp +++ b/libsolidity/analysis/TypeChecker.cpp @@ -1500,8 +1500,23 @@ bool TypeChecker::visit(Identifier const& _identifier) if (!annotation.referencedDeclaration) { if (!annotation.argumentTypes) - fatalTypeError(_identifier.location(), "Unable to determine overloaded type."); - if (annotation.overloadedDeclarations.empty()) + { + // The identifier should be a public state variable shadowing other functions + vector<Declaration const*> candidates; + + for (Declaration const* declaration: annotation.overloadedDeclarations) + { + if (VariableDeclaration const* variableDeclaration = dynamic_cast<decltype(variableDeclaration)>(declaration)) + candidates.push_back(declaration); + } + if (candidates.empty()) + fatalTypeError(_identifier.location(), "No matching declaration found after variable lookup."); + else if (candidates.size() == 1) + annotation.referencedDeclaration = candidates.front(); + else + fatalTypeError(_identifier.location(), "No unique declaration found after variable lookup."); + } + else if (annotation.overloadedDeclarations.empty()) fatalTypeError(_identifier.location(), "No candidates for overload resolution found."); else if (annotation.overloadedDeclarations.size() == 1) annotation.referencedDeclaration = *annotation.overloadedDeclarations.begin(); |