summaryrefslogtreecommitdiff
path: root/src/lisp/clojure.lisp
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2006-05-11 21:41:21 +0000
committerRich Hickey <richhickey@gmail.com>2006-05-11 21:41:21 +0000
commit9f7e2632e8c9d13a5bff7d028cad692e34466032 (patch)
tree2db9f07025563bc6bb0a141f5ffc78a3c5e33b6a /src/lisp/clojure.lisp
parente852658ec0afc4b0ec4ba2c711e5174dee7e3024 (diff)
starting library support
Diffstat (limited to 'src/lisp/clojure.lisp')
-rw-r--r--src/lisp/clojure.lisp26
1 files changed, 23 insertions, 3 deletions
diff --git a/src/lisp/clojure.lisp b/src/lisp/clojure.lisp
index 0281938b..10bbd898 100644
--- a/src/lisp/clojure.lisp
+++ b/src/lisp/clojure.lisp
@@ -52,11 +52,11 @@
(let ((*clojure-source-path* #p"/dev/clojure/src/lisp/")
(*clojure-target-path* #p"/dev/clojure/classes/"))
(compile-to :jvm "org.clojure" "Clojure"
- "test.lisp"))
+ "lib.lisp"))
(let ((*clojure-source-path* #p"/dev/clojure/src/lisp/")
(*clojure-target-path* #p"/dev/clojure/classes/test/"))
(compile-to :cli "org.clojure" "Clojure"
- "test.lisp"))
+ "lib.lisp"))
;build the library
(let ((*clojure-source-path* #p"/dev/clojure/")
(*clojure-target-path* #p"/dev/gen/clojure/"))
@@ -343,6 +343,17 @@
(defmacro |unless| (test &rest result)
`(|if| ,test nil (|block| ,@result)))
+(defmacro |cond| (&rest args)
+ (if (null args)
+ nil
+ (let ((clause (first args)))
+ (if (rest clause)
+ `(|if| ,(first clause)
+ (|block| ,@(rest clause))
+ (|cond| ,@(rest args)))
+ `(|or| ,(first clause)
+ (|cond| ,@(rest args)))))))
+
(defun pairize (lst)
(if (null lst)
nil
@@ -384,6 +395,15 @@
+(defmacro |defcomparator| (op prim)
+ `(|defn*| ,op
+ ((x) t)
+ ((x y)
+ (,prim x y))
+ ((x y & rest)
+ (|and| (,prim x y)
+ (|apply| ,op y rest)))))
+
;(defmacro |block| (&body body)
; `(|let| nil ,@body))
@@ -795,7 +815,7 @@
(format t ";~%"))
(:return
(emit-return expr))
- (:expression
+ ((:expression :fn)
(let* ((fexpr (@ :fexpr expr))
(global-binding? (eql :global-binding (@ :type fexpr)))
(host-symbol? (eql :host-symbol (@ :type fexpr)))