mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Simplify disambiguator.
This commit is contained in:
parent
cba58629d2
commit
30d7afc2e3
@ -31,11 +31,6 @@ using namespace dev;
|
||||
using namespace dev::julia;
|
||||
|
||||
|
||||
shared_ptr<Block> ASTCopier::run()
|
||||
{
|
||||
return make_shared<Block>(translate(m_block));
|
||||
}
|
||||
|
||||
Statement ASTCopier::operator()(Instruction const& _instruction)
|
||||
{
|
||||
return _instruction;
|
||||
|
@ -27,6 +27,7 @@
|
||||
|
||||
#include <vector>
|
||||
#include <set>
|
||||
#include <memory>
|
||||
|
||||
namespace dev
|
||||
{
|
||||
@ -39,13 +40,6 @@ namespace julia
|
||||
*/
|
||||
class ASTCopier: public boost::static_visitor<Statement>
|
||||
{
|
||||
public:
|
||||
ASTCopier(Block const& _block):
|
||||
m_block(_block)
|
||||
{}
|
||||
|
||||
std::shared_ptr<Block> run();
|
||||
|
||||
public:
|
||||
Statement operator()(Literal const& _literal);
|
||||
Statement operator()(Instruction const& _instruction);
|
||||
@ -78,13 +72,11 @@ protected:
|
||||
Literal translate(Literal const& _literal);
|
||||
TypedName translate(TypedName const& _typedName);
|
||||
|
||||
virtual void enterScope(Block const& _block) = 0;
|
||||
virtual void leaveScope(Block const& _block) = 0;
|
||||
virtual void enterFunction(FunctionDefinition const& _function) = 0;
|
||||
virtual void leaveFunction(FunctionDefinition const& _function) = 0;
|
||||
virtual void enterScope(Block const&) { }
|
||||
virtual void leaveScope(Block const&) { }
|
||||
virtual void enterFunction(FunctionDefinition const&) { }
|
||||
virtual void leaveFunction(FunctionDefinition const&) { }
|
||||
virtual std::string translateIdentifier(std::string const& _name) { return _name; }
|
||||
|
||||
Block const& m_block;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
|
@ -43,10 +43,8 @@ class EVMAssembly;
|
||||
class Disambiguator: public ASTCopier
|
||||
{
|
||||
public:
|
||||
Disambiguator(
|
||||
Block const& _block,
|
||||
solidity::assembly::AsmAnalysisInfo const& _analysisInfo
|
||||
): ASTCopier(_block), m_info(_analysisInfo)
|
||||
Disambiguator(solidity::assembly::AsmAnalysisInfo const& _analysisInfo):
|
||||
m_info(_analysisInfo)
|
||||
{}
|
||||
|
||||
protected:
|
||||
|
@ -55,12 +55,12 @@ pair<shared_ptr<Block>, shared_ptr<assembly::AsmAnalysisInfo>> dev::julia::test:
|
||||
ErrorList errors;
|
||||
ErrorReporter errorReporter(errors);
|
||||
auto scanner = make_shared<Scanner>(CharStream(_source), "");
|
||||
auto parserResult = assembly::Parser(errorReporter, true).parse(scanner);
|
||||
auto parserResult = assembly::Parser(errorReporter, _julia).parse(scanner);
|
||||
if (parserResult)
|
||||
{
|
||||
BOOST_REQUIRE(errorReporter.errors().empty());
|
||||
auto analysisInfo = make_shared<assembly::AsmAnalysisInfo>();
|
||||
assembly::AsmAnalyzer analyzer(*analysisInfo, errorReporter, true);
|
||||
assembly::AsmAnalyzer analyzer(*analysisInfo, errorReporter, _julia);
|
||||
if (analyzer.analyze(*parserResult))
|
||||
{
|
||||
BOOST_REQUIRE(errorReporter.errors().empty());
|
||||
@ -74,14 +74,13 @@ pair<shared_ptr<Block>, shared_ptr<assembly::AsmAnalysisInfo>> dev::julia::test:
|
||||
return {};
|
||||
}
|
||||
|
||||
shared_ptr<assembly::Block> dev::julia::test::disambiguate(string const& _source)
|
||||
assembly::Block dev::julia::test::disambiguate(string const& _source, bool _julia)
|
||||
{
|
||||
auto result = parse(_source);
|
||||
Disambiguator disambiguator(*result.first, *result.second);
|
||||
return disambiguator.run();
|
||||
auto result = parse(_source, _julia);
|
||||
return boost::get<Block>(Disambiguator(*result.second)(*result.first));
|
||||
}
|
||||
|
||||
string dev::julia::test::format(string const& _source)
|
||||
string dev::julia::test::format(string const& _source, bool _julia)
|
||||
{
|
||||
return assembly::AsmPrinter(_julia)(*parse(_source, _julia).first);
|
||||
}
|
||||
|
@ -45,9 +45,10 @@ namespace test
|
||||
{
|
||||
|
||||
void printErrors(solidity::ErrorList const& _errors, solidity::Scanner const& _scanner);
|
||||
std::pair<std::shared_ptr<solidity::assembly::Block>, std::shared_ptr<solidity::assembly::AsmAnalysisInfo>> parse(std::string const& _source);
|
||||
std::shared_ptr<solidity::assembly::Block> disambiguate(std::string const& _source);
|
||||
std::string format(std::string const& _source);
|
||||
std::pair<std::shared_ptr<solidity::assembly::Block>, std::shared_ptr<solidity::assembly::AsmAnalysisInfo>>
|
||||
parse(std::string const& _source, bool _julia = true);
|
||||
solidity::assembly::Block disambiguate(std::string const& _source, bool _julia = true);
|
||||
std::string format(std::string const& _source, bool _julia = true);
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -33,9 +33,9 @@ using namespace dev::solidity;
|
||||
do\
|
||||
{\
|
||||
assembly::AsmPrinter p(true);\
|
||||
string result = p(*disambiguate(_original));\
|
||||
string result = p(disambiguate(_original));\
|
||||
BOOST_CHECK_EQUAL(result, format(_expectation));\
|
||||
BOOST_CHECK_EQUAL(result, p(*disambiguate(result)));\
|
||||
BOOST_CHECK_EQUAL(result, p(disambiguate(result)));\
|
||||
}\
|
||||
while(false)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user