Mercurial > emacs
diff src/data.c @ 95407:8a703a3c84d7
(Fmake_variable_buffer_local, Fmake_local_variable)
(Fmake_variable_frame_local): Disallow mixing buffer-local and
frame-local settings for the same variable.
| author | Stefan Monnier <monnier@iro.umontreal.ca> |
|---|---|
| date | Fri, 30 May 2008 02:37:40 +0000 |
| parents | 0835cb21d60e |
| children | 4f530a89d1ee |
line wrap: on
line diff
--- a/src/data.c Fri May 30 02:37:31 2008 +0000 +++ b/src/data.c Fri May 30 02:37:40 2008 +0000 @@ -1493,7 +1493,11 @@ if (BUFFER_OBJFWDP (valcontents)) return variable; else if (BUFFER_LOCAL_VALUEP (valcontents)) - newval = valcontents; + { + if (XBUFFER_LOCAL_VALUE (valcontents)->check_frame) + error ("Symbol %s may not be buffer-local", SDATA (sym->xname)); + newval = valcontents; + } else { if (EQ (valcontents, Qunbound)) @@ -1545,7 +1549,9 @@ sym = indirect_variable (XSYMBOL (variable)); valcontents = sym->value; - if (sym->constant || KBOARD_OBJFWDP (valcontents)) + if (sym->constant || KBOARD_OBJFWDP (valcontents) + || (BUFFER_LOCAL_VALUEP (valcontents) + && (XBUFFER_LOCAL_VALUE (valcontents)->check_frame))) error ("Symbol %s may not be buffer-local", SDATA (sym->xname)); if ((BUFFER_LOCAL_VALUEP (valcontents) @@ -1709,7 +1715,8 @@ if (BUFFER_LOCAL_VALUEP (valcontents)) { - XBUFFER_LOCAL_VALUE (valcontents)->check_frame = 1; + if (!XBUFFER_LOCAL_VALUE (valcontents)->check_frame) + error ("Symbol %s may not be frame-local", SDATA (sym->xname)); return variable; }
