Mercurial > repos > icfp2014
changeset 6:0ab6eb5f0190
Implement not, < and <=
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 25 Jul 2014 11:46:34 -0700 |
parents | 80e224fff567 |
children | afd55b32549b |
files | code/lmc.tp |
diffstat | 1 files changed, 18 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/code/lmc.tp Fri Jul 25 11:04:00 2014 -0700 +++ b/code/lmc.tp Fri Jul 25 11:46:34 2014 -0700 @@ -113,7 +113,19 @@ _opNames ifget: (expr op) :i { prog add: (inst: i #[]) } else: { - error: "operator " . (expr op) . " is not supported" + if: (expr op) = "<" { + prog add: (inst: "CGTE" #[]) + prog add: (inst: "LDC" #[0]) + prog add: (inst: "CEQ" #[]) + } else: { + if: (expr op) = "<=" { + prog add: (inst: "CGT" #[]) + prog add: (inst: "LDC" #[0]) + prog add: (inst: "CEQ" #[]) + } else: { + error: "operator " . (expr op) . " is not supported" + } + } } } @@ -156,6 +168,11 @@ compileExpr: (args value) prog add: (inst: "CDR" #[]) } + _funHandlers set: "not" :args { + compileExpr: (args value) + prog add: (inst: "LDC" #[0]) + prog add: (inst: "CEQ" #[]) + } _exprHandlers set: (ast call) :expr { tc <- (expr tocall)