mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Merge pull request #11530 from ethereum/IRgen-refactors
IR Codegen: Small refactoring & comment fixes
This commit is contained in:
		
						commit
						b0a020ba97
					
				| @ -36,7 +36,7 @@ YulArity YulArity::fromType(FunctionType const& _functionType) | |||||||
| string IRNames::function(FunctionDefinition const& _function) | string IRNames::function(FunctionDefinition const& _function) | ||||||
| { | { | ||||||
| 	if (_function.isConstructor()) | 	if (_function.isConstructor()) | ||||||
| 		return implicitConstructor(*_function.annotation().contract); | 		return constructor(*_function.annotation().contract); | ||||||
| 
 | 
 | ||||||
| 	return "fun_" + _function.name() + "_" + to_string(_function.id()); | 	return "fun_" + _function.name() + "_" + to_string(_function.id()); | ||||||
| } | } | ||||||
| @ -78,7 +78,7 @@ string IRNames::internalDispatch(YulArity const& _arity) | |||||||
| 		"_out_" + to_string(_arity.out); | 		"_out_" + to_string(_arity.out); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| string IRNames::implicitConstructor(ContractDefinition const& _contract) | string IRNames::constructor(ContractDefinition const& _contract) | ||||||
| { | { | ||||||
| 	return "constructor_" + _contract.name() + "_" + to_string(_contract.id()); | 	return "constructor_" + _contract.name() + "_" + to_string(_contract.id()); | ||||||
| } | } | ||||||
|  | |||||||
| @ -54,7 +54,7 @@ struct IRNames | |||||||
| 	static std::string creationObject(ContractDefinition const& _contract); | 	static std::string creationObject(ContractDefinition const& _contract); | ||||||
| 	static std::string deployedObject(ContractDefinition const& _contract); | 	static std::string deployedObject(ContractDefinition const& _contract); | ||||||
| 	static std::string internalDispatch(YulArity const& _arity); | 	static std::string internalDispatch(YulArity const& _arity); | ||||||
| 	static std::string implicitConstructor(ContractDefinition const& _contract); | 	static std::string constructor(ContractDefinition const& _contract); | ||||||
| 	static std::string libraryAddressImmutable(); | 	static std::string libraryAddressImmutable(); | ||||||
| 	static std::string constantValueFunction(VariableDeclaration const& _constant); | 	static std::string constantValueFunction(VariableDeclaration const& _constant); | ||||||
| 	static std::string localVariable(VariableDeclaration const& _declaration); | 	static std::string localVariable(VariableDeclaration const& _declaration); | ||||||
|  | |||||||
| @ -137,7 +137,7 @@ string IRGenerator::generate( | |||||||
| 				<?library> | 				<?library> | ||||||
| 				<!library> | 				<!library> | ||||||
| 				<?constructorHasParams> let <constructorParams> := <copyConstructorArguments>() </constructorHasParams> | 				<?constructorHasParams> let <constructorParams> := <copyConstructorArguments>() </constructorHasParams> | ||||||
| 				<implicitConstructor>(<constructorParams>) | 				<constructor>(<constructorParams>) | ||||||
| 				</library> | 				</library> | ||||||
| 				<deploy> | 				<deploy> | ||||||
| 				<functions> | 				<functions> | ||||||
| @ -178,10 +178,10 @@ string IRGenerator::generate( | |||||||
| 	} | 	} | ||||||
| 	t("constructorParams", joinHumanReadable(constructorParams)); | 	t("constructorParams", joinHumanReadable(constructorParams)); | ||||||
| 	t("constructorHasParams", !constructorParams.empty()); | 	t("constructorHasParams", !constructorParams.empty()); | ||||||
| 	t("implicitConstructor", IRNames::implicitConstructor(_contract)); | 	t("constructor", IRNames::constructor(_contract)); | ||||||
| 
 | 
 | ||||||
| 	t("deploy", deployCode(_contract)); | 	t("deploy", deployCode(_contract)); | ||||||
| 	generateImplicitConstructors(_contract); | 	generateConstructors(_contract); | ||||||
| 	set<FunctionDefinition const*> creationFunctionList = generateQueuedFunctions(); | 	set<FunctionDefinition const*> creationFunctionList = generateQueuedFunctions(); | ||||||
| 	InternalDispatchMap internalDispatchMap = generateInternalDispatchFunctions(); | 	InternalDispatchMap internalDispatchMap = generateInternalDispatchFunctions(); | ||||||
| 
 | 
 | ||||||
