From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Lars Ingebrigtsen Newsgroups: gmane.emacs.bugs Subject: bug#19208: replace-match unhelpful error message Date: Sat, 03 Aug 2019 16:01:15 +0200 Message-ID: <87imreic0k.fsf@mouse.gnus.org> References: <87r3wn5kgw.fsf@newcastle.ac.uk> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="61499"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) Cc: 19208@debbugs.gnu.org To: phillip.lord@newcastle.ac.uk (Phillip Lord) Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat Aug 03 16:02:17 2019 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1htubw-000Fsl-Lm for geb-bug-gnu-emacs@m.gmane.org; Sat, 03 Aug 2019 16:02:16 +0200 Original-Received: from localhost ([::1]:40250 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1htubv-0002jT-OS for geb-bug-gnu-emacs@m.gmane.org; Sat, 03 Aug 2019 10:02:15 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:44100) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1htubk-0002ig-8W for bug-gnu-emacs@gnu.org; Sat, 03 Aug 2019 10:02:05 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1htubj-00036R-3y for bug-gnu-emacs@gnu.org; Sat, 03 Aug 2019 10:02:04 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:50844) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1htubj-00036K-16 for bug-gnu-emacs@gnu.org; Sat, 03 Aug 2019 10:02:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1htubi-0005VL-SU for bug-gnu-emacs@gnu.org; Sat, 03 Aug 2019 10:02:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Lars Ingebrigtsen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 03 Aug 2019 14:02:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 19208 X-GNU-PR-Package: emacs Original-Received: via spool by 19208-submit@debbugs.gnu.org id=B19208.156484088421098 (code B ref 19208); Sat, 03 Aug 2019 14:02:02 +0000 Original-Received: (at 19208) by debbugs.gnu.org; 3 Aug 2019 14:01:24 +0000 Original-Received: from localhost ([127.0.0.1]:59662 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1htub5-0005UE-Rn for submit@debbugs.gnu.org; Sat, 03 Aug 2019 10:01:24 -0400 Original-Received: from quimby.gnus.org ([80.91.231.51]:47948) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1htub3-0005U2-IS for 19208@debbugs.gnu.org; Sat, 03 Aug 2019 10:01:22 -0400 Original-Received: from 77.18.62.220.tmi.telenormobil.no ([77.18.62.220] helo=sandy) by quimby.gnus.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1htuay-0004xh-PP; Sat, 03 Aug 2019 16:01:19 +0200 In-Reply-To: <87r3wn5kgw.fsf@newcastle.ac.uk> (Phillip Lord's message of "Fri, 28 Nov 2014 17:00:15 +0000") X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 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: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:164455 Archived-At: phillip.lord@newcastle.ac.uk (Phillip Lord) writes: > (progn > (goto-char (point-min)) > (re-search-forward "This") > (replace-match "That" nil nil nil 1)) > > This causes the following error. > > progn: Args out of range: -1, -1 > > The error is caused because I have asked for a subexp that doesn't exist in > the regexp. A programmer error for sure, but the Args out of range error seems > rather unfriendly to me, especially as I have no idea where the -1, or > -1 has come from. > > "Attempt to replace regexp subexpression that doesn't exist", for > example, would be nicer. Yup. This is the code that signals the error: if (search_regs.start[sub] < BEGV || search_regs.start[sub] > search_regs.end[sub] || search_regs.end[sub] > ZV) args_out_of_range (make_fixnum (search_regs.start[sub]), make_fixnum (search_regs.end[sub])); Which is a weird way to check for this, surely? It looks more like a sanity checks that checks whether start[sub] and end[sub] is inside the buffer, and that the start is before the end. This happens to actually work here because when there is no match, start[sub] is -1, which is always less than BEGV. And this explains where the -1 in the args out of range comes from. The sanity check seems sensible (because the buffer may have been narrowed before calling replace-match), so I propose to add an additional check that actually explicitly checks whether the subexp is valid. Hm... or is this what the check right above it tried to do? if (NILP (subexp)) sub = 0; else { CHECK_FIXNUM (subexp); if (! (0 <= XFIXNUM (subexp) && XFIXNUM (subexp) < search_regs.num_regs)) args_out_of_range (subexp, make_fixnum (search_regs.num_regs)); sub = XFIXNUM (subexp); } Yoda conditionals and a !... Let's see... No, that's just another sanity check -- num_regs is the max allowed number of sub-matches. (I've now added some comments to clarify.) I've now added a new check to check for this situation, and I've used your suggested error string. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no