mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #5186 from ethereum/renameBreaker
Rename ExpressionBreaker to ExpressionSplitter.
This commit is contained in:
commit
dd4acda73a
@ -19,7 +19,7 @@
|
|||||||
* declarations.
|
* declarations.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <libjulia/optimiser/ExpressionBreaker.h>
|
#include <libjulia/optimiser/ExpressionSplitter.h>
|
||||||
|
|
||||||
#include <libjulia/optimiser/ASTWalker.h>
|
#include <libjulia/optimiser/ASTWalker.h>
|
||||||
|
|
||||||
@ -34,25 +34,25 @@ using namespace dev;
|
|||||||
using namespace dev::julia;
|
using namespace dev::julia;
|
||||||
using namespace dev::solidity;
|
using namespace dev::solidity;
|
||||||
|
|
||||||
void ExpressionBreaker::operator()(FunctionalInstruction& _instruction)
|
void ExpressionSplitter::operator()(FunctionalInstruction& _instruction)
|
||||||
{
|
{
|
||||||
for (auto& arg: _instruction.arguments | boost::adaptors::reversed)
|
for (auto& arg: _instruction.arguments | boost::adaptors::reversed)
|
||||||
outlineExpression(arg);
|
outlineExpression(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExpressionBreaker::operator()(FunctionCall& _funCall)
|
void ExpressionSplitter::operator()(FunctionCall& _funCall)
|
||||||
{
|
{
|
||||||
for (auto& arg: _funCall.arguments | boost::adaptors::reversed)
|
for (auto& arg: _funCall.arguments | boost::adaptors::reversed)
|
||||||
outlineExpression(arg);
|
outlineExpression(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExpressionBreaker::operator()(If& _if)
|
void ExpressionSplitter::operator()(If& _if)
|
||||||
{
|
{
|
||||||
outlineExpression(*_if.condition);
|
outlineExpression(*_if.condition);
|
||||||
(*this)(_if.body);
|
(*this)(_if.body);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExpressionBreaker::operator()(Switch& _switch)
|
void ExpressionSplitter::operator()(Switch& _switch)
|
||||||
{
|
{
|
||||||
outlineExpression(*_switch.expression);
|
outlineExpression(*_switch.expression);
|
||||||
for (auto& _case: _switch.cases)
|
for (auto& _case: _switch.cases)
|
||||||
@ -60,7 +60,7 @@ void ExpressionBreaker::operator()(Switch& _switch)
|
|||||||
(*this)(_case.body);
|
(*this)(_case.body);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExpressionBreaker::operator()(ForLoop& _loop)
|
void ExpressionSplitter::operator()(ForLoop& _loop)
|
||||||
{
|
{
|
||||||
(*this)(_loop.pre);
|
(*this)(_loop.pre);
|
||||||
// Do not visit the condition because we cannot break expressions there.
|
// Do not visit the condition because we cannot break expressions there.
|
||||||
@ -68,7 +68,7 @@ void ExpressionBreaker::operator()(ForLoop& _loop)
|
|||||||
(*this)(_loop.body);
|
(*this)(_loop.body);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExpressionBreaker::operator()(Block& _block)
|
void ExpressionSplitter::operator()(Block& _block)
|
||||||
{
|
{
|
||||||
vector<Statement> saved;
|
vector<Statement> saved;
|
||||||
swap(saved, m_statementsToPrefix);
|
swap(saved, m_statementsToPrefix);
|
||||||
@ -87,7 +87,7 @@ void ExpressionBreaker::operator()(Block& _block)
|
|||||||
swap(saved, m_statementsToPrefix);
|
swap(saved, m_statementsToPrefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExpressionBreaker::outlineExpression(Expression& _expr)
|
void ExpressionSplitter::outlineExpression(Expression& _expr)
|
||||||
{
|
{
|
||||||
if (_expr.type() != typeid(FunctionalInstruction) && _expr.type() != typeid(FunctionCall))
|
if (_expr.type() != typeid(FunctionalInstruction) && _expr.type() != typeid(FunctionCall))
|
||||||
return;
|
return;
|
@ -56,10 +56,10 @@ class NameCollector;
|
|||||||
* function calls can only appear in the right-hand side of a variable declaration,
|
* function calls can only appear in the right-hand side of a variable declaration,
|
||||||
* assignments or expression statements and all arguments have to be constants or variables.
|
* assignments or expression statements and all arguments have to be constants or variables.
|
||||||
*/
|
*/
|
||||||
class ExpressionBreaker: public ASTModifier
|
class ExpressionSplitter: public ASTModifier
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit ExpressionBreaker(NameDispenser& _nameDispenser):
|
explicit ExpressionSplitter(NameDispenser& _nameDispenser):
|
||||||
m_nameDispenser(_nameDispenser)
|
m_nameDispenser(_nameDispenser)
|
||||||
{ }
|
{ }
|
||||||
|
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
#include <test/libjulia/Common.h>
|
#include <test/libjulia/Common.h>
|
||||||
|
|
||||||
#include <libjulia/optimiser/ExpressionBreaker.h>
|
#include <libjulia/optimiser/ExpressionSplitter.h>
|
||||||
#include <libjulia/optimiser/NameCollector.h>
|
#include <libjulia/optimiser/NameCollector.h>
|
||||||
|
|
||||||
#include <libsolidity/inlineasm/AsmPrinter.h>
|
#include <libsolidity/inlineasm/AsmPrinter.h>
|
||||||
@ -43,12 +43,12 @@ do\
|
|||||||
auto result = parse(_original, false);\
|
auto result = parse(_original, false);\
|
||||||
NameDispenser nameDispenser;\
|
NameDispenser nameDispenser;\
|
||||||
nameDispenser.m_usedNames = NameCollector(*result.first).names();\
|
nameDispenser.m_usedNames = NameCollector(*result.first).names();\
|
||||||
ExpressionBreaker{nameDispenser}(*result.first);\
|
ExpressionSplitter{nameDispenser}(*result.first);\
|
||||||
BOOST_CHECK_EQUAL(assembly::AsmPrinter{}(*result.first), format(_expectation, false));\
|
BOOST_CHECK_EQUAL(assembly::AsmPrinter{}(*result.first), format(_expectation, false));\
|
||||||
}\
|
}\
|
||||||
while(false)
|
while(false)
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE(YulExpressionBreaker)
|
BOOST_AUTO_TEST_SUITE(YulExpressionSplitter)
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(smoke_test)
|
BOOST_AUTO_TEST_CASE(smoke_test)
|
||||||
{
|
{
|
Loading…
Reference in New Issue
Block a user