| @ -710,17 +710,17 @@ string IRGenerator::initStateVariables(ContractDefinition const& _contract) | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| void IRGenerator::generateImplicitConstructors(ContractDefinition const& _contract) | void IRGenerator::generateConstructors(ContractDefinition const& _contract) | ||||||
| { | { | ||||||
| 	auto listAllParams = [&]( | 	auto listAllParams = | ||||||
| 		map<ContractDefinition const*, vector<string>> const& baseParams) -> vector<string> | 		[&](map<ContractDefinition const*, vector<string>> const& baseParams) -> vector<string> | ||||||
| 	{ | 		{ | ||||||
| 		vector<string> params; | 			vector<string> params; | ||||||
| 		for (ContractDefinition const* contract: _contract.annotation().linearizedBaseContracts) | 			for (ContractDefinition const* contract: _contract.annotation().linearizedBaseContracts) | ||||||
| 			if (baseParams.count(contract)) | 				if (baseParams.count(contract)) | ||||||
| 				params += baseParams.at(contract); | 					params += baseParams.at(contract); | ||||||
| 		return params; | 			return params; | ||||||
| 	}; | 		}; | ||||||
| 
 | 
 | ||||||
| 	map<ContractDefinition const*, vector<string>> baseConstructorParams; | 	map<ContractDefinition const*, vector<string>> baseConstructorParams; | ||||||
| 	for (size_t i = 0; i < _contract.annotation().linearizedBaseContracts.size(); ++i) | 	for (size_t i = 0; i < _contract.annotation().linearizedBaseContracts.size(); ++i) | ||||||
| @ -729,7 +729,7 @@ void IRGenerator::generateImplicitConstructors(ContractDefinition const& _contra | |||||||
| 		baseConstructorParams.erase(contract); | 		baseConstructorParams.erase(contract); | ||||||
| 
 | 
 | ||||||
| 		m_context.resetLocalVariables(); | 		m_context.resetLocalVariables(); | ||||||
| 		m_context.functionCollector().createFunction(IRNames::implicitConstructor(*contract), [&]() { | 		m_context.functionCollector().createFunction(IRNames::constructor(*contract), [&]() { | ||||||
| 			Whiskers t(R"( | 			Whiskers t(R"( | ||||||
| 				function <functionName>(<params><comma><baseParams>) { | 				function <functionName>(<params><comma><baseParams>) { | ||||||
| 					<evalBaseArguments> | 					<evalBaseArguments> | ||||||
| @ -746,7 +746,7 @@ void IRGenerator::generateImplicitConstructors(ContractDefinition const& _contra | |||||||
| 			vector<string> baseParams = listAllParams(baseConstructorParams); | 			vector<string> baseParams = listAllParams(baseConstructorParams); | ||||||
| 			t("baseParams", joinHumanReadable(baseParams)); | 			t("baseParams", joinHumanReadable(baseParams)); | ||||||
| 			t("comma", !params.empty() && !baseParams.empty() ? ", " : ""); | 			t("comma", !params.empty() && !baseParams.empty() ? ", " : ""); | ||||||
| 			t("functionName", IRNames::implicitConstructor(*contract)); | 			t("functionName", IRNames::constructor(*contract)); | ||||||
| 			pair<string, map<ContractDefinition const*, vector<string>>> evaluatedArgs = evaluateConstructorArguments(*contract); | 			pair<string, map<ContractDefinition const*, vector<string>>> evaluatedArgs = evaluateConstructorArguments(*contract); | ||||||
| 			baseConstructorParams.insert(evaluatedArgs.second.begin(), evaluatedArgs.second.end()); | 			baseConstructorParams.insert(evaluatedArgs.second.begin(), evaluatedArgs.second.end()); | ||||||
| 			t("evalBaseArguments", evaluatedArgs.first); | 			t("evalBaseArguments", evaluatedArgs.first); | ||||||
| @ -754,7 +754,7 @@ void IRGenerator::generateImplicitConstructors(ContractDefinition const& _contra | |||||||
| 			{ | 			{ | ||||||
| 				t("hasNextConstructor", true); | 				t("hasNextConstructor", true); | ||||||
| 				ContractDefinition const* nextContract = _contract.annotation().linearizedBaseContracts[i + 1]; | 				ContractDefinition const* nextContract = _contract.annotation().linearizedBaseContracts[i + 1]; | ||||||
| 				t("nextConstructor", IRNames::implicitConstructor(*nextContract)); | 				t("nextConstructor", IRNames::constructor(*nextContract)); | ||||||
| 				t("nextParams", joinHumanReadable(listAllParams(baseConstructorParams))); | 				t("nextParams", joinHumanReadable(listAllParams(baseConstructorParams))); | ||||||
| 			} | 			} | ||||||
| 			else | 			else | ||||||
|  | |||||||
| @ -87,10 +87,10 @@ private: | |||||||
| 	/// Generates code that assigns the initial value of the respective type.
 | 	/// Generates code that assigns the initial value of the respective type.
 | ||||||
| 	std::string generateInitialAssignment(VariableDeclaration const& _varDecl); | 	std::string generateInitialAssignment(VariableDeclaration const& _varDecl); | ||||||
| 
 | 
 | ||||||
| 	/// Generates implicit constructors for all contracts in the inheritance hierarchy of
 | 	/// Generates constructors for all contracts in the inheritance hierarchy of
 | ||||||
| 	/// @a _contract
 | 	/// @a _contract
 | ||||||
| 	/// If there are user defined constructors, their body will be included in implicit constructors body.
 | 	/// If there are user defined constructors, their body will be included in the implicit constructor's body.
 | ||||||
| 	void generateImplicitConstructors(ContractDefinition const& _contract); | 	void generateConstructors(ContractDefinition const& _contract); | ||||||
| 
 | 
 | ||||||
| 	/// Evaluates constructor's arguments for all base contracts (listed in inheritance specifiers) of
 | 	/// Evaluates constructor's arguments for all base contracts (listed in inheritance specifiers) of
 | ||||||
| 	/// @a _contract
 | 	/// @a _contract
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user