From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Stefan Monnier via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#13814: 24.3.50; Dynamic variables shadowing prevent defvar Date: Tue, 24 Aug 2021 17:25:33 -0400 Message-ID: References: <87hal0199m.fsf@orion.kollektiv-hamburg.de> <87y28tt0q1.fsf@gnus.org> Reply-To: Stefan Monnier Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="25760"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Cc: 13814@debbugs.gnu.org, Jorgen Schaefer To: Lars Ingebrigtsen Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Tue Aug 24 23:26:12 2021 Return-path: Envelope-to: geb-bug-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 1mIdvw-0006Sb-1D for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 24 Aug 2021 23:26:12 +0200 Original-Received: from localhost ([::1]:59294 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mIdvu-00056i-Kw for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 24 Aug 2021 17:26:10 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:54692) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mIdvm-00056W-9y for bug-gnu-emacs@gnu.org; Tue, 24 Aug 2021 17:26:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:33784) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mIdvm-0004nH-1V for bug-gnu-emacs@gnu.org; Tue, 24 Aug 2021 17:26:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mIdvl-0001GB-QB for bug-gnu-emacs@gnu.org; Tue, 24 Aug 2021 17:26:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 24 Aug 2021 21:26:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 13814 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: moreinfo confirmed Original-Received: via spool by 13814-submit@debbugs.gnu.org id=B13814.16298403484824 (code B ref 13814); Tue, 24 Aug 2021 21:26:01 +0000 Original-Received: (at 13814) by debbugs.gnu.org; 24 Aug 2021 21:25:48 +0000 Original-Received: from localhost ([127.0.0.1]:45330 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mIdvX-0001Fj-Uu for submit@debbugs.gnu.org; Tue, 24 Aug 2021 17:25:48 -0400 Original-Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:57092) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mIdvW-0001FU-4H for 13814@debbugs.gnu.org; Tue, 24 Aug 2021 17:25:47 -0400 Original-Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 1E3F210020E; Tue, 24 Aug 2021 17:25:40 -0400 (EDT) Original-Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 13C71100083; Tue, 24 Aug 2021 17:25:34 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1629840334; bh=Rf9Pu341Cqc1+v7XPU3C0IbW4AY8D/RHPvKzAXFN/Kg=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=VXklNjsCQrXzexoXaDlRLcOtvw8aG9U5TFJ0v9ggLyfoWntmBgo97bzJNgRG6YUZi YDzq9F3x7hDPWe2efNEpOsivs7/0wBVtIPBtChOYUotMqXyKlqP5JYuz1uh/YYhmHz GF2kmu/zGC0ugDe3wtyblTOcxbNWVl0DMUzwZ9Axe5eJogkgCb6Da9k8y2Tl1saWKP kajcZ0oAaCiUMQcdpO36crIuq/Csn1Ee2HNihIbWeLV/7zURyTYKMJi58h5g5xfMRT QLtb5ZJ+JkVOeFpbYyGZ/WdlTKmE2l6c7sWgHKDMj8+RrP2zrMazs+6FRkVMbW0LlK 6oRAn4uCYYR8Q== Original-Received: from alfajor (unknown [104.247.244.135]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id BEB9D1200E2; Tue, 24 Aug 2021 17:25:33 -0400 (EDT) In-Reply-To: <87y28tt0q1.fsf@gnus.org> (Lars Ingebrigtsen's message of "Mon, 23 Aug 2021 03:21:26 +0200") X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list 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-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:212579 Archived-At: Lars Ingebrigtsen [2021-08-23 03:21:26] wrote: > Stefan Monnier writes: >> Thanks for filing it, so we have a clear bug-number for this long >> standing problem. If someone wants to take a crack at fixing it, >> I think that we should add a `set-toplevel-default' which defvar and >> defcustom could use, as for how to implement it, I you can take a look >> at the check&warning in the C code of `defvar'. FWIW, this bug was presumably fixed with: commit a104f656c8217b027866d32e8d7bf024a671e3cc Author: Stefan Monnier Date: Fri Aug 2 17:16:33 2013 -0400 So we should probably close it. > When running this from M-: now, I get the following backtrace: > > Debugger entered--Lisp error: (error "Defining as dynamic an already lexical var") > (defvar bug-variable t "This variable is not defined when autoloaded.") > eval-buffer(# nil "/tmp/bug-lib.el" nil t) ; Reading at buffer position 74 > load-with-code-conversion("/tmp/bug-lib.el" "/tmp/bug-lib.el" nil t) > (bug-variable-value) > (let ((bug-variable nil)) (bug-variable-value)) > eval((let ((bug-variable nil)) (bug-variable-value)) t) > eval-expression((let ((bug-variable nil)) (bug-variable-value)) nil nil 127) > funcall-interactively(eval-expression (let ((bug-variable nil)) (bug-variable-value)) nil nil 127) > call-interactively(eval-expression nil nil) > > So this signals an error when doing the > > (let ((bug-variable nil)) > (bug-variable-value)) > > from a lexical context. Yes, this is a new feature: when we get to the `defvar` the problem is not just that we need to "punch through" and define the toplevel/dynamic value of `bug-variable` but also that the `let` would need to be retroactively changed to be dynamic, which would in general require time-travel, hence the error. The fix is to use another var name (if you do want your `let` to be statically scoped) or to use `dlet`, or an explicit `defvar`, or an explicit `(require 'bug-lib)`, ... Stefan