[Yul] Adds break/continue statements and some general tests for for-loop syntax.

This commit is contained in:
Christian Parpart
2019-03-11 15:05:05 +01:00
committed by Christian Parpart
parent 4704ef843d
commit 05e2d362c8
24 changed files with 277 additions and 10 deletions
+23 -1
View File
@@ -105,12 +105,27 @@ void Interpreter::operator()(ForLoop const& _forLoop)
visit(statement);
while (evaluate(*_forLoop.condition) != 0)
{
m_state.loopState = LoopState::Default;
(*this)(_forLoop.body);
if (m_state.loopState == LoopState::Break)
break;
(*this)(_forLoop.post);
}
m_state.loopState = LoopState::Default;
closeScope();
}
void Interpreter::operator()(Break const&)
{
m_state.loopState = LoopState::Break;
}
void Interpreter::operator()(Continue const&)
{
m_state.loopState = LoopState::Continue;
}
void Interpreter::operator()(Block const& _block)
{
openScope();
@@ -122,7 +137,14 @@ void Interpreter::operator()(Block const& _block)
m_functions[funDef.name] = &funDef;
m_scopes.back().insert(funDef.name);
}
ASTWalker::operator()(_block);
for (auto const& statement: _block.statements)
{
visit(statement);
if (m_state.loopState != LoopState::Default)
break;
}
closeScope();
}