diff options
Diffstat (limited to '')
-rw-r--r-- | stdlib/source/lux/target/jvm/type/parser.lux | 49 |
1 files changed, 44 insertions, 5 deletions
diff --git a/stdlib/source/lux/target/jvm/type/parser.lux b/stdlib/source/lux/target/jvm/type/parser.lux index fd29e4856..2ed9b89c5 100644 --- a/stdlib/source/lux/target/jvm/type/parser.lux +++ b/stdlib/source/lux/target/jvm/type/parser.lux @@ -10,7 +10,9 @@ [data ["." product] [text - ["%" format (#+ format)]]]] + ["%" format (#+ format)]] + [collection + ["." list]]]] ["." // (#+ Type) [category (#+ Void Value Return Method Primitive Object Class Array Var Parameter)] ["#." signature (#+ Signature)] @@ -114,13 +116,11 @@ (def: (class'' parameter) (-> (Parser (Type Parameter)) (Parser [External (List (Type Parameter))])) (|> (do <>.monad - [_ (<t>.this //descriptor.class-prefix) - name ..class-name + [name ..class-name parameters (|> (<>.some parameter) (<>.after (<t>.this //signature.parameters-start)) (<>.before (<t>.this //signature.parameters-end)) - (<>.default (list))) - _ (<t>.this //descriptor.class-suffix)] + (<>.default (list)))] (wrap [name parameters])) (<>.after (<t>.this //descriptor.class-prefix)) (<>.before (<t>.this //descriptor.class-suffix)))) @@ -152,6 +152,18 @@ (Parser (Type Class)) (..class' ..parameter)) +(template [<name> <prefix> <constructor>] + [(def: #export <name> + (-> (Type Value) (Maybe (Type Class))) + (|>> //.signature + //signature.signature + (<t>.run (<>.after (<t>.this <prefix>) ..class)) + try.maybe))] + + [lower? //signature.lower-prefix //.lower] + [upper? //signature.upper-prefix //.upper] + ) + (def: #export read-class (-> (Type Class) [External (List (Type Parameter))]) (|>> //.signature @@ -173,6 +185,12 @@ (Parser (Type Array)) (..array' ..value)) +(def: #export object + (Parser (Type Object)) + ($_ <>.either + ..class + ..array)) + (def: #export return (Parser (Type Return)) (<>.either ..void @@ -193,3 +211,24 @@ return ..return exceptions (<>.some exception)] (wrap (//.method [parameters return exceptions]))))) + +(template [<name> <category> <parser>] + [(def: #export <name> + (-> (Type Value) (Maybe <category>)) + (|>> //.signature + //signature.signature + (<t>.run <parser>) + try.maybe))] + + [array? (Type Value) + (do <>.monad + [_ (<t>.this //descriptor.array-prefix)] + ..value)] + [class? [External (List (Type Parameter))] + (..class'' ..parameter)] + + [primitive? (Type Primitive) ..primitive] + [wildcard? (Type Parameter) ..wildcard] + [parameter? (Type Parameter) ..parameter] + [object? (Type Object) ..object] + ) |