File tree Expand file tree Collapse file tree
cljs/cljs/analyzer/passes Expand file tree Collapse file tree Original file line number Diff line number Diff line change 66; ; the terms of this license.
77; ; You must not remove this notice, or any other, from this software.
88
9- (ns cljs.analyzer.passes.lite )
9+ (ns cljs.analyzer.passes.lite
10+ (:refer-clojure :exclude [var?]))
1011
1112(defn var? [ast]
1213 (= :var (:op ast)))
1314
14- (def replace
15+ (def ctor->simple-ctor
1516 '{cljs.core/vector cljs.core/simple-vector
1617 cljs.core/vec cljs.core/simple-vec})
1718
1819(defn update-var [{:keys [name] :as ast}]
19- (update-in ast :name ( get replace name) ))
20+ (update ast :name ctor->simple-ctor ))
2021
2122(defn replace-var? [ast]
2223 (and (var? ast)
23- (contains? replace (:name ast))))
24+ (contains? ctor->simple-ctor (:name ast))))
2425
2526(defn use-lite-types
2627 [env ast _]
Original file line number Diff line number Diff line change 1616 #? (:clj (:require [cljs.analyzer.impl :as impl]
1717 [cljs.analyzer.impl.namespaces :as nses]
1818 [cljs.analyzer.passes.and-or :as and-or]
19+ [cljs.analyzer.passes.lite :as lite]
1920 [cljs.env :as env :refer [ensure]]
2021 [cljs.externs :as externs]
2122 [cljs.js-deps :as deps]
3031 :cljs (:require [cljs.analyzer.impl :as impl]
3132 [cljs.analyzer.impl.namespaces :as nses]
3233 [cljs.analyzer.passes.and-or :as and-or]
34+ [cljs.analyzer.passes.lite :as lite]
3335 [cljs.env :as env]
3436 [cljs.reader :as edn]
3537 [cljs.tagged-literals :as tags]
44554457 :cljs [infer-type and-or/optimize check-invoke-arg-types]))
44564458
44574459(defn analyze* [env form name opts]
4458- (let [passes *passes*
4459- passes (if (nil? passes)
4460- default-passes
4461- passes)
4460+ (let [passes (cond-> (or *passes* default-passes )
4461+ (lite-mode? ) (conj lite/use-lite-types))
44624462 form (if (instance? LazySeq form)
44634463 (if (seq form) form ())
44644464 form)
Original file line number Diff line number Diff line change 178178 (map (fn [x] x) s))))]))))]
179179 (is (empty? (re-seq #"or_" code))))))
180180
181+ (deftest test-lite-mode-pass
182+ (let [aenv (assoc (ana/empty-env ) :context :expr )
183+ env (env/default-compiler-env {:lite-mode true })]
184+ (is (= 'cljs.core/simple-vec
185+ (-> (env/with-compiler-env env
186+ (comp/with-core-cljs {}
187+ (fn []
188+ (analyze aenv 'cljs.core/vec))))
189+ :name )))
190+ (is (= 'cljs.core/simple-vector
191+ (-> (env/with-compiler-env env
192+ (comp/with-core-cljs {}
193+ (fn []
194+ (analyze aenv 'cljs.core/vector))))
195+ :name )))))
196+
181197(comment
182198 (test/run-tests )
183199
184200 (require '[clojure.pprint :refer [pprint]])
201+
185202 )
You can’t perform that action at this time.
0 commit comments