Mercurial > emacs
changeset 29618:e38bc8c4c7b3
(swap_in_global_binding): New function.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Tue, 13 Jun 2000 13:21:59 +0000 |
parents | 14aa31254532 |
children | d171b4754825 |
files | src/data.c |
diffstat | 1 files changed, 33 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/data.c Tue Jun 13 13:21:40 2000 +0000 +++ b/src/data.c Tue Jun 13 13:21:59 2000 +0000 @@ -840,6 +840,36 @@ } } +/* Set up SYMBOL to refer to its global binding. + This makes it safe to alter the status of other bindings. */ + +void +swap_in_global_binding (symbol) + Lisp_Object symbol; +{ + Lisp_Object valcontents, cdr; + + valcontents = XSYMBOL (symbol)->value; + if (!BUFFER_LOCAL_VALUEP (valcontents) + && !SOME_BUFFER_LOCAL_VALUEP (valcontents)) + abort (); + cdr = XBUFFER_LOCAL_VALUE (valcontents)->cdr; + + /* Unload the previously loaded binding. */ + Fsetcdr (XCAR (cdr), + do_symval_forwarding (XBUFFER_LOCAL_VALUE (valcontents)->realvalue)); + + /* Select the global binding in the symbol. */ + XCAR (cdr) = cdr; + store_symval_forwarding (symbol, valcontents, XCDR (cdr)); + + /* Indicate that the global binding is set up now. */ + XBUFFER_LOCAL_VALUE (valcontents)->frame = Qnil; + XBUFFER_LOCAL_VALUE (valcontents)->buffer = Qnil; + XBUFFER_LOCAL_VALUE (valcontents)->found_for_frame = 0; + XBUFFER_LOCAL_VALUE (valcontents)->found_for_buffer = 0; +} + /* Set up the buffer-local symbol SYMBOL for validity in the current buffer. VALCONTENTS is the contents of its value cell, which points to a struct Lisp_Buffer_Local_Value. @@ -1003,6 +1033,9 @@ if (NILP (buf->name)) return newval; + if (strcmp (XSYMBOL (symbol)->name->data, "foo") == 0) + fprintf (stderr, "foo\n"); + CHECK_SYMBOL (symbol, 0); if (NILP (symbol) || EQ (symbol, Qt) || (XSYMBOL (symbol)->name->data[0] == ':'