Added support for until, the inverse of while.

This commit is contained in:
Daniel Ellison 2016-10-26 09:24:01 -04:00
parent f9946ec029
commit 7ac53f5305

View File

@ -472,13 +472,14 @@ void CodeFragment::constructOperation(sp::utree const& _t, CompilerState& _s)
m_asm << end.tag(); m_asm << end.tag();
m_asm.donePaths(); m_asm.donePaths();
} }
else if (us == "WHILE") else if (us == "WHILE" || us == "UNTIL")
{ {
requireSize(2); requireSize(2);
requireDeposit(0, 1); requireDeposit(0, 1);
auto begin = m_asm.append(); auto begin = m_asm.append();
m_asm.append(code[0].m_asm); m_asm.append(code[0].m_asm);
if (us == "WHILE")
m_asm.append(Instruction::ISZERO); m_asm.append(Instruction::ISZERO);
auto end = m_asm.appendJumpI(); auto end = m_asm.appendJumpI();
m_asm.append(code[1].m_asm, 0); m_asm.append(code[1].m_asm, 0);