]> git.eshelyaron.com Git - emacs.git/commitdiff
* src/lisp.h (CHECK_BOOLEAN): New function.
authorDmitry Antipov <dmantipov@yandex.ru>
Mon, 19 May 2014 07:49:09 +0000 (11:49 +0400)
committerDmitry Antipov <dmantipov@yandex.ru>
Mon, 19 May 2014 07:49:09 +0000 (11:49 +0400)
* src/alloc.c (Fbool_vector): New function.
(syms_of_alloc): Defsubr it.
* src/data.c (Qbooleanp): New symbol.
(syms_of_data): DEFSYM it.
* src/dbusbind.c (xd_signature): Use CHECK_BOOLEAN.
* doc/lispref/sequences.texi (Bool-vectors): Mention bool-vector.

doc/lispref/ChangeLog
doc/lispref/sequences.texi
src/ChangeLog
src/alloc.c
src/data.c
src/dbusbind.c
src/lisp.h

index d892e1307a051bf1e9ae220bbabf5c3899330c63..9614b89f66eacbee1ec218b9f20be8564ac1e5f4 100644 (file)
@@ -1,3 +1,7 @@
+2014-05-19  Dmitry Antipov  <dmantipov@yandex.ru>
+
+       * sequences.texi (Bool-vectors): Mention bool-vector.
+
 2014-05-17  Paul Eggert  <eggert@cs.ucla.edu>
 
        Assume C99 or later (Bug#17487).
index da53990b449e5fd3f702eab6cbf514f31c89d617..1f7cd435cf6e2b1f61eac0c67043775616bdd44b 100644 (file)
@@ -811,7 +811,7 @@ value into an element of the bool-vector, the effect is to store
 and the length cannot be changed once the bool-vector is created.
 Bool-vectors are constants when evaluated.
 
-  There are two special functions for working with bool-vectors; aside
+  There are three special functions for working with bool-vectors; aside
 from that, you manipulate them with same functions used for other kinds
 of arrays.
 
@@ -820,6 +820,32 @@ Return a new bool-vector of @var{length} elements,
 each one initialized to @var{initial}.
 @end defun
 
+@defun bool-vector &rest objects
+This function creates and returns a bool-vector whose elements are the
+arguments, @var{objects}, each of them should be either @code{t} or @code{nil}.
+Note that the printed form represents up to 8 boolean values as a single
+character:
+
+@example
+@group
+(bool-vector t nil t nil)
+     @result{} #&4"^E"
+(bool-vector)
+     @result{} #&0""
+@end group
+@end example
+
+If you want to print a bool-vector in a way similar to other vectors,
+you can use @code{vconcat} function:
+
+@example
+@group
+(vconcat (bool-vector nil t nil t))
+     @result{} [nil t nil t]
+@end group
+@end example
+@end defun
+
 @defun bool-vector-p object
 This returns @code{t} if @var{object} is a bool-vector,
 and @code{nil} otherwise.
@@ -873,9 +899,8 @@ or @code{nil}, and @var{i} is an index into @code{a}.
 Return the number of elements that are @code{t} in bool vector @var{a}.
 @end defun
 
-  Here is an example of creating, examining, and updating a
-bool-vector.  Note that the printed form represents up to 8 boolean
-values as a single character.
+  Here is another example of creating, examining, and updating a
+bool-vector:
 
 @example
 (setq bv (make-bool-vector 5 t))
index 31fe13e074c43f9c00aafb42d9c821278e746283..06377ba257d38f9b3e4d43746eb3ae10be084714 100644 (file)
@@ -1,3 +1,12 @@
+2014-05-19  Dmitry Antipov  <dmantipov@yandex.ru>
+
+       * lisp.h (CHECK_BOOLEAN): New function.
+       * alloc.c (Fbool_vector): New function.
+       (syms_of_alloc): Defsubr it.
+       * data.c (Qbooleanp): New symbol.
+       (syms_of_data): DEFSYM it.
+       * dbusbind.c (xd_signature): Use CHECK_BOOLEAN.
+
 2014-05-17  Paul Eggert  <eggert@cs.ucla.edu>
 
        Assume C99 or later (Bug#17487).
index 7159d1fa7472b078aa02008ebe6ee40a9cceda46..e808c3d4bf336847641f94318879e3a170cdfe7a 100644 (file)
@@ -2174,6 +2174,25 @@ LENGTH must be a number.  INIT matters only in whether it is t or nil.  */)
   return bool_vector_fill (val, init);
 }
 
+DEFUN ("bool-vector", Fbool_vector, Sbool_vector, 0, MANY, 0,
+       doc: /* Return a new bool-vector with specified arguments as elements.
+Any number of arguments, even zero arguments, are allowed.
+Each argument should be either t or nil.
+usage: (bool-vector &rest OBJECTS)  */)
+  (ptrdiff_t nargs, Lisp_Object *args)
+{
+  ptrdiff_t i;
+  Lisp_Object vector;
+
+  for (i = 0; i < nargs; i++)
+    CHECK_BOOLEAN (args[i]);
+
+  vector = make_uninit_bool_vector (nargs);
+  for (i = 0; i < nargs; i++)
+    bool_vector_set (vector, i, !NILP (args[i]));
+
+  return vector;
+}
 
 /* Make a string from NBYTES bytes at CONTENTS, and compute the number
    of characters from the contents.  This string may be unibyte or
@@ -7102,6 +7121,7 @@ The time is in seconds as a floating point value.  */);
   defsubr (&Scons);
   defsubr (&Slist);
   defsubr (&Svector);
+  defsubr (&Sbool_vector);
   defsubr (&Smake_byte_code);
   defsubr (&Smake_list);
   defsubr (&Smake_vector);
index bf863aaed79a903f12cb555725fec8cb85e86c33..4061311e7ba88e855ecc15b040cf4009d79355c0 100644 (file)
@@ -54,7 +54,7 @@ Lisp_Object Qend_of_file, Qarith_error, Qmark_inactive;
 Lisp_Object Qbeginning_of_buffer, Qend_of_buffer, Qbuffer_read_only;
 Lisp_Object Qtext_read_only;
 
-Lisp_Object Qintegerp, Qwholenump, Qsymbolp, Qlistp, Qconsp;
+Lisp_Object Qintegerp, Qwholenump, Qsymbolp, Qlistp, Qconsp, Qbooleanp;
 static Lisp_Object Qnatnump;
 Lisp_Object Qstringp, Qarrayp, Qsequencep, Qbufferp;
 Lisp_Object Qchar_or_string_p, Qmarkerp, Qinteger_or_marker_p, Qvectorp;
@@ -3442,6 +3442,7 @@ syms_of_data (void)
 
   DEFSYM (Qlistp, "listp");
   DEFSYM (Qconsp, "consp");
+  DEFSYM (Qbooleanp, "booleanp");
   DEFSYM (Qsymbolp, "symbolp");
   DEFSYM (Qkeywordp, "keywordp");
   DEFSYM (Qintegerp, "integerp");
index 8997e01b068881387ac2446d2d558db60b0e8b08..768e0a11b1c0dc090db79ff166b9837c6396bbc5 100644 (file)
@@ -387,8 +387,7 @@ xd_signature (char *signature, int dtype, int parent_type, Lisp_Object object)
       break;
 
     case DBUS_TYPE_BOOLEAN:
-      if (!EQ (object, Qt) && !EQ (object, Qnil))
-       wrong_type_argument (intern ("booleanp"), object);
+      CHECK_BOOLEAN (object);
       sprintf (signature, "%c", dtype);
       break;
 
index 67b26ef91c7a13f46f45aeaba1dbf74a19e30716..88ccaec40700965fd40d87ce649d13159d5aa6db 100644 (file)
@@ -796,7 +796,7 @@ extern int char_table_translate (Lisp_Object, int);
 /* Defined in data.c.  */
 extern Lisp_Object Qarrayp, Qbufferp, Qbuffer_or_string_p, Qchar_table_p;
 extern Lisp_Object Qconsp, Qfloatp, Qintegerp, Qlambda, Qlistp, Qmarkerp, Qnil;
-extern Lisp_Object Qnumberp, Qstringp, Qsymbolp, Qt, Qvectorp;
+extern Lisp_Object Qnumberp, Qstringp, Qsymbolp, Qt, Qvectorp, Qbooleanp;
 extern Lisp_Object Qbool_vector_p;
 extern Lisp_Object Qvector_or_char_table_p, Qwholenump;
 extern Lisp_Object Qwindow;
@@ -2510,6 +2510,11 @@ CHECK_CONS (Lisp_Object x)
   CHECK_TYPE (CONSP (x), Qconsp, x);
 }
 INLINE void
+CHECK_BOOLEAN (Lisp_Object x)
+{
+  CHECK_TYPE (EQ (x, Qt) || EQ (x, Qnil), Qbooleanp, x);
+}
+INLINE void
 CHECK_VECTOR (Lisp_Object x)
 {
   CHECK_TYPE (VECTORP (x), Qvectorp, x);