Merge pull request #8836 from mijovic/fixConstructorModifier

[Sol->Yul] Checking if there is base contract when calling base const…
This commit is contained in:
chriseth 2020-05-05 00:30:03 +02:00 committed by GitHub
commit cb32530b6b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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)