Skip to content

Commit

Permalink
support type and parameter annotations in definterface
Browse files Browse the repository at this point in the history
  • Loading branch information
richhickey committed Apr 26, 2010
1 parent 29dcb68 commit db3466e
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 10 deletions.
4 changes: 2 additions & 2 deletions src/clj/clojure/core_deftype.clj
Expand Up @@ -20,8 +20,8 @@
[name & sigs]
(let [tag (fn [x] (or (:tag (meta x)) Object))
psig (fn [[name [& args]]]
(vector name (vec (map tag args)) (tag name)))
cname (symbol (str (namespace-munge *ns*) "." name))]
(vector name (vec (map tag args)) (tag name) (map meta args)))
cname (with-meta (symbol (str (namespace-munge *ns*) "." name)) (meta name))]
`(do (gen-interface :name ~cname :methods ~(vec (map psig sigs)))
(import ~cname))))

Expand Down
20 changes: 12 additions & 8 deletions src/clj/clojure/genclass.clj
Expand Up @@ -622,14 +622,18 @@
(when (seq extends)
(into-array (map #(.getInternalName (asm-type %)) extends))))
(add-annotations cv (meta name))
(doseq [[mname pclasses rclass] methods]
(. cv visitMethod (+ Opcodes/ACC_PUBLIC Opcodes/ACC_ABSTRACT)
(str mname)
(Type/getMethodDescriptor (asm-type rclass)
(if pclasses
(into-array Type (map asm-type pclasses))
(make-array Type 0)))
nil nil))
(doseq [[mname pclasses rclass pmetas] methods]
(let [mv (. cv visitMethod (+ Opcodes/ACC_PUBLIC Opcodes/ACC_ABSTRACT)
(str mname)
(Type/getMethodDescriptor (asm-type rclass)
(if pclasses
(into-array Type (map asm-type pclasses))
(make-array Type 0)))
nil nil)]
(add-annotations mv (meta mname))
(dotimes [i (count pmetas)]
(add-annotations mv (nth pmetas i) i))
(. mv visitEnd)))
(. cv visitEnd)
[iname (. cv toByteArray)]))

Expand Down

0 comments on commit db3466e

Please sign in to comment.