]> git.eshelyaron.com Git - emacs.git/commitdiff
Merge pdumper.c and alloc.c builtin symbol tests
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 23 Jul 2019 18:18:16 +0000 (11:18 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 23 Jul 2019 18:18:58 +0000 (11:18 -0700)
* src/alloc.c (c_symbol_p): Move from here ...
* src/lisp.h (c_symbol_p): ... to here, and make it more portable
to hypothetical platforms where pointers are wider than ptrdiff_t.
* src/pdumper.c (dump_builtin_symbol_p): Use c_symbol_p.

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

index f256ff71b07a94a85fb020b1cbf17671f697d50c..c17bdb719a94247a0f8fe4ebaacb15172cd26580 100644 (file)
@@ -4964,15 +4964,6 @@ flush_stack_call_func (void (*func) (void *arg), void *arg)
   eassert (current_thread == self);
 }
 
-static bool
-c_symbol_p (struct Lisp_Symbol *sym)
-{
-  char *lispsym_ptr = (char *) lispsym;
-  char *sym_ptr = (char *) sym;
-  ptrdiff_t lispsym_offset = sym_ptr - lispsym_ptr;
-  return 0 <= lispsym_offset && lispsym_offset < sizeof lispsym;
-}
-
 /* Determine whether it is safe to access memory at address P.  */
 static int
 valid_pointer_p (void *p)
index e96fcfe94d3568a19eabab6c3b4b24881a4b295f..17495777378d358b9251cd581250bb134099a36f 100644 (file)
@@ -1024,6 +1024,20 @@ builtin_lisp_symbol (int index)
   return make_lisp_symbol (&lispsym[index]);
 }
 
+INLINE bool
+c_symbol_p (struct Lisp_Symbol *sym)
+{
+  char *bp = (char *) lispsym;
+  char *sp = (char *) sym;
+  if (PTRDIFF_MAX < INTPTR_MAX)
+    return bp <= sp && sp < bp + sizeof lispsym;
+  else
+    {
+      ptrdiff_t offset = sp - bp;
+      return 0 <= offset && offset < sizeof lispsym;
+    }
+}
+
 INLINE void
 (CHECK_SYMBOL) (Lisp_Object x)
 {
index 84147353e85e86ba0aa67dab644594212e8ae134..ddf44a53f863fa3a17a814c315703ba55414ff0d 100644 (file)
@@ -719,12 +719,7 @@ emacs_offset (const void *emacs_ptr)
 static bool
 dump_builtin_symbol_p (Lisp_Object object)
 {
-  if (!SYMBOLP (object))
-    return false;
-  char *bp = (char *) lispsym;
-  struct Lisp_Symbol *s = XSYMBOL (object);
-  char *sp = (char *) s;
-  return bp <= sp && sp < bp + sizeof (lispsym);
+  return SYMBOLP (object) && c_symbol_p (XSYMBOL (object));
 }
 
 /* Return whether OBJECT has the same bit pattern in all Emacs