summaryrefslogtreecommitdiff
path: root/macros
diff options
context:
space:
mode:
Diffstat (limited to 'macros')
-rw-r--r--macros/core.fnl25
-rw-r--r--macros/fn.fnl18
2 files changed, 25 insertions, 18 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]
diff --git a/macros/fn.fnl b/macros/fn.fnl
index 2d4a753..24f909d 100644
--- a/macros/fn.fnl
+++ b/macros/fn.fnl
@@ -1,14 +1,16 @@
(local unpack (or table.unpack _G.unpack))
(local insert table.insert)
(local sort table.sort)
+(local meta-enabled (pcall _SCOPE.specials.doc (list (sym :doc) (sym :doc)) _SCOPE _CHUNK))
(fn 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 gen-arglist-doc [args]
(if (list? (. args 1))
@@ -252,8 +254,8 @@ namespaced functions. See `fn*' for more info."
(let [docstring (if (string? doc?) doc? nil)
(name-wo-namespace namespaced?) (multisym->sym name)
arg-list (if (sym? name-wo-namespace)
- (if (string? doc?) args doc?)
- name-wo-namespace)
+ (if (string? doc?) args doc?)
+ name-wo-namespace)
arglist-doc (gen-arglist-doc arg-list)
body (if (sym? name)
(if (string? doc?)