Skip to content

Commit e6f3586

Browse files
committed
(wip)
* resolve goog.module imports in resolve-var * test cases * check that emission doesn't shadow import usage
1 parent 649cde9 commit e6f3586

File tree

3 files changed

+34
-12
lines changed

3 files changed

+34
-12
lines changed

src/main/clojure/cljs/analyzer.cljc

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1235,7 +1235,13 @@
12351235
;; check if prefix is some existing def
12361236
(if-let [resolved (resolve-var env prefix nil false)]
12371237
(update resolved :name #(symbol (str % "." suffix)))
1238-
(let [idx (.lastIndexOf s ".")
1238+
;; glib imports (i.e. (:import [goog.module ModuleLoader])
1239+
;; are always just dotted symbols after the recursion
1240+
(let [s (str
1241+
(cond->> s
1242+
(goog-module-dep? sym)
1243+
(resolve-import env)))
1244+
idx (.lastIndexOf (str s) ".")
12391245
pre (subs s 0 idx)
12401246
suf (subs s (inc idx))]
12411247
{:op :var

src/test/clojure/cljs/analyzer/glib_module_test.clj

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,32 @@
3131
(env/with-compiler-env cenv
3232
(ana/resolve-var aenv 'module-loader/EventType)))))))
3333

34+
(deftest glib-module-resolve-import-test
35+
(testing "glib module resolve import helper test"
36+
(let [cenv (env/default-compiler-env)
37+
ns-ast (ana-tests/analyze-forms cenv
38+
'[(ns foo.core
39+
(:require [goog.module.ModuleLoader :as module-loader]))])
40+
aenv (assoc (ana/empty-env) :ns (ana/get-namespace cenv 'foo.core))]
41+
(is (= 'foo.core.goog$module$goog$module$ModuleLoader
42+
(env/with-compiler-env cenv
43+
(ana/resolve-import aenv 'goog.module.ModuleLoader)))))))
44+
45+
(deftest glib-module-resolve-import-var-test
46+
(testing "glib module :import var resolution"
47+
(let [cenv (env/default-compiler-env)
48+
ns-ast (ana-tests/analyze-forms cenv
49+
'[(ns foo.core
50+
(:import [goog.module ModuleLoader]))])
51+
aenv (assoc (ana/empty-env) :ns (ana/get-namespace cenv 'foo.core))]
52+
(is (= '{:name foo.core.goog$module$goog$module$ModuleLoader
53+
:ns goog.module ;; a bit odd, but doesn't matter, for emission we just :name
54+
:op :var}
55+
(env/with-compiler-env cenv
56+
(ana/resolve-var aenv 'ModuleLoader)))))))
57+
3458
(comment
3559

36-
(test/test-vars [#'glib-module-resolve-var-test])
3760
(test/run-tests)
3861

3962
)
Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
(ns cljs.compiler.glib-module-test
2-
(:require [cljs.compiler :as comp]
3-
[cljs.compiler-tests :as comp-tests]
2+
(:require [cljs.compiler-tests :as comp-tests]
43
[cljs.env :as env]
54
[clojure.test :as test :refer [deftest is testing]]))
65

@@ -12,17 +11,11 @@
1211
(:import [goog.module ModuleLoader]))
1312
(def module-loader (ModuleLoader.))]))]
1413
(is (re-find #"goog\.require\('goog\.module\.ModuleLoader'\)" src))
15-
(is (re-find #"test\.foo\.goog\$module\$goog\$module\$ModuleLoader = goog\.module\.get\('goog.module.ModuleLoader'\)" src)))))
14+
(is (re-find #"test\.foo\.goog\$module\$goog\$module\$ModuleLoader = goog\.module\.get\('goog.module.ModuleLoader'\)" src))
15+
(is (re-find #"test\.foo\.module_loader = \(new test\.foo\.goog\$module\$goog\$module\$ModuleLoader\(\)\)" src)))))
1616

1717
(comment
1818

1919
(test/run-tests)
2020

21-
(println
22-
(env/with-compiler-env (env/default-compiler-env)
23-
(comp-tests/compile-form-seq
24-
'[(ns test.foo
25-
(:import [goog.module ModuleLoader]))
26-
(def module-loader (ModuleLoader.))])))
27-
2821
)

0 commit comments

Comments
 (0)