# HG changeset patch # User Michael Pavone # Date 1406313994 25200 # Node ID 0ab6eb5f0190f36325c5bc4f2690d39cf07019a5 # Parent 80e224fff56731cda63002b2b7c6b988d99f855f Implement not, < and <= diff -r 80e224fff567 -r 0ab6eb5f0190 code/lmc.tp --- 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)