From: Richard M. Stallman Date: Sun, 29 Aug 1999 20:23:54 +0000 (+0000) Subject: (push, pop): New macros. X-Git-Tag: emacs-pretest-21.0.90~7005 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=d270117a18a28a1bebdb687fd794b5cc89f1559d;p=emacs.git (push, pop): New macros. --- 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)))