summaryrefslogtreecommitdiff
path: root/macros/core.fnl
diff options
context:
space:
mode:
authorAndrey Orst <andreyorst@gmail.com>2020-11-08 21:13:47 +0300
committerAndrey Orst <andreyorst@gmail.com>2020-11-08 21:13:47 +0300
commit910bfcf768c2305a6885b0d1f491561d09ebd9ca (patch)
treecd88174ffdb222df8b61ecf68796452580d9dee4 /macros/core.fnl
parentcf18cb390b2ba9ac852b52b22beb9fda0d4ab7d2 (diff)
feature(macros): add metadata macros, doc, and some tests
Diffstat (limited to 'macros/core.fnl')
-rw-r--r--macros/core.fnl25
1 files changed, 15 insertions, 10 deletions
diff --git a/macros/core.fnl b/macros/core.fnl
index b073d27..def2f4c 100644
--- a/macros/core.fnl
+++ b/macros/core.fnl
@@ -1,7 +1,8 @@
-(import-macros {: fn* : fn&} :macros.fn)
+(require-macros :macros.fn)
(local core {})
(local unpack (or table.unpack _G.unpack))
(local insert table.insert)
+(local meta-enabled (pcall _SCOPE.specials.doc (list (sym :doc) (sym :doc)) _SCOPE _CHUNK))
(fn multisym->sym [s]
(if (multi-sym? s)
@@ -152,18 +153,22 @@
(fn string? [x]
(= (type x) :string))
+(fn& core.when-meta [...]
+ (when meta-enabled `(do ,...)))
+
(fn* core.with-meta [val meta]
- `(let [val# ,val
- (res# fennel#) (pcall require :fennel)]
- (if res#
- (each [k# v# (pairs ,meta)]
- (fennel#.metadata:set val# k# v#)))
- val#))
+ (if (not meta-enabled) val
+ `(let [val# ,val
+ (res# fennel#) (pcall require :fennel)]
+ (if res#
+ (each [k# v# (pairs ,meta)]
+ (fennel#.metadata:set val# k# v#)))
+ val#)))
(fn* core.meta [v]
- `(let [(res# fennel#) (pcall require :fennel)]
- (if res#
- (. fennel#.metadata ,v))))
+ (when-meta
+ `(let [(res# fennel#) (pcall require :fennel)]
+ (if res# (. fennel#.metadata ,v)))))
(fn* core.defmulti
[name & opts]