|
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