From 92b44eae2e4d17f1115f65abd327ab45af684c8a Mon Sep 17 00:00:00 2001 From: Konrad Hinsen Date: Mon, 25 May 2009 08:17:36 +0000 Subject: macro-utils: new macro deftemplate --- src/clojure/contrib/macro_utils.clj | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/clojure') diff --git a/src/clojure/contrib/macro_utils.clj b/src/clojure/contrib/macro_utils.clj index 191f07f7..a243a5f9 100644 --- a/src/clojure/contrib/macro_utils.clj +++ b/src/clojure/contrib/macro_utils.clj @@ -1,7 +1,7 @@ ;; Macrolet and symbol-macrolet ;; by Konrad Hinsen -;; last updated May 5, 2009 +;; last updated May 25, 2009 ;; Copyright (c) Konrad Hinsen, 2009. All rights reserved. The use ;; and distribution terms for this software are covered by the Eclipse @@ -211,6 +211,18 @@ [& exprs] `(do ~@(doall (map expand-all exprs)))) +(defmacro deftemplate + "Define a macro that expands into forms after replacing the + symbols in params (a vector) by the corresponding parameters + given in the macro call." + [name params & forms] + (let [param-map (for [p params] (list (list 'quote p) (gensym))) + template-params (vec (map second param-map)) + param-map (vec (apply concat param-map)) + expansion (list 'list (list 'quote `symbol-macrolet) param-map + (list 'quote (cons 'do forms)))] + `(defmacro ~name ~template-params ~expansion))) + (defn mexpand-1 "Like clojure.core/macroexpand-1, but takes into account symbol macros." [form] -- cgit v1.2.3-18-g5258