]> git.eshelyaron.com Git - emacs.git/commitdiff
Add SYMBOL_FUNCTION accessor function
authorAndrea Corallo <akrl@sdf.org>
Thu, 7 May 2020 20:56:00 +0000 (21:56 +0100)
committerAndrea Corallo <akrl@sdf.org>
Fri, 8 May 2020 13:30:12 +0000 (14:30 +0100)
src/alloc.c
src/cmds.c
src/data.c
src/doc.c
src/eval.c
src/keyboard.c
src/lisp.h
src/lread.c
src/pdumper.c
src/xterm.c

index e7ba4ddd70bc5079a9c627657d324098977430e5..4bbc6e376492d408f546c9a18c1f2d75491b3eac 100644 (file)
@@ -4510,7 +4510,7 @@ live_symbol_holding (struct mem_node *m, void *p)
        {
          cp = ptr_bounds_copy (cp, b);
          struct Lisp_Symbol *s = p = cp -= offset % sizeof b->symbols[0];
-         if (!deadp (s->u.s.function))
+         if (!deadp (SYMBOL_FUNCTION (s)))
            return make_lisp_symbol (s);
        }
     }
@@ -6647,8 +6647,8 @@ mark_object (Lisp_Object arg)
         CHECK_ALLOCATED_AND_LIVE_SYMBOL ();
         set_symbol_marked(ptr);
        /* Attempt to catch bogus objects.  */
-       eassert (valid_lisp_object_p (ptr->u.s.function));
-       mark_object (ptr->u.s.function);
+       eassert (valid_lisp_object_p (SYMBOL_FUNCTION (ptr)));
+       mark_object (SYMBOL_FUNCTION (ptr));
        mark_object (ptr->u.s.plist);
        switch (ptr->u.s.redirect)
          {
@@ -7004,7 +7004,8 @@ sweep_symbols (void)
                 }
               sym->u.s.next = symbol_free_list;
               symbol_free_list = sym;
-              symbol_free_list->u.s.function = dead_object ();
+             /* FIXME */
+              symbol_free_list->u.s._function = dead_object ();
               ++this_free;
             }
           else
@@ -7012,7 +7013,7 @@ sweep_symbols (void)
               ++num_used;
               sym->u.s.gcmarkbit = 0;
               /* Attempt to catch bogus objects.  */
-              eassert (valid_lisp_object_p (sym->u.s.function));
+              eassert (valid_lisp_object_p (SYMBOL_FUNCTION (sym)));
             }
         }
 
@@ -7166,10 +7167,10 @@ symbol_uses_obj (Lisp_Object symbol, Lisp_Object obj)
   struct Lisp_Symbol *sym = XSYMBOL (symbol);
   Lisp_Object val = find_symbol_value (symbol);
   return (EQ (val, obj)
-         || EQ (sym->u.s.function, obj)
-         || (!NILP (sym->u.s.function)
-             && COMPILEDP (sym->u.s.function)
-             && EQ (AREF (sym->u.s.function, COMPILED_BYTECODE), obj))
+         || EQ (SYMBOL_FUNCTION (sym), obj)
+         || (!NILP (SYMBOL_FUNCTION (sym))
+             && COMPILEDP (SYMBOL_FUNCTION (sym))
+             && EQ (AREF (SYMBOL_FUNCTION (sym), COMPILED_BYTECODE), obj))
          || (!NILP (val)
              && COMPILEDP (val)
              && EQ (AREF (val, COMPILED_BYTECODE), obj)));
