From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: MON KEY Newsgroups: gmane.emacs.bugs Subject: bug#6878: bool-vectors of length 0 signal error when aref/aset the 0th element Date: Wed, 18 Aug 2010 00:19:38 -0400 Message-ID: NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Trace: dough.gmane.org 1282106348 18553 80.91.229.12 (18 Aug 2010 04:39:08 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Wed, 18 Aug 2010 04:39:08 +0000 (UTC) To: 6878@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Wed Aug 18 06:39:07 2010 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1OlaQc-0002cU-Q5 for geb-bug-gnu-emacs@m.gmane.org; Wed, 18 Aug 2010 06:39:07 +0200 Original-Received: from localhost ([127.0.0.1]:47443 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OlaQc-0004Tz-3V for geb-bug-gnu-emacs@m.gmane.org; Wed, 18 Aug 2010 00:39:06 -0400 Original-Received: from [140.186.70.92] (port=46886 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OlaQT-0004Tt-83 for bug-gnu-emacs@gnu.org; Wed, 18 Aug 2010 00:38:58 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OlaQS-0006cp-6x for bug-gnu-emacs@gnu.org; Wed, 18 Aug 2010 00:38:57 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:33054) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OlaQS-0006ck-2T for bug-gnu-emacs@gnu.org; Wed, 18 Aug 2010 00:38:56 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.69) (envelope-from ) id 1Ola7C-0005Fe-Mg; Wed, 18 Aug 2010 00:19:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: MON KEY Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-To: owner@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 18 Aug 2010 04:19:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 6878 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.128210512320165 (code B ref -1); Wed, 18 Aug 2010 04:19:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 18 Aug 2010 04:18:43 +0000 Original-Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Ola6s-0005FC-82 for submit@debbugs.gnu.org; Wed, 18 Aug 2010 00:18:43 -0400 Original-Received: from mail.gnu.org ([199.232.76.166] helo=mx10.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Ola6r-0005F2-85 for submit@debbugs.gnu.org; Wed, 18 Aug 2010 00:18:41 -0400 Original-Received: from lists.gnu.org ([199.232.76.165]:33037) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1Ola7s-0007f2-Nl for submit@debbugs.gnu.org; Wed, 18 Aug 2010 00:19:44 -0400 Original-Received: from [140.186.70.92] (port=58679 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Ola7r-0002Ok-8a for bug-gnu-emacs@gnu.org; Wed, 18 Aug 2010 00:19:44 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1Ola7q-0004dX-5f for bug-gnu-emacs@gnu.org; Wed, 18 Aug 2010 00:19:43 -0400 Original-Received: from mail-wy0-f169.google.com ([74.125.82.169]:35794) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Ola7p-0004dT-W1 for bug-gnu-emacs@gnu.org; Wed, 18 Aug 2010 00:19:42 -0400 Original-Received: by wyg36 with SMTP id 36so287197wyg.0 for ; Tue, 17 Aug 2010 21:19:38 -0700 (PDT) Original-Received: by 10.216.157.13 with SMTP id n13mr6564201wek.35.1282105178202; Tue, 17 Aug 2010 21:19:38 -0700 (PDT) Original-Received: by 10.216.65.140 with HTTP; Tue, 17 Aug 2010 21:19:38 -0700 (PDT) X-Google-Sender-Auth: dVpr6VwZ9nE-8W5NEWSBfW_kmCY X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list Resent-Date: Wed, 18 Aug 2010 00:19:02 -0400 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:39595 Archived-At: When aref/aset'ing the 0th element of a bool-vectors of length 0 i get an args-out-of-range error: (setq tt--bv (make-bool-vector 29 t)) ;=3D> #&29"\377\377\377=1F" (vconcat (make-bool-vector 29 t)) ; =3D> [t { ... 27 t's ... } t] (aref tt--bv 0) ;=3D> t (aset tt--bv 0 nil) ;=3D> nil (setq tt--bv (make-bool-vector 0 t)) ;=3D> #&0"" (vconcat (make-bool-vector 0 t)) ;=3D> [] (aref tt--bv 0) ;=3D> Debugger entered--Lisp error: (args-out-of-range #&0"" 0) (aset tt--bv 0 t) ;=3D> Debugger entered--Lisp error: (args-out-of-range #&0"" 0) As with the the first bool-vector of length 29 the second bool-vector of length 0 should also have a value at element 0 that evaluates to `t'. (Or, it should according to the manual): ,---- (info "(elisp)Bool-Vector Type") | | "A "bool-vector" is a one-dimensional array of elements that must be | `t' or `nil'." | `---- I can't find mention in the docs that the 0th element of a bool-vector is void for 0 length bool-vectors. Indeed, it isn't at all clear why it should. I find this is problematic because there aren't any equivalents to `car-safe'/`safe-length' for generalized bool-vectors operations. Obv. taking the 0th index of a vector or char-table also signals an args-out-of-range error however I belive this for slightly different reasons. (setq tt--mv (make-vector 0 t)) ;=3D> [] (vectorp tt--mv) ;=3D> t (vectorp tt--bv) ;=3D> nil (char-table-p tt--bv) ;=3D> nil (vector-or-char-table-p tt--bv) ;=3D> nil (arrayp tt--bv) ;=3D> t (bool-vector-p tt--bv) ;=3D> t (null tt--bv) ;=3D> nil (null (append tt--bv)) ;=3D> nil (null (append tt--bv nil)) ;=3D> t Maybe something like this is needed: (defun safe-aref-bool-vector (bool-vector idx) (if (and (bool-vector-p bool-vector) (not (null (append bool-vector nil)))) (aref bool-vector idx) 0)) (defun safe-aset-bool-vector (bool-vector idx) (if (and (bool-vector-p bool-vector) (not (null (append bool-vector nil)))) (aset bool-vector idx) 0))