Skip to content

Commit 83dadc9

Browse files
committed
* some :binding node missing :env and :form
* def, fn, defn tests
1 parent 2bd179a commit 83dadc9

File tree

2 files changed

+23
-13
lines changed

2 files changed

+23
-13
lines changed

src/main/clojure/cljs/analyzer.cljc

+11-6
Original file line numberDiff line numberDiff line change
@@ -2143,6 +2143,7 @@
21432143
{:line line :column column})
21442144
param {:op :binding
21452145
:name name
2146+
:form name
21462147
:line line
21472148
:column column
21482149
:tag tag
@@ -2205,8 +2206,10 @@
22052206
shadow (or (handle-symbol-local name (get locals name))
22062207
(get-in env [:js-globals name]))
22072208
fn-scope (:fn-scope env)
2208-
name-var {:name name
2209-
:op :binding
2209+
name-var {:op :binding
2210+
:env env
2211+
:form name
2212+
:name name
22102213
:local :fn
22112214
:info {:fn-self-name true
22122215
:fn-scope fn-scope
@@ -2326,8 +2329,10 @@
23262329
(let [ret-tag (-> n meta :tag)
23272330
fexpr (no-warn (analyze env (n->fexpr n)))
23282331
be (cond->
2329-
{:name n
2330-
:op :binding
2332+
{:op :binding
2333+
:name n
2334+
:form n
2335+
:env env
23312336
:fn-var true
23322337
:line (get-line n env)
23332338
:column (get-col n env)
@@ -2416,7 +2421,8 @@
24162421
col (get-col name env)
24172422
shadow (or (handle-symbol-local name (get-in env [:locals name]))
24182423
(get-in env [:js-globals name]))
2419-
be {:name name
2424+
be {:op :binding
2425+
:name name
24202426
:form name
24212427
:line line
24222428
:column col
@@ -2426,7 +2432,6 @@
24262432
:shadow shadow
24272433
;; Give let* bindings same shape as var so
24282434
;; they get routed correctly in the compiler
2429-
:op :binding
24302435
:env {:line line :column col}
24312436
:info {:name name
24322437
:shadow shadow}

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

+12-7
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,19 @@
3333
(deftest test-def
3434
(is (s/valid? ::a/node (no-warn (analyze ns-env '(def x)))))
3535
(is (s/valid? ::a/node (no-warn (analyze ns-env '(def x 1)))))
36+
(is (s/valid? ::a/node (no-warn (analyze ns-env '(def x (fn []))))))
37+
(is (s/valid? ::a/node (no-warn (analyze ns-env '(def x (fn [y] y)))))))
38+
39+
(deftest test-fn
3640
(is (s/valid? ::a/node (no-warn (analyze ns-env '(fn [])))))
37-
(is (s/valid? ::a/node (no-warn (analyze ns-env '(fn [] 1))))))
41+
(is (s/valid? ::a/node (no-warn (analyze ns-env '(fn [] 1)))))
42+
(is (s/valid? ::a/node (no-warn (analyze ns-env '(fn [x])))))
43+
(is (s/valid? ::a/node (no-warn (analyze ns-env '(fn [x] 1))))))
44+
45+
(deftest test-defn
46+
(is (s/valid? ::a/node (no-warn (analyze ns-env '(defn x [])))))
47+
(is (s/valid? ::a/node (no-warn (analyze ns-env '(defn x [] 1)))))
48+
(is (s/valid? ::a/node (no-warn (analyze ns-env '(defn x [y] y))))))
3849

3950
(deftest test-new
4051
(is (s/valid? ::a/node (no-warn (analyze ns-env '(new String)))))
@@ -49,10 +60,4 @@
4960
(s/valid? ::a/node (no-warn (analyze ns-env '(case x 1 :foo 2 :bar))))
5061
(s/explain ::a/node (no-warn (analyze ns-env '(case x 1 :foo 2 :bar))))
5162

52-
(s/valid? ::a/node (no-warn (analyze ns-env '(def x (fn [])))))
53-
(s/explain ::a/node (no-warn (analyze ns-env '(def x (fn [])))))
54-
55-
(s/valid? ::a/node (no-warn (analyze ns-env '(fn [x]))))
56-
(s/valid? ::a/node (no-warn (analyze ns-env '(fn [x] 1))))
57-
5863
)

0 commit comments

Comments
 (0)