aboutsummaryrefslogtreecommitdiff
path: root/src/lux/parser.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/lux/parser.clj')
-rw-r--r--src/lux/parser.clj18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/lux/parser.clj b/src/lux/parser.clj
index a383e78a5..bfc23fef8 100644
--- a/src/lux/parser.clj
+++ b/src/lux/parser.clj
@@ -180,6 +180,20 @@
?args)]
(return [::fn-call =f =args])))
+;; Java interop
+(do-template [<name> <ident> <tag>]
+ (defparser <name>
+ [::&lexer/list ([[::&lexer/ident <ident>] ?x ?y] :seq)]
+ (exec [=x (apply-m parse-form (list ?x))
+ =y (apply-m parse-form (list ?y))]
+ (return [<tag> =x =y])))
+
+ ^:private parse-jvm-i+ "jvm/i+" ::jvm-i+
+ ^:private parse-jvm-i- "jvm/i-" ::jvm-i-
+ ^:private parse-jvm-i* "jvm/i*" ::jvm-i*
+ ^:private parse-jvm-idiv "jvm/i/" ::jvm-idiv
+ )
+
(def ^:private parse-form
(try-all-m [parse-bool
parse-int
@@ -205,6 +219,10 @@
parse-definterface
parse-import
parse-use
+ parse-jvm-i+
+ parse-jvm-i-
+ parse-jvm-i*
+ parse-jvm-idiv
parse-fn-call]))
;; [Interface]