aboutsummaryrefslogtreecommitdiff
path: root/src/lux/host/generics.clj
diff options
context:
space:
mode:
authorEduardo Julian2015-12-16 00:10:43 -0400
committerEduardo Julian2015-12-16 00:10:43 -0400
commit405a7efaf6ba2f20c5d3c5c654da964bda1451c6 (patch)
treee5fbbffb81ed5d31a5d854ca8aad10b2aee0523e /src/lux/host/generics.clj
parent08aa828cd4f83b719ef8d1af75463fadc67bcddb (diff)
- Changed the way methods are defined in class definitions.
Diffstat (limited to '')
-rw-r--r--src/lux/host/generics.clj23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/lux/host/generics.clj b/src/lux/host/generics.clj
index 79b28b2ef..ccedf70ae 100644
--- a/src/lux/host/generics.clj
+++ b/src/lux/host/generics.clj
@@ -56,8 +56,18 @@
(str "T" name ";")
(&/$GenericClass name params)
- (let [params* (str "<" (->> params (&/|map gclass->signature) (&/|interpose " ") (&/fold str "")) ">")]
- (str "L" (->bytecode-class-name name) params* ";"))
+ (case name
+ "void" "V"
+ "boolean" "Z"
+ "byte" "B"
+ "short" "S"
+ "int" "I"
+ "long" "L"
+ "float" "F"
+ "double" "D"
+ "char" "C"
+ (let [params* (str "<" (->> params (&/|map gclass->signature) (&/|interpose " ") (&/fold str "")) ">")]
+ (str "L" (->bytecode-class-name name) params* ";")))
(&/$GenericArray param)
(str "[" (gclass->signature param))))
@@ -86,7 +96,10 @@
(->type-signature name)
(&/$GenericArray param)
- (str "[" (gclass->simple-signature param)))))
+ (str "[" (gclass->simple-signature param))
+
+ _
+ (assert false (str 'gclass->simple-signature " " (&/adt->text gclass))))))
(let [object-bc-name (->bytecode-class-name "java.lang.Object")]
(defn gclass->bytecode-class-name [gclass]
@@ -103,9 +116,9 @@
(defn method-signatures [method-decl]
(|let [[=name =anns =gvars =exceptions =inputs =output] method-decl
- simple-signature (str "(" (&/fold str "" (&/|map (comp gclass->simple-signature &/|second) =inputs)) ")" (gclass->simple-signature =output))
+ simple-signature (str "(" (&/fold str "" (&/|map gclass->simple-signature =inputs)) ")" (gclass->simple-signature =output))
generic-signature (str "<" (->> =gvars (&/|interpose " ") (&/fold str "")) ">"
- "(" (&/fold str "" (&/|map (comp gclass->signature &/|second) =inputs)) ")"
+ "(" (&/fold str "" (&/|map gclass->signature =inputs)) ")"
(gclass->signature =output)
(->> =exceptions (&/|map gclass->signature) (&/|interpose " ") (&/fold str "")))]
(&/T simple-signature generic-signature)))