diff options
author | Rich Hickey <richhickey@gmail.com> | 2006-05-03 11:49:53 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2006-05-03 11:49:53 +0000 |
commit | 66a1be8e45bb2aac3efdefa50a028d0851b6c9e8 (patch) | |
tree | a51f39a6c87a0a2edc4736ca11c31a99fdca7294 /src/lisp/clojure.lisp | |
parent | a9576eaea72abbc2ffb144c8e1d249c210622d7d (diff) |
fixed global binding references
Diffstat (limited to 'src/lisp/clojure.lisp')
-rw-r--r-- | src/lisp/clojure.lisp | 26 |
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)))) |