mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #8836 from mijovic/fixConstructorModifier
[Sol->Yul] Checking if there is base contract when calling base const…
This commit is contained in:
commit
cb32530b6b
@ -302,22 +302,26 @@ pair<string, map<ContractDefinition const*, string>> IRGenerator::evaluateConstr
|
|||||||
|
|
||||||
for (ASTPointer<InheritanceSpecifier> const& base: _contract.baseContracts())
|
for (ASTPointer<InheritanceSpecifier> const& base: _contract.baseContracts())
|
||||||
if (FunctionDefinition const* baseConstructor = dynamic_cast<ContractDefinition const*>(
|
if (FunctionDefinition const* baseConstructor = dynamic_cast<ContractDefinition const*>(
|
||||||
base->name().annotation().referencedDeclaration
|
base->name().annotation().referencedDeclaration
|
||||||
)->constructor(); baseConstructor && base->arguments())
|
)->constructor(); baseConstructor && base->arguments())
|
||||||
baseConstructorArguments.emplace_back(
|
baseConstructorArguments.emplace_back(
|
||||||
dynamic_cast<ContractDefinition const*>(baseConstructor->scope()),
|
dynamic_cast<ContractDefinition const*>(baseConstructor->scope()),
|
||||||
base->arguments()
|
base->arguments()
|
||||||
);
|
);
|
||||||
|
|
||||||
if (FunctionDefinition const* constructor = _contract.constructor())
|
if (FunctionDefinition const* constructor = _contract.constructor())
|
||||||
for (auto const& modifier: constructor->modifiers())
|
for (ASTPointer<ModifierInvocation> const& modifier: constructor->modifiers())
|
||||||
if (FunctionDefinition const* baseConstructor = dynamic_cast<ContractDefinition const*>(
|
if (auto const* baseContract = dynamic_cast<ContractDefinition const*>(
|
||||||
modifier->name()->annotation().referencedDeclaration
|
modifier->name()->annotation().referencedDeclaration
|
||||||
)->constructor(); baseConstructor && modifier->arguments())
|
))
|
||||||
baseConstructorArguments.emplace_back(
|
if (
|
||||||
dynamic_cast<ContractDefinition const*>(baseConstructor->scope()),
|
FunctionDefinition const* baseConstructor = baseContract->constructor();
|
||||||
modifier->arguments()
|
baseConstructor && modifier->arguments()
|
||||||
);
|
)
|
||||||
|
baseConstructorArguments.emplace_back(
|
||||||
|
dynamic_cast<ContractDefinition const*>(baseConstructor->scope()),
|
||||||
|
modifier->arguments()
|
||||||
|
);
|
||||||
|
|
||||||
IRGeneratorForStatements generator{m_context, m_utils};
|
IRGeneratorForStatements generator{m_context, m_utils};
|
||||||
for (auto&& [baseContract, arguments]: baseConstructorArguments)
|
for (auto&& [baseContract, arguments]: baseConstructorArguments)
|
||||||
|
Loading…
Reference in New Issue
Block a user