mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
[yul-phaser] Printing and JSON conversion for the Program class
This commit is contained in:
parent
2aa42b32e5
commit
3baa191b94
@ -25,7 +25,9 @@
|
|||||||
|
|
||||||
#include <libyul/AsmAnalysis.h>
|
#include <libyul/AsmAnalysis.h>
|
||||||
#include <libyul/AsmAnalysisInfo.h>
|
#include <libyul/AsmAnalysisInfo.h>
|
||||||
|
#include <libyul/AsmJsonConverter.h>
|
||||||
#include <libyul/AsmParser.h>
|
#include <libyul/AsmParser.h>
|
||||||
|
#include <libyul/AsmPrinter.h>
|
||||||
#include <libyul/YulString.h>
|
#include <libyul/YulString.h>
|
||||||
#include <libyul/backends/evm/EVMDialect.h>
|
#include <libyul/backends/evm/EVMDialect.h>
|
||||||
#include <libyul/optimiser/Disambiguator.h>
|
#include <libyul/optimiser/Disambiguator.h>
|
||||||
@ -33,10 +35,10 @@
|
|||||||
#include <libyul/optimiser/FunctionGrouper.h>
|
#include <libyul/optimiser/FunctionGrouper.h>
|
||||||
#include <libyul/optimiser/FunctionHoister.h>
|
#include <libyul/optimiser/FunctionHoister.h>
|
||||||
#include <libyul/optimiser/Metrics.h>
|
#include <libyul/optimiser/Metrics.h>
|
||||||
|
|
||||||
#include <libyul/optimiser/Suite.h>
|
#include <libyul/optimiser/Suite.h>
|
||||||
|
|
||||||
#include <libsolutil/CommonIO.h>
|
#include <libsolutil/CommonIO.h>
|
||||||
|
#include <libsolutil/JSON.h>
|
||||||
|
|
||||||
#include <boost/filesystem.hpp>
|
#include <boost/filesystem.hpp>
|
||||||
|
|
||||||
@ -50,6 +52,13 @@ using namespace solidity::yul;
|
|||||||
using namespace solidity::util;
|
using namespace solidity::util;
|
||||||
using namespace solidity::phaser;
|
using namespace solidity::phaser;
|
||||||
|
|
||||||
|
namespace solidity::phaser
|
||||||
|
{
|
||||||
|
|
||||||
|
ostream& operator<<(ostream& _stream, Program const& _program);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
set<YulString> const Program::s_externallyUsedIdentifiers = {};
|
set<YulString> const Program::s_externallyUsedIdentifiers = {};
|
||||||
|
|
||||||
Program Program::load(string const& _sourcePath)
|
Program Program::load(string const& _sourcePath)
|
||||||
@ -76,6 +85,17 @@ void Program::optimise(vector<string> const& _optimisationSteps)
|
|||||||
applyOptimisationSteps(m_optimiserStepContext, *m_ast, _optimisationSteps);
|
applyOptimisationSteps(m_optimiserStepContext, *m_ast, _optimisationSteps);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ostream& phaser::operator<<(ostream& _stream, Program const& _program)
|
||||||
|
{
|
||||||
|
return _stream << AsmPrinter()(*_program.m_ast);
|
||||||
|
}
|
||||||
|
|
||||||
|
string Program::toJson() const
|
||||||
|
{
|
||||||
|
Json::Value serializedAst = AsmJsonConverter(0)(*m_ast);
|
||||||
|
return jsonPrettyPrint(serializedAst);
|
||||||
|
}
|
||||||
|
|
||||||
CharStream Program::loadSource(string const& _sourcePath)
|
CharStream Program::loadSource(string const& _sourcePath)
|
||||||
{
|
{
|
||||||
assertThrow(boost::filesystem::exists(_sourcePath), InvalidProgram, "Source file does not exist");
|
assertThrow(boost::filesystem::exists(_sourcePath), InvalidProgram, "Source file does not exist");
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include <boost/noncopyable.hpp>
|
#include <boost/noncopyable.hpp>
|
||||||
|
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
#include <ostream>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@ -73,6 +74,9 @@ public:
|
|||||||
size_t codeSize() const { return computeCodeSize(*m_ast); }
|
size_t codeSize() const { return computeCodeSize(*m_ast); }
|
||||||
yul::Block const& ast() const { return *m_ast; }
|
yul::Block const& ast() const { return *m_ast; }
|
||||||
|
|
||||||
|
friend std::ostream& operator<<(std::ostream& _stream, Program const& _program);
|
||||||
|
std::string toJson() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Program(
|
Program(
|
||||||
yul::Dialect const& _dialect,
|
yul::Dialect const& _dialect,
|
||||||
|
Loading…
Reference in New Issue
Block a user