Simplify disambiguator.

This commit is contained in:
chriseth 2017-11-28 15:00:23 +01:00
parent cba58629d2
commit 30d7afc2e3
6 changed files with 19 additions and 34 deletions

View File

@ -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;

View File

@ -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>

View File

@ -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:

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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)