changeset 86082:8743273c407c

(swap_in_global_binding): Fix longstanding bug where store_symval_forwarding was not called with the right second argument, thus causing objfwd-ing from being dropped.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Thu, 15 Nov 2007 06:00:07 +0000
parents 1f9bb7803baa
children 2fd69da606fa
files src/ChangeLog src/data.c
diffstat 2 files changed, 15 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Thu Nov 15 04:19:04 2007 +0000
+++ b/src/ChangeLog	Thu Nov 15 06:00:07 2007 +0000
@@ -1,3 +1,9 @@
+2007-11-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* data.c (swap_in_global_binding): Fix longstanding bug where
+	store_symval_forwarding was not called with the right second argument,
+	thus causing objfwd-ing from being dropped.
+
 2007-11-14  Juanma Barranquero  <lekktu@gmail.com>
 
 	* macfns.c (Fx_create_frame, Fx_display_pixel_width)
--- a/src/data.c	Thu Nov 15 04:19:04 2007 +0000
+++ b/src/data.c	Thu Nov 15 06:00:07 2007 +0000
@@ -1011,26 +1011,23 @@
 swap_in_global_binding (symbol)
      Lisp_Object symbol;
 {
-  Lisp_Object valcontents, cdr;
-
-  valcontents = SYMBOL_VALUE (symbol);
-  if (!BUFFER_LOCAL_VALUEP (valcontents))
-    abort ();
-  cdr = XBUFFER_LOCAL_VALUE (valcontents)->cdr;
+  Lisp_Object valcontents = SYMBOL_VALUE (symbol);
+  struct Lisp_Buffer_Local_Value *blv = XBUFFER_LOCAL_VALUE (valcontents);
+  Lisp_Object cdr = blv->cdr;
 
   /* Unload the previously loaded binding.  */
   Fsetcdr (XCAR (cdr),
-	   do_symval_forwarding (XBUFFER_LOCAL_VALUE (valcontents)->realvalue));
+	   do_symval_forwarding (blv->realvalue));
 
   /* Select the global binding in the symbol.  */
   XSETCAR (cdr, cdr);
-  store_symval_forwarding (symbol, valcontents, XCDR (cdr), NULL);
+  store_symval_forwarding (symbol, blv->realvalue, XCDR (cdr), NULL);
 
   /* Indicate that the global binding is set up now.  */
-  XBUFFER_LOCAL_VALUE (valcontents)->frame = Qnil;
-  XBUFFER_LOCAL_VALUE (valcontents)->buffer = Qnil;
-  XBUFFER_LOCAL_VALUE (valcontents)->found_for_frame = 0;
-  XBUFFER_LOCAL_VALUE (valcontents)->found_for_buffer = 0;
+  blv->frame = Qnil;
+  blv->buffer = Qnil;
+  blv->found_for_frame = 0;
+  blv->found_for_buffer = 0;
 }
 
 /* Set up the buffer-local symbol SYMBOL for validity in the current buffer.