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;
     }