diff options
author | Rich Hickey <richhickey@gmail.com> | 2006-06-20 15:24:55 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2006-06-20 15:24:55 +0000 |
commit | 9623392e3ead372e86ab399ac174f6c1a8700379 (patch) | |
tree | 16cd0b4ef8b4cfcf2466d741d6f2ff16baa53273 /src | |
parent | 5d34c73c9fb03d82a65b916af246238aefb6bcb8 (diff) |
sync lisp with runtime changes
Diffstat (limited to 'src')
-rw-r--r-- | src/cli/runtime/Symbol.cs | 3 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Symbol.java | 2 | ||||
-rw-r--r-- | src/lisp/clojure.lisp | 32 | ||||
-rw-r--r-- | src/lisp/lib.lisp | 2 |
4 files changed, 22 insertions, 17 deletions
diff --git a/src/cli/runtime/Symbol.cs b/src/cli/runtime/Symbol.cs index 2ee91a91..bd79336b 100644 --- a/src/cli/runtime/Symbol.cs +++ b/src/cli/runtime/Symbol.cs @@ -33,7 +33,8 @@ override public String ToString() public static Symbol intern(String name)
{
lock(table)
{
Symbol sym = (Symbol) table[name];
if(sym == null)
{
if(name[0] == ':')
sym = new Keyword(name);
else if (name[0] == '.')
sym = new Accessor(name);
- else
sym = new Symbol(name);
table.Add(name, sym);
}
return sym;
}
} + else
sym = new Symbol(name);
if(table[name] != null) //defend against recursive static init
+ return (Symbol)table[name];
table.Add(name, sym);
}
return sym;
}
} /** * Used by Namespace.intern() * @param name diff --git a/src/jvm/clojure/lang/Symbol.java b/src/jvm/clojure/lang/Symbol.java index bfdd007d..cd460c87 100644 --- a/src/jvm/clojure/lang/Symbol.java +++ b/src/jvm/clojure/lang/Symbol.java @@ -43,6 +43,8 @@ public static Symbol intern(String name) sym = new Accessor(name); else sym = new Symbol(name); + if(table.get(name) != null) //defend against recursive static init + return (Symbol) table.get(name); table.put(name, sym); } return sym; diff --git a/src/lisp/clojure.lisp b/src/lisp/clojure.lisp index d779f0eb..03308feb 100644 --- a/src/lisp/clojure.lisp +++ b/src/lisp/clojure.lisp @@ -206,7 +206,7 @@ (format target "/* Generated by Clojure */~2%") (format target (package-open-format-string) package-name) (format target (system-import-string)) - (format target (package-import-format-string) "org.clojure.runtime") + (format target (package-import-format-string) "clojure.lang") (format target "public class ~A{~%" class-name) (unwind-protect (dolist (file files) @@ -612,13 +612,13 @@ (ccase (@ :type name) ((:keyword :accessor) (emit :expression name) - (format t ".invoke(__tld, ") + (format t ".invoke(") (emit :expression (first (@ :args expr))) (format t ", ") (emit :expression val) (format t ")")) (:global-binding - (format t "~A.setfn.invoke(__tld, " (var-member-name (@ :symbol name))) + (format t "~A.setfn.invoke(" (var-member-name (@ :symbol name))) (emit :expression val) (format t "~{, ~A~}" (mapcar (lambda (e) @@ -632,7 +632,7 @@ (format t " = ") (emit :expression val)) (:global-binding - (format t "~A.setValue(__tld, " (var-member-name (@ :symbol target))) + (format t "~A.setValue(" (var-member-name (@ :symbol target))) (emit :expression val) (format t ")")) (:host-symbol @@ -816,14 +816,14 @@ (format t ")")) (unless static-method? (format t ".invoke")) - (format t "(__tld") + (format t "(") (when static-method? (let ((closes (@ :closes (first (@ :methods (@ :fn fexpr)))))) - (format t "~{, ~A~}" + (format t "~{~A~^, ~}" (mapcar (lambda (b) (binding-name b)) closes)))) - (format t "~{, ~A~}" + (format t "~{~A~^, ~}" (mapcar (lambda (e) (emit-to-string (emit :expression e))) @@ -843,7 +843,7 @@ (:return (emit-return expr)) ((:expression :return) - (format t "~A.getValue(__tld)" (var-member-name (@ :symbol expr)))) + (format t "~A.getValue()" (var-member-name (@ :symbol expr)))) (:fn (format t "~A.fn" (var-member-name (@ :symbol expr)))) (:statement))) @@ -1023,13 +1023,13 @@ (body (@ :body expr))) (format t "try {~%") (dolist (bi binding-inits) - (format t "~A.pushDynamicBinding(__tld, " (var-member-name (@ :symbol (@ :binding bi)))) + (format t "~A.pushDynamicBinding(" (var-member-name (@ :symbol (@ :binding bi)))) (emit :expression (@ :init bi)) (format t ");~%")) (emit-body context body) (format t "}~%finally {~%") (dolist (bi binding-inits) - (format t "~A.popDynamicBinding(__tld);~%" (var-member-name (@ :symbol (@ :binding bi))))) + (format t "~A.popDynamicBinding();~%" (var-member-name (@ :symbol (@ :binding bi))))) (format t "}~%"))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; block ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -1144,7 +1144,7 @@ (defun emit-main (context expr) (ccase context (:top - (format t "static public void ~A(String[] args){~%try{~%~A.fn.invoke(ThreadLocalData.get(),args);~%}~%catch(Exception ex){}~%}~%" + (format t "static public void ~A(String[] args){~%try{~%~A.fn.invoke(args);~%}~%catch(Exception ex){}~%}~%" (main-string) (var-member-name (@ :fname expr)))))) (defun main-string () @@ -1358,7 +1358,7 @@ ;params (let ((rest (@ :rest m))) - (format t "ThreadLocalData __tld~{, ~A ~A~@[~A~]~}" + (format t "~{~A ~A~@[~A~]~^, ~}" (mapcan (lambda (b) (list (binding-type-decl b) @@ -1367,15 +1367,17 @@ "__arg"))) (@ :reqs m))) (when rest - (format t ", Cons ~A~@[~A~]" + (when (@ :reqs m) + (format t ", ")) + (format t "ISeq ~A~@[~A~]" (binding-name rest) (when (needs-box rest) "__arg")))) (format t ") ~A ~%{~%" (exception-declaration-string)) ;tls - (when (@ :needs-tls m) - (format t "if(__tld == null) __tld = ThreadLocalData.get();~%")) + ;(when (@ :needs-tls m) + ; (format t "if(__tld == null) __tld = ThreadLocalData.get();~%")) ;parameter binding declarations,if needed ;reqs diff --git a/src/lisp/lib.lisp b/src/lisp/lib.lisp index 92b8c47e..fecc0bfc 100644 --- a/src/lisp/lib.lisp +++ b/src/lisp/lib.lisp @@ -9,7 +9,7 @@ ; **/ (in-module "clojure") -(import "org.clojure.runtime" '(Num RT IntegerNum Cons)) +(import "clojure.lang" '(Num RT IntegerNum Cons)) #+:JVM(import "java.lang" '(System)) #+:CLI(import "System" '(Console)) |