Skip to content

Commit 22a2692

Browse files
mfikesdnolen
authored andcommitted
CLJS-1577: Self-host: syntax-quote resolves on dot forms
If you try to evaluate a syntax-quoted dot form, as in `.x, by default symbol resolution will be applied to the dot form .x, yielding /x. Instead, we need this to yield just .x. To do this, revise cljs.js to check for this case before delegating to cljs.analyzer/resolve-symbol.
1 parent ea40068 commit 22a2692

File tree

2 files changed

+36
-4
lines changed

2 files changed

+36
-4
lines changed

src/main/cljs/cljs/js.cljs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@
3838
0 (- (count file) 5))]
3939
(symbol (demunge lib-name))))
4040

41+
(defn- resolve-symbol
42+
[sym]
43+
(if (string/starts-with? (str sym) ".")
44+
sym
45+
(ana/resolve-symbol sym)))
46+
4147
(defn- atom? [x]
4248
(instance? Atom x))
4349

@@ -444,7 +450,7 @@
444450
*ns* (create-ns ns)
445451
ana/*passes* (:*passes* bound-vars)
446452
r/*data-readers* (:*data-readers* bound-vars)
447-
r/resolve-symbol ana/resolve-symbol
453+
r/resolve-symbol resolve-symbol
448454
comp/*source-map-data* (:*sm-data* bound-vars)]
449455
(let [res (try
450456
{:value (r/read {:eof eof :read-cond :allow :features #{:cljs}} rdr)}
@@ -531,7 +537,7 @@
531537
ana/*cljs-static-fns* (:static-fns opts)
532538
*ns* (create-ns (:*cljs-ns* bound-vars))
533539
r/*data-readers* (:*data-readers* bound-vars)
534-
r/resolve-symbol ana/resolve-symbol
540+
r/resolve-symbol resolve-symbol
535541
comp/*source-map-data* (:*sm-data* bound-vars)]
536542
(let [aenv (ana/empty-env)
537543
aenv (cond-> (assoc aenv :ns (ana/get-namespace ana/*cljs-ns*))
@@ -606,7 +612,7 @@
606612
ana/*cljs-static-fns* (:static-fns opts)
607613
*ns* (create-ns ns)
608614
r/*data-readers* (:*data-readers* bound-vars)
609-
r/resolve-symbol ana/resolve-symbol
615+
r/resolve-symbol resolve-symbol
610616
comp/*source-map-data* (:*sm-data* bound-vars)]
611617
(let [res (try
612618
{:value (r/read {:eof eof :read-cond :allow :features #{:cljs}} rdr)}
@@ -704,7 +710,7 @@
704710
ana/*cljs-static-fns* (:static-fns opts)
705711
*ns* (create-ns ns)
706712
r/*data-readers* (:*data-readers* bound-vars)
707-
r/resolve-symbol ana/resolve-symbol
713+
r/resolve-symbol resolve-symbol
708714
comp/*source-map-data* (:*sm-data* bound-vars)]
709715
(let [res (try
710716
{:value (r/read {:eof eof :read-cond :allow :features #{:cljs}} rdr)}

src/test/self/self_host/test.cljs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,32 @@
509509
(is (nil? error))
510510
(is (= "90°" value)))))
511511

512+
(deftest test-CLJS-1577
513+
(cljs/analyze-str st
514+
"`.x"
515+
nil
516+
{:eval node-eval
517+
:context :expr}
518+
(fn [{:keys [error value]}]
519+
(is (nil? error))
520+
(is (= '.x (:form value)))))
521+
(cljs/compile-str st
522+
"`.x"
523+
nil
524+
{:eval node-eval
525+
:context :expr}
526+
(fn [{:keys [error value]}]
527+
(is (nil? error))
528+
(is (string/starts-with? value "new cljs.core.Symbol(null,\".x\",\".x\","))))
529+
(cljs/eval-str st
530+
"`.x"
531+
nil
532+
{:eval node-eval
533+
:context :expr}
534+
(fn [{:keys [error value]}]
535+
(is (nil? error))
536+
(is (= '.x value)))))
537+
512538
(deftest test-CLJS-1584
513539
(cljs/eval-str st
514540
"(condp = 1 1 2)"

0 commit comments

Comments
 (0)