summaryrefslogtreecommitdiff
path: root/lisp/subr.el
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1999-08-29 20:23:54 +0000
committerRichard M. Stallman <rms@gnu.org>1999-08-29 20:23:54 +0000
commitd270117a18a28a1bebdb687fd794b5cc89f1559d (patch)
tree3ce9f2dfa1196dd03b3f5d7c5c78ff4cdc0ae8eb /lisp/subr.el
parente3c0f9ded6f68f9fded9904afaca2e7d6e5bc75a (diff)
downloademacs-d270117a18a28a1bebdb687fd794b5cc89f1559d.tar.gz
(push, pop): New macros.
Diffstat (limited to 'lisp/subr.el')
-rw-r--r--lisp/subr.el15
1 files changed, 15 insertions, 0 deletions
diff --git a/lisp/subr.el b/lisp/subr.el
index f4f695e8108..a80383467d3 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -51,6 +51,21 @@ BODY should be a list of lisp expressions."
;; depend on backquote.el.
(list 'function (cons 'lambda cdr)))
+(defmacro push (value listname)
+ "Add VALUE to the list which is the value of LISTNAME.
+This is equivalent to (setq LISTNAME (cons VALUE LISTNAME)).
+LISTNAME must be a symbol."
+ (list 'setq list
+ (list 'cons value list)))
+
+(defmacro pop (listname)
+ "Return the first element of LISTNAME's value, and remove it from the list.
+LISTNAME must be a symbol whose value is a list.
+If the value is nil, `pop' returns nil but does not actually
+change the list."
+ (list 'prog1 (list 'car listname)
+ (list 'setq listname (list 'cdr listname))))
+
(defmacro when (cond &rest body)
"(when COND BODY...): if COND yields non-nil, do BODY, else return nil."
(list 'if cond (cons 'progn body)))