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