diff options
author | Chouser <chouser@n01se.net> | 2008-11-21 03:38:58 +0000 |
---|---|---|
committer | Chouser <chouser@n01se.net> | 2008-11-21 03:38:58 +0000 |
commit | db11f79e83195bc80eaa49b068c32048964405ce (patch) | |
tree | b764ddc29d9ac98ed2abb1048bfa00d6848a2fef /clojurescript/support-for-clojurescript.patch | |
parent | 67d52e78ce7ebae5583c8dad112bc42fc871562a (diff) |
ClojureScript: first deployment to demo site
Diffstat (limited to 'clojurescript/support-for-clojurescript.patch')
-rw-r--r-- | clojurescript/support-for-clojurescript.patch | 397 |
1 files changed, 397 insertions, 0 deletions
diff --git a/clojurescript/support-for-clojurescript.patch b/clojurescript/support-for-clojurescript.patch new file mode 100644 index 00000000..c8618bf7 --- /dev/null +++ b/clojurescript/support-for-clojurescript.patch @@ -0,0 +1,397 @@ +commit 5b84f0b77a1e1b9cc443c64b66e6fbffaa6f17a4 +Author: Chouser <chouser@n01se.net> +Date: Thu Nov 20 11:03:00 2008 -0500 + + ClojureScript support + +diff --git a/src/clj/clojure/core-print.clj b/src/clj/clojure/core-print.clj +index 05c8abc..0f04558 100644 +--- a/src/clj/clojure/core-print.clj ++++ b/src/clj/clojure/core-print.clj +@@ -75,14 +75,14 @@ + + (defn print-ctor [o print-args #^Writer w] + (.write w "#=(") +- (.write w (.getName #^Class (class o))) ++ (.write w (RT/className (class o))) + (.write w ". ") + (print-args o w) + (.write w ")")) + + (defmethod print-method :default [o, #^Writer w] + (.write w "#<") +- (.write w (.getSimpleName (class o))) ++ (.write w (RT/simpleClassName (class o))) + (.write w " ") + (.write w (str o)) + (.write w ">")) +@@ -153,7 +153,7 @@ + (defmethod print-dup clojure.lang.IPersistentCollection [o, #^Writer w] + (print-meta o w) + (.write w "#=(") +- (.write w (.getName #^Class (class o))) ++ (.write w (RT/className (class o))) + (.write w "/create ") + (print-sequential "[" print-dup " " "]" o w) + (.write w ")")) +@@ -212,7 +212,7 @@ + (defmethod print-dup clojure.lang.IPersistentMap [m, #^Writer w] + (print-meta m w) + (.write w "#=(") +- (.write w (.getName (class m))) ++ (.write w (RT/className (class m))) + (.write w "/create ") + (print-map m print-dup w) + (.write w ")")) +@@ -268,7 +268,7 @@ + Short/TYPE "Short/TYPE"}) + + (defmethod print-method Class [#^Class c, #^Writer w] +- (.write w (.getName c))) ++ (.write w (RT/className c))) + + (defmethod print-dup Class [#^Class c, #^Writer w] + (cond +@@ -278,11 +278,11 @@ + (.write w ")")) + (.isArray c) (do + (.write w "#=(java.lang.Class/forName \"") +- (.write w (.getName c)) ++ (.write w (RT/className c)) + (.write w "\")")) + :else (do + (.write w "#=") +- (.write w (.getName c))))) ++ (.write w (RT/className c))))) + + (defmethod print-method java.math.BigDecimal [b, #^Writer w] + (.write w (str b)) +@@ -317,4 +317,4 @@ + (print-dup (.name n) w) + (.write w ")")) + +-(def #^{:private true} print-initialized true) +\ No newline at end of file ++(def #^{:private true} print-initialized true) +diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj +index 1957f4f..0831fee 100644 +--- a/src/clj/clojure/core.clj ++++ b/src/clj/clojure/core.clj +@@ -319,7 +319,7 @@ + (if more + (recur (. sb (append (str (first more)))) (rest more)) + (str sb))) +- (new StringBuilder #^String (str x)) ys))) ++ (clojure.lang.RT/makeStringBuilder (str x)) ys))) + + + (defn symbol? +@@ -542,7 +542,7 @@ + {:inline (fn [x y] `(. clojure.lang.Numbers (add ~x ~y))) + :inline-arities #{2}} + ([] 0) +- ([x] (cast Number x)) ++ ([x] (clojure.lang.RT/numberCast x)) + ([x y] (. clojure.lang.Numbers (add x y))) + ([x y & more] + (reduce + (+ x y) more))) +@@ -552,7 +552,7 @@ + {:inline (fn [x y] `(. clojure.lang.Numbers (multiply ~x ~y))) + :inline-arities #{2}} + ([] 1) +- ([x] (cast Number x)) ++ ([x] (clojure.lang.RT/numberCast x)) + ([x y] (. clojure.lang.Numbers (multiply x y))) + ([x y & more] + (reduce * (* x y) more))) +@@ -1042,7 +1042,7 @@ + ([state] (new clojure.lang.Agent state)) + ([state validate-fn] (new clojure.lang.Agent state validate-fn))) + +-(defn ! [& args] (throw (new Exception "! is now send. See also send-off"))) ++(defn ! [& args] (throw (clojure.lang.RT/makeException "! is now send. See also send-off"))) + + (defn send + "Dispatch an action to an agent. Returns the agent immediately. +@@ -1363,10 +1363,10 @@ + (defn range + "Returns a lazy seq of nums from start (inclusive) to end + (exclusive), by step, where start defaults to 0 and step to 1." +- ([end] (if (and (> end 0) (< end (. Integer MAX_VALUE))) ++ ([end] (if (and (> end 0) (< end clojure.lang.RT/IntegerMaxValue)) + (new clojure.lang.Range 0 end) + (take end (iterate inc 0)))) +- ([start end] (if (and (< start end) (< end (. Integer MAX_VALUE))) ++ ([start end] (if (and (< start end) (< end clojure.lang.RT/IntegerMaxValue)) + (new clojure.lang.Range start end) + (take (- end start) (iterate inc start)))) + ([start end step] +@@ -1433,7 +1433,7 @@ + ([#^java.util.Comparator comp coll] + (when (and coll (not (zero? (count coll)))) + (let [a (to-array coll)] +- (. java.util.Arrays (sort a comp)) ++ (clojure.lang.RT/sortArray a comp) + (seq a))))) + + (defn sort-by +@@ -1517,7 +1517,7 @@ + occurred." + [& agents] + (when *agent* +- (throw (new Exception "Can't await in agent action"))) ++ (throw (clojure.lang.RT/makeException "Can't await in agent action"))) + (let [latch (new java.util.concurrent.CountDownLatch (count agents)) + count-down (fn [agent] (. latch (countDown)) agent)] + (doseq [agent agents] +@@ -1536,7 +1536,7 @@ + to timeout, non-nil otherwise." + [timeout-ms & agents] + (when *agent* +- (throw (new Exception "Can't await in agent action"))) ++ (throw (clojure.lang.RT/makeException "Can't await in agent action"))) + (let [latch (new java.util.concurrent.CountDownLatch (count agents)) + count-down (fn [agent] (. latch (countDown)) agent)] + (doseq [agent agents] +@@ -1798,6 +1798,7 @@ + + + (import '(java.lang.reflect Array)) ++(import '(clojure.lang RT)) + + (defn alength + "Returns the length of the Java array. Works on arrays of all +@@ -1817,7 +1818,7 @@ + {:inline (fn [a i] `(. clojure.lang.RT (aget ~a ~i))) + :inline-arities #{2}} + ([array idx] +- (clojure.lang.Reflector/prepRet (. Array (get array idx)))) ++ (clojure.lang.Reflector/prepRet (RT/aget array idx))) + ([array idx & idxs] + (apply aget (aget array idx) idxs))) + +@@ -1827,7 +1828,7 @@ + {:inline (fn [a i v] `(. clojure.lang.RT (aset ~a ~i ~v))) + :inline-arities #{3}} + ([array idx val] +- (. Array (set array idx val)) ++ (RT/aset array idx val) + val) + ([array idx idx2 & idxv] + (apply aset (aget array idx) idx2 idxv))) +@@ -1995,6 +1996,10 @@ + "Returns a set of the distinct elements of coll." + [coll] (apply hash-set coll)) + ++(defn class? ++ "Returns true if x is an instance of Class" ++ [x] (instance? Class x)) ++ + (defn #^{:private true} + filter-key [keyfn pred amap] + (loop [ret {} es (seq amap)] +@@ -2027,7 +2032,7 @@ + the-ns [x] + (if (instance? clojure.lang.Namespace x) + x +- (or (find-ns x) (throw (Exception. (str "No namespace: " x " found")))))) ++ (or (find-ns x) (throw (RT/makeException (str "No namespace: " x " found")))))) + + (defn ns-name + "Returns the name of the namespace, a symbol." +@@ -2060,7 +2065,7 @@ + (defn ns-imports + "Returns a map of the import mappings for the namespace." + [ns] +- (filter-key val (partial instance? Class) (ns-map ns))) ++ (filter-key val class? (ns-map ns))) + + (defn refer + "refers to all public vars of ns, subject to filters. +@@ -2078,7 +2083,8 @@ + to a symbol different from the var's name, in order to prevent + clashes. Use :use in the ns macro in preference to calling this directly." + [ns-sym & filters] +- (let [ns (or (find-ns ns-sym) (throw (new Exception (str "No namespace: " ns-sym)))) ++ (let [ns (or (find-ns ns-sym) ++ (throw (RT/makeException (str "No namespace: " ns-sym)))) + fs (apply hash-map filters) + nspublics (ns-publics ns) + rename (or (:rename fs) {}) +@@ -2207,7 +2213,7 @@ + true) + (= firstb :as) (pb ret (second bs) gvec) + :else (if seen-rest? +- (throw (new Exception "Unsupported binding form, only :as can follow & parameter")) ++ (throw (RT/makeException "Unsupported binding form, only :as can follow & parameter")) + (recur (pb ret firstb (list `nth gvec n nil)) + (inc n) + (rest bs) +@@ -2238,7 +2244,7 @@ + (symbol? b) (-> bvec (conj b) (conj v)) + (vector? b) (pvec bvec b v) + (map? b) (pmap bvec b v) +- :else (throw (new Exception (str "Unsupported binding form: " b)))))) ++ :else (throw (RT/makeException (str "Unsupported binding form: " b)))))) + process-entry (fn [bvec b] (pb bvec (key b) (val b)))] + (if (every? symbol? (keys bmap)) + bindings +@@ -2385,7 +2391,7 @@ + StringWriter. Returns the string created by any nested printing + calls." + [& body] +- `(let [s# (new java.io.StringWriter)] ++ `(let [s# (clojure.lang.RT/makeStringWriter)] + (binding [*out* s#] + ~@body + (str s#)))) +@@ -2431,7 +2437,7 @@ + logical true." + [x] + `(when-not ~x +- (throw (new Exception (str "Assert failed: " (pr-str '~x)))))) ++ (throw (clojure.lang.RT/makeException (str "Assert failed: " (pr-str '~x)))))) + + (defn test + "test [v] finds fn at key :test in var metadata and calls it, +@@ -2503,7 +2509,7 @@ + (defn rand + "Returns a random floating point number between 0 (inclusive) and + 1 (exclusive)." +- ([] (. Math (random))) ++ ([] (RT/random)) + ([n] (* n (rand)))) + + (defn rand-int +@@ -2613,7 +2619,7 @@ + "Reads the file named by f into a string and returns it." + [#^String f] + (with-open [r (new java.io.BufferedReader (new java.io.FileReader f))] +- (let [sb (new StringBuilder)] ++ (let [sb (RT/makeStringBuilder)] + (loop [c (. r (read))] + (if (neg? c) + (str sb) +@@ -2897,10 +2903,6 @@ + (send-off agt fill) + (drain)))) + +-(defn class? +- "Returns true if x is an instance of Class" +- [x] (instance? Class x)) +- + (defn alter-var-root + "Atomically alters the root binding of var v by applying f to its + current value plus any args" +@@ -2986,7 +2988,7 @@ + relationships." + ([tag] (descendants global-hierarchy tag)) + ([h tag] (if (class? tag) +- (throw (java.lang.UnsupportedOperationException. "Can't get descendants of classes")) ++ (throw (RT/makeUnsupportedException "Can't get descendants of classes")) + (not-empty (get (:descendants h) tag))))) + + (defn derive +@@ -3013,9 +3015,9 @@ + (or + (when-not (contains? (tp tag) parent) + (when (contains? (ta tag) parent) +- (throw (Exception. (print-str tag "already has" parent "as ancestor")))) ++ (throw (RT/makeException (print-str tag "already has" parent "as ancestor")))) + (when (contains? (ta parent) tag) +- (throw (Exception. (print-str "Cyclic derivation:" parent "has" tag "as ancestor")))) ++ (throw (RT/makeException (print-str "Cyclic derivation:" parent "has" tag "as ancestor")))) + {:parents (assoc (:parents h) tag (conj (get tp tag #{}) parent)) + :ancestors (tf (:ancestors h) tag td parent ta) + :descendants (tf (:descendants h) parent ta tag td)}) +@@ -3145,7 +3147,7 @@ + [pred fmt & args] + (when pred + (let [message (apply format fmt args) +- exception (Exception. message) ++ exception (RT/makeException message) + raw-trace (.getStackTrace exception) + boring? #(not= (.getMethodName %) "doInvoke") + trace (into-array (drop 2 (drop-while boring? raw-trace)))] +diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java +index bbb5aff..d4dc231 100644 +--- a/src/jvm/clojure/lang/Compiler.java ++++ b/src/jvm/clojure/lang/Compiler.java +@@ -201,7 +201,8 @@ static final public Var NEXT_LOCAL_NUM = Var.create(0); + static final public Var RET_LOCAL_NUM = Var.create(); + + //DynamicClassLoader +-static final public Var LOADER = Var.create(); ++static final public Var LOADER = Var.intern(Namespace.findOrCreate(Symbol.create("clojure.core")), ++ Symbol.create("*private-compiler-loader*")); + + public enum C{ + STATEMENT, //value ignored +diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java +index f6139d1..fab9304 100644 +--- a/src/jvm/clojure/lang/RT.java ++++ b/src/jvm/clojure/lang/RT.java +@@ -35,6 +35,8 @@ public class RT{ + static final public Boolean T = Boolean.TRUE;//Keyword.intern(Symbol.create(null, "t")); + static final public Boolean F = Boolean.FALSE;//Keyword.intern(Symbol.create(null, "t")); + ++static final public Integer IntegerMaxValue = Integer.MAX_VALUE; ++ + //simple-symbol->class + final static IPersistentMap DEFAULT_IMPORTS = map( + // Symbol.create("RT"), "clojure.lang.RT", +@@ -1060,6 +1062,10 @@ static public double doubleCast(double x){ + return x; + } + ++static public Number numberCast(Object x){ ++ return (Number)x; ++} ++ + static public IPersistentMap map(Object... init){ + if(init != null && init.length == 2) + return new PersistentArrayMap(init); +@@ -1792,4 +1798,43 @@ static public int alength(Object xs){ + return Array.getLength(xs); + } + ++ ++////////////// ClojureScript support ///////////////////////////////// ++ ++static public StringBuilder makeStringBuilder(){ ++ return new StringBuilder(); ++} ++ ++static public StringBuilder makeStringBuilder(String x){ ++ return new StringBuilder(x); ++} ++ ++static public StringWriter makeStringWriter(){ ++ return new StringWriter(); ++} ++ ++static public Exception makeException(String msg){ ++ return new Exception(msg); ++} ++ ++static public Exception makeUnsupportedException(String msg){ ++ return new UnsupportedOperationException(msg); ++} ++ ++static public void sortArray(Object[] a, Comparator c){ ++ Arrays.sort(a, c); ++} ++ ++static public double random(){ ++ return Math.random(); ++} ++ ++static public String className(Class c){ ++ return c.getName(); ++} ++ ++static public String simpleClassName(Class c){ ++ return c.getSimpleName(); ++} ++ + } |