index 9f96f210b9f8f93b810fec0fb26634cc9126a728..9dbd9cfc57019a640394d10d0d85af8284c24951 100644 (file)
@@ -423,11 +423,11 @@ internal_self_insert (int c, EMACS_INT n)
         and the hook has a non-nil `no-self-insert' property,
         return right away--don't really self-insert.  */
       if (SYMBOLP (sym) && ! NILP (sym)
-         && ! NILP (XSYMBOL (sym)->u.s.function)
-         && SYMBOLP (XSYMBOL (sym)->u.s.function))
+         && ! NILP (SYMBOL_FUNCTION (XSYMBOL (sym)))
+         && SYMBOLP (SYMBOL_FUNCTION (XSYMBOL (sym))))
        {
          Lisp_Object prop;
-         prop = Fget (XSYMBOL (sym)->u.s.function, intern ("no-self-insert"));
+         prop = Fget (SYMBOL_FUNCTION (XSYMBOL (sym)), intern ("no-self-insert"));
          if (! NILP (prop))
            return 1;
        }
index 1ab203f9de6d2e53af7e091801ce62660675c704..3a3df61188a00c62ca67c7be86b64a95538871b8 100644 (file)
@@ -693,7 +693,7 @@ DEFUN ("fboundp", Ffboundp, Sfboundp, 1, 1, 0,
   (Lisp_Object symbol)
 {
   CHECK_SYMBOL (symbol);
-  return NILP (XSYMBOL (symbol)->u.s.function) ? Qnil : Qt;
+  return NILP (SYMBOL_FUNCTION (XSYMBOL (symbol))) ? Qnil : Qt;
 }
 
 DEFUN ("makunbound", Fmakunbound, Smakunbound, 1, 1, 0,
@@ -737,7 +737,7 @@ DEFUN ("symbol-function", Fsymbol_function, Ssymbol_function, 1, 1, 0,
   (Lisp_Object symbol)
 {
   CHECK_SYMBOL (symbol);
-  return XSYMBOL (symbol)->u.s.function;
+  return SYMBOL_FUNCTION (XSYMBOL (symbol));
 }
 
 DEFUN ("symbol-plist", Fsymbol_plist, Ssymbol_plist, 1, 1, 0,
@@ -771,7 +771,7 @@ DEFUN ("fset", Ffset, Sfset, 2, 2, 0,
        think this one little sanity check is worth its cost, but anyway.  */
     xsignal1 (Qsetting_constant, symbol);
 
-  function = XSYMBOL (symbol)->u.s.function;
+  function = SYMBOL_FUNCTION (XSYMBOL (symbol));
 
   if (!NILP (Vautoload_queue) && !NILP (function))
     Vautoload_queue = Fcons (Fcons (symbol, function), Vautoload_queue);
@@ -811,7 +811,7 @@ The return value is undefined.  */)
       { /* Only add autoload entries after dumping, because the ones before are
           not useful and else we get loads of them from the loaddefs.el.  */
 
-       if (AUTOLOADP (XSYMBOL (symbol)->u.s.function))
+       if (AUTOLOADP (SYMBOL_FUNCTION (XSYMBOL (symbol))))
          /* Remember that the function was already an autoload.  */
          LOADHIST_ATTACH (Fcons (Qt, symbol));
        LOADHIST_ATTACH (Fcons (autoload ? Qautoload : Qdefun, symbol));
@@ -2174,12 +2174,12 @@ indirect_function (register Lisp_Object object)
     {
       if (!SYMBOLP (hare) || NILP (hare))
        break;
-      hare = XSYMBOL (hare)->u.s.function;
+      hare = SYMBOL_FUNCTION (XSYMBOL (hare));
       if (!SYMBOLP (hare) || NILP (hare))
        break;
-      hare = XSYMBOL (hare)->u.s.function;
+      hare = SYMBOL_FUNCTION (XSYMBOL (hare));
 
-      tortoise = XSYMBOL (tortoise)->u.s.function;
+      tortoise = SYMBOL_FUNCTION (XSYMBOL (tortoise));
 
       if (EQ (hare, tortoise))
        xsignal1 (Qcyclic_function_indirection, object);
@@ -2201,7 +2201,7 @@ function chain of symbols.  */)
   /* Optimize for no indirection.  */
   result = object;
   if (SYMBOLP (result) && !NILP (result)
-      && (result = XSYMBOL (result)->u.s.function, SYMBOLP (result)))
+      && (result = SYMBOL_FUNCTION (XSYMBOL (result)), SYMBOLP (result)))
     result = indirect_function (result);
   if (!NILP (result))
     return result;
@@ -3993,7 +3993,7 @@ syms_of_data (void)
   defsubr (&Sbool_vector_count_consecutive);
   defsubr (&Sbool_vector_count_population);
 
-  set_symbol_function (Qwholenump, XSYMBOL (Qnatnump)->u.s.function);
+  set_symbol_function (Qwholenump, SYMBOL_FUNCTION (XSYMBOL (Qnatnump)));
 
   DEFVAR_LISP ("most-positive-fixnum", Vmost_positive_fixnum,
               doc: /* The greatest integer that is represented efficiently.
index 285c0dbbbee9ac9ecd1459f3dda952dce92cccdf..4193ef7a09585cf00ec3e856315d5d489470d647 100644 (file)
--- a/src/doc.c
+++ b/src/doc.c
@@ -483,7 +483,7 @@ store_function_docstring (Lisp_Object obj, EMACS_INT offset)
 {
   /* Don't use indirect_function here, or defaliases will apply their
      docstrings to the base functions (Bug#2603).  */
-  Lisp_Object fun = SYMBOLP (obj) ? XSYMBOL (obj)->u.s.function : obj;
+  Lisp_Object fun = SYMBOLP (obj) ? SYMBOL_FUNCTION (XSYMBOL (obj)) : obj;
 
   /* The type determines where the docstring is stored.  */
 
index 014905ce6df03e2992c8e59b4e4666479ccfc144..7e2fbca743ae66db062ea7dacfdbae805b81ae1b 100644 (file)
@@ -1041,7 +1041,7 @@ definitions to shadow the loaded ones for use in file byte-compilation.  */)
          tem = Fassq (sym, environment);
          if (NILP (tem))
            {
-             def = XSYMBOL (sym)->u.s.function;
+             def = SYMBOL_FUNCTION (XSYMBOL (sym));
              if (!NILP (def))
                continue;
            }
@@ -1985,8 +1985,8 @@ this does nothing and returns nil.  */)
   CHECK_STRING (file);
 
   /* If function is defined and not as an autoload, don't override.  */
-  if (!NILP (XSYMBOL (function)->u.s.function)
-      && !AUTOLOADP (XSYMBOL (function)->u.s.function))
+  if (!NILP (SYMBOL_FUNCTION (XSYMBOL (function)))
+      && !AUTOLOADP (SYMBOL_FUNCTION (XSYMBOL (function))))
     return Qnil;
 
   if (!NILP (Vpurify_flag) && EQ (docstring, make_fixnum (0)))
@@ -2208,7 +2208,7 @@ eval_sub (Lisp_Object form)
   fun = original_fun;
   if (!SYMBOLP (fun))
     fun = Ffunction (list1 (fun));
-  else if (!NILP (fun) && (fun = XSYMBOL (fun)->u.s.function, SYMBOLP (fun)))
+  else if (!NILP (fun) && (fun = SYMBOL_FUNCTION (XSYMBOL (fun)), SYMBOLP (fun)))
     fun = indirect_function (fun);
 
   if (SUBRP (fun))
@@ -2385,7 +2385,7 @@ usage: (apply FUNCTION &rest ARGUMENTS)  */)
 
   /* Optimize for no indirection.  */
   if (SYMBOLP (fun) && !NILP (fun)
-      && (fun = XSYMBOL (fun)->u.s.function, SYMBOLP (fun)))
+      && (fun = SYMBOL_FUNCTION (XSYMBOL (fun)), SYMBOLP (fun)))
     {
       fun = indirect_function (fun);
       if (NILP (fun))
@@ -2787,7 +2787,7 @@ usage: (funcall FUNCTION &rest ARGUMENTS)  */)
   /* Optimize for no indirection.  */
   fun = original_fun;
   if (SYMBOLP (fun) && !NILP (fun)
-      && (fun = XSYMBOL (fun)->u.s.function, SYMBOLP (fun)))
+      && (fun = SYMBOL_FUNCTION (XSYMBOL (fun)), SYMBOLP (fun)))
     fun = indirect_function (fun);
 
   if (SUBRP (fun))
@@ -3093,7 +3093,7 @@ function with `&rest' args, or `unevalled' for a special form.  */)
   function = original;
   if (SYMBOLP (function) && !NILP (function))
     {
-      function = XSYMBOL (function)->u.s.function;
+      function = SYMBOL_FUNCTION (XSYMBOL (function));
       if (SYMBOLP (function))
        function = indirect_function (function);
     }
