aboutsummaryrefslogtreecommitdiffstats
path: root/src/data.c
diff options
context:
space:
mode:
authorStefan Monnier <[email protected]>2008-05-30 02:37:40 +0000
committerStefan Monnier <[email protected]>2008-05-30 02:37:40 +0000
commitfd9440c58241b6a9f6da824522d2f666d54412aa (patch)
treedd871520a01a2503d8e9261a34fdb02687f5a8db /src/data.c
parent7736dabea784c9fb44b3d1a9a1882a5ff3e16271 (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.c13
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;
}