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 2627
2627
:children [:expr ]}))
2628
2628
2629
2629
(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
2634
2634
js/Function function
2635
- js/Boolean boolean})
2635
+ js/Boolean boolean})
2636
2636
2637
2637
(defn prim-ctor?
2638
2638
" Test whether a tag is a constructor for a JS primitive"
3585
3585
(list* '. dot-form) " with classification "
3586
3586
(classify-dot-form dot-form))))))
3587
3587
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
+
3588
3598
(defn analyze-dot [env target field member+ form]
3589
3599
(let [v [target field member+]
3590
3600
{:keys [dot-action target method field args]} (build-dot-form v)
3591
3601
enve (assoc env :context :expr )
3592
3602
targetexpr (analyze enve target)
3593
3603
form-meta (meta form)
3594
3604
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 $ $)))
3596
3607
prop (or field method)
3597
3608
tag (or (:tag form-meta)
3598
3609
(and (js-tag? target-tag)
Original file line number Diff line number Diff line change 168
168
(-> (binding [ana/*cljs-ns* ana/*cljs-ns*]
169
169
(env/with-compiler-env (env/default-compiler-env )
170
170
(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" ))))
171
176
:tag ))))
172
177
173
178
(deftest test-externs-infer
You can’t perform that action at this time.
0 commit comments