index c94d794b0132763efc2c01fc851557a8540a0d39..ff4c201251b4ab2510bb6627e30413b65b4c3930 100644 (file)
@@ -7877,7 +7877,7 @@ parse_menu_item (Lisp_Object item, int inmenubar)
                       (such as lmenu.el set it up), check if the
                       original command matches the cached command.  */
                    && !(SYMBOLP (def)
-                        && EQ (tem, XSYMBOL (def)->u.s.function))))
+                        && EQ (tem, SYMBOL_FUNCTION (XSYMBOL (def))))))
              keys = Qnil;
          }
 
@@ -9149,9 +9149,9 @@ access_keymap_keyremap (Lisp_Object map, Lisp_Object key, Lisp_Object prompt,
   /* Handle a symbol whose function definition is a keymap
      or an array.  */
   if (SYMBOLP (next) && !NILP (Ffboundp (next))
-      && (ARRAYP (XSYMBOL (next)->u.s.function)
-         || KEYMAPP (XSYMBOL (next)->u.s.function)))
-    next = Fautoload_do_load (XSYMBOL (next)->u.s.function, next, Qnil);
+      && (ARRAYP (SYMBOL_FUNCTION (XSYMBOL (next)))
+         || KEYMAPP (SYMBOL_FUNCTION (XSYMBOL (next)))))
+    next = Fautoload_do_load (SYMBOL_FUNCTION (XSYMBOL (next)), next, Qnil);
 
   /* If the keymap gives a function, not an
      array, then call the function with one arg and use
index eff7d301372b9c1146bce899c61da29a94acea92..7bf822253ac8feebacf1d0aa1402d2b389fbc0cb 100644 (file)
@@ -852,7 +852,7 @@ struct Lisp_Symbol
       } val;
 
       /* Function value of the symbol or Qnil if not fboundp.  */
