From bbb80800db531c32b18b15928a383bcc0cedfdb6 Mon Sep 17 00:00:00 2001 From: Danny Yoo Date: Mon, 28 Mar 2011 23:23:08 -0400 Subject: [PATCH] a few more open-coded primitives --- assemble.rkt | 18 +++++++++++++++++- il-structs.rkt | 4 ++++ simulator.rkt | 8 ++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/assemble.rkt b/assemble.rkt index 9c0a388..1cf0537 100644 --- a/assemble.rkt +++ b/assemble.rkt @@ -473,6 +473,14 @@ EOF (unless (> (length rand-vals) 0) (error '= "Expected at least one argument")) (assemble-chain "==" rand-vals)] + [(>) + (unless (> (length rand-vals) 0) + (error '> "Expected at least one argument")) + (assemble-chain ">" rand-vals)] + [(>=) + (unless (> (length rand-vals) 0) + (error '>= "Expected at least one argument")) + (assemble-chain ">=" rand-vals)] [(cons) (unless (= (length rand-vals) 2) (error 'cons "Expected two arguments")) @@ -496,7 +504,15 @@ EOF (unless (= (length rand-vals) 1) (error 'null? "Expected one argument")) (format "(~a === Primitives.null)" - (first rand-vals))]))) + (first rand-vals))] + [(not) + (unless (= (length rand-vals) 1) + (error 'not? "Expected one argument")) + (format "(!~a)" (first rand-vals))] + [(eq?) + (unless (= (length rand-vals) 2) + (error 'eq? "Expected 2 arguments")) + (format "(~a === ~a)" (first rand-vals) (second rand-vals))]))) (: assemble-chain (String (Listof String) -> String)) diff --git a/il-structs.rkt b/il-structs.rkt index 92b65da..b157e42 100644 --- a/il-structs.rkt +++ b/il-structs.rkt @@ -167,11 +167,15 @@ '< '<= '= + '> + '>= 'cons 'car 'cdr 'list 'null? + 'not + 'eq? )) (define-predicate KernelPrimitiveName? KernelPrimitiveName) diff --git a/simulator.rkt b/simulator.rkt index e403d19..392943b 100644 --- a/simulator.rkt +++ b/simulator.rkt @@ -366,6 +366,10 @@ (chain-compare <= (map ensure-real-number rand-vals))] [(=) (chain-compare = (map ensure-real-number rand-vals))] + [(>) + (chain-compare > (map ensure-real-number rand-vals))] + [(>=) + (chain-compare >= (map ensure-real-number rand-vals))] [(cons) (make-MutablePair (first rand-vals) (ensure-list (second rand-vals)))] [(car) @@ -380,6 +384,10 @@ (loop (rest rand-vals)))]))] [(null?) (null? (first rand-vals))] + [(not) + (not (first rand-vals))] + [(eq?) + (eq? (first rand-vals) (second rand-vals))] [else (error 'evaluate-kernel-primitive-procedure-call "missing operator: ~s\n" op)])))