diff options
author | Stefan Monnier <[email protected]> | 2008-05-30 02:37:40 +0000 |
---|---|---|
committer | Stefan Monnier <[email protected]> | 2008-05-30 02:37:40 +0000 |
commit | fd9440c58241b6a9f6da824522d2f666d54412aa (patch) | |
tree | dd871520a01a2503d8e9261a34fdb02687f5a8db /src/data.c | |
parent | 7736dabea784c9fb44b3d1a9a1882a5ff3e16271 (diff) |
(Fmake_variable_buffer_local, Fmake_local_variable)
(Fmake_variable_frame_local): Disallow mixing buffer-local and
frame-local settings for the same variable.
Diffstat (limited to 'src/data.c')
-rw-r--r-- | src/data.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/data.c b/src/data.c index f86d5c7c61..8ee41ba852 100644 --- a/src/data.c +++ b/src/data.c @@ -1493,7 +1493,11 @@ The function `default-value' gets the default value and `set-default' sets it. 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 @@ Instead, use `add-hook' and specify t for the LOCAL argument. */) 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 @@ Buffer-local bindings take precedence over frame-local bindings. */) 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; } |