[Top][All Lists]
[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: