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)