File tree Expand file tree Collapse file tree 2 files changed +22
-6
lines changed Expand file tree Collapse file tree 2 files changed +22
-6
lines changed Original file line number Diff line number Diff line change 26272627 :children [:expr ]}))
26282628
26292629(def js-prim-ctor->tag
2630- '{js/Object object
2631- js/String string
2632- js/Array array
2633- js/Number number
2630+ '{js/Object object
2631+ js/String string
2632+ js/Array array
2633+ js/Number number
26342634 js/Function function
2635- js/Boolean boolean})
2635+ js/Boolean boolean})
26362636
26372637(defn prim-ctor?
26382638 " Test whether a tag is a constructor for a JS primitive"
35853585 (list* '. dot-form) " with classification "
35863586 (classify-dot-form dot-form))))))
35873587
3588+ ; ; this only for a smaller set of types that we want to infer
3589+ ; ; we don't generally want to consider function for example, these
3590+ ; ; specific cases are ones we either try to optimize or validate
3591+ (def ^{:private true }
3592+ tag->js-prim-ctor
3593+ '{string js/String
3594+ array js/Array
3595+ number js/Number
3596+ boolean js/Boolean})
3597+
35883598(defn analyze-dot [env target field member+ form]
35893599 (let [v [target field member+]
35903600 {:keys [dot-action target method field args]} (build-dot-form v)
35913601 enve (assoc env :context :expr )
35923602 targetexpr (analyze enve target)
35933603 form-meta (meta form)
35943604 target-tag (as-> (:tag targetexpr) $
3595- (or (some-> $ meta :ctor lift-tag-to-js) $))
3605+ (or (some-> $ meta :ctor lift-tag-to-js)
3606+ (tag->js-prim-ctor $ $)))
35963607 prop (or field method)
35973608 tag (or (:tag form-meta)
35983609 (and (js-tag? target-tag)
Original file line number Diff line number Diff line change 168168 (-> (binding [ana/*cljs-ns* ana/*cljs-ns*]
169169 (env/with-compiler-env (env/default-compiler-env )
170170 (analyze (ana/empty-env ) '(.generateKey js/crypto.subtle))))
171+ :tag )))
172+ (is (= 'js/String
173+ (-> (binding [ana/*cljs-ns* ana/*cljs-ns*]
174+ (env/with-compiler-env (env/default-compiler-env )
175+ (analyze (ana/empty-env ) '(.toUpperCase " foo" ))))
171176 :tag ))))
172177
173178(deftest test-externs-infer
You can’t perform that action at this time.
0 commit comments