diff options
Diffstat (limited to 'new-luxc/source/luxc/lang/host/jvm')
-rw-r--r-- | new-luxc/source/luxc/lang/host/jvm/type.lux | 40 |
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 "")))) |