-      Lisp_Object function;
+      Lisp_Object _function;
 
       /* The symbol's property list.  */
       Lisp_Object plist;
@@ -2216,6 +2216,12 @@ SYMBOL_VAL (struct Lisp_Symbol *sym)
   return XBINDING (sym->u.s.val.value)->b[curr_lexspace];
 }
 
+INLINE Lisp_Object
+SYMBOL_FUNCTION (struct Lisp_Symbol *sym)
+{
+  return sym->u.s._function;
+}
+
 INLINE struct Lisp_Symbol *
 SYMBOL_ALIAS (struct Lisp_Symbol *sym)
 {
@@ -3423,7 +3429,8 @@ set_hash_value_slot (struct Lisp_Hash_Table *h, ptrdiff_t idx, Lisp_Object val)
 INLINE void
 set_symbol_function (Lisp_Object sym, Lisp_Object function)
 {
-  XSYMBOL (sym)->u.s.function = function;
+  /* FIXME */
+  XSYMBOL (sym)->u.s._function = function;
 }
 
 INLINE void
index 59bf529f45cbeb0d899c9ba78bb6d8f2697a669b..2e6c1ccdccd1e87277741c657471729317ac25b4 100644 (file)
@@ -4395,7 +4395,7 @@ defalias (struct Lisp_Subr *sname, char *string)
 {
   Lisp_Object sym;
   sym = intern (string);
-  XSETSUBR (XSYMBOL (sym)->u.s.function, sname);
+  XSETSUBR (SYMBOL_FUNCTION (XSYMBOL (sym)), sname);
 }
 #endif /* NOTDEF */
 
index a94145eee332523f5c01b26dcdb34e1d2cb7b67b..20dd2ff4dcdca31c2397e6ae1300eb63ecbec83d 100644 (file)
@@ -2427,7 +2427,7 @@ dump_symbol (struct dump_context *ctx,
              Lisp_Object object,
              dump_off offset)
 {
-#if CHECK_STRUCTS && !defined HASH_Lisp_Symbol_999DC26DEC
+#if CHECK_STRUCTS && !defined HASH_Lisp_Symbol_B160ED845C
 # error "Lisp_Symbol changed. See CHECK_STRUCTS comment in config.h."
 #endif
 #if CHECK_STRUCTS && !defined (HASH_symbol_redirect_ADB4F5B113)
@@ -2486,7 +2486,7 @@ dump_symbol (struct dump_context *ctx,
     default:
       emacs_abort ();
     }
-  dump_field_lv (ctx, &out, symbol, &symbol->u.s.function, WEIGHT_NORMAL);
+  dump_field_lv (ctx, &out, symbol, &symbol->u.s._function, 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);
index 7989cecec7f081dc04c9e1fcfbf62c0fc84dda71..78615bdf15ab89589a0a163405ef04eb1626bdcf 100644 (file)
@@ -12881,7 +12881,7 @@ x_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name)
       {
        terminal->kboard = allocate_kboard (Qx);
 
-       if (!EQ (XSYMBOL (Qvendor_specific_keysyms)->u.s.function, Qunbound))
+       if (!EQ (SYMBOL_FUNCTION (XSYMBOL (Qvendor_specific_keysyms)), Qunbound))
          {
            char *vendor = ServerVendor (dpy);