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

Fixes #1116
This commit is contained in:
Yoichi Hirai
2016-10-24 15:30:26 +02:00
parent df900c5583
commit 7cee39fc17
+6 -1
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);
}