mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #10756 from ethereum/fixModifierLookup
Fix modifier lookup
This commit is contained in:
commit
45be47fc6b
@ -338,14 +338,24 @@ string IRGenerator::generateModifier(
|
|||||||
t("retParams", joinHumanReadable(retParams));
|
t("retParams", joinHumanReadable(retParams));
|
||||||
t("assignRetParams", assignRetParams);
|
t("assignRetParams", assignRetParams);
|
||||||
|
|
||||||
solAssert(*_modifierInvocation.name().annotation().requiredLookup == VirtualLookup::Virtual, "");
|
ModifierDefinition const* modifier = dynamic_cast<ModifierDefinition const*>(
|
||||||
|
_modifierInvocation.name().annotation().referencedDeclaration
|
||||||
ModifierDefinition const& modifier = dynamic_cast<ModifierDefinition const&>(
|
);
|
||||||
*_modifierInvocation.name().annotation().referencedDeclaration
|
solAssert(modifier, "");
|
||||||
).resolveVirtual(m_context.mostDerivedContract());
|
switch (*_modifierInvocation.name().annotation().requiredLookup)
|
||||||
|
{
|
||||||
|
case VirtualLookup::Virtual:
|
||||||
|
modifier = &modifier->resolveVirtual(m_context.mostDerivedContract());
|
||||||
|
solAssert(modifier, "");
|
||||||
|
break;
|
||||||
|
case VirtualLookup::Static:
|
||||||
|
break;
|
||||||
|
case VirtualLookup::Super:
|
||||||
|
solAssert(false, "");
|
||||||
|
}
|
||||||
|
|
||||||
solAssert(
|
solAssert(
|
||||||
modifier.parameters().empty() ==
|
modifier->parameters().empty() ==
|
||||||
(!_modifierInvocation.arguments() || _modifierInvocation.arguments()->empty()),
|
(!_modifierInvocation.arguments() || _modifierInvocation.arguments()->empty()),
|
||||||
""
|
""
|
||||||
);
|
);
|
||||||
@ -355,10 +365,10 @@ string IRGenerator::generateModifier(
|
|||||||
{
|
{
|
||||||
IRVariable argument = expressionEvaluator.evaluateExpression(
|
IRVariable argument = expressionEvaluator.evaluateExpression(
|
||||||
*_modifierInvocation.arguments()->at(i),
|
*_modifierInvocation.arguments()->at(i),
|
||||||
*modifier.parameters()[i]->annotation().type
|
*modifier->parameters()[i]->annotation().type
|
||||||
);
|
);
|
||||||
expressionEvaluator.define(
|
expressionEvaluator.define(
|
||||||
m_context.addLocalVariable(*modifier.parameters()[i]),
|
m_context.addLocalVariable(*modifier->parameters()[i]),
|
||||||
argument
|
argument
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -370,7 +380,7 @@ string IRGenerator::generateModifier(
|
|||||||
(ret.empty() ? "" : ret + " := ") +
|
(ret.empty() ? "" : ret + " := ") +
|
||||||
_nextFunction + "(" + joinHumanReadable(params) + ")\n";
|
_nextFunction + "(" + joinHumanReadable(params) + ")\n";
|
||||||
});
|
});
|
||||||
generator.generate(modifier.body());
|
generator.generate(modifier->body());
|
||||||
t("body", generator.code());
|
t("body", generator.code());
|
||||||
return t.render();
|
return t.render();
|
||||||
});
|
});
|
||||||
|
@ -12,6 +12,8 @@ contract C is A {
|
|||||||
return 10;
|
return 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// ====
|
||||||
|
// compileViaYul: also
|
||||||
// ----
|
// ----
|
||||||
// x() -> 7
|
// x() -> 7
|
||||||
// f() -> 9
|
// f() -> 9
|
||||||
|
@ -15,6 +15,8 @@ contract C {
|
|||||||
r = 10;
|
r = 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// ====
|
||||||
|
// compileViaYul: also
|
||||||
// ----
|
// ----
|
||||||
// x() -> 0x00
|
// x() -> 0x00
|
||||||
// f() -> 1, 9
|
// f() -> 1, 9
|
||||||
|
Loading…
Reference in New Issue
Block a user