summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2006-06-20 15:24:55 +0000
committerRich Hickey <richhickey@gmail.com>2006-06-20 15:24:55 +0000
commit9623392e3ead372e86ab399ac174f6c1a8700379 (patch)
tree16cd0b4ef8b4cfcf2466d741d6f2ff16baa53273 /src
parent5d34c73c9fb03d82a65b916af246238aefb6bcb8 (diff)
sync lisp with runtime changes
Diffstat (limited to 'src')
-rw-r--r--src/cli/runtime/Symbol.cs3
-rw-r--r--src/jvm/clojure/lang/Symbol.java2
-rw-r--r--src/lisp/clojure.lisp32
-rw-r--r--src/lisp/lib.lisp2
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))