summaryrefslogtreecommitdiff
path: root/src/lisp/clojure.lisp
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2006-05-03 11:49:53 +0000
committerRich Hickey <richhickey@gmail.com>2006-05-03 11:49:53 +0000
commit66a1be8e45bb2aac3efdefa50a028d0851b6c9e8 (patch)
treea51f39a6c87a0a2edc4736ca11c31a99fdca7294 /src/lisp/clojure.lisp
parenta9576eaea72abbc2ffb144c8e1d249c210622d7d (diff)
fixed global binding references
Diffstat (limited to 'src/lisp/clojure.lisp')
-rw-r--r--src/lisp/clojure.lisp26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/lisp/clojure.lisp b/src/lisp/clojure.lisp
index 31b31c7c..73b295f2 100644
--- a/src/lisp/clojure.lisp
+++ b/src/lisp/clojure.lisp
@@ -471,8 +471,7 @@
(emit :expression val)
(format t ")"))
(:global-binding
- (emit :expression name)
- (format t ".setfn.invoke(__tld, ")
+ (format t "~A.setfn.invoke(__tld, " (var-member-name (@ :symbol name)))
(emit :expression val)
(format t "~{, ~A~}"
(mapcar (lambda (e)
@@ -486,8 +485,7 @@
(format t " = ")
(emit :expression val))
(:global-binding
- (emit :expression target)
- (format t ".setValue(__tld, ")
+ (format t "~A.setValue(__tld, " (var-member-name (@ :symbol target)))
(emit :expression val)
(format t ")"))))))
(when (member context '(:expression :fn))
@@ -647,11 +645,9 @@
(args (@ :args expr)))
(when (not (or global-binding? static-method?))
(format t "((IFn)"))
- (emit :expression fexpr)
- (if global-binding?
- (format t ".fn")
- (unless static-method?
- (format t ")")))
+ (emit :fn fexpr)
+ (when (not (or global-binding? static-method?))
+ (format t ")"))
(unless static-method?
(format t ".invoke"))
(format t "(__tld")
@@ -677,8 +673,14 @@
(defun emit-global-binding (context expr)
- (declare (ignore context))
- (format t "~A" (var-member-name (@ :symbol expr))))
+ (ccase context
+ (:return
+ (emit-return expr))
+ ((:expression :return)
+ (format t "~A.getValue(__tld)" (var-member-name (@ :symbol expr))))
+ (:fn
+ (format t "~A.fn" (var-member-name (@ :symbol expr))))
+ (:statement)))
(defun emit-accessor (context expr)
(declare (ignore context))
@@ -698,7 +700,7 @@
(defun emit-binding (context expr)
(ccase context
(:statement) ;var statement is a no-op
- (:expression
+ ((:expression :fn)
(if (and (@ :anonymous-fn? expr) (not (will-be-static-method expr)))
(emit-new-closure-instance expr)
(format t "~A~:[~;.val~]" (binding-name expr) (needs-box expr))))