From: David Kastrup <dak@gnu.org>
To: emacs-devel@gnu.org
Subject: Re: Lexical binding
Date: Tue, 05 Apr 2011 00:03:41 +0200 [thread overview]
Message-ID: <877hb91xoi.fsf@fencepost.gnu.org> (raw)
In-Reply-To: jwv7hb91yud.fsf-monnier+emacs@gnu.org
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>>> Check the `dolist' macro, it has a FIXME for that.
>> OK, fair enough. Sorry for the noise.
>> Is this one also documented (or has a logical explanation that I'm
>> again missing)?
>
> No, it's not documented tho it's the same underlying problem:
>
>> ;; test.el -*- lexical-binding: t -*-
>> (condition-case test
>> (ignore)
>> (quit test)
>> (error test))
>> ;; end
>
>> No error. Now, if you remove `test' in either handler:
>
> Right. Internally, the condition-case above is turned into
>
> (condition-case :fun-body
> (lambda () (ignore))
> (quit (lambda (test) test))
> (error (lambda (test) test)))
>
> I.e. the underlying problem (shared with dolist and some pcase
> situations as well) is that one binding occurrence of a variable (above,
> `test') is turned into 2 or more, so you can get warnings about an
> unused variable because some of the its binders aren't used, but since
> it really corresponds to a single binder in the source code the
> programmer can't really fix it, hence the warning is an annoyance.
>
> I'm not sure yet how best to solve the issue.
Go through a stage
(condition-case :fun-body (lambda () ignore)
(multi-lambda (x) (quit (x test) test) (error (x test) test)))
or something similar where the byte compiler does the "unused variable"
check (or a setup for it) during the multi-lambda expansion stage. What
kind of form is exactly needed here in order to cater for all such
situations will require careful thinking.
--
David Kastrup
next prev parent reply other threads:[~2011-04-04 22:03 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-01 17:32 Lexical binding Stefan Monnier
2011-04-01 19:12 ` David De La Harpe Golden
2011-04-01 19:46 ` Eli Zaretskii
2011-04-04 16:05 ` Stefan Monnier
2011-04-01 20:04 ` Daniel Colascione
2011-04-01 20:39 ` cedet-bzr build failure (was : Lexical binding) Darren Hoo
2011-04-01 21:21 ` David Engster
2011-04-01 22:26 ` Darren Hoo
2011-04-02 12:40 ` David Engster
2011-04-02 13:42 ` Eric M. Ludlam
2011-04-02 18:22 ` cedet-bzr build failure David Engster
2011-04-02 18:29 ` cedet-bzr build failure (was : Lexical binding) Darren Hoo
2011-04-01 20:42 ` Lexical binding Eli Zaretskii
2011-04-01 22:13 ` Juanma Barranquero
2011-04-02 2:33 ` Juanma Barranquero
2011-04-02 3:36 ` Juanma Barranquero
2011-04-02 18:38 ` Stefan Monnier
2011-04-04 16:04 ` Juanma Barranquero
2011-04-04 21:44 ` Stefan Monnier
2011-04-04 21:56 ` Juanma Barranquero
2011-04-04 22:03 ` David Kastrup [this message]
2011-04-04 22:34 ` Stefan Monnier
2011-04-02 18:38 ` Stefan Monnier
2011-04-02 18:50 ` Juanma Barranquero
2011-04-02 18:57 ` Juanma Barranquero
2011-04-03 12:05 ` Christian Ohler
2011-04-03 12:26 ` Juanma Barranquero
2011-04-03 23:32 ` Christian Ohler
2011-04-04 0:12 ` Juanma Barranquero
2011-04-04 16:22 ` Stefan Monnier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=877hb91xoi.fsf@fencepost.gnu.org \
--to=dak@gnu.org \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.