aboutsummaryrefslogtreecommitdiff
path: root/source/lux/host/jvm.lux
diff options
context:
space:
mode:
Diffstat (limited to 'source/lux/host/jvm.lux')
-rw-r--r--source/lux/host/jvm.lux16
1 files changed, 15 insertions, 1 deletions
diff --git a/source/lux/host/jvm.lux b/source/lux/host/jvm.lux
index 7af043969..2c90b1ba3 100644
--- a/source/lux/host/jvm.lux
+++ b/source/lux/host/jvm.lux
@@ -11,7 +11,8 @@
(functor #as F)
(monad #as M #refer (#only do)))
(data (list #as l #refer #all #open ("" List/Functor))
- (text #as text))
+ (text #as text)
+ (number (int #open ("i" Int/Eq))))
(meta lux
macro
syntax)))
@@ -236,3 +237,16 @@
(emit (list (` (_jvm_invokestatic (~ (text$ class)) (~ (text$ m-name))
[(~@ (map text$ m-classes))]
[(~@ m-args)]))))))
+
+(defsyntax #export (->maybe expr)
+ (do Lux/Monad
+ [g!val (gensym "")]
+ (emit (list (` (;let [(~ g!val) (~ expr)]
+ (;if (null? (~ g!val))
+ #;None
+ (#;Some (~ g!val)))))))))
+
+(defsyntax #export (try$ expr)
+ (emit (list (` (try (#;Right (~ expr))
+ (~ (' (catch java.lang.Exception e
+ (#;Left (.! (getMessage [] []) e))))))))))