diff options
-rw-r--r-- | apps/arith.mu | 56 |
1 files changed, 31 insertions, 25 deletions
diff --git a/apps/arith.mu b/apps/arith.mu index 54ceffd0..18e572e4 100644 --- a/apps/arith.mu +++ b/apps/arith.mu @@ -20,38 +20,44 @@ fn main -> exit-status/ebx: int { } fn simplify -> result/eax: int, look/esi: byte { + # prime the pump look <- get-char # prime the pump - # first arg look <- skip-spaces look result, look <- num look - # operator - var op/ecx: byte <- copy 0 - look <- skip-spaces look - op, look <- operator look - # second arg - var second/edx: int <- copy 0 - look <- skip-spaces look - { - var tmp/eax: int <- copy 0 - tmp, look <- num look - second <- copy tmp - } - # perform op - $simplify:perform-op: { + $simplify:loop: { + # operator + var op/ecx: byte <- copy 0 + look <- skip-spaces look + compare look, 0 + break-if-= + compare look, 0xa + break-if-= + op, look <- operator look + # second arg + var second/edx: int <- copy 0 + look <- skip-spaces look { - compare op, 0x2b # '+' - break-if-!= - result <- add second - break $simplify:perform-op + var tmp/eax: int <- copy 0 + tmp, look <- num look + second <- copy tmp } - { - compare op, 0x2d # '-' - break-if-!= - result <- subtract second - break $simplify:perform-op + # perform op + $simplify:perform-op: { + { + compare op, 0x2b # '+' + break-if-!= + result <- add second + break $simplify:perform-op + } + { + compare op, 0x2d # '-' + break-if-!= + result <- subtract second + break $simplify:perform-op + } } + loop } - # trailing spaces look <- skip-spaces look } |