Mercurial > emacs
diff src/data.c @ 85328:d0d527210b0c
* lisp.h (enum Lisp_Misc_Type): Del Lisp_Misc_Some_Buffer_Local_Value.
(XMISCANY): New macro.
(XMISCTYPE): Use it.
(struct Lisp_Misc_Any): New type.
(union Lisp_Misc): Use it.
(struct Lisp_Buffer_Local_Value): Add `local_if_set' bit.
* data.c (Fboundp, store_symval_forwarding, swap_in_global_binding)
(find_symbol_value, set_internal, default_value, Fset_default)
(Fmake_variable_buffer_local, Fmake_local_variable)
(Fkill_local_variable, Fmake_variable_frame_local, Flocal_variable_p)
(Flocal_variable_if_set_p, Fvariable_binding_locus):
The SOME_BUFFER_LOCAL_VALUEP distinction is replaced by local_if_set.
* alloc.c (allocate_buffer): Set the size and tag.
(allocate_misc, mark_maybe_object, mark_object, survives_gc_p):
Use XMISCANY.
(die): Follow the GNU convention for error messages.
* print.c (print_object): SOME_BUFFER_LOCAL_VALUEP -> local_if_set.
* buffer.c (Fget_buffer_create, Fmake_indirect_buffer): Don't set the
tag any more.
(set_buffer_internal_1):
* frame.c (store_frame_param):
* eval.c (specbind):
* xdisp.c (select_frame_for_redisplay): Drop SOME_BUFFER_LOCAL_VALUEP.
| author | Stefan Monnier <monnier@iro.umontreal.ca> |
|---|---|
| date | Tue, 16 Oct 2007 15:42:58 +0000 |
| parents | 3fd2159a6a89 |
| children | 237166b2d28f 1251cabc40b7 |
line wrap: on
line diff
--- a/src/data.c Tue Oct 16 15:18:39 2007 +0000 +++ b/src/data.c Tue Oct 16 15:42:58 2007 +0000 @@ -584,8 +584,7 @@ valcontents = SYMBOL_VALUE (symbol); - if (BUFFER_LOCAL_VALUEP (valcontents) - || SOME_BUFFER_LOCAL_VALUEP (valcontents)) + if (BUFFER_LOCAL_VALUEP (valcontents)) valcontents = swap_in_symval_forwarding (symbol, valcontents); return (EQ (valcontents, Qunbound) ? Qnil : Qt); @@ -998,8 +997,7 @@ default: def: valcontents = SYMBOL_VALUE (symbol); - if (BUFFER_LOCAL_VALUEP (valcontents) - || SOME_BUFFER_LOCAL_VALUEP (valcontents)) + if (BUFFER_LOCAL_VALUEP (valcontents)) XBUFFER_LOCAL_VALUE (valcontents)->realvalue = newval; else SET_SYMBOL_VALUE (symbol, newval); @@ -1016,8 +1014,7 @@ Lisp_Object valcontents, cdr; valcontents = SYMBOL_VALUE (symbol); - if (!BUFFER_LOCAL_VALUEP (valcontents) - && !SOME_BUFFER_LOCAL_VALUEP (valcontents)) + if (!BUFFER_LOCAL_VALUEP (valcontents)) abort (); cdr = XBUFFER_LOCAL_VALUE (valcontents)->cdr; @@ -1106,8 +1103,7 @@ CHECK_SYMBOL (symbol); valcontents = SYMBOL_VALUE (symbol); - if (BUFFER_LOCAL_VALUEP (valcontents) - || SOME_BUFFER_LOCAL_VALUEP (valcontents)) + if (BUFFER_LOCAL_VALUEP (valcontents)) valcontents = swap_in_symval_forwarding (symbol, valcontents); if (MISCP (valcontents)) @@ -1225,8 +1221,7 @@ && !let_shadows_buffer_binding_p (symbol)) SET_PER_BUFFER_VALUE_P (buf, idx, 1); } - else if (BUFFER_LOCAL_VALUEP (valcontents) - || SOME_BUFFER_LOCAL_VALUEP (valcontents)) + else if (BUFFER_LOCAL_VALUEP (valcontents)) { /* valcontents is a struct Lisp_Buffer_Local_Value. */ if (XSYMBOL (symbol)->indirect_variable) @@ -1271,7 +1266,7 @@ indicating that we're seeing the default value. Likewise if the variable has been let-bound in the current buffer. */ - if (bindflag || SOME_BUFFER_LOCAL_VALUEP (valcontents) + if (bindflag || !XBUFFER_LOCAL_VALUE (valcontents)->local_if_set || let_shadows_buffer_binding_p (symbol)) { XBUFFER_LOCAL_VALUE (valcontents)->found_for_buffer = 0; @@ -1299,8 +1294,7 @@ } /* Record which binding is now loaded. */ - XSETCAR (XBUFFER_LOCAL_VALUE (valcontents)->cdr, - tem1); + XSETCAR (XBUFFER_LOCAL_VALUE (valcontents)->cdr, tem1); /* Set `buffer' and `frame' slots for the binding now loaded. */ XSETBUFFER (XBUFFER_LOCAL_VALUE (valcontents)->buffer, buf); @@ -1319,8 +1313,7 @@ /* If we just set a variable whose current binding is frame-local, store the new value in the frame parameter too. */ - if (BUFFER_LOCAL_VALUEP (valcontents) - || SOME_BUFFER_LOCAL_VALUEP (valcontents)) + if (BUFFER_LOCAL_VALUEP (valcontents)) { /* What binding is loaded right now? */ current_alist_element @@ -1362,8 +1355,7 @@ } /* Handle user-created local variables. */ - if (BUFFER_LOCAL_VALUEP (valcontents) - || SOME_BUFFER_LOCAL_VALUEP (valcontents)) + if (BUFFER_LOCAL_VALUEP (valcontents)) { /* If var is set up for a buffer that lacks a local value for it, the current value is nominally the default value. @@ -1447,8 +1439,7 @@ return value; } - if (!BUFFER_LOCAL_VALUEP (valcontents) - && !SOME_BUFFER_LOCAL_VALUEP (valcontents)) + if (!BUFFER_LOCAL_VALUEP (valcontents)) return Fset (symbol, value); /* Store new value into the DEFAULT-VALUE slot. */ @@ -1533,27 +1524,28 @@ if (EQ (variable, Qnil) || EQ (variable, Qt) || KBOARD_OBJFWDP (valcontents)) error ("Symbol %s may not be buffer-local", SDATA (SYMBOL_NAME (variable))); - if (BUFFER_LOCAL_VALUEP (valcontents) || BUFFER_OBJFWDP (valcontents)) + if (BUFFER_OBJFWDP (valcontents)) return variable; - if (SOME_BUFFER_LOCAL_VALUEP (valcontents)) + else if (BUFFER_LOCAL_VALUEP (valcontents)) + newval = valcontents; + else { - XMISCTYPE (SYMBOL_VALUE (variable)) = Lisp_Misc_Buffer_Local_Value; - return variable; + if (EQ (valcontents, Qunbound)) + SET_SYMBOL_VALUE (variable, Qnil); + tem = Fcons (Qnil, Fsymbol_value (variable)); + XSETCAR (tem, tem); + newval = allocate_misc (); + XMISCTYPE (newval) = Lisp_Misc_Buffer_Local_Value; + XBUFFER_LOCAL_VALUE (newval)->realvalue = SYMBOL_VALUE (variable); + XBUFFER_LOCAL_VALUE (newval)->buffer = Fcurrent_buffer (); + XBUFFER_LOCAL_VALUE (newval)->frame = Qnil; + XBUFFER_LOCAL_VALUE (newval)->found_for_buffer = 0; + XBUFFER_LOCAL_VALUE (newval)->found_for_frame = 0; + XBUFFER_LOCAL_VALUE (newval)->check_frame = 0; + XBUFFER_LOCAL_VALUE (newval)->cdr = tem; + SET_SYMBOL_VALUE (variable, newval); } - if (EQ (valcontents, Qunbound)) - SET_SYMBOL_VALUE (variable, Qnil); - tem = Fcons (Qnil, Fsymbol_value (variable)); - XSETCAR (tem, tem); - newval = allocate_misc (); - XMISCTYPE (newval) = Lisp_Misc_Buffer_Local_Value; - XBUFFER_LOCAL_VALUE (newval)->realvalue = SYMBOL_VALUE (variable); - XBUFFER_LOCAL_VALUE (newval)->buffer = Fcurrent_buffer (); - XBUFFER_LOCAL_VALUE (newval)->frame = Qnil; - XBUFFER_LOCAL_VALUE (newval)->found_for_buffer = 0; - XBUFFER_LOCAL_VALUE (newval)->found_for_frame = 0; - XBUFFER_LOCAL_VALUE (newval)->check_frame = 0; - XBUFFER_LOCAL_VALUE (newval)->cdr = tem; - SET_SYMBOL_VALUE (variable, newval); + XBUFFER_LOCAL_VALUE (newval)->local_if_set = 1; return variable; } @@ -1589,7 +1581,9 @@ if (EQ (variable, Qnil) || EQ (variable, Qt) || KBOARD_OBJFWDP (valcontents)) error ("Symbol %s may not be buffer-local", SDATA (SYMBOL_NAME (variable))); - if (BUFFER_LOCAL_VALUEP (valcontents) || BUFFER_OBJFWDP (valcontents)) + if ((BUFFER_LOCAL_VALUEP (valcontents) + && XBUFFER_LOCAL_VALUE (valcontents)->local_if_set) + || BUFFER_OBJFWDP (valcontents)) { tem = Fboundp (variable); @@ -1599,16 +1593,17 @@ return variable; } /* Make sure symbol is set up to hold per-buffer values. */ - if (!SOME_BUFFER_LOCAL_VALUEP (valcontents)) + if (!BUFFER_LOCAL_VALUEP (valcontents)) { Lisp_Object newval; tem = Fcons (Qnil, do_symval_forwarding (valcontents)); XSETCAR (tem, tem); newval = allocate_misc (); - XMISCTYPE (newval) = Lisp_Misc_Some_Buffer_Local_Value; + XMISCTYPE (newval) = Lisp_Misc_Buffer_Local_Value; XBUFFER_LOCAL_VALUE (newval)->realvalue = SYMBOL_VALUE (variable); XBUFFER_LOCAL_VALUE (newval)->buffer = Qnil; XBUFFER_LOCAL_VALUE (newval)->frame = Qnil; + XBUFFER_LOCAL_VALUE (newval)->local_if_set = 0; XBUFFER_LOCAL_VALUE (newval)->found_for_buffer = 0; XBUFFER_LOCAL_VALUE (newval)->found_for_frame = 0; XBUFFER_LOCAL_VALUE (newval)->check_frame = 0; @@ -1681,8 +1676,7 @@ return variable; } - if (!BUFFER_LOCAL_VALUEP (valcontents) - && !SOME_BUFFER_LOCAL_VALUEP (valcontents)) + if (!BUFFER_LOCAL_VALUEP (valcontents)) return variable; /* Get rid of this buffer's alist element, if any. */ @@ -1743,8 +1737,7 @@ || BUFFER_OBJFWDP (valcontents)) error ("Symbol %s may not be frame-local", SDATA (SYMBOL_NAME (variable))); - if (BUFFER_LOCAL_VALUEP (valcontents) - || SOME_BUFFER_LOCAL_VALUEP (valcontents)) + if (BUFFER_LOCAL_VALUEP (valcontents)) { XBUFFER_LOCAL_VALUE (valcontents)->check_frame = 1; return variable; @@ -1755,10 +1748,11 @@ tem = Fcons (Qnil, Fsymbol_value (variable)); XSETCAR (tem, tem); newval = allocate_misc (); - XMISCTYPE (newval) = Lisp_Misc_Some_Buffer_Local_Value; + XMISCTYPE (newval) = Lisp_Misc_Buffer_Local_Value; XBUFFER_LOCAL_VALUE (newval)->realvalue = SYMBOL_VALUE (variable); XBUFFER_LOCAL_VALUE (newval)->buffer = Qnil; XBUFFER_LOCAL_VALUE (newval)->frame = Qnil; + XBUFFER_LOCAL_VALUE (newval)->local_if_set = 0; XBUFFER_LOCAL_VALUE (newval)->found_for_buffer = 0; XBUFFER_LOCAL_VALUE (newval)->found_for_frame = 0; XBUFFER_LOCAL_VALUE (newval)->check_frame = 1; @@ -1789,8 +1783,7 @@ variable = indirect_variable (variable); valcontents = SYMBOL_VALUE (variable); - if (BUFFER_LOCAL_VALUEP (valcontents) - || SOME_BUFFER_LOCAL_VALUEP (valcontents)) + if (BUFFER_LOCAL_VALUEP (valcontents)) { Lisp_Object tail, elt; @@ -1838,15 +1831,14 @@ valcontents = SYMBOL_VALUE (variable); - /* This means that make-variable-buffer-local was done. */ - if (BUFFER_LOCAL_VALUEP (valcontents)) + if (BUFFER_OBJFWDP (valcontents)) + /* All these slots become local if they are set. */ return Qt; - /* All these slots become local if they are set. */ - if (BUFFER_OBJFWDP (valcontents)) - return Qt; - if (SOME_BUFFER_LOCAL_VALUEP (valcontents)) + else if (BUFFER_LOCAL_VALUEP (valcontents)) { Lisp_Object tail, elt; + if (XBUFFER_LOCAL_VALUE (valcontents)->local_if_set) + return Qt; for (tail = buf->local_var_alist; CONSP (tail); tail = XCDR (tail)) { elt = XCAR (tail); @@ -1877,14 +1869,13 @@ valcontents = XSYMBOL (variable)->value; if (BUFFER_LOCAL_VALUEP (valcontents) - || SOME_BUFFER_LOCAL_VALUEP (valcontents) || BUFFER_OBJFWDP (valcontents)) { /* For a local variable, record both the symbol and which buffer's or frame's value we are saving. */ if (!NILP (Flocal_variable_p (variable, Qnil))) return Fcurrent_buffer (); - else if (!BUFFER_OBJFWDP (valcontents) + else if (BUFFER_LOCAL_VALUEP (valcontents) && XBUFFER_LOCAL_VALUE (valcontents)->found_for_frame) return XBUFFER_LOCAL_VALUE (valcontents)->frame; }
