Mercurial > emacs
comparison src/alloc.c @ 45392:f3d7ab65641f
* alloc.c (Fmake_symbol): Set symbol xname field instead of name.
(mark_object, gc_sweep): Use symbol xname field and XSTRING
instead of name field.
author | Ken Raeburn <raeburn@raeburn.org> |
---|---|
date | Mon, 20 May 2002 08:04:52 +0000 |
parents | 01b93e5e53a7 |
children | 3f111801efb4 |
comparison
equal
deleted
inserted
replaced
45391:6c875925d507 | 45392:f3d7ab65641f |
---|---|
2543 } | 2543 } |
2544 XSETSYMBOL (val, &symbol_block->symbols[symbol_block_index++]); | 2544 XSETSYMBOL (val, &symbol_block->symbols[symbol_block_index++]); |
2545 } | 2545 } |
2546 | 2546 |
2547 p = XSYMBOL (val); | 2547 p = XSYMBOL (val); |
2548 p->name = XSTRING (name); | 2548 p->xname = name; |
2549 p->plist = Qnil; | 2549 p->plist = Qnil; |
2550 p->value = Qunbound; | 2550 p->value = Qunbound; |
2551 p->function = Qunbound; | 2551 p->function = Qunbound; |
2552 p->next = NULL; | 2552 p->next = NULL; |
2553 p->interned = SYMBOL_UNINTERNED; | 2553 p->interned = SYMBOL_UNINTERNED; |
4688 XMARK (ptr->plist); | 4688 XMARK (ptr->plist); |
4689 mark_object ((Lisp_Object *) &ptr->value); | 4689 mark_object ((Lisp_Object *) &ptr->value); |
4690 mark_object (&ptr->function); | 4690 mark_object (&ptr->function); |
4691 mark_object (&ptr->plist); | 4691 mark_object (&ptr->plist); |
4692 | 4692 |
4693 if (!PURE_POINTER_P (ptr->name)) | 4693 if (!PURE_POINTER_P (XSTRING (ptr->xname))) |
4694 MARK_STRING (ptr->name); | 4694 MARK_STRING (XSTRING (ptr->xname)); |
4695 MARK_INTERVAL_TREE (ptr->name->intervals); | 4695 MARK_INTERVAL_TREE (XSTRING (ptr->xname)->intervals); |
4696 | 4696 |
4697 /* Note that we do not mark the obarray of the symbol. | 4697 /* Note that we do not mark the obarray of the symbol. |
4698 It is safe not to do so because nothing accesses that | 4698 It is safe not to do so because nothing accesses that |
4699 slot except to check whether it is nil. */ | 4699 slot except to check whether it is nil. */ |
4700 ptr = ptr->next; | 4700 ptr = ptr->next; |
5161 for (; sym < end; ++sym) | 5161 for (; sym < end; ++sym) |
5162 { | 5162 { |
5163 /* Check if the symbol was created during loadup. In such a case | 5163 /* Check if the symbol was created during loadup. In such a case |
5164 it might be pointed to by pure bytecode which we don't trace, | 5164 it might be pointed to by pure bytecode which we don't trace, |
5165 so we conservatively assume that it is live. */ | 5165 so we conservatively assume that it is live. */ |
5166 int pure_p = PURE_POINTER_P (sym->name); | 5166 int pure_p = PURE_POINTER_P (XSTRING (sym->xname)); |
5167 | 5167 |
5168 if (!XMARKBIT (sym->plist) && !pure_p) | 5168 if (!XMARKBIT (sym->plist) && !pure_p) |
5169 { | 5169 { |
5170 *(struct Lisp_Symbol **) &sym->value = symbol_free_list; | 5170 *(struct Lisp_Symbol **) &sym->value = symbol_free_list; |
5171 symbol_free_list = sym; | 5171 symbol_free_list = sym; |
5176 } | 5176 } |
5177 else | 5177 else |
5178 { | 5178 { |
5179 ++num_used; | 5179 ++num_used; |
5180 if (!pure_p) | 5180 if (!pure_p) |
5181 UNMARK_STRING (sym->name); | 5181 UNMARK_STRING (XSTRING (sym->xname)); |
5182 XUNMARK (sym->plist); | 5182 XUNMARK (sym->plist); |
5183 } | 5183 } |
5184 } | 5184 } |
5185 | 5185 |
5186 lim = SYMBOL_BLOCK_SIZE; | 5186 lim = SYMBOL_BLOCK_SIZE; |