Mercurial > emacs
changeset 11130:052869c2f609
(Fplist_put, Fplist_get): New fns.
(Fget): Use Fplist_get to do the work.
(Fput): Use Fplist_put to do the work.
author | Boris Goldowsky <boris@gnu.org> |
---|---|
date | Mon, 27 Mar 1995 16:02:44 +0000 |
parents | 2ce4b0aac50c |
children | 5db8a01b22cb |
files | src/fns.c |
diffstat | 1 files changed, 49 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/src/fns.c Mon Mar 27 16:02:00 1995 +0000 +++ b/src/fns.c Mon Mar 27 16:02:44 1995 +0000 @@ -828,15 +828,19 @@ } } -DEFUN ("get", Fget, Sget, 2, 2, 0, - "Return the value of SYMBOL's PROPNAME property.\n\ -This is the last VALUE stored with `(put SYMBOL PROPNAME VALUE)'.") - (sym, prop) - Lisp_Object sym; + +DEFUN ("plist-get", Fplist_get, Splist_get, 2, 2, 0, + "Extract a value from a property list.\n\ +PLIST is a property list, which is a list of the form\n\ +(PROP1 VALUE1 PROP2 VALUE2...). This function returns the value\n\ +corresponding to the given PROP, or nil if PROP is not\n\ +one of the properties on the list.") + (val, prop) + Lisp_Object val; register Lisp_Object prop; { register Lisp_Object tail; - for (tail = Fsymbol_plist (sym); !NILP (tail); tail = Fcdr (Fcdr (tail))) + for (tail = val; !NILP (tail); tail = Fcdr (Fcdr (tail))) { register Lisp_Object tem; tem = Fcar (tail); @@ -846,30 +850,57 @@ return Qnil; } -DEFUN ("put", Fput, Sput, 3, 3, 0, - "Store SYMBOL's PROPNAME property with value VALUE.\n\ -It can be retrieved with `(get SYMBOL PROPNAME)'.") - (sym, prop, val) - Lisp_Object sym; - register Lisp_Object prop; - Lisp_Object val; +DEFUN ("get", Fget, Sget, 2, 2, 0, + "Return the value of SYMBOL's PROPNAME property.\n\ +This is the last VALUE stored with `(put SYMBOL PROPNAME VALUE)'.") + (sym, prop) + Lisp_Object sym, prop; +{ + return Fplist_get (Fsymbol_plist (sym), prop); +} + +DEFUN ("plist-put", Fplist_put, Splist_put, 3, 3, 0, + "Change value in PLIST of PROP to VAL.\n\ +PLIST is a property list, which is a list of the form\n\ +(PROP1 VALUE1 PROP2 VALUE2 ...). PROP is a symbol and VAL is any object.\n\ +If PROP is already a property on the list, its value is set to VAL,\n\ +otherwise the new PROP VAL pair is added. The new plist is returned; +use `(setq x (plist-put x prop val))' to be sure to use the new value.\n\ +The PLIST is modified by side effects.") + (plist, prop, val) + Lisp_Object plist; + register Lisp_Object prop; + Lisp_Object val; { register Lisp_Object tail, prev; Lisp_Object newcell; prev = Qnil; - for (tail = Fsymbol_plist (sym); !NILP (tail); tail = Fcdr (Fcdr (tail))) + for (tail = plist; !NILP (tail); tail = Fcdr (Fcdr (tail))) { register Lisp_Object tem; tem = Fcar (tail); if (EQ (prop, tem)) - return Fsetcar (Fcdr (tail), val); + { + Fsetcar (Fcdr (tail), val); + return plist; + } prev = tail; } newcell = Fcons (prop, Fcons (val, Qnil)); if (NILP (prev)) - Fsetplist (sym, newcell); + return newcell; else Fsetcdr (Fcdr (prev), newcell); + return plist; +} + +DEFUN ("put", Fput, Sput, 3, 3, 0, + "Store SYMBOL's PROPNAME property with value VALUE.\n\ +It can be retrieved with `(get SYMBOL PROPNAME)'.") + (sym, prop, val) + Lisp_Object sym, prop, val; +{ + Fsetplist (sym, Fplist_put (Fsymbol_plist (sym), prop, val)); return val; } @@ -1490,7 +1521,9 @@ defsubr (&Snreverse); defsubr (&Sreverse); defsubr (&Ssort); + defsubr (&Splist_get); defsubr (&Sget); + defsubr (&Splist_put); defsubr (&Sput); defsubr (&Sequal); defsubr (&Sfillarray);