Skip to content

Commit e18043d

Browse files
fixup! nested member access
1 parent ec81d3c commit e18043d

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

libsolidity/analysis/ConstantEvaluator.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -415,31 +415,32 @@ void ConstantEvaluator::endVisit(MemberAccess const& _memberAccess)
415415
std::vector<VariableDeclaration const*> candidateVariables;
416416
if (auto const* nestedMemberAccess = dynamic_cast<MemberAccess const*>(&_memberAccess.expression()))
417417
{
418-
// The nested expression can only be accessing a contract inside an imported module
418+
// The nested expression should be accessing a contract inside an imported module
419419
auto const* moduleIdentifier = dynamic_cast<Identifier const*>(&nestedMemberAccess->expression());
420-
solAssert(moduleIdentifier);
420+
if (!moduleIdentifier)
421+
return;
421422
auto const* importedModule = dynamic_cast<ImportDirective const*>(moduleIdentifier->annotation().referencedDeclaration);
422-
solAssert(importedModule);
423+
if (!importedModule)
424+
return;
425+
423426
SourceUnit const* sourceUnit = importedModule->annotation().sourceUnit;
424427
solAssert(sourceUnit);
425-
426428
auto contracts = ASTNode::filteredNodes<ContractDefinition>(sourceUnit->nodes());
427429
auto contract = ranges::find_if(
428430
contracts,
429431
[&](ContractDefinition const* _contract) { return _contract->name() == nestedMemberAccess->memberName(); }
430432
);
431433
if (contract != ranges::end(contracts))
432434
candidateVariables = (*contract)->stateVariables();
433-
434435
}
435436
else if (auto const* parentIdentifier = dynamic_cast<Identifier const*>(&_memberAccess.expression()))
436437
{
437438
Declaration const* referencedDeclaration = parentIdentifier->annotation().referencedDeclaration;
438439
if (auto const* contract = dynamic_cast<ContractDefinition const*>(referencedDeclaration))
439440
candidateVariables = contract->stateVariables();
440-
else if (auto const* import = dynamic_cast<ImportDirective const*>(referencedDeclaration))
441+
else if (auto const* importedModule = dynamic_cast<ImportDirective const*>(referencedDeclaration))
441442
{
442-
if (SourceUnit const* sourceUnit = import->annotation().sourceUnit)
443+
if (SourceUnit const* sourceUnit = importedModule->annotation().sourceUnit)
443444
candidateVariables = ASTNode::filteredNodes<VariableDeclaration>(sourceUnit->nodes());
444445
}
445446
}

0 commit comments

Comments
 (0)