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(); | ||||
| 	int stackStartHeight = m_assembly.stackHeight(); | ||||
| 
 | ||||
| 	for (auto const& statement: _forLoop.pre.statements) | ||||
| 		boost::apply_visitor(*this, statement); | ||||
| 	visitStatements(_forLoop.pre.statements); | ||||
| 
 | ||||
| 	// TODO: When we implement break and continue, the labels and the stack heights at that point
 | ||||
| 	// 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(); | ||||
| 
 | ||||
| 	int blockStartStackHeight = m_assembly.stackHeight(); | ||||
| 	std::for_each(_block.statements.begin(), _block.statements.end(), boost::apply_visitor(*this)); | ||||
| 	visitStatements(_block.statements); | ||||
| 
 | ||||
| 	finalizeBlock(_block, blockStartStackHeight); | ||||
| 	m_scope = originalScope; | ||||
| @ -426,6 +425,12 @@ void CodeTransform::visitExpression(Statement const& _expression) | ||||
| 	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) | ||||
| { | ||||
| 	m_assembly.setSourceLocation(_block.location); | ||||
|  | ||||
| @ -110,6 +110,8 @@ private: | ||||
| 	/// Generates code for an expression that is supposed to return a single value.
 | ||||
| 	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
 | ||||
| 	/// to @a _blackStartStackHeight.
 | ||||
| 	void finalizeBlock(solidity::assembly::Block const& _block, int _blockStartStackHeight); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user