|
424 | 424 | (case warn-type |
425 | 425 | :target (str "Cannot infer target type in expression " form "") |
426 | 426 | :property (str "Cannot resolve property " property |
427 | | - " for inferred type " type " in expression " form))) |
| 427 | + " for inferred type " type " in expression " form) |
| 428 | + :object (str "Adding extern to Object for property " property " due to " |
| 429 | + "ambiguous expression " form))) |
428 | 430 |
|
429 | 431 | (defn default-warning-handler [warning-type env extra] |
430 | 432 | (when (warning-type *cljs-warnings*) |
|
2625 | 2627 | (vary-meta (normalize-js-tag target-tag) |
2626 | 2628 | update-in [:prefix] (fnil conj '[Object]) prop)) |
2627 | 2629 | nil)] |
2628 | | - (when (and (not (string/starts-with? (str prop) "cljs$")) |
2629 | | - (not= 'js target-tag)) |
2630 | | - ;; Cannot determine type of the target |
2631 | | - (when (and (get-in env [:locals target]) |
2632 | | - (or (nil? target-tag) |
2633 | | - ('#{any} target-tag))) |
| 2630 | + (when (not (string/starts-with? (str prop) "cljs$")) |
| 2631 | + ;; Adding to Object |
| 2632 | + (when (= 'Object (first (-> tag meta :prefix))) |
2634 | 2633 | (warning :infer-warning env |
2635 | | - {:warn-type :target :form form})) |
2636 | | - ;; Unresolveable property on existing extern |
2637 | | - (let [[pre' pre] ((juxt butlast identity) ;; drop prototype from pre' |
2638 | | - (-> tag meta :prefix))] |
2639 | | - (when (and (has-extern? pre') (not (has-extern? pre))) |
| 2634 | + {:warn-type :object :form form :property prop})) |
| 2635 | + (when (not= 'js target-tag) |
| 2636 | + ;; Cannot determine type of the target |
| 2637 | + (when (and (get-in env [:locals target]) |
| 2638 | + (or (nil? target-tag) |
| 2639 | + ('#{any} target-tag))) |
2640 | 2640 | (warning :infer-warning env |
2641 | | - {:warn-type :property :form form |
2642 | | - :type (symbol "js" |
2643 | | - (string/join "." |
2644 | | - (cond-> pre' (= 'prototype (last pre')) butlast))) |
2645 | | - :property prop})))) |
| 2641 | + {:warn-type :target :form form})) |
| 2642 | + ;; Unresolveable property on existing extern |
| 2643 | + (let [[pre' pre] ((juxt butlast identity) (-> tag meta :prefix))] |
| 2644 | + (when (and (has-extern? pre') (not (has-extern? pre))) |
| 2645 | + (warning :infer-warning env |
| 2646 | + {:warn-type :property :form form |
| 2647 | + :type (symbol "js" |
| 2648 | + (string/join "." |
| 2649 | + (cond-> pre' (= 'prototype (last pre')) butlast))) |
| 2650 | + :property prop}))))) |
2646 | 2651 | (when (js-tag? tag) |
2647 | 2652 | (let [pre (-> tag meta :prefix)] |
2648 | 2653 | (when-not (has-extern? pre) |
|
0 commit comments