From 7f3e3584fca3222111d6f2ed7a719650768bc1e9 Mon Sep 17 00:00:00 2001 From: Christian Parpart Date: Tue, 23 Nov 2021 15:50:52 +0100 Subject: [PATCH] StandardCompiler: Factor out CompilerStack creation. --- libsolidity/interface/StandardCompiler.cpp | 21 ++++++++++++++++----- libsolidity/interface/StandardCompiler.h | 7 ++++++- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/libsolidity/interface/StandardCompiler.cpp b/libsolidity/interface/StandardCompiler.cpp index da28cf29f..177947d86 100644 --- a/libsolidity/interface/StandardCompiler.cpp +++ b/libsolidity/interface/StandardCompiler.cpp @@ -1065,12 +1065,15 @@ std::variant StandardCompiler: return { std::move(ret) }; } -Json::Value StandardCompiler::compileSolidity(StandardCompiler::InputsAndSettings _inputsAndSettings) +unique_ptr StandardCompiler::createCompilerStack( + ReadCallback::Callback _readFile, + StandardCompiler::InputsAndSettings const& _inputsAndSettings +) { - CompilerStack compilerStack(m_readFile); + auto compilerStackPtr = make_unique(_readFile); + CompilerStack& compilerStack = *compilerStackPtr; - StringMap sourceList = std::move(_inputsAndSettings.sources); - compilerStack.setSources(sourceList); + compilerStack.setSources(_inputsAndSettings.sources); for (auto const& smtLib2Response: _inputsAndSettings.smtLib2Responses) compilerStack.addSMTLib2Response(smtLib2Response.first, smtLib2Response.second); compilerStack.setViaIR(_inputsAndSettings.viaIR); @@ -1091,6 +1094,14 @@ Json::Value StandardCompiler::compileSolidity(StandardCompiler::InputsAndSetting compilerStack.enableIRGeneration(isIRRequested(_inputsAndSettings.outputSelection)); compilerStack.enableEwasmGeneration(isEwasmRequested(_inputsAndSettings.outputSelection)); + return compilerStackPtr; +} + +Json::Value StandardCompiler::compileSolidity(StandardCompiler::InputsAndSettings _inputsAndSettings) +{ + auto compilerStackPtr = createCompilerStack(m_readFile, _inputsAndSettings); + auto& compilerStack = *compilerStackPtr; + Json::Value errors = std::move(_inputsAndSettings.errors); bool const binariesRequested = isBinaryRequested(_inputsAndSettings.outputSelection); @@ -1294,7 +1305,7 @@ Json::Value StandardCompiler::compileSolidity(StandardCompiler::InputsAndSetting // EVM Json::Value evmData(Json::objectValue); if (compilationSuccess && isArtifactRequested(_inputsAndSettings.outputSelection, file, name, "evm.assembly", wildcardMatchesExperimental)) - evmData["assembly"] = compilerStack.assemblyString(contractName, sourceList); + evmData["assembly"] = compilerStack.assemblyString(contractName, _inputsAndSettings.sources); if (compilationSuccess && isArtifactRequested(_inputsAndSettings.outputSelection, file, name, "evm.legacyAssembly", wildcardMatchesExperimental)) evmData["legacyAssembly"] = compilerStack.assemblyJSON(contractName); if (isArtifactRequested(_inputsAndSettings.outputSelection, file, name, "evm.methodIdentifiers", wildcardMatchesExperimental)) diff --git a/libsolidity/interface/StandardCompiler.h b/libsolidity/interface/StandardCompiler.h index 679e731a2..502a8d1a9 100644 --- a/libsolidity/interface/StandardCompiler.h +++ b/libsolidity/interface/StandardCompiler.h @@ -67,7 +67,6 @@ public: std::map const& _debugInfo ); -private: struct InputsAndSettings { std::string language; @@ -89,6 +88,12 @@ private: bool viaIR = false; }; + static std::unique_ptr createCompilerStack( + ReadCallback::Callback _readFile, + StandardCompiler::InputsAndSettings const& _inputsAndSettings + ); + +private: /// Parses the input json (and potentially invokes the read callback) and either returns /// it in condensed form or an error as a json object. std::variant parseInput(Json::Value const& _input);