aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/target/jvm/type/parser.lux
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--stdlib/source/lux/target/jvm/type/parser.lux49
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]
+ )