585 |
safe_alloca_unwind (arg) |
safe_alloca_unwind (arg) |
586 |
Lisp_Object arg; |
Lisp_Object arg; |
587 |
{ |
{ |
588 |
xfree (XSAVE_VALUE (arg)->pointer); |
register struct Lisp_Save_Value *p = XSAVE_VALUE (arg); |
589 |
|
|
590 |
|
p->dogc = 0; |
591 |
|
xfree (p->pointer); |
592 |
|
p->pointer = 0; |
593 |
return Qnil; |
return Qnil; |
594 |
} |
} |
595 |
|
|
2949 |
p = XSAVE_VALUE (val); |
p = XSAVE_VALUE (val); |
2950 |
p->pointer = pointer; |
p->pointer = pointer; |
2951 |
p->integer = integer; |
p->integer = integer; |
2952 |
|
p->dogc = 0; |
2953 |
return val; |
return val; |
2954 |
} |
} |
2955 |
|
|
4983 |
if (XMARKER (obj)->gcmarkbit) |
if (XMARKER (obj)->gcmarkbit) |
4984 |
break; |
break; |
4985 |
XMARKER (obj)->gcmarkbit = 1; |
XMARKER (obj)->gcmarkbit = 1; |
4986 |
|
|
4987 |
switch (XMISCTYPE (obj)) |
switch (XMISCTYPE (obj)) |
4988 |
{ |
{ |
4989 |
case Lisp_Misc_Buffer_Local_Value: |
case Lisp_Misc_Buffer_Local_Value: |
5008 |
/* DO NOT mark thru the marker's chain. |
/* DO NOT mark thru the marker's chain. |
5009 |
The buffer's markers chain does not preserve markers from gc; |
The buffer's markers chain does not preserve markers from gc; |
5010 |
instead, markers are removed from the chain when freed by gc. */ |
instead, markers are removed from the chain when freed by gc. */ |
5011 |
|
break; |
5012 |
|
|
5013 |
case Lisp_Misc_Intfwd: |
case Lisp_Misc_Intfwd: |
5014 |
case Lisp_Misc_Boolfwd: |
case Lisp_Misc_Boolfwd: |
5015 |
case Lisp_Misc_Objfwd: |
case Lisp_Misc_Objfwd: |
5019 |
since all markable slots in current buffer marked anyway. */ |
since all markable slots in current buffer marked anyway. */ |
5020 |
/* Don't need to do Lisp_Objfwd, since the places they point |
/* Don't need to do Lisp_Objfwd, since the places they point |
5021 |
are protected with staticpro. */ |
are protected with staticpro. */ |
5022 |
|
break; |
5023 |
|
|
5024 |
case Lisp_Misc_Save_Value: |
case Lisp_Misc_Save_Value: |
5025 |
|
{ |
5026 |
|
register struct Lisp_Save_Value *ptr = XSAVE_VALUE (obj); |
5027 |
|
/* If DOGC is set, POINTER is the address of a memory |
5028 |
|
area containing INTEGER potential Lisp_Objects. */ |
5029 |
|
if (ptr->dogc) |
5030 |
|
{ |
5031 |
|
Lisp_Object *p = (Lisp_Object *) ptr->pointer; |
5032 |
|
int nelt; |
5033 |
|
for (nelt = ptr->integer; nelt > 0; nelt--, p++) |
5034 |
|
mark_maybe_object (*p); |
5035 |
|
} |
5036 |
|
} |
5037 |
break; |
break; |
5038 |
|
|
5039 |
case Lisp_Misc_Overlay: |
case Lisp_Misc_Overlay: |