aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/test/lux/macro/local.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/test/lux/macro/local.lux')
-rw-r--r--stdlib/source/test/lux/macro/local.lux62
1 files changed, 32 insertions, 30 deletions
diff --git a/stdlib/source/test/lux/macro/local.lux b/stdlib/source/test/lux/macro/local.lux
index a38dc8be7..de1073f55 100644
--- a/stdlib/source/test/lux/macro/local.lux
+++ b/stdlib/source/test/lux/macro/local.lux
@@ -18,7 +18,7 @@
[dictionary
["[0]" plist]]]]
["[0]" macro (.only)
- [syntax (.only syntax:)]
+ [syntax (.only syntax)]
["[0]" code]]
[math
["[0]" random (.only Random)]
@@ -27,14 +27,15 @@
[\\library
["[0]" /]])
-(syntax: (macro_error [macro <code>.any])
- (function (_ compiler)
- (case ((macro.expansion macro) compiler)
- {try.#Failure error}
- {try.#Success [compiler (list (code.text error))]}
-
- {try.#Success _}
- {try.#Failure "OOPS!"})))
+(def: macro_error
+ (syntax (_ [macro <code>.any])
+ (function (_ compiler)
+ (case ((macro.expansion macro) compiler)
+ {try.#Failure error}
+ {try.#Success [compiler (list (code.text error))]}
+
+ {try.#Success _}
+ {try.#Failure "OOPS!"}))))
(def: (constant output)
(-> Code Macro)
@@ -42,27 +43,28 @@
(function (_ inputs lux)
{try.#Success [lux (list output)]})))
-(syntax: (with [name (<code>.tuple (<>.and <code>.text <code>.text))
- constant <code>.any
- pre_remove <code>.bit
- body <code>.any])
- (macro.with_symbols [g!output]
- (do meta.monad
- [pop! (/.push (list [name (..constant constant)]))
- [module short] (meta.normal name)
- _ (if pre_remove
- (let [remove_macro! (is (-> .Module .Module)
- (revised .#definitions (plist.lacks short)))]
- (function (_ lux)
- {try.#Success [(revised .#modules (plist.revised module remove_macro!) lux)
- []]}))
- (in []))]
- (let [pre_expansion (` (let [(~ g!output) (~ body)]
- (exec (~ pop!)
- (~ g!output))))]
- (if pre_remove
- (macro.full_expansion pre_expansion)
- (in (list pre_expansion)))))))
+(def: with
+ (syntax (_ [name (<code>.tuple (<>.and <code>.text <code>.text))
+ constant <code>.any
+ pre_remove <code>.bit
+ body <code>.any])
+ (macro.with_symbols [g!output]
+ (do meta.monad
+ [pop! (/.push (list [name (..constant constant)]))
+ [module short] (meta.normal name)
+ _ (if pre_remove
+ (let [remove_macro! (is (-> .Module .Module)
+ (revised .#definitions (plist.lacks short)))]
+ (function (_ lux)
+ {try.#Success [(revised .#modules (plist.revised module remove_macro!) lux)
+ []]}))
+ (in []))]
+ (let [pre_expansion (` (let [(~ g!output) (~ body)]
+ (exec (~ pop!)
+ (~ g!output))))]
+ (if pre_remove
+ (macro.full_expansion pre_expansion)
+ (in (list pre_expansion))))))))
(def: .public test
Test