summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Kost <alezost@gmail.com>2015-08-16 06:46:52 +0300
committerAlex Kost <alezost@gmail.com>2015-08-30 18:26:01 +0300
commit6543601fa05b629b387d1da0b5fc5fe81ecaf24c (patch)
tree9dc42e1bb6cbe2849aa075c997c0e83d7159b10e
parente767752c79975d30341f71d7f9de88edeb192d59 (diff)
emacs: Add 'guix-memoized-defalias' macro.
* emacs/guix-utils.el (guix-memoized-defalias): New macro. (guix-memoized-font-lock-keywords): New variable.
-rw-r--r--emacs/guix-utils.el21
1 files changed, 21 insertions, 0 deletions
diff --git a/emacs/guix-utils.el b/emacs/guix-utils.el
index fb1ca60654..0b8a760af8 100644
--- a/emacs/guix-utils.el
+++ b/emacs/guix-utils.el
@@ -262,6 +262,27 @@ See `defun' for the meaning of arguments."
(mapconcat #'symbol-name arglist " ")
docstring)))
+(defmacro guix-memoized-defalias (symbol definition &optional docstring)
+ "Set SYMBOL's function definition to memoized version of DEFINITION."
+ (declare (doc-string 3) (indent 1))
+ `(defalias ',symbol
+ (guix-memoize #',definition)
+ ,(or docstring
+ (format "Memoized version of `%S'." definition))))
+
+(defvar guix-memoized-font-lock-keywords
+ (eval-when-compile
+ `((,(rx "("
+ (group "guix-memoized-" (or "defun" "defalias"))
+ symbol-end
+ (zero-or-more blank)
+ (zero-or-one
+ (group (one-or-more (or (syntax word) (syntax symbol))))))
+ (1 font-lock-keyword-face)
+ (2 font-lock-function-name-face nil t)))))
+
+(font-lock-add-keywords 'emacs-lisp-mode guix-memoized-font-lock-keywords)
+
(provide 'guix-utils)
;;; guix-utils.el ends here