mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #2853 from ethereum/cleanup-asm-stream
Split out the JSON functionality from assembly.stream()
This commit is contained in:
@@ -60,10 +60,14 @@ public:
|
||||
/// @returns Only the runtime object (without constructor).
|
||||
eth::LinkerObject runtimeObject() const { return m_context.assembledRuntimeObject(m_runtimeSub); }
|
||||
/// @arg _sourceCodes is the map of input files to source code strings
|
||||
/// @arg _inJsonFromat shows whether the out should be in Json format
|
||||
Json::Value streamAssembly(std::ostream& _stream, StringMap const& _sourceCodes = StringMap(), bool _inJsonFormat = false) const
|
||||
std::string assemblyString(StringMap const& _sourceCodes = StringMap()) const
|
||||
{
|
||||
return m_context.streamAssembly(_stream, _sourceCodes, _inJsonFormat);
|
||||
return m_context.assemblyString(_sourceCodes);
|
||||
}
|
||||
/// @arg _sourceCodes is the map of input files to source code strings
|
||||
Json::Value assemblyJSON(StringMap const& _sourceCodes = StringMap()) const
|
||||
{
|
||||
return m_context.assemblyJSON(_sourceCodes);
|
||||
}
|
||||
/// @returns Assembly items of the normal compiler context
|
||||
eth::AssemblyItems const& assemblyItems() const { return m_context.assembly().items(); }
|
||||
|
||||
@@ -209,10 +209,15 @@ public:
|
||||
eth::Assembly& nonConstAssembly() { return *m_asm; }
|
||||
|
||||
/// @arg _sourceCodes is the map of input files to source code strings
|
||||
/// @arg _inJsonFormat shows whether the out should be in Json format
|
||||
Json::Value streamAssembly(std::ostream& _stream, StringMap const& _sourceCodes = StringMap(), bool _inJsonFormat = false) const
|
||||
std::string assemblyString(StringMap const& _sourceCodes = StringMap()) const
|
||||
{
|
||||
return m_asm->stream(_stream, "", _sourceCodes, _inJsonFormat);
|
||||
return m_asm->assemblyString(_sourceCodes);
|
||||
}
|
||||
|
||||
/// @arg _sourceCodes is the map of input files to source code strings
|
||||
Json::Value assemblyJSON(StringMap const& _sourceCodes = StringMap()) const
|
||||
{
|
||||
return m_asm->assemblyJSON(_sourceCodes);
|
||||
}
|
||||
|
||||
eth::LinkerObject const& assembledObject() const { return m_asm->assemble(); }
|
||||
|
||||
@@ -91,9 +91,7 @@ MachineAssemblyObject AssemblyStack::assemble(Machine _machine) const
|
||||
eth::Assembly assembly;
|
||||
assembly::CodeGenerator::assemble(*m_parserResult, *m_analysisInfo, assembly);
|
||||
object.bytecode = make_shared<eth::LinkerObject>(assembly.assemble());
|
||||
ostringstream tmp;
|
||||
assembly.stream(tmp);
|
||||
object.assembly = tmp.str();
|
||||
object.assembly = assembly.assemblyString();
|
||||
return object;
|
||||
}
|
||||
case Machine::EVM15:
|
||||
|
||||
@@ -347,16 +347,24 @@ eth::LinkerObject const& CompilerStack::cloneObject(string const& _contractName)
|
||||
return contract(_contractName).cloneObject;
|
||||
}
|
||||
|
||||
Json::Value CompilerStack::streamAssembly(ostream& _outStream, string const& _contractName, StringMap _sourceCodes, bool _inJsonFormat) const
|
||||
/// FIXME: cache this string
|
||||
string CompilerStack::assemblyString(string const& _contractName, StringMap _sourceCodes) const
|
||||
{
|
||||
Contract const& currentContract = contract(_contractName);
|
||||
if (currentContract.compiler)
|
||||
return currentContract.compiler->streamAssembly(_outStream, _sourceCodes, _inJsonFormat);
|
||||
return currentContract.compiler->assemblyString(_sourceCodes);
|
||||
else
|
||||
return string();
|
||||
}
|
||||
|
||||
/// FIXME: cache the JSON
|
||||
Json::Value CompilerStack::assemblyJSON(string const& _contractName, StringMap _sourceCodes) const
|
||||
{
|
||||
Contract const& currentContract = contract(_contractName);
|
||||
if (currentContract.compiler)
|
||||
return currentContract.compiler->assemblyJSON(_sourceCodes);
|
||||
else
|
||||
{
|
||||
_outStream << "Contract not fully implemented" << endl;
|
||||
return Json::Value();
|
||||
}
|
||||
}
|
||||
|
||||
vector<string> CompilerStack::sourceNames() const
|
||||
|
||||
@@ -190,11 +190,15 @@ public:
|
||||
/// if the contract does not (yet) have bytecode.
|
||||
std::string const* runtimeSourceMapping(std::string const& _contractName = "") const;
|
||||
|
||||
/// Streams a verbose version of the assembly to @a _outStream.
|
||||
/// @return a verbose text representation of the assembly.
|
||||
/// @arg _sourceCodes is the map of input files to source code strings
|
||||
/// @arg _inJsonFromat shows whether the out should be in Json format
|
||||
/// Prerequisite: Successful compilation.
|
||||
Json::Value streamAssembly(std::ostream& _outStream, std::string const& _contractName = "", StringMap _sourceCodes = StringMap(), bool _inJsonFormat = false) const;
|
||||
std::string assemblyString(std::string const& _contractName = "", StringMap _sourceCodes = StringMap()) const;
|
||||
|
||||
/// @returns a JSON representation of the assembly.
|
||||
/// @arg _sourceCodes is the map of input files to source code strings
|
||||
/// Prerequisite: Successful compilation.
|
||||
Json::Value assemblyJSON(std::string const& _contractName = "", StringMap _sourceCodes = StringMap()) const;
|
||||
|
||||
/// @returns a JSON representing the contract ABI.
|
||||
/// Prerequisite: Successful call to parse or compile.
|
||||
|
||||
@@ -400,10 +400,8 @@ Json::Value StandardCompiler::compileInternal(Json::Value const& _input)
|
||||
// EVM
|
||||
Json::Value evmData(Json::objectValue);
|
||||
// @TODO: add ir
|
||||
ostringstream tmp;
|
||||
m_compilerStack.streamAssembly(tmp, contractName, createSourceList(_input), false);
|
||||
evmData["assembly"] = tmp.str();
|
||||
evmData["legacyAssembly"] = m_compilerStack.streamAssembly(tmp, contractName, createSourceList(_input), true);
|
||||
evmData["assembly"] = m_compilerStack.assemblyString(contractName, createSourceList(_input));
|
||||
evmData["legacyAssembly"] = m_compilerStack.assemblyJSON(contractName, createSourceList(_input));
|
||||
evmData["methodIdentifiers"] = m_compilerStack.methodIdentifiers(contractName);
|
||||
evmData["gasEstimates"] = m_compilerStack.gasEstimates(contractName);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user