Skip to content

Commit 91c7217

Browse files
committed
simplify & fix cljs.analyzer/has-extern?*, more tests
1 parent 0239cd8 commit 91c7217

2 files changed

Lines changed: 14 additions & 35 deletions

File tree

src/main/clojure/cljs/analyzer.cljc

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -787,24 +787,22 @@
787787
(into [tag 'prototype] (next pre))
788788
pre)
789789
pre)]
790-
(has-extern?* pre externs externs #{})))
791-
([pre externs top seen]
792-
(if (empty? pre)
793-
true
790+
(has-extern?* pre externs externs)))
791+
([pre externs top]
792+
(cond
793+
(empty? pre) true
794+
:else
794795
(let [x (first pre)
795796
me (find externs x)]
796797
(cond
797-
(seen x) true
798798
(not me) false
799799
:else
800-
(let [seen' (conj seen x)
801-
[x' externs'] me
800+
(let [[x' externs'] me
802801
xmeta (meta x')]
803802
(if (and (= 'Function (:tag xmeta)) (:ctor xmeta))
804-
(let [pre' [(:ctor xmeta)]]
805-
(or (has-extern?* (into pre' (next pre)) top top seen')
806-
(has-extern?* (into (conj pre' 'prototype) (next pre)) top top seen')))
807-
(recur (next pre) externs' top seen'))))))))
803+
(or (has-extern?* (into '[prototype] (next pre)) externs' top)
804+
(has-extern?* (next pre) externs' top))
805+
(recur (next pre) externs' top))))))))
808806

809807
(defn has-extern?
810808
([pre]

src/test/clojure/cljs/analyzer_tests.clj

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@
88

99
(ns cljs.analyzer-tests
1010
(:require [clojure.java.io :as io]
11-
[cljs.analyzer :as a]
11+
[cljs.util :as util]
1212
[cljs.env :as e]
1313
[cljs.env :as env]
14+
[cljs.analyzer :as a]
1415
[cljs.analyzer.api :as ana-api]
15-
[cljs.util :as util]
16+
[cljs.closure :as closure]
1617
[cljs.externs :as externs])
1718
(:use clojure.test))
1819

@@ -625,7 +626,9 @@
625626
{:externs ["src/test/externs/test.js"]
626627
:use-only-custom-externs true}))]
627628
(is (true? (a/has-extern? '[Foo] externs)))
629+
(is (true? (a/has-extern? '[Foo wozMethod] externs)))
628630
(is (false? (a/has-extern? '[foo] externs)))
631+
(is (false? (a/has-extern? '[Foo gozMethod] externs)))
629632
(is (true? (a/has-extern? '[baz] externs)))
630633
(is (false? (a/has-extern? '[Baz] externs)))))
631634

@@ -658,22 +661,6 @@
658661
(map (comp :externs second)
659662
(get @test-cenv ::a/namespaces))))))
660663

661-
(->
662-
(find (externs/externs-map
663-
(closure/load-externs
664-
{:externs ["src/test/externs/test.js"]
665-
:use-only-custom-externs true}))
666-
'baz)
667-
first meta)
668-
669-
(->
670-
(find (externs/externs-map
671-
(closure/load-externs
672-
{:externs ["src/test/externs/test.js"]
673-
:use-only-custom-externs true}))
674-
'Foo)
675-
first meta)
676-
677664
;; works, does not generate extern
678665
(let [test-cenv (atom {::a/externs (externs/externs-map
679666
(closure/load-externs
@@ -689,12 +676,6 @@
689676
(map (comp :externs second)
690677
(get @test-cenv ::a/namespaces))))))
691678

692-
(a/has-extern?* '[baz]
693-
(externs/externs-map
694-
(closure/load-externs
695-
{:externs ["src/test/externs/test.js"]
696-
:use-only-custom-externs true})))
697-
698679
;; works, does not generate extern
699680
(let [test-cenv (atom {::a/externs (externs/externs-map
700681
(closure/load-externs

0 commit comments

Comments
 (0)