Skip to content

Commit 003a081

Browse files
fixup! Support member access
1 parent 77d852e commit 003a081

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

libsolidity/analysis/ConstantEvaluator.cpp

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -414,19 +414,22 @@ void ConstantEvaluator::endVisit(MemberAccess const& _memberAccess)
414414
{
415415
if (auto const* parentIdentifier = dynamic_cast<Identifier const*>(&_memberAccess.expression()))
416416
{
417-
if (auto const* contract = dynamic_cast<ContractDefinition const*>(parentIdentifier->annotation().referencedDeclaration))
417+
Declaration const* referencedDeclaration = parentIdentifier->annotation().referencedDeclaration;
418+
std::vector<VariableDeclaration const*> candidateVariables;
419+
if (auto const* contract = dynamic_cast<ContractDefinition const*>(referencedDeclaration))
420+
candidateVariables = contract->stateVariables();
421+
else if (auto const* import = dynamic_cast<ImportDirective const*>(referencedDeclaration))
418422
{
419-
auto contractVariables = contract->stateVariables();
420-
auto variable = ranges::find_if(
421-
contractVariables,
422-
[&](VariableDeclaration const* _variable) { return _variable->name() == _memberAccess.memberName(); }
423-
);
424-
425-
if (
426-
variable != ranges::end(contractVariables) &&
427-
(*variable)->isConstant()
428-
)
429-
m_values[&_memberAccess] = evaluate(**variable);
423+
if (SourceUnit const* sourceUnit = import->annotation().sourceUnit)
424+
candidateVariables = ASTNode::filteredNodes<VariableDeclaration>(sourceUnit->nodes());
430425
}
426+
427+
auto variable = ranges::find_if(
428+
candidateVariables,
429+
[&](VariableDeclaration const* _variable) { return _variable->name() == _memberAccess.memberName(); }
430+
);
431+
432+
if (variable != ranges::end(candidateVariables) && (*variable)->isConstant())
433+
m_values[&_memberAccess] = evaluate(**variable);
431434
}
432435
}

0 commit comments

Comments
 (0)