Fix qualified modifier lookup.

This commit is contained in:
chriseth
2020-11-17 18:33:45 +01:00
parent 3957fb8191
commit e64fd99fb5
3 changed files with 56 additions and 4 deletions
+9 -4
View File
@@ -1301,11 +1301,16 @@ void ContractCompiler::appendModifierOrFunctionCode()
appendModifierOrFunctionCode();
else
{
solAssert(*modifierInvocation->name().annotation().requiredLookup == VirtualLookup::Virtual, "");
ModifierDefinition const& modifier = dynamic_cast<ModifierDefinition const&>(
ModifierDefinition const& referencedModifier = dynamic_cast<ModifierDefinition const&>(
*modifierInvocation->name().annotation().referencedDeclaration
).resolveVirtual(m_context.mostDerivedContract());
);
VirtualLookup lookup = *modifierInvocation->name().annotation().requiredLookup;
solAssert(lookup == VirtualLookup::Virtual || lookup == VirtualLookup::Static, "");
ModifierDefinition const& modifier =
lookup == VirtualLookup::Virtual ?
referencedModifier.resolveVirtual(m_context.mostDerivedContract()) :
referencedModifier;
CompilerContext::LocationSetter locationSetter(m_context, modifier);
std::vector<ASTPointer<Expression>> const& modifierArguments =
modifierInvocation->arguments() ? *modifierInvocation->arguments() : std::vector<ASTPointer<Expression>>();