changeset 1630:6c996a26d761

[xemacs-hg @ 2003-08-18 20:30:49 by james] Fix edebug problem caused by making a variable buffer-local before the defvar.
author james
date Mon, 18 Aug 2003 20:30:51 +0000
parents 632411c376d0
children 1bf7b032a45d
files src/ChangeLog src/bytecode.c
diffstat 2 files changed, 12 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Mon Aug 18 19:51:18 2003 +0000
+++ b/src/ChangeLog	Mon Aug 18 20:30:51 2003 +0000
@@ -1,3 +1,8 @@
+2003-08-18  Jerry James  <james@xemacs.org>
+
+	* bytecode.c (execute_optimized_program): Setting a buffer-local
+	variable with no default binding sets the default.
+
 2003-08-18  Jerry James  <james@xemacs.org>
 
 	* opaque.h: Remove unused (X)OPAQUE_MARKFUN definitions.
--- a/src/bytecode.c	Mon Aug 18 19:51:18 2003 +0000
+++ b/src/bytecode.c	Mon Aug 18 20:30:51 2003 +0000
@@ -540,7 +540,13 @@
 	  Lisp_Symbol *symbol_ptr = XSYMBOL (symbol);
 	  Lisp_Object old_value = symbol_ptr->value;
 	  Lisp_Object new_value = POP;
-	  if (!SYMBOL_VALUE_MAGIC_P (old_value) || UNBOUNDP (old_value))
+	  if (SYMBOL_VALUE_MAGIC_P (old_value) &&
+	      (XSYMBOL_VALUE_MAGIC_TYPE (old_value) == SYMVAL_BUFFER_LOCAL ||
+	       XSYMBOL_VALUE_MAGIC_TYPE (old_value) ==
+	       SYMVAL_SOME_BUFFER_LOCAL) &&
+	      NILP (Fdefault_boundp (symbol)))
+	    Fset_default (symbol, new_value);
+	  else if (!SYMBOL_VALUE_MAGIC_P (old_value) || UNBOUNDP (old_value))
 	    symbol_ptr->value = new_value;
 	  else
 	    Fset (symbol, new_value);