diff --git a/src/main/clojure/cljs/externs.clj b/src/main/clojure/cljs/externs.clj index e940461e7..ddccfdc4e 100644 --- a/src/main/clojure/cljs/externs.clj +++ b/src/main/clojure/cljs/externs.clj @@ -73,7 +73,9 @@ {:tag (get-tag ty)} (if (or (.isConstructor info) (.isInterface info)) (let [qname (symbol (.. node getFirstChild getQualifiedName))] - (cond-> {:tag 'Function} + (cond-> (merge {:tag 'Function} + (when (.hasBaseType info) + {:super (get-tag (.getBaseType info))})) (.isConstructor info) (merge {:ctor qname}) (.isInterface info) (merge {:iface qname}))) (if (or (.hasReturnType info) diff --git a/src/test/clojure/cljs/externs_parsing_tests.clj b/src/test/clojure/cljs/externs_parsing_tests.clj index 7bcc44539..c2b199cf1 100644 --- a/src/test/clojure/cljs/externs_parsing_tests.clj +++ b/src/test/clojure/cljs/externs_parsing_tests.clj @@ -10,7 +10,8 @@ (:require [cljs.closure :as closure] [cljs.externs :as externs] [clojure.java.io :as io] - [clojure.test :as test :refer [deftest is]])) + [clojure.test :as test :refer [deftest is]]) + (:import [com.google.javascript.jscomp CommandLineRunner])) (deftest cljs-3121 (let [externs (externs/parse-externs @@ -34,6 +35,16 @@ (is (= 'any (get-in ns [:defs 'get :ret-tag]))) (is (= 'array (get-in ns [:defs 'getKeys :ret-tag]))))) +(deftest test-parse-super + (let [info (-> + (filter + (fn [s] + (= "externs.zip//w3c_dom2.js" (.getName s))) + (CommandLineRunner/getDefaultExterns)) + first externs/parse-externs externs/index-externs + (find 'HTMLDocument) first meta)] + (is (= 'Document (:super info))))) + (comment (externs/parse-externs