From 910bfcf768c2305a6885b0d1f491561d09ebd9ca Mon Sep 17 00:00:00 2001 From: Andrey Orst Date: Sun, 8 Nov 2020 21:13:47 +0300 Subject: feature(macros): add metadata macros, doc, and some tests --- macros/core.fnl | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'macros/core.fnl') 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] -- cgit v1.2.3