changeset 108005:734b50109edf

Warn rather than error when making a local var inside a let. * data.c (Fmake_variable_buffer_local, Fmake_local_variable): Just signal a warning rather than an error when inside a let. (Fmake_variable_frame_local): Add the same test.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Tue, 20 Apr 2010 13:35:16 -0400
parents 9d210d83ed69
children 452f0cc5f879 9bc5da284bcf
files src/ChangeLog src/data.c
diffstat 2 files changed, 18 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Tue Apr 20 13:17:29 2010 -0400
+++ b/src/ChangeLog	Tue Apr 20 13:35:16 2010 -0400
@@ -1,5 +1,9 @@
 2010-04-20  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+	* data.c (Fmake_variable_buffer_local, Fmake_local_variable):
+	Just signal a warning rather than an error when inside a let.
+	(Fmake_variable_frame_local): Add the same test.
+
 	* font.c (syms_of_font): Make the style table vars read-only.
 
 	* buffer.h (struct buffer): Remove unused var `direction_reversed'.
--- a/src/data.c	Tue Apr 20 13:17:29 2010 -0400
+++ b/src/data.c	Tue Apr 20 13:35:16 2010 -0400
@@ -1639,8 +1639,8 @@
 	Lisp_Object symbol;
 	XSETSYMBOL (symbol, sym); /* In case `variable' is aliased.  */
 	if (let_shadows_global_binding_p (symbol))
-	error ("Making %s buffer-local while let-bound!",
-	       SDATA (SYMBOL_NAME (variable)));
+	  message ("Making %s buffer-local while let-bound!",
+		   SDATA (SYMBOL_NAME (variable)));
       }
     }
 
@@ -1702,7 +1702,8 @@
     }
 
   if (sym->constant)
-    error ("Symbol %s may not be buffer-local", SDATA (SYMBOL_NAME (variable)));
+    error ("Symbol %s may not be buffer-local",
+	   SDATA (SYMBOL_NAME (variable)));
 
   if (blv ? blv->local_if_set
       : (forwarded && BUFFER_OBJFWDP (valcontents.fwd)))
@@ -1722,8 +1723,9 @@
 	Lisp_Object symbol;
 	XSETSYMBOL (symbol, sym); /* In case `variable' is aliased.  */
 	if (let_shadows_global_binding_p (symbol))
-	  error ("Making %s local to %s while let-bound!",
-		 SDATA (SYMBOL_NAME (variable)), SDATA (current_buffer->name));
+	  message ("Making %s local to %s while let-bound!",
+		   SDATA (SYMBOL_NAME (variable)),
+		   SDATA (current_buffer->name));
       }
     }
 
@@ -1899,6 +1901,13 @@
   blv->frame_local = 1;
   sym->redirect = SYMBOL_LOCALIZED;
   SET_SYMBOL_BLV (sym, blv);
+  {
+    Lisp_Object symbol;
+    XSETSYMBOL (symbol, sym); /* In case `variable' is aliased.  */
+    if (let_shadows_global_binding_p (symbol))
+      message ("Making %s frame-local while let-bound!",
+	       SDATA (SYMBOL_NAME (variable)));
+  }
   return variable;
 }