]> git.eshelyaron.com Git - emacs.git/commitdiff
Remove Lisp_Symbol::next pointer
authorGerd Möllmann <gerd@gnu.org>
Sat, 15 Oct 2022 11:03:58 +0000 (13:03 +0200)
committerGerd Möllmann <gerd@gnu.org>
Sat, 15 Oct 2022 11:03:58 +0000 (13:03 +0200)
* src/lisp.h (struct Lisp_Symbol): Remvoe next field.
(next_free_symbol, set_next_free_symbol): New.
(set_symbol_next): Remove.
* src/alloc.c (init_symbol): symbol_free_list done differently.
* src/pdumper.c (dump_symbol): Don't dump Lisp_Symbol::next.

src/alloc.c
src/lisp.h
src/pdumper.c

index ba5629c9c92199af93497cf84731797ee83c5a5b..c2c449cb44792dce0184856f865075d5ae1dfe4d 100644 (file)
@@ -3626,7 +3626,6 @@ init_symbol (Lisp_Object val, Lisp_Object name)
   SET_SYMBOL_VAL (p, Qunbound);
   set_symbol_function (val, Qnil);
   set_symbol_package (val, Qnil);
-  set_symbol_next (val, NULL);
   p->u.s.gcmarkbit = false;
   p->u.s.trapped_write = SYMBOL_UNTRAPPED_WRITE;
   p->u.s.declared_special = false;
@@ -3648,7 +3647,7 @@ Its value is void, and its function definition and property list are nil.  */)
   if (symbol_free_list)
     {
       XSETSYMBOL (val, symbol_free_list);
-      symbol_free_list = symbol_free_list->u.s.next;
+      symbol_free_list = next_free_symbol (symbol_free_list);
     }
   else
     {
@@ -4643,8 +4642,7 @@ live_symbol_holding (struct mem_node *m, void *p)
          || off == offsetof (struct Lisp_Symbol, u.s.val)
          || off == offsetof (struct Lisp_Symbol, u.s.function)
          || off == offsetof (struct Lisp_Symbol, u.s.package)
-         || off == offsetof (struct Lisp_Symbol, u.s.plist)
-         || off == offsetof (struct Lisp_Symbol, u.s.next))
+         || off == offsetof (struct Lisp_Symbol, u.s.plist))
        {
          struct Lisp_Symbol *s = p = cp -= off;
          if (!deadp (s->u.s.function))
@@ -6941,7 +6939,6 @@ process_mark_stack (ptrdiff_t base_sp)
        case Lisp_Symbol:
          {
            struct Lisp_Symbol *ptr = XBARE_SYMBOL (obj);
-         nextsym:
            if (symbol_marked_p (ptr))
              break;
            CHECK_ALLOCATED_AND_LIVE_SYMBOL ();
@@ -6979,9 +6976,6 @@ process_mark_stack (ptrdiff_t base_sp)
              set_string_marked (XSTRING (ptr->u.s.name));
            mark_interval_tree (string_intervals (ptr->u.s.name));
            /* Inner loop to mark next symbol in this bucket, if any.  */
-           po = ptr = ptr->u.s.next;
-           if (ptr)
-             goto nextsym;
          }
          break;
 
@@ -7325,7 +7319,7 @@ sweep_symbols (void)
                      time we sweep this symbol_block (bug#29066).  */
                   sym->u.s.redirect = SYMBOL_PLAINVAL;
                 }
-              sym->u.s.next = symbol_free_list;
+              set_next_free_symbol (sym, symbol_free_list);
               symbol_free_list = sym;
               symbol_free_list->u.s.function = dead_object ();
               ++this_free;
@@ -7347,7 +7341,7 @@ sweep_symbols (void)
         {
           *sprev = sblk->next;
           /* Unhook from the free list.  */
-          symbol_free_list = sblk->symbols[0].u.s.next;
+          symbol_free_list = next_free_symbol (&sblk->symbols[0]);
           lisp_free (sblk);
         }
       else
index c1c0e29a3d3efc7e796eae4d9d48df6afaa340f7..cea15c2cda04c45e9ccb111209a14feb68d93c62 100644 (file)
@@ -873,15 +873,26 @@ struct Lisp_Symbol
 
       /* The symbol's package, or nil.  */
       Lisp_Object package;
-
-      /* Next symbol in obarray bucket, if the symbol is interned.  */
-      struct Lisp_Symbol *next;
     } s;
     GCALIGNED_UNION_MEMBER
   } u;
 };
 verify (GCALIGNED (struct Lisp_Symbol));
 
+INLINE struct Lisp_Symbol *
+next_free_symbol (struct Lisp_Symbol *sym)
+{
+  return *(struct Lisp_Symbol **) sym;
+}
+
+INLINE void
+set_next_free_symbol (struct Lisp_Symbol *sym, struct Lisp_Symbol *free)
+{
+  *(struct Lisp_Symbol **) sym = free;
+}
+
+
+
 /* Declare a Lisp-callable function.  The MAXARGS parameter has the same
    meaning as in the DEFUN macro, and is used to construct a prototype.  */
 /* We can use the same trick as in the DEFUN macro to generate the
@@ -3869,12 +3880,6 @@ set_symbol_plist (Lisp_Object sym, Lisp_Object plist)
   XSYMBOL (sym)->u.s.plist = plist;
 }
 
-INLINE void
-set_symbol_next (Lisp_Object sym, struct Lisp_Symbol *next)
-{
-  XSYMBOL (sym)->u.s.next = next;
-}
-
 INLINE void
 make_symbol_constant (Lisp_Object sym)
 {
index fdbdf1db10c0a163fca2ad171f17975775e4554f..1caa09d2b0ebef465863628252e1074900e46345 100644 (file)
@@ -2474,8 +2474,6 @@ dump_symbol (struct dump_context *ctx,
   dump_field_lv (ctx, &out, symbol, &symbol->u.s.function, WEIGHT_NORMAL);
   dump_field_lv (ctx, &out, symbol, &symbol->u.s.package, WEIGHT_NORMAL);
   dump_field_lv (ctx, &out, symbol, &symbol->u.s.plist, WEIGHT_NORMAL);
-  dump_field_lv_rawptr (ctx, &out, symbol, &symbol->u.s.next, Lisp_Symbol,
-                        WEIGHT_STRONG);
 
   offset = dump_object_finish (ctx, &out, sizeof (out));
   dump_off aux_offset;