]> git.eshelyaron.com Git - emacs.git/commitdiff
Add PVSIZE function to return the size of a pseudovector.
authorLars Brinkhoff <lars@nocrew.org>
Mon, 3 Apr 2017 06:42:18 +0000 (08:42 +0200)
committerLars Brinkhoff <lars@nocrew.org>
Mon, 10 Apr 2017 18:35:13 +0000 (20:35 +0200)
* src/lisp.h (PVSIZE): New function.

* src/chartab.c (copy_char_table):
* src/data.c (Ftype_of, Finteractive_form, Faref, Faset):
* src/doc.c (Fdocumentation, store_function_docstring):
* src/eval.c (Fcommandp, funcall_lambda, lambda_arity, Ffetch_bytecode):
* src/fns.c (Flength, Fcopy_sequence):
* src/font.h (FONT_SPEC_P, FONT_ENTITY_P, FONT_OBJECT_P):
* src/lread.c (substitute_object_recurse):
* src/src/print.c (print_object):
  Use it.

src/chartab.c
src/data.c
src/doc.c
src/eval.c
src/fns.c
src/font.h
src/lisp.h
src/lread.c
src/print.c

index fa5a8e411643a2a8ab742d48096c6d8566b1e906..8392c0c07dc0c8388f508d40136502a247420463 100644 (file)
@@ -185,7 +185,7 @@ Lisp_Object
 copy_char_table (Lisp_Object table)
 {
   Lisp_Object copy;
-  int size = XCHAR_TABLE (table)->header.size & PSEUDOVECTOR_SIZE_MASK;
+  int size = PVSIZE (table);
   int i;
 
   copy = Fmake_vector (make_number (size), Qnil);
index 903e809d235e122bf2a2031262af4fe8c0e9ba96..141b26ccf354fe05c06d232f3162905c68d23412 100644 (file)
@@ -270,7 +270,7 @@ for example, (type-of 1) returns `integer'.  */)
         case PVEC_RECORD:
           {
             Lisp_Object t = AREF (object, 0);
-            if (RECORDP (t) && 1 < (ASIZE (t) & PSEUDOVECTOR_SIZE_MASK))
+            if (RECORDP (t) && 1 < PVSIZE (t))
               /* Return the type name field of the class!  */
               return AREF (t, 1);
             else
@@ -902,7 +902,7 @@ Value, if non-nil, is a list (interactive SPEC).  */)
     }
   else if (COMPILEDP (fun))
     {
-      if ((ASIZE (fun) & PSEUDOVECTOR_SIZE_MASK) > COMPILED_INTERACTIVE)
+      if (PVSIZE (fun) > COMPILED_INTERACTIVE)
        return list2 (Qinteractive, AREF (fun, COMPILED_INTERACTIVE));
     }
   else if (AUTOLOADP (fun))
@@ -2306,7 +2306,7 @@ or a byte-code object.  IDX starts at 0.  */)
       if (VECTORP (array))
        size = ASIZE (array);
       else if (COMPILEDP (array) || RECORDP (array))
-       size = ASIZE (array) & PSEUDOVECTOR_SIZE_MASK;
+       size = PVSIZE (array);
       else
        wrong_type_argument (Qarrayp, array);
 
@@ -2349,8 +2349,7 @@ bool-vector.  IDX starts at 0.  */)
     }
   else if (RECORDP (array))
     {
-      ptrdiff_t size = ASIZE (array) & PSEUDOVECTOR_SIZE_MASK;
-      if (idxval < 0 || idxval >= size)
+      if (idxval < 0 || idxval >= PVSIZE (array))
        args_out_of_range (array, idx);
       ASET (array, idxval, newelt);
     }
index 1e7e3fcf6a639dea084dd07e268dba5d0f67ec34..dd674e3bc05a27d47c4e5ddffb9e8a00915cfa05 100644 (file)
--- a/src/doc.c
+++ b/src/doc.c
@@ -342,7 +342,7 @@ string is passed through `substitute-command-keys'.  */)
     doc = make_number (XSUBR (fun)->doc);
   else if (COMPILEDP (fun))
     {
-      if ((ASIZE (fun) & PSEUDOVECTOR_SIZE_MASK) <= COMPILED_DOC_STRING)
+      if (PVSIZE (fun) <= COMPILED_DOC_STRING)
        return Qnil;
       else
        {
@@ -500,7 +500,7 @@ store_function_docstring (Lisp_Object obj, EMACS_INT offset)
     {
       /* This bytecode object must have a slot for the
         docstring, since we've found a docstring for it.  */
-      if ((ASIZE (fun) & PSEUDOVECTOR_SIZE_MASK) > COMPILED_DOC_STRING)
+      if (PVSIZE (fun) > COMPILED_DOC_STRING)
        ASET (fun, COMPILED_DOC_STRING, make_number (offset));
       else
        {
index 16d1cf810ea065bca601adf031645a6a2841cd05..af0912fd14f46f3b5132de1824065c79b8a65d5b 100644 (file)
@@ -1881,8 +1881,7 @@ then strings and vectors are not accepted.  */)
      have an element whose index is COMPILED_INTERACTIVE, which is
      where the interactive spec is stored.  */
   else if (COMPILEDP (fun))
-    return ((ASIZE (fun) & PSEUDOVECTOR_SIZE_MASK) > COMPILED_INTERACTIVE
-           ? Qt : if_prop);
+    return (PVSIZE (fun) > COMPILED_INTERACTIVE ? Qt : if_prop);
 
   /* Strings and vectors are keyboard macros.  */
   if (STRINGP (fun) || VECTORP (fun))
@@ -2922,7 +2921,7 @@ funcall_lambda (Lisp_Object fun, ptrdiff_t nargs,
     }
   else if (COMPILEDP (fun))
     {
-      ptrdiff_t size = ASIZE (fun) & PSEUDOVECTOR_SIZE_MASK;
+      ptrdiff_t size = PVSIZE (fun);
       if (size <= COMPILED_STACK_DEPTH)
        xsignal1 (Qinvalid_function, fun);
       syms_left = AREF (fun, COMPILED_ARGLIST);
@@ -3103,7 +3102,7 @@ lambda_arity (Lisp_Object fun)
     }
   else if (COMPILEDP (fun))
     {
-      ptrdiff_t size = ASIZE (fun) & PSEUDOVECTOR_SIZE_MASK;
+      ptrdiff_t size = PVSIZE (fun);
       if (size <= COMPILED_STACK_DEPTH)
        xsignal1 (Qinvalid_function, fun);
       syms_left = AREF (fun, COMPILED_ARGLIST);
@@ -3148,7 +3147,7 @@ DEFUN ("fetch-bytecode", Ffetch_bytecode, Sfetch_bytecode,
 
   if (COMPILEDP (object))
     {
-      ptrdiff_t size = ASIZE (object) & PSEUDOVECTOR_SIZE_MASK;
+      ptrdiff_t size = PVSIZE (object);
       if (size <= COMPILED_STACK_DEPTH)
        xsignal1 (Qinvalid_function, object);
       if (CONSP (AREF (object, COMPILED_BYTECODE)))
index 2f07c2ccfb7bd7d56b00834145b32a841742be7d..10d35b6112a8306f1247fb9084dd76a2de3abfd2 100644 (file)
--- a/src/fns.c
+++ b/src/fns.c
@@ -107,7 +107,7 @@ To get the number of bytes, use `string-bytes'.  */)
   else if (BOOL_VECTOR_P (sequence))
     XSETFASTINT (val, bool_vector_size (sequence));
   else if (COMPILEDP (sequence) || RECORDP (sequence))
-    XSETFASTINT (val, ASIZE (sequence) & PSEUDOVECTOR_SIZE_MASK);
+    XSETFASTINT (val, PVSIZE (sequence));
   else if (CONSP (sequence))
     {
       intptr_t i = 0;
@@ -484,8 +484,7 @@ shared with the original.  */)
 
   if (RECORDP (arg))
     {
-      ptrdiff_t size = ASIZE (arg) & PSEUDOVECTOR_SIZE_MASK;
-      return Frecord (size, XVECTOR (arg)->contents);
+      return Frecord (PVSIZE (arg), XVECTOR (arg)->contents);
     }
 
   if (CHAR_TABLE_P (arg))
index a469b20e4f46d50a03b84cecefbbc493ef1cddea..53e3fc21a3deb0fdf76cc55079e39d9c138c3b57 100644 (file)
@@ -424,7 +424,7 @@ FONTP (Lisp_Object x)
 INLINE bool
 FONT_SPEC_P (Lisp_Object x)
 {
-  return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_SPEC_MAX;
+  return FONTP (x) && PVSIZE (x) == FONT_SPEC_MAX;
 }
 
 /* Like FONT_SPEC_P, but can be used in the garbage collector.  */
@@ -438,7 +438,7 @@ GC_FONT_SPEC_P (Lisp_Object x)
 INLINE bool
 FONT_ENTITY_P (Lisp_Object x)
 {
-  return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_ENTITY_MAX;
+  return FONTP (x) && PVSIZE (x) == FONT_ENTITY_MAX;
 }
 
 /* Like FONT_ENTITY_P, but can be used in the garbage collector.  */
@@ -452,7 +452,7 @@ GC_FONT_ENTITY_P (Lisp_Object x)
 INLINE bool
 FONT_OBJECT_P (Lisp_Object x)
 {
-  return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_OBJECT_MAX;
+  return FONTP (x) && PVSIZE (x) == FONT_OBJECT_MAX;
 }
 
 /* Like FONT_OBJECT_P, but can be used in the garbage collector.  */
index 5e7d41bc5d573ecc864037be47d685ac184471e1..678e261c1dad83cf58d455989d1b3b0cc64410a1 100644 (file)
@@ -1401,6 +1401,12 @@ ASIZE (Lisp_Object array)
   return size;
 }
 
+INLINE ptrdiff_t
+PVSIZE (Lisp_Object pv)
+{
+  return ASIZE (pv) & PSEUDOVECTOR_SIZE_MASK;
+}
+
 INLINE bool
 VECTORP (Lisp_Object x)
 {
index 513f63e43152050a0d81d1c3fd41bc88de4fa280..3b2e123dd39466ceaf1e4c004c9920fbce6d0b73 100644 (file)
@@ -3402,7 +3402,7 @@ substitute_object_recurse (Lisp_Object object, Lisp_Object placeholder, Lisp_Obj
        else if (CHAR_TABLE_P (subtree) || SUB_CHAR_TABLE_P (subtree)
                 || COMPILEDP (subtree) || HASH_TABLE_P (subtree)
                 || RECORDP (subtree))
-         length = ASIZE (subtree) & PSEUDOVECTOR_SIZE_MASK;
+         length = PVSIZE (subtree);
        else if (VECTORP (subtree))
          length = ASIZE (subtree);
        else
index 76f263994e684e6e057089c77c71ecc80fb5cc96..872103bd4c2331525ebaae1351b14af2c9811e4f 100644 (file)
@@ -1966,7 +1966,7 @@ print_object (Lisp_Object obj, Lisp_Object printcharfun, bool escapeflag)
 
       case PVEC_RECORD:
        {
-         ptrdiff_t n, size = ASIZE (obj) & PSEUDOVECTOR_SIZE_MASK;
+         ptrdiff_t n, size = PVSIZE (obj);
          int i;
 
          /* Don't print more elements than the specified maximum.  */