|
1030 | 1030 | boolean Boolean
|
1031 | 1031 | symbol Symbol})
|
1032 | 1032 |
|
1033 |
| -(defn has-extern?* |
| 1033 | +(defn extern-var-info |
1034 | 1034 | ([pre externs]
|
1035 | 1035 | (let [pre (if-some [me (find
|
1036 | 1036 | (get-in externs '[Window prototype])
|
|
1039 | 1039 | (into [tag 'prototype] (next pre))
|
1040 | 1040 | pre)
|
1041 | 1041 | pre)]
|
1042 |
| - (has-extern?* pre externs externs))) |
1043 |
| - ([pre externs top] |
| 1042 | + (extern-var-info pre externs externs nil))) |
| 1043 | + ([pre externs top info] |
1044 | 1044 | (cond
|
1045 |
| - (empty? pre) true |
| 1045 | + (empty? pre) info |
1046 | 1046 | :else
|
1047 | 1047 | (let [x (first pre)
|
1048 | 1048 | me (find externs x)]
|
1049 | 1049 | (cond
|
1050 |
| - (not me) false |
| 1050 | + (not me) nil |
1051 | 1051 | :else
|
1052 | 1052 | (let [[x' externs'] me
|
1053 |
| - xmeta (meta x')] |
1054 |
| - (if (and (= 'Function (:tag xmeta)) (:ctor xmeta)) |
1055 |
| - (or (has-extern?* (into '[prototype] (next pre)) externs' top) |
1056 |
| - (has-extern?* (next pre) externs' top) |
| 1053 | + info' (meta x')] |
| 1054 | + (if (and (= 'Function (:tag info')) (:ctor info')) |
| 1055 | + (or (extern-var-info (into '[prototype] (next pre)) externs' top nil) |
| 1056 | + (extern-var-info (next pre) externs' top info') |
1057 | 1057 | ;; check base type if it exists
|
1058 |
| - (when-let [super (:super xmeta)] |
1059 |
| - (has-extern?* (into [super] (next pre)) externs top))) |
1060 |
| - (recur (next pre) externs' top)))))))) |
| 1058 | + (when-let [super (:super info')] |
| 1059 | + (extern-var-info (into [super] (next pre)) externs top nil))) |
| 1060 | + (recur (next pre) externs' top info')))))))) |
| 1061 | + |
| 1062 | +(defn has-extern?* |
| 1063 | + [pre externs] |
| 1064 | + (boolean (extern-var-info pre externs))) |
1061 | 1065 |
|
1062 | 1066 | (defn has-extern?
|
1063 | 1067 | ([pre]
|
|
3569 | 3573 | {:warn-type :target :form form :property prop}))
|
3570 | 3574 | ;; Unresolveable property on existing extern
|
3571 | 3575 | (let [[pre' pre] ((juxt butlast identity) (-> tag meta :prefix))]
|
| 3576 | + (println ">>>>>" pre' pre) |
3572 | 3577 | (when (and (has-extern? pre') (not (has-extern? pre)))
|
3573 | 3578 | (warning :infer-warning env
|
3574 | 3579 | {:warn-type :property :form form
|
|
0 commit comments