mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Helper for visiting statements.
This commit is contained in:
parent
ea0a86a995
commit
ce5ef08e05
@ -345,8 +345,7 @@ void CodeTransform::operator()(ForLoop const& _forLoop)
|
|||||||
m_scope = m_info.scopes.at(&_forLoop.pre).get();
|
m_scope = m_info.scopes.at(&_forLoop.pre).get();
|
||||||
int stackStartHeight = m_assembly.stackHeight();
|
int stackStartHeight = m_assembly.stackHeight();
|
||||||
|
|
||||||
for (auto const& statement: _forLoop.pre.statements)
|
visitStatements(_forLoop.pre.statements);
|
||||||
boost::apply_visitor(*this, statement);
|
|
||||||
|
|
||||||
// TODO: When we implement break and continue, the labels and the stack heights at that point
|
// TODO: When we implement break and continue, the labels and the stack heights at that point
|
||||||
// have to be stored in a stack.
|
// have to be stored in a stack.
|
||||||
@ -382,7 +381,7 @@ void CodeTransform::operator()(Block const& _block)
|
|||||||
m_scope = m_info.scopes.at(&_block).get();
|
m_scope = m_info.scopes.at(&_block).get();
|
||||||
|
|
||||||
int blockStartStackHeight = m_assembly.stackHeight();
|
int blockStartStackHeight = m_assembly.stackHeight();
|
||||||
std::for_each(_block.statements.begin(), _block.statements.end(), boost::apply_visitor(*this));
|
visitStatements(_block.statements);
|
||||||
|
|
||||||
finalizeBlock(_block, blockStartStackHeight);
|
finalizeBlock(_block, blockStartStackHeight);
|
||||||
m_scope = originalScope;
|
m_scope = originalScope;
|
||||||
@ -426,6 +425,12 @@ void CodeTransform::visitExpression(Statement const& _expression)
|
|||||||
expectDeposit(1, height);
|
expectDeposit(1, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CodeTransform::visitStatements(vector<Statement> const& _statements)
|
||||||
|
{
|
||||||
|
for (auto const& statement: _statements)
|
||||||
|
boost::apply_visitor(*this, statement);
|
||||||
|
}
|
||||||
|
|
||||||
void CodeTransform::finalizeBlock(Block const& _block, int blockStartStackHeight)
|
void CodeTransform::finalizeBlock(Block const& _block, int blockStartStackHeight)
|
||||||
{
|
{
|
||||||
m_assembly.setSourceLocation(_block.location);
|
m_assembly.setSourceLocation(_block.location);
|
||||||
|
@ -110,6 +110,8 @@ private:
|
|||||||
/// Generates code for an expression that is supposed to return a single value.
|
/// Generates code for an expression that is supposed to return a single value.
|
||||||
void visitExpression(solidity::assembly::Statement const& _expression);
|
void visitExpression(solidity::assembly::Statement const& _expression);
|
||||||
|
|
||||||
|
void visitStatements(std::vector<solidity::assembly::Statement> const& _statements);
|
||||||
|
|
||||||
/// Pops all variables declared in the block and checks that the stack height is equal
|
/// Pops all variables declared in the block and checks that the stack height is equal
|
||||||
/// to @a _blackStartStackHeight.
|
/// to @a _blackStartStackHeight.
|
||||||
void finalizeBlock(solidity::assembly::Block const& _block, int _blockStartStackHeight);
|
void finalizeBlock(solidity::assembly::Block const& _block, int _blockStartStackHeight);
|
||||||
|
Loading…
Reference in New Issue
Block a user