mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Store optimized code if optimizer is activated.
This commit is contained in:
		
							parent
							
								
									3f9f63b829
								
							
						
					
					
						commit
						3b4024c2e1
					
				| @ -29,6 +29,7 @@ | ||||
| #include <libsolidity/interface/Version.h> | ||||
| 
 | ||||
| #include <libyul/AsmParser.h> | ||||
| #include <libyul/AsmPrinter.h> | ||||
| #include <libyul/AsmAnalysis.h> | ||||
| #include <libyul/AsmAnalysisInfo.h> | ||||
| #include <libyul/backends/evm/AsmCodeGen.h> | ||||
| @ -52,9 +53,6 @@ | ||||
| 
 | ||||
| // Change to "define" to output all intermediate code
 | ||||
| #undef SOL_OUTPUT_ASM | ||||
| #ifdef SOL_OUTPUT_ASM | ||||
| #include <libyul/AsmPrinter.h> | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| using namespace std; | ||||
| @ -200,16 +198,15 @@ void CompilerContext::appendYulUtilityFunctions(OptimiserSettings const& _optimi | ||||
| 	string code = m_yulFunctionCollector.requestedFunctions(); | ||||
| 	if (!code.empty()) | ||||
| 	{ | ||||
| 		m_generatedYulUtilityCode = yul::reindent("{\n" + move(code) + "\n}"); | ||||
| 
 | ||||
| 		appendInlineAssembly( | ||||
| 			m_generatedYulUtilityCode, | ||||
| 			yul::reindent("{\n" + move(code) + "\n}"), | ||||
| 			{}, | ||||
| 			m_externallyUsedYulFunctions, | ||||
| 			true, | ||||
| 			_optimiserSettings, | ||||
| 			yulUtilityFileName() | ||||
| 		); | ||||
| 		solAssert(!m_generatedYulUtilityCode.empty(), ""); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| @ -482,6 +479,17 @@ void CompilerContext::appendInlineAssembly( | ||||
| 
 | ||||
| 		optimizeYul(obj, dialect, _optimiserSettings, externallyUsedIdentifiers); | ||||
| 
 | ||||
| 		if (_system) | ||||
| 		{ | ||||
| 			// Store as generated sources, but first re-parse to update the source references.
 | ||||
| 			solAssert(m_generatedYulUtilityCode.empty(), ""); | ||||
| 			m_generatedYulUtilityCode = yul::AsmPrinter(dialect)(*obj.code); | ||||
| 			string code = yul::AsmPrinter{dialect}(*obj.code); | ||||
| 			scanner = make_shared<langutil::Scanner>(langutil::CharStream(m_generatedYulUtilityCode, _sourceName)); | ||||
| 			obj.code = yul::Parser(errorReporter, dialect).parse(scanner, false); | ||||
| 			*obj.analysisInfo = yul::AsmAnalyzer::analyzeStrictAssertCorrect(dialect, obj); | ||||
| 		} | ||||
| 
 | ||||
| 		analysisInfo = std::move(*obj.analysisInfo); | ||||
| 		parserResult = std::move(obj.code); | ||||
| 
 | ||||
| @ -490,6 +498,12 @@ void CompilerContext::appendInlineAssembly( | ||||
| 		cout << yul::AsmPrinter(&dialect)(*parserResult) << endl; | ||||
| #endif | ||||
| 	} | ||||
| 	else if (_system) | ||||
| 	{ | ||||
| 		// Store as generated source.
 | ||||
| 		solAssert(m_generatedYulUtilityCode.empty(), ""); | ||||
| 		m_generatedYulUtilityCode = _assembly; | ||||
| 	} | ||||
| 
 | ||||
| 	if (!errorReporter.errors().empty()) | ||||
| 		reportError("Failed to analyze inline assembly block."); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user