emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/alloc.c


From: Kim F . Storm
Subject: [Emacs-diffs] Changes to emacs/src/alloc.c
Date: Tue, 22 Jun 2004 09:56:32 -0400

Index: emacs/src/alloc.c
diff -c emacs/src/alloc.c:1.344 emacs/src/alloc.c:1.345
*** emacs/src/alloc.c:1.344     Mon Jun 21 21:51:50 2004
--- emacs/src/alloc.c   Tue Jun 22 13:56:34 2004
***************
*** 585,591 ****
  safe_alloca_unwind (arg)
       Lisp_Object arg;
  {
!   xfree (XSAVE_VALUE (arg)->pointer);
    return Qnil;
  }
  
--- 585,595 ----
  safe_alloca_unwind (arg)
       Lisp_Object arg;
  {
!   register struct Lisp_Save_Value *p = XSAVE_VALUE (arg);
! 
!   p->dogc = 0;
!   xfree (p->pointer);
!   p->pointer = 0;
    return Qnil;
  }
  
***************
*** 2945,2950 ****
--- 2949,2955 ----
    p = XSAVE_VALUE (val);
    p->pointer = pointer;
    p->integer = integer;
+   p->dogc = 0;
    return val;
  }
  
***************
*** 4978,4983 ****
--- 4983,4989 ----
        if (XMARKER (obj)->gcmarkbit)
        break;
        XMARKER (obj)->gcmarkbit = 1;
+ 
        switch (XMISCTYPE (obj))
        {
        case Lisp_Misc_Buffer_Local_Value:
***************
*** 5002,5007 ****
--- 5008,5015 ----
          /* DO NOT mark thru the marker's chain.
             The buffer's markers chain does not preserve markers from gc;
             instead, markers are removed from the chain when freed by gc.  */
+         break;
+ 
        case Lisp_Misc_Intfwd:
        case Lisp_Misc_Boolfwd:
        case Lisp_Misc_Objfwd:
***************
*** 5011,5017 ****
--- 5019,5039 ----
             since all markable slots in current buffer marked anyway.  */
          /* Don't need to do Lisp_Objfwd, since the places they point
             are protected with staticpro.  */
+         break;
+ 
        case Lisp_Misc_Save_Value:
+         {
+           register struct Lisp_Save_Value *ptr = XSAVE_VALUE (obj);
+           /* If DOGC is set, POINTER is the address of a memory
+              area containing INTEGER potential Lisp_Objects.  */
+           if (ptr->dogc)
+             {
+               Lisp_Object *p = (Lisp_Object *) ptr->pointer;
+               int nelt;
+               for (nelt = ptr->integer; nelt > 0; nelt--, p++)
+                 mark_maybe_object (*p);
+             }
+         }
          break;
  
        case Lisp_Misc_Overlay:




reply via email to

[Prev in Thread] Current Thread [Next in Thread]