codegen: skip contract L for L.Foo where Foo is a type

Fixes #1116
This commit is contained in:
Yoichi Hirai 2016-10-21 10:05:36 +02:00
parent df900c5583
commit 7cee39fc17
No known key found for this signature in database
GPG Key ID: E7B75D080FCF7992

View File

@ -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);
}