aboutsummaryrefslogtreecommitdiffstats
path: root/src/alloc.c
diff options
context:
space:
mode:
authorStefan Monnier2011-02-17 21:07:36 -0500
committerStefan Monnier2011-02-17 21:07:36 -0500
commitb286858c7a0d5dafa302b9e88970c13385358a6a (patch)
tree37aca1554bbef09ef09256d7162e619222dbb4a1 /src/alloc.c
parent3804652098c7c8824f332e92846a3b8896b9e683 (diff)
downloademacs-b286858c7a0d5dafa302b9e88970c13385358a6a.tar.gz
emacs-b286858c7a0d5dafa302b9e88970c13385358a6a.zip
Don't GC-scan stack data redundantly.
* src/alloc.c (Fgarbage_collect): When using stack scanning, don't redundantly scan byte-code stacks, catchlist, and handlerlist. * src/bytecode.c (BYTE_MAINTAIN_TOP): New macros. (struct byte_stack): Only define `top' and `bottom' if used. (mark_byte_stack): Only define if used. (BEFORE_POTENTIAL_GC, AFTER_POTENTIAL_GC): Nullify if BYTE_MAINTAIN_TOP is not set. (Fbyte_code): Don't set `bottom' unless BYTE_MAINTAIN_TOP is set. * src/lisp.h (BYTE_MARK_STACK): New macro. (mark_byte_stack): Only declare if BYTE_MARK_STACK is set. * src/term.c (OUTPUT_IF): Use OUTPUT.
Diffstat (limited to 'src/alloc.c')
-rw-r--r--src/alloc.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/alloc.c b/src/alloc.c
index 566c6fe00b9..e8b8f45e9b1 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -4842,8 +4842,6 @@ returns nil, because real GC can't be done. */)
4842 (void) 4842 (void)
4843{ 4843{
4844 register struct specbinding *bind; 4844 register struct specbinding *bind;
4845 struct catchtag *catch;
4846 struct handler *handler;
4847 char stack_top_variable; 4845 char stack_top_variable;
4848 register int i; 4846 register int i;
4849 int message_p; 4847 int message_p;
@@ -4972,9 +4970,11 @@ returns nil, because real GC can't be done. */)
4972 for (i = 0; i < tail->nvars; i++) 4970 for (i = 0; i < tail->nvars; i++)
4973 mark_object (tail->var[i]); 4971 mark_object (tail->var[i]);
4974 } 4972 }
4975#endif
4976
4977 mark_byte_stack (); 4973 mark_byte_stack ();
4974 {
4975 struct catchtag *catch;
4976 struct handler *handler;
4977
4978 for (catch = catchlist; catch; catch = catch->next) 4978 for (catch = catchlist; catch; catch = catch->next)
4979 { 4979 {
4980 mark_object (catch->tag); 4980 mark_object (catch->tag);
@@ -4985,7 +4985,9 @@ returns nil, because real GC can't be done. */)
4985 mark_object (handler->handler); 4985 mark_object (handler->handler);
4986 mark_object (handler->var); 4986 mark_object (handler->var);
4987 } 4987 }
4988 }
4988 mark_backtrace (); 4989 mark_backtrace ();
4990#endif
4989 4991
4990#ifdef HAVE_WINDOW_SYSTEM 4992#ifdef HAVE_WINDOW_SYSTEM
4991 mark_fringe_data (); 4993 mark_fringe_data ();