aboutsummaryrefslogtreecommitdiff
path: root/new-luxc/source/luxc/lang/host/jvm/type.lux
diff options
context:
space:
mode:
Diffstat (limited to 'new-luxc/source/luxc/lang/host/jvm/type.lux')
-rw-r--r--new-luxc/source/luxc/lang/host/jvm/type.lux40
1 files changed, 27 insertions, 13 deletions
diff --git a/new-luxc/source/luxc/lang/host/jvm/type.lux b/new-luxc/source/luxc/lang/host/jvm/type.lux
index 72a1925b4..909344d24 100644
--- a/new-luxc/source/luxc/lang/host/jvm/type.lux
+++ b/new-luxc/source/luxc/lang/host/jvm/type.lux
@@ -1,13 +1,13 @@
(.module:
[lux (#- int char)
[data
+ ["." maybe ("#@." functor)]
["." text
format]
[collection
- ["." list ("#/." functor)]]]]
+ ["." list ("#@." functor)]]]]
["." //])
-## Types
(template [<name> <primitive>]
[(def: #export <name> //.Type (#//.Primitive <primitive>))]
@@ -21,16 +21,13 @@
[char #//.Char]
)
-(def: #export (class name params)
- (-> Text (List //.Generic) //.Type)
+(template: #export (class name params)
(#//.Generic (#//.Class name params)))
-(def: #export (var name)
- (-> Text //.Type)
+(template: #export (var name)
(#//.Generic (#//.Var name)))
-(def: #export (wildcard bound)
- (-> (Maybe [//.Bound //.Generic]) //.Type)
+(template: #export (wildcard bound)
(#//.Generic (#//.Wildcard bound)))
(def: #export (array depth elemT)
@@ -69,6 +66,24 @@
(descriptor (#//.Generic (#//.Class "java.lang.Object" (list)))))
))
+(def: #export (class-name type)
+ (-> //.Type (Maybe Text))
+ (case type
+ (#//.Primitive prim)
+ #.None
+
+ (#//.Array sub)
+ (#.Some (descriptor type))
+
+ (#//.Generic generic)
+ (case generic
+ (#//.Class class params)
+ (#.Some class)
+
+ (^or (#//.Var name) (#//.Wildcard ?bound))
+ (#.Some "java.lang.Object"))
+ ))
+
(def: #export (signature type)
(-> //.Type Text)
(case type
@@ -93,7 +108,7 @@
""
(format "<"
(|> params
- (list/map (|>> #//.Generic signature))
+ (list@map (|>> #//.Generic signature))
(text.join-with ""))
">"))]
(format "L" (binary-name class) =params ";"))
@@ -111,14 +126,13 @@
[#//.Lower "-"]))
))
-## Methods
(def: #export (method args return exceptions)
(-> (List //.Type) (Maybe //.Type) (List //.Generic) //.Method)
{#//.args args #//.return return #//.exceptions exceptions})
(def: #export (method-descriptor method)
(-> //.Method Text)
- (format "(" (text.join-with "" (list/map descriptor (get@ #//.args method))) ")"
+ (format "(" (text.join-with "" (list@map descriptor (get@ #//.args method))) ")"
(case (get@ #//.return method)
#.None
"V"
@@ -128,7 +142,7 @@
(def: #export (method-signature method)
(-> //.Method Text)
- (format "(" (|> (get@ #//.args method) (list/map signature) (text.join-with "")) ")"
+ (format "(" (|> (get@ #//.args method) (list@map signature) (text.join-with "")) ")"
(case (get@ #//.return method)
#.None
"V"
@@ -136,5 +150,5 @@
(#.Some return)
(signature return))
(|> (get@ #//.exceptions method)
- (list/map (|>> #//.Generic signature (format "^")))
+ (list@map (|>> #//.Generic signature (format "^")))
(text.join-with ""))))