aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/codegen
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2016-10-24 21:53:11 +0800
committerGitHub <noreply@github.com>2016-10-24 21:53:11 +0800
commitd651a506fab547414250a04245148ac5be5d376f (patch)
tree4d98bf01b47b4393a5a207a91dbd187e4e1d354e /libsolidity/codegen
parent9e0594f4c1bf34a48771c7d67e6c76e1197425ae (diff)
parentabf393126ba7e5da7871dc87276f36af6568f4fd (diff)
downloaddexon-solidity-d651a506fab547414250a04245148ac5be5d376f.tar
dexon-solidity-d651a506fab547414250a04245148ac5be5d376f.tar.gz
dexon-solidity-d651a506fab547414250a04245148ac5be5d376f.tar.bz2
dexon-solidity-d651a506fab547414250a04245148ac5be5d376f.tar.lz
dexon-solidity-d651a506fab547414250a04245148ac5be5d376f.tar.xz
dexon-solidity-d651a506fab547414250a04245148ac5be5d376f.tar.zst
dexon-solidity-d651a506fab547414250a04245148ac5be5d376f.zip
Merge pull request #1263 from ethereum/1116
Do not push code for `L` in `L.Foo`, an enum Foo defined in a library L
Diffstat (limited to 'libsolidity/codegen')
-rw-r--r--libsolidity/codegen/ExpressionCompiler.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/libsolidity/codegen/ExpressionCompiler.cpp b/libsolidity/codegen/ExpressionCompiler.cpp
index 3d05edd3..da3e56cc 100644
--- a/libsolidity/codegen/ExpressionCompiler.cpp
+++ b/libsolidity/codegen/ExpressionCompiler.cpp
@@ -861,11 +861,12 @@ bool ExpressionCompiler::visit(MemberAccess const& _memberAccess)
}
// Special processing for TypeType because we do not want to visit the library itself
- // for internal functions.
+ // for internal functions, or enum/struct definitions.
if (TypeType const* type = dynamic_cast<TypeType const*>(_memberAccess.expression().annotation().type.get()))
{
if (dynamic_cast<ContractType const*>(type->actualType().get()))
{
+ solAssert(_memberAccess.annotation().type, "_memberAccess has no type");
if (auto funType = dynamic_cast<FunctionType const*>(_memberAccess.annotation().type.get()))
{
if (funType->location() != FunctionType::Location::Internal)
@@ -883,6 +884,10 @@ bool ExpressionCompiler::visit(MemberAccess const& _memberAccess)
m_context << m_context.functionEntryLabel(*function).pushTag();
}
}
+ else if (dynamic_cast<TypeType const*>(_memberAccess.annotation().type.get()))
+ {
+ // no-op
+ }
else
_memberAccess.expression().accept(*this);
}