aboutsummaryrefslogtreecommitdiff
path: root/clojurescript/tojs.clj
diff options
context:
space:
mode:
Diffstat (limited to 'clojurescript/tojs.clj')
-rw-r--r--clojurescript/tojs.clj17
1 files changed, 13 insertions, 4 deletions
diff --git a/clojurescript/tojs.clj b/clojurescript/tojs.clj
index 4159a9ea..20dcdb85 100644
--- a/clojurescript/tojs.clj
+++ b/clojurescript/tojs.clj
@@ -27,12 +27,14 @@
[(tojs (.body fm)
(merge-with merge ctx {:localmap lm}))
*has-recur*])
+ mparm (into {} (for [p (.reqParms maxm)] [(.idx p) p]))
inits (concat
(when has-recur ["_cnt" "_rtn"])
(vals (reduce dissoc lm (cons thisfn (.reqParms fm))))
(when (:fnname ctx) [(str (lm thisfn) "=arguments.callee")])
(when (not= fm maxm)
- (for [lb (.reqParms fm) :when (not= (.name lb) (.name (nth (.reqParms maxm) (dec (.idx lb)))))]
+ (for [lb (.reqParms fm)
+ :when (not= (.name lb) (.name (mparm (.idx lb))))]
[(lm lb) "=arguments[" (dec (.idx lb)) "]"]))
(when-let lb (.restParm fm)
[(str (lm lb) "=clojure.JS.rest_args(this,arguments,"
@@ -111,8 +113,13 @@
(defmethod tojs clojure.lang.Compiler$ConstantExpr [e ctx]
(const-str (.v e)))
+(def js-reserved '#{import boolean short byte char})
+
(defn var-munge [x]
- (-> x str Compiler/munge (.replace "." "_DOT_")))
+ (let [n (-> x str Compiler/munge (.replace "." "_DOT_"))]
+ (if (js-reserved (symbol n))
+ (str n "_")
+ n)))
(defn var-parts [e]
(let [{:keys [name ns]} ^(.var e)]
@@ -125,7 +132,9 @@
(defmethod tojs clojure.lang.Compiler$VarExpr [e ctx]
(let [[vns vname] (var-parts e)]
- (str vns "." vname)))
+ (if (and (= vns "clojurescript.js") (#{"this"} vname))
+ vname
+ (str vns "." vname))))
(defmethod tojs clojure.lang.Compiler$TheVarExpr [e ctx]
(let [[vns vname] (var-parts e)]
@@ -233,7 +242,7 @@
(def skip-set '#{seq instance? assoc floats doubles ints longs
- global-hierarchy apply refer first rest})
+ global-hierarchy apply refer first rest import hash-map})
(defn skip-defs [expr]
(let [m ^(.var expr)]