Changeset 3670
- Timestamp:
- 04/07/05 08:55:40 (4 years ago)
- Files:
-
- branches/2.2/src/ChangeLog.Meadow (modified) (1 diff)
- branches/2.2/src/alloc.c (modified) (12 diffs)
- branches/2.2/src/bytecode.c (modified) (2 diffs)
- branches/2.2/src/eval.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/2.2/src/ChangeLog.Meadow
r3669 r3670 1 2005-04-07 MIYOSHI Masanori <miyoshi@meadowy.org> 2 3 * alloc.c (struct backtrace): Removed. 4 (Fgarbage_collect): Sync up with Emacs CVS HEAD. 5 (mark_object): Ditto. 6 (mark_buffer): Ditto. 7 (survives_gc_p): Ditto. 8 (gc_sweep): Ditto. 9 10 * bytecode.c (mark_byte_stack): Ditto. 11 (unmark_byte_stack): Ditto. 12 13 * eval.c (mark_backtrace): Ditto. 14 1 15 2005-04-07 MIYOSHI Masanori <miyoshi@meadowy.org> 2 16 branches/2.2/src/alloc.c
r3669 r3670 4659 4659 }; 4660 4660 4661 struct backtrace4662 {4663 struct backtrace *next;4664 Lisp_Object *function;4665 Lisp_Object *args; /* Points to vector of args. */4666 int nargs; /* Length of vector. */4667 /* If nargs is UNEVALLED, args points to slot holding list of4668 unevalled args. */4669 char evalargs;4670 };4671 4672 4673 4661 4674 4662 /*********************************************************************** … … 4702 4690 () 4703 4691 { 4704 register struct gcpro *tail;4705 4692 register struct specbinding *bind; 4706 4693 struct catchtag *catch; 4707 4694 struct handler *handler; 4708 register struct backtrace *backlist;4709 4695 char stack_top_variable; 4710 4696 register int i; … … 4828 4814 mark_stack (); 4829 4815 #else 4830 for (tail = gcprolist; tail; tail = tail->next) 4831 for (i = 0; i < tail->nvars; i++) 4832 if (!XMARKBIT (tail->var[i])) 4833 { 4834 /* Explicit casting prevents compiler warning about 4835 discarding the `volatile' qualifier. */ 4836 mark_object (tail->var[i]); 4837 XMARK (tail->var[i]); 4838 } 4816 { 4817 register struct gcpro *tail; 4818 for (tail = gcprolist; tail; tail = tail->next) 4819 for (i = 0; i < tail->nvars; i++) 4820 mark_object (tail->var[i]); 4821 } 4839 4822 #endif 4840 4823 … … 4912 4895 /* Clear the mark bits that we set in certain root slots. */ 4913 4896 4914 #if (GC_MARK_STACK == GC_USE_GCPROS_AS_BEFORE \4915 || GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES)4916 for (tail = gcprolist; tail; tail = tail->next)4917 for (i = 0; i < tail->nvars; i++)4918 XUNMARK (tail->var[i]);4919 #endif4920 4921 4897 unmark_byte_stack (); 4922 for (backlist = backtrace_list; backlist; backlist = backlist->next) 4923 { 4924 XUNMARK (*backlist->function); 4925 if (backlist->nargs == UNEVALLED || backlist->nargs == MANY) 4926 i = 0; 4927 else 4928 i = backlist->nargs - 1; 4929 for (; i >= 0; i--) 4930 XUNMARK (backlist->args[i]); 4931 } 4932 XUNMARK (buffer_defaults.name); 4933 XUNMARK (buffer_local_symbols.name); 4898 VECTOR_UNMARK (&buffer_defaults); 4899 VECTOR_UNMARK (&buffer_local_symbols); 4934 4900 4935 4901 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES && 0 … … 5182 5148 case Lisp_Misc: 5183 5149 case Lisp_Float: 5150 case Lisp_Vectorlike: 5151 case Lisp_Symbol: 5152 case Lisp_String: 5184 5153 break; 5185 5154 5186 case Lisp_Symbol:5187 case Lisp_String:5188 case Lisp_Vectorlike:5189 5155 case Lisp_Cons: 5190 5156 XUNMARK (obj); … … 5222 5188 if (GC_BUFFERP (obj)) 5223 5189 { 5224 if (! XMARKBIT (XBUFFER (obj)->name))5190 if (!VECTOR_MARKED_P (XBUFFER (obj))) 5225 5191 { 5226 5192 #ifdef GC_CHECK_MARKED_OBJECTS … … 5542 5508 Lisp_Object base_buffer; 5543 5509 5544 /* This is the buffer's markbit */ 5545 mark_object (buffer->name); 5546 XMARK (buffer->name); 5510 VECTOR_MARK (buffer); 5547 5511 5548 5512 MARK_INTERVAL_TREE (BUF_INTERVALS (buffer)); … … 5563 5527 } 5564 5528 5565 for (ptr = &buffer->name + 1;5529 for (ptr = &buffer->name; 5566 5530 (char *)ptr < (char *)buffer + sizeof (struct buffer); 5567 5531 ptr++) … … 5569 5533 5570 5534 /* If this is an indirect buffer, mark its base buffer. */ 5571 if (buffer->base_buffer && ! XMARKBIT (buffer->base_buffer->name))5535 if (buffer->base_buffer && !VECTOR_MARKED_P (buffer->base_buffer)) 5572 5536 { 5573 5537 XSETBUFFER (base_buffer, buffer->base_buffer); … … 5605 5569 5606 5570 case Lisp_Vectorlike: 5607 if (GC_BUFFERP (obj)) 5608 survives_p = XMARKBIT (XBUFFER (obj)->name); 5609 else if (GC_SUBRP (obj)) 5610 survives_p = 1; 5611 else 5612 survives_p = VECTOR_MARKED_P (XVECTOR (obj)); 5571 survives_p = GC_SUBRP (obj) || VECTOR_MARKED_P (XVECTOR (obj)); 5613 5572 break; 5614 5573 … … 5917 5876 5918 5877 while (buffer) 5919 if (! XMARKBIT (buffer->name))5878 if (!VECTOR_MARKED_P (buffer)) 5920 5879 { 5921 5880 if (prev) … … 5929 5888 else 5930 5889 { 5931 XUNMARK (buffer->name);5890 VECTOR_UNMARK (buffer); 5932 5891 UNMARK_BALANCE_INTERVALS (BUF_INTERVALS (buffer)); 5933 5892 prev = buffer, buffer = buffer->next; branches/2.2/src/bytecode.c
r3665 r3670 290 290 291 291 for (obj = stack->bottom; obj <= stack->top; ++obj) 292 if (!XMARKBIT (*obj)) 293 { 294 mark_object (*obj); 295 XMARK (*obj); 296 } 297 298 if (!XMARKBIT (stack->byte_string)) 299 { 300 mark_object (stack->byte_string); 301 XMARK (stack->byte_string); 302 } 303 304 if (!XMARKBIT (stack->constants)) 305 { 306 mark_object (stack->constants); 307 XMARK (stack->constants); 308 } 292 mark_object (*obj); 293 294 mark_object (stack->byte_string); 295 mark_object (stack->constants); 309 296 } 310 297 } … … 318 305 { 319 306 struct byte_stack *stack; 320 Lisp_Object *obj;321 307 322 308 for (stack = byte_stack_list; stack; stack = stack->next) 323 309 { 324 for (obj = stack->bottom; obj <= stack->top; ++obj)325 XUNMARK (*obj);326 327 XUNMARK (stack->byte_string);328 XUNMARK (stack->constants);329 310 if (stack->byte_string_start != SDATA (stack->byte_string)) 330 311 { branches/2.2/src/eval.c
r3665 r3670 3320 3320 for (backlist = backtrace_list; backlist; backlist = backlist->next) 3321 3321 { 3322 if (!XMARKBIT (*backlist->function)) 3323 { 3324 mark_object (*backlist->function); 3325 XMARK (*backlist->function); 3326 } 3322 mark_object (*backlist->function); 3323 3327 3324 if (backlist->nargs == UNEVALLED || backlist->nargs == MANY) 3328 3325 i = 0; … … 3330 3327 i = backlist->nargs - 1; 3331 3328 for (; i >= 0; i--) 3332 if (!XMARKBIT (backlist->args[i])) 3333 { 3334 mark_object (backlist->args[i]); 3335 XMARK (backlist->args[i]); 3336 } 3329 mark_object (backlist->args[i]); 3337 3330 } 3338 3331 }
