StandardCompiler: Factor out CompilerStack creation.

This commit is contained in:
Christian Parpart 2021-11-23 15:50:52 +01:00
parent c7cdba8ceb
commit 7f3e3584fc
2 changed files with 22 additions and 6 deletions

View File

@ -1065,12 +1065,15 @@ std::variant<StandardCompiler::InputsAndSettings, Json::Value> StandardCompiler:
return { std::move(ret) }; return { std::move(ret) };
} }
Json::Value StandardCompiler::compileSolidity(StandardCompiler::InputsAndSettings _inputsAndSettings) unique_ptr<CompilerStack> StandardCompiler::createCompilerStack(
ReadCallback::Callback _readFile,
StandardCompiler::InputsAndSettings const& _inputsAndSettings
)
{ {
CompilerStack compilerStack(m_readFile); auto compilerStackPtr = make_unique<CompilerStack>(_readFile);
CompilerStack& compilerStack = *compilerStackPtr;
StringMap sourceList = std::move(_inputsAndSettings.sources); compilerStack.setSources(_inputsAndSettings.sources);
compilerStack.setSources(sourceList);
for (auto const& smtLib2Response: _inputsAndSettings.smtLib2Responses) for (auto const& smtLib2Response: _inputsAndSettings.smtLib2Responses)
compilerStack.addSMTLib2Response(smtLib2Response.first, smtLib2Response.second); compilerStack.addSMTLib2Response(smtLib2Response.first, smtLib2Response.second);
compilerStack.setViaIR(_inputsAndSettings.viaIR); compilerStack.setViaIR(_inputsAndSettings.viaIR);
@ -1091,6 +1094,14 @@ Json::Value StandardCompiler::compileSolidity(StandardCompiler::InputsAndSetting
compilerStack.enableIRGeneration(isIRRequested(_inputsAndSettings.outputSelection)); compilerStack.enableIRGeneration(isIRRequested(_inputsAndSettings.outputSelection));
compilerStack.enableEwasmGeneration(isEwasmRequested(_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); Json::Value errors = std::move(_inputsAndSettings.errors);
bool const binariesRequested = isBinaryRequested(_inputsAndSettings.outputSelection); bool const binariesRequested = isBinaryRequested(_inputsAndSettings.outputSelection);
@ -1294,7 +1305,7 @@ Json::Value StandardCompiler::compileSolidity(StandardCompiler::InputsAndSetting
// EVM // EVM
Json::Value evmData(Json::objectValue); Json::Value evmData(Json::objectValue);
if (compilationSuccess && isArtifactRequested(_inputsAndSettings.outputSelection, file, name, "evm.assembly", wildcardMatchesExperimental)) 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)) if (compilationSuccess && isArtifactRequested(_inputsAndSettings.outputSelection, file, name, "evm.legacyAssembly", wildcardMatchesExperimental))
evmData["legacyAssembly"] = compilerStack.assemblyJSON(contractName); evmData["legacyAssembly"] = compilerStack.assemblyJSON(contractName);
if (isArtifactRequested(_inputsAndSettings.outputSelection, file, name, "evm.methodIdentifiers", wildcardMatchesExperimental)) if (isArtifactRequested(_inputsAndSettings.outputSelection, file, name, "evm.methodIdentifiers", wildcardMatchesExperimental))

View File

@ -67,7 +67,6 @@ public:
std::map<std::string, evmasm::LinkerObject::FunctionDebugData> const& _debugInfo std::map<std::string, evmasm::LinkerObject::FunctionDebugData> const& _debugInfo
); );
private:
struct InputsAndSettings struct InputsAndSettings
{ {
std::string language; std::string language;
@ -89,6 +88,12 @@ private:
bool viaIR = false; bool viaIR = false;
}; };
static std::unique_ptr<CompilerStack> createCompilerStack(
ReadCallback::Callback _readFile,
StandardCompiler::InputsAndSettings const& _inputsAndSettings
);
private:
/// Parses the input json (and potentially invokes the read callback) and either returns /// Parses the input json (and potentially invokes the read callback) and either returns
/// it in condensed form or an error as a json object. /// it in condensed form or an error as a json object.
std::variant<InputsAndSettings, Json::Value> parseInput(Json::Value const& _input); std::variant<InputsAndSettings, Json::Value> parseInput(Json::Value const& _input);