diff options
author | Daniel Ellison <daniel@syrinx.net> | 2016-10-26 21:24:01 +0800 |
---|---|---|
committer | Daniel Ellison <daniel@syrinx.net> | 2016-10-26 21:24:01 +0800 |
commit | 7ac53f5305d83d3f2a220d30753f82341311392c (patch) | |
tree | 4fb88fd2b4ef9742af9e65000b49a56ca9f45d33 /liblll/CodeFragment.cpp | |
parent | f9946ec029cf14d973d78b31c265c8735ab9eb05 (diff) | |
download | dexon-solidity-7ac53f5305d83d3f2a220d30753f82341311392c.tar.gz dexon-solidity-7ac53f5305d83d3f2a220d30753f82341311392c.tar.zst dexon-solidity-7ac53f5305d83d3f2a220d30753f82341311392c.zip |
Added support for `until`, the inverse of `while`.
Diffstat (limited to 'liblll/CodeFragment.cpp')
-rw-r--r-- | liblll/CodeFragment.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/liblll/CodeFragment.cpp b/liblll/CodeFragment.cpp index eadb0140..e76f4974 100644 --- a/liblll/CodeFragment.cpp +++ b/liblll/CodeFragment.cpp @@ -472,14 +472,15 @@ void CodeFragment::constructOperation(sp::utree const& _t, CompilerState& _s) m_asm << end.tag(); m_asm.donePaths(); } - else if (us == "WHILE") + else if (us == "WHILE" || us == "UNTIL") { requireSize(2); requireDeposit(0, 1); auto begin = m_asm.append(); m_asm.append(code[0].m_asm); - m_asm.append(Instruction::ISZERO); + if (us == "WHILE") + m_asm.append(Instruction::ISZERO); auto end = m_asm.appendJumpI(); m_asm.append(code[1].m_asm, 0); m_asm.appendJump(begin); |