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