From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Tomas Hlavaty Newsgroups: gmane.emacs.help Subject: Re: How to avoid compiler warning `unused lexical variable' for `dolist' or `dotimes'? Date: Sun, 10 Jan 2021 10:20:45 +0100 Message-ID: <87a6thkv0y.fsf@logand.com> References: <87zh1kq97s.fsf@robertthorpeconsulting.com> <87czyekkfd.fsf@logand.com> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="36506"; mail-complaints-to="usenet@ciao.gmane.io" Cc: help-gnu-emacs@gnu.org To: Stefan Monnier Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Sun Jan 10 10:21:37 2021 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kyWun-0009NB-2X for geh-help-gnu-emacs@m.gmane-mx.org; Sun, 10 Jan 2021 10:21:37 +0100 Original-Received: from localhost ([::1]:46088 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kyWum-0003Hx-6Q for geh-help-gnu-emacs@m.gmane-mx.org; Sun, 10 Jan 2021 04:21:36 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:53566) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kyWu3-0003Hn-MR for help-gnu-emacs@gnu.org; Sun, 10 Jan 2021 04:20:51 -0500 Original-Received: from logand.com ([37.48.87.44]:42720) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kyWu1-0002Qx-T0 for help-gnu-emacs@gnu.org; Sun, 10 Jan 2021 04:20:51 -0500 Original-Received: by logand.com (Postfix, from userid 1001) id EEEEE19F7BB; Sun, 10 Jan 2021 10:20:47 +0100 (CET) X-Mailer: emacs 26.3 (via feedmail 11-beta-1 I) In-Reply-To: Received-SPF: pass client-ip=37.48.87.44; envelope-from=tom@logand.com; helo=logand.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.io gmane.emacs.help:127158 Archived-At: On Sat 09 Jan 2021 at 14:01, Stefan Monnier wrote: >>> (let ((i --dotimes-counter--)) plist)) >> >> In Common Lisp, that part would be solved by (declare (ignorable i)) in >> the macro: >> >> (let ((i --dotimes-counter--)) >> (declare (ignorable i)) >> plist) >> >> I do not know if Emacs Lisp has ignorable. > > We have something equivalent: > > (let ((i --dotimes-counter--)) > (ignore i) > plist) > > [ Which "comes for free" in the sense that it is not the result of > deliberate design but rather the simple fact that the `ignore` > function is usually optimized away (but it's optimized late enough > that the `i` passed to it still counts as a use of that variable). ] I see that Emacs Lisp does not have a way to distinguish the two cases. In Common Lisp, (declare (ignore i)) means ignore unused variable i. If i is used, I get a warning. (declare (ignorable i)) means ignore the variable in case it is unused, which is useful in cases like the one discussed here where the author of the macro does not know upfront, if the variable i should or should not be ignored. If the dotimes macro contained (ignore i) but the user returned i, I would expect warning: (let ((i --dotimes-counter--)) (ignore i) i) It is a shame that Emacs Lisp does not do that.