From debbugs-submit-bounces@debbugs.gnu.org Wed Jan 11 08:50:49 2023 Received: (at submit) by debbugs.gnu.org; 11 Jan 2023 13:50:49 +0000 Received: from localhost ([127.0.0.1]:41975 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pFbVA-0001cj-UB for submit@debbugs.gnu.org; Wed, 11 Jan 2023 08:50:49 -0500 Received: from lists.gnu.org ([209.51.188.17]:43226) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pFbV6-0001cT-3H for submit@debbugs.gnu.org; Wed, 11 Jan 2023 08:50:47 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pFbUq-0005g7-Q6 for bug-gnu-emacs@gnu.org; Wed, 11 Jan 2023 08:50:37 -0500 Received: from mail-108-mta111.mxroute.com ([136.175.108.111]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pFbUo-0006bj-DX for bug-gnu-emacs@gnu.org; Wed, 11 Jan 2023 08:50:28 -0500 Received: from mail-111-mta2.mxroute.com ([136.175.111.2] filter006.mxroute.com) (Authenticated sender: mN4UYu2MZsgR) by mail-108-mta111.mxroute.com (ZoneMTA) with ESMTPSA id 185a118946e000011e.002 for (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES128-GCM-SHA256); Wed, 11 Jan 2023 13:50:20 +0000 X-Zone-Loop: 3f0d8b3cc5889f6ea5463f5a43e4d9396d247210a55b X-Originating-IP: [136.175.111.2] DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=neverwas.me ; s=x; h=Content-Transfer-Encoding:Content-Type:MIME-Version:Message-ID:Date: Subject:Cc:To:From:Sender:Reply-To:Content-ID:Content-Description:Resent-Date :Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: References:List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post: List-Owner:List-Archive; bh=d91UwiEfZfSKPj4DPg9j+43uwBrfYSSamqXJ6VKvZ2s=; b=A PAMoAdM8yQhxBs9TlkRYTDZZukY7q58IFwe8FLNtLqfTAmPEjV7SzeAQEz7tRMLhLWPvZIIZkZOFW 1y/1sE2NIZ9h3EODk/R6nZ0aogWlQ1t//xiyTBJ0m2AXGYv0H6kqDkRFFCgmi2qc784hpBMGrcCOn pG+Zb421cjF4ELC0UaIdTuhz3kkF2Z641idk9F811f9AzPrVQw6IEz8w30lVFlvAROWwc9ryEOeej 3VnnAcBPI18hNI02sqJhPyjvDNrmV18NVXHkSgR418EBFvYdkiGbma6821EMgsGOalw53vxzxr2fk 2qKr0x05cpBeJ/Wke1nGGhNFv1ey0diBw==; From: "J.P." To: bug-gnu-emacs@gnu.org Subject: 29.0.60; Free variable with :buffer keyword in ert-with-temp-file Date: Wed, 11 Jan 2023 05:50:17 -0800 Message-ID: <87o7r5ji3q.fsf@neverwas.me> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Authenticated-Id: masked@neverwas.me Received-SPF: pass client-ip=136.175.108.111; envelope-from=jp@neverwas.me; helo=mail-108-mta111.mxroute.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.4 (-) X-Debbugs-Envelope-To: submit Cc: Stefan Kangas X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.4 (--) Pretty sure this is just a (functional) typo. If you put something like ;; -*- lexical-binding: t; -*- (require 'ert-x) (ert-deftest test () (let (foo) (ert-with-temp-file f :suffix ".ext" :text "hw\n" :buffer b (should (equal (setq foo b) (get-file-buffer f)))) (should-not (buffer-live-p foo)))) in a file and byte-compile it, you get ^L Compiling file /tmp/somefile.el at Wed Jan 11 00:28:11 2023 Entering directory =E2=80=98/tmp/=E2=80=99 somefile.el: Warning: reference to free variable =E2=80=98buf=E2=80=99 Doing diff --git a/lisp/emacs-lisp/ert-x.el b/lisp/emacs-lisp/ert-x.el index 83705ca5b8..7cf60bfeae 100644 --- a/lisp/emacs-lisp/ert-x.el +++ b/lisp/emacs-lisp/ert-x.el @@ -496,7 +496,7 @@ ert-with-temp-file (progn ,@body) (ignore-errors ,@(when buffer - (list `(with-current-buffer buf + (list `(with-current-buffer ,buffer (set-buffer-modified-p nil)) `(kill-buffer ,buffer)))) (ignore-errors seems to make it go away. In GNU Emacs 29.0.60 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.35, cairo version 1.17.6) of 2023-01-10 built on localhost Repository revision: 1cbc22b9c7f836f5b3311213dca8afa853513442 Repository branch: emacs-29 Windowing system distributor 'The X.Org Foundation', version 11.0.12014000 System Description: Fedora Linux 36 (Workstation Edition) Configured using: 'configure --enable-check-lisp-object-type --enable-checking=3Dyes,glyphs 'CFLAGS=3D-O0 -g3' PKG_CONFIG_PATH=3D:/usr/lib64/pkgconfig:/usr/share/pkgconfig' Configured features: ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS WEBP X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB Important settings: value of $LANG: en_US.UTF-8 value of $XMODIFIERS: @im=3Dibus locale-coding-system: utf-8-unix Major mode: Lisp Interaction Minor modes in effect: tooltip-mode: t global-eldoc-mode: t eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t line-number-mode: t indent-tabs-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: None found. Features: (shadow sort mail-extr emacsbug message mailcap yank-media puny dired dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg rfc6068 epg-config gnus-util text-property-search time-date subr-x mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader cl-loaddefs cl-lib sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads dbusbind inotify lcms2 dynamic-setting system-font-setting font-render-setting cairo move-toolbar gtk x-toolkit xinput2 x multi-tty make-network-process emacs) Memory information: ((conses 16 36352 11795) (symbols 48 5149 0) (strings 32 13148 1515) (string-bytes 1 374127) (vectors 16 9320) (vector-slots 8 148190 16310) (floats 8 21 26) (intervals 56 220 0) (buffers 976 10)) From debbugs-submit-bounces@debbugs.gnu.org Thu Jan 12 20:56:41 2023 Received: (at 60730-done) by debbugs.gnu.org; 13 Jan 2023 01:56:41 +0000 Received: from localhost ([127.0.0.1]:48991 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pG9JB-0004Hc-87 for submit@debbugs.gnu.org; Thu, 12 Jan 2023 20:56:41 -0500 Received: from mail-ot1-f44.google.com ([209.85.210.44]:41783) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pG9J9-0004HO-Mg for 60730-done@debbugs.gnu.org; Thu, 12 Jan 2023 20:56:40 -0500 Received: by mail-ot1-f44.google.com with SMTP id f88-20020a9d03e1000000b00684c4041ff1so1880910otf.8 for <60730-done@debbugs.gnu.org>; Thu, 12 Jan 2023 17:56:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:mime-version:references:in-reply-to :from:from:to:cc:subject:date:message-id:reply-to; bh=/EKkWUiIXTIXVTwZhrA/qtvs2WQzI9F9HUZTlO02Oag=; b=lkdRnVyYe2Fcp3PXO2tV5HNQWgLOCf1bR/ZRH/dedksGNxHSevOVz414A4pa8KP3i4 Fi9DJ+lJN2gfMRsTe4mtgofz0SgZwluk71cOZ2DsMruoXkfU9rBxCVswfr6rmrFoZ1Nm RcrZ/e/zcj9cq7eUXYXZ6JUwRZvunxIkLkGNu2Ca6Xj4btm8MTmMS+B6mM6ThfvPGs8X jWTzhVxxV3xvh5Z4X+7KY0Y8Pt8BfqubNn1sPzAD3jJBws60OmOYvZV1DZ+wkB1IKdQq dGYedrh3KC1In9JkeeW2ceLZhF1g2pm9n7he0MQm1+339K0dFLSBSX4CKIXylt9eeq8o A9JA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:mime-version:references:in-reply-to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=/EKkWUiIXTIXVTwZhrA/qtvs2WQzI9F9HUZTlO02Oag=; b=afWoCad7xpHcMvFSsDc6eeka9e/pCOW36cf+0cdV3Ic/CrdJheZ+1EWgXNE87/MzyA NAzGNqhvk77pTHV2Fv1LmyUXLNF/kgOxc1+nv/3yj6gWEwGMG6cErhN9XdKhIMsQnHVi x3zeQ+wokCVEF6oXLmudLCavW+B9zP0bJyOI4uhs7JU3Qb28nylZ5RX6FLJzKHAl0Ppp uqbN4CXfTbFxpYtWZhx4ZwiV9JvlX+p5H7Q2QV4XzEv0q/bj4ZVbXgQO99u/Fj33Wiq3 xBpoJbTdbq1SC8zLDa4Af7ZdS67nlGfy6rihismgdMhf3eI82G2q5+rNri3K6udOf5S+ 2Tww== X-Gm-Message-State: AFqh2kprq3+4UutjE1OiNlqSXiCoZim/+Kh9N1p4zFzrVJR8GOtJsAUM yeLT7F7EGCA40FAqesa3fP20zar35q4k348xQPo= X-Google-Smtp-Source: AMrXdXsZFUUQF+ZRc+2c9nGmuHswU/dRc8r03f64YktQ3ryRHIwUNw1KaneXicSX4JkvpEufwpgc5HcQwKXb+zp/9Gw= X-Received: by 2002:a05:6830:1b78:b0:677:9c09:55d1 with SMTP id d24-20020a0568301b7800b006779c0955d1mr3860064ote.224.1673574994030; Thu, 12 Jan 2023 17:56:34 -0800 (PST) Received: from 753933720722 named unknown by gmailapi.google.com with HTTPREST; Thu, 12 Jan 2023 17:56:33 -0800 From: Stefan Kangas In-Reply-To: <87o7r5ji3q.fsf@neverwas.me> (J. P.'s message of "Wed, 11 Jan 2023 05:50:17 -0800") References: <87o7r5ji3q.fsf@neverwas.me> X-Hashcash: 1:20:230113:60730-done@debbugs.gnu.org::tVHO+mQ7NtlWpypM:278y MIME-Version: 1.0 Date: Thu, 12 Jan 2023 17:56:33 -0800 Message-ID: Subject: Re: bug#60730: 29.0.60; Free variable with :buffer keyword in ert-with-temp-file To: "J.P." Content-Type: text/plain; charset="UTF-8" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 60730-done Cc: 60730-done@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) "J.P." writes: > Pretty sure this is just a (functional) typo. [...] > diff --git a/lisp/emacs-lisp/ert-x.el b/lisp/emacs-lisp/ert-x.el > index 83705ca5b8..7cf60bfeae 100644 > --- a/lisp/emacs-lisp/ert-x.el > +++ b/lisp/emacs-lisp/ert-x.el > @@ -496,7 +496,7 @@ ert-with-temp-file > (progn ,@body) > (ignore-errors > ,@(when buffer > - (list `(with-current-buffer buf > + (list `(with-current-buffer ,buffer > (set-buffer-modified-p nil)) > `(kill-buffer ,buffer)))) > (ignore-errors > > seems to make it go away. Thanks, fixed on emacs-29 (commit f27a330b99e). From debbugs-submit-bounces@debbugs.gnu.org Sat Jan 28 09:13:50 2023 Received: (at 60730) by debbugs.gnu.org; 28 Jan 2023 14:13:50 +0000 Received: from localhost ([127.0.0.1]:39940 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pLlxm-0008RI-2n for submit@debbugs.gnu.org; Sat, 28 Jan 2023 09:13:50 -0500 Received: from mail-108-mta76.mxroute.com ([136.175.108.76]:40541) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pLlxj-0008Qz-Eq for 60730@debbugs.gnu.org; Sat, 28 Jan 2023 09:13:48 -0500 Received: from mail-111-mta2.mxroute.com ([136.175.111.2] filter006.mxroute.com) (Authenticated sender: mN4UYu2MZsgR) by mail-108-mta76.mxroute.com (ZoneMTA) with ESMTPSA id 185f8ba0847000011e.001 for <60730@debbugs.gnu.org> (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES128-GCM-SHA256); Sat, 28 Jan 2023 14:13:39 +0000 X-Zone-Loop: 73a4ce613e2d93d353da9acfdaa530c1272e0ed3387a X-Originating-IP: [136.175.111.2] DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=neverwas.me ; s=x; h=Content-Type:MIME-Version:Message-ID:Date:References:In-Reply-To: Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=8/uo/t+N2M5fiUmUIhVWnSv0a6ezMXbaiBfo/SFNTtw=; b=d5H7H5uaC9nc8s50FWiu6JYDSr 8NjKNqdvtPjsvcquvcYpO34kBRSRrxb1mfjzs91uOcIMXwqkXSsEP6wvgXPNUJlMtojZTmYZxf0BK FeFs8xNE0S6+D1l3jm1if9oCubOkT/Gv/jN0Xo9wcAghFzmbQW4uONEPMrTfpPA9sEc9AVdX5Vlw6 bNir5N/KCtT6R93LA4CiBQMT8f0nrQA1FtwTIT5G2uz7izHvTPYuq0Tw59hO1J5dnkIQ89k3fcRFM uGjFibe98xZRrOHjESW8KH7Y7q0tRISuvEGtFEQd5qj1zZ6zE6XS6nThTSYMqCpOH+udlWa0oBPNu LGve8RzA==; From: "J.P." To: 60730@debbugs.gnu.org Subject: Re: bug#60730: 29.0.60; Free variable with :buffer keyword in ert-with-temp-file In-Reply-To: (Stefan Kangas's message of "Thu, 12 Jan 2023 17:56:33 -0800") References: <87o7r5ji3q.fsf@neverwas.me> Date: Sat, 28 Jan 2023 06:13:36 -0800 Message-ID: <874jsazqzz.fsf@neverwas.me> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-Authenticated-Id: masked@neverwas.me X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 60730 Cc: Stefan Kangas X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Perhaps I should have filed another report for this. It's a similar error in the same vicinity on the same branch, so I figured might as well piggyback. I'm getting "reference to free variable `utf-8'" warnings (from `elisp-flymake--batch-compile-for-flymake') when linting tests containing `ert-with-temp-file'. This doesn't show up if `coding-system-for-write' is nil or if you pass in a quoted keyword argument for `:coding'. Adding a quote like this seems to make it go away: diff --git a/lisp/emacs-lisp/ert-x.el b/lisp/emacs-lisp/ert-x.el index 98a017c8a8e..70b136c5c55 100644 --- a/lisp/emacs-lisp/ert-x.el +++ b/lisp/emacs-lisp/ert-x.el @@ -484,7 +484,7 @@ ert-with-temp-file (suffix (or suffix ert-temp-file-suffix (ert--with-temp-file-generate-suffix (or (macroexp-file-name) buffer-file-name))))) - `(let* ((coding-system-for-write ,(or coding coding-system-for-write)) + `(let* ((coding-system-for-write ',(or coding coding-system-for-write)) (,temp-file (,(if directory 'file-name-as-directory 'identity) (make-temp-file ,prefix ,directory ,suffix ,text))) (,name ,(if directory Not sure if that's the right call, though. If this keyword is already seeing action in the wild, perhaps it's worth ensuring that its argument arrives unquoted? Or maybe another type check (to accompany the one for `name') would do? Thanks in advance. From debbugs-submit-bounces@debbugs.gnu.org Sat Jan 28 10:03:33 2023 Received: (at 60730) by debbugs.gnu.org; 28 Jan 2023 15:03:33 +0000 Received: from localhost ([127.0.0.1]:41373 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pLmjs-0001ea-NS for submit@debbugs.gnu.org; Sat, 28 Jan 2023 10:03:33 -0500 Received: from eggs.gnu.org ([209.51.188.92]:48712) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pLmjo-0001eF-6Z for 60730@debbugs.gnu.org; Sat, 28 Jan 2023 10:03:31 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pLmjh-0001Mk-Ah; Sat, 28 Jan 2023 10:03:21 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=QrjIKlRUsDK69Zt+cX23zrD+DIWZpbpve157vxCop88=; b=MbQXJvGCrxEM lAar20MPwSMde9/HTPHl5znkkgLeww3J6fr9aN6mNEZrrcYK/eOOUHRiwg+3E+XXuDI32QbColmlS rR9RwXa33E0hI3n5Aqqp65SgvcSJo/Aq9vallA7uVrZ/sTvlsWCsN644ev9bQWaollWcorHMnBzVF VrTTNUODw5B62uAQWCYEnv51Oz1p2fNPgXBbaP5G1tO9SThNUiSy7QV9zlVLq6I99tRgzSjLz1cRt vHvCWX6iDvFYgfcTFoqpEZZUvoB+FlhuqVOvoOGXqfPNswpoP2jjHVgD42nOlOcpWw3pOEuu2OvUr drqWeB4veBrUjlXoBjYDDQ==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pLmjg-0005T8-HD; Sat, 28 Jan 2023 10:03:20 -0500 Date: Sat, 28 Jan 2023 17:03:07 +0200 Message-Id: <83edreaehg.fsf@gnu.org> From: Eli Zaretskii To: "J.P." In-Reply-To: <874jsazqzz.fsf@neverwas.me> (jp@neverwas.me) Subject: Re: bug#60730: 29.0.60; Free variable with :buffer keyword in ert-with-temp-file References: <87o7r5ji3q.fsf@neverwas.me> <874jsazqzz.fsf@neverwas.me> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 60730 Cc: stefankangas@gmail.com, 60730@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: Stefan Kangas > From: "J.P." > Date: Sat, 28 Jan 2023 06:13:36 -0800 > > Perhaps I should have filed another report for this. It's a similar > error in the same vicinity on the same branch, so I figured might as > well piggyback. > > I'm getting "reference to free variable `utf-8'" warnings (from > `elisp-flymake--batch-compile-for-flymake') when linting tests > containing `ert-with-temp-file'. This doesn't show up if > `coding-system-for-write' is nil or if you pass in a quoted keyword > argument for `:coding'. Adding a quote like this seems to make it go > away: > > diff --git a/lisp/emacs-lisp/ert-x.el b/lisp/emacs-lisp/ert-x.el > index 98a017c8a8e..70b136c5c55 100644 > --- a/lisp/emacs-lisp/ert-x.el > +++ b/lisp/emacs-lisp/ert-x.el > @@ -484,7 +484,7 @@ ert-with-temp-file > (suffix (or suffix ert-temp-file-suffix > (ert--with-temp-file-generate-suffix > (or (macroexp-file-name) buffer-file-name))))) > - `(let* ((coding-system-for-write ,(or coding coding-system-for-write)) > + `(let* ((coding-system-for-write ',(or coding coding-system-for-write)) > (,temp-file (,(if directory 'file-name-as-directory 'identity) > (make-temp-file ,prefix ,directory ,suffix ,text))) > (,name ,(if directory > > Not sure if that's the right call, though. If this keyword is already > seeing action in the wild, perhaps it's worth ensuring that its argument > arrives unquoted? Or maybe another type check (to accompany the one for > `name') would do? Can you show the results of macro-expansion both when coding has a value and when it is nil (and then coding-system-for-write is nil or has a non-nil value)? From debbugs-submit-bounces@debbugs.gnu.org Sat Jan 28 10:56:36 2023 Received: (at 60730) by debbugs.gnu.org; 28 Jan 2023 15:56:36 +0000 Received: from localhost ([127.0.0.1]:41400 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pLnZD-00037A-R3 for submit@debbugs.gnu.org; Sat, 28 Jan 2023 10:56:36 -0500 Received: from mail-108-mta120.mxroute.com ([136.175.108.120]:41715) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pLnZA-00036w-MF for 60730@debbugs.gnu.org; Sat, 28 Jan 2023 10:56:33 -0500 Received: from mail-111-mta2.mxroute.com ([136.175.111.2] filter006.mxroute.com) (Authenticated sender: mN4UYu2MZsgR) by mail-108-mta120.mxroute.com (ZoneMTA) with ESMTPSA id 185f9181e99000011e.001 for <60730@debbugs.gnu.org> (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES128-GCM-SHA256); Sat, 28 Jan 2023 15:56:25 +0000 X-Zone-Loop: e4f66105c828d9e2857790ebaf229e35a01f7dc36f83 X-Originating-IP: [136.175.111.2] DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=neverwas.me ; s=x; h=Content-Type:MIME-Version:Message-ID:Date:References:In-Reply-To: Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=4uH2Cth+DTNgEA8Lp/uwj+5k/QiV2upCCMsl1RLaSuY=; b=Epv3PaL3iQfX0tB0fq7n7xQ0T9 BsaCRG6nDTcOXOfoA0UxowHv6cOnzBTIypCKNPjCgcMucYAYn0iqU96qpOp7k5R1H4yrdO7ZCXw4K cyZK8jjFZUpflCI6ZeUFZN64Wc92AmbcyXID9Sp2v3dmAO7g+65loUN3D0ZOhK4nuJL+tnjDymbvV AQLPFGrDXFticOfdSKDFWl+ofle4eW4zI3Q+7yS1FscIzrRchPmti7MDActgfg23OU5v067Cob+FK 45QKuDIdE2hPZWCZi8wawh9Sz9efdU+xXPC8XS7WotYeHYe8f9z2KRZVsE+UK1oiZ4/tlkn0/Fze3 1LIxG8Ow==; From: "J.P." To: Eli Zaretskii Subject: Re: bug#60730: 29.0.60; Free variable with :buffer keyword in ert-with-temp-file In-Reply-To: <83edreaehg.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 28 Jan 2023 17:03:07 +0200") References: <87o7r5ji3q.fsf@neverwas.me> <874jsazqzz.fsf@neverwas.me> <83edreaehg.fsf@gnu.org> Date: Sat, 28 Jan 2023 07:56:22 -0800 Message-ID: <87k016y7o9.fsf@neverwas.me> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-Authenticated-Id: masked@neverwas.me X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 60730 Cc: stefankangas@gmail.com, 60730@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Eli Zaretskii writes: >> Not sure if that's the right call, though. If this keyword is already >> seeing action in the wild, perhaps it's worth ensuring that its argument >> arrives unquoted? Or maybe another type check (to accompany the one for >> `name') would do? > > Can you show the results of macro-expansion both when coding has a > value and when it is nil (and then coding-system-for-write is nil or > has a non-nil value)? `coding-system-for-write' nil, keyword nil (ert-with-temp-file myfile :coding nil) (let* ((coding-system-for-write nil) ...) ;; keyword absent (ert-with-temp-file myfile) (let* ((coding-system-for-write nil) ...) `coding-system-for-write' nil, keyword non-nil (ert-with-temp-file myfile :coding utf-8) (let* ((coding-system-for-write utf-8) ...) ;; keyword quoted (ert-with-temp-file myfile :coding 'utf-8) (let* ((coding-system-for-write 'utf-8) ...) `coding-system-for-write' non-nil, keyword nil (setq coding-system-for-write 'utf-8) (ert-with-temp-file myfile :coding nil) (let* ((coding-system-for-write utf-8) ...) ;; keyword absent (ert-with-temp-file myfile myfile) (let* ((coding-system-for-write utf-8) ...) `coding-system-for-write' non-nil, keyword non-nil (setq coding-system-for-write 'utf-8) (ert-with-temp-file myfile :coding raw-text) (let* ((coding-system-for-write raw-text) ...) ;; keyword quoted (ert-with-temp-file myfile :coding 'raw-text) (let* ((coding-system-for-write 'raw-text) ...) From debbugs-submit-bounces@debbugs.gnu.org Sat Jan 28 11:13:42 2023 Received: (at 60730) by debbugs.gnu.org; 28 Jan 2023 16:13:42 +0000 Received: from localhost ([127.0.0.1]:41413 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pLnpl-0003aM-Sk for submit@debbugs.gnu.org; Sat, 28 Jan 2023 11:13:42 -0500 Received: from eggs.gnu.org ([209.51.188.92]:35578) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pLnpi-0003a2-7C for 60730@debbugs.gnu.org; Sat, 28 Jan 2023 11:13:40 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pLnpc-0004OF-MP; Sat, 28 Jan 2023 11:13:32 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=KC3kniPaFhHtjoKfj0oZvBrw2BvKoHJ6AoC0IEh0U0Q=; b=cl0cAX09EuYC IYEbx6RJOr+GfVqjrcH/Yid99V6D8Zw9nOaZQOQH5RMBwYfdvQqfjL41ipuNW4OPlxEnvyfaTyDaf bKT7OyNIaFHHWgaj6WN2SayxrrNu1zUgwQN1dhQFQvJ34dINMb9bgnmM+LGvEbMiemcEx44Cv0LrC Ay3tLVMNGmQdBtbySbQuWA1FgdP07skCkNjlmXhktI9oVS4asSbM3ZBIyTbzmtN4jebY4l+hBx2zM 7RyhXtuKHzSfEYB4pEAjwCP41n3zIJC5ujT/EuvPsEL3VtVGTkSZ5RQ/y3BBdzUBdpG28ia4cL0hG 7K9A78uJRuG0XeugH5AdFA==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pLnpc-00017K-0Z; Sat, 28 Jan 2023 11:13:32 -0500 Date: Sat, 28 Jan 2023 18:13:20 +0200 Message-Id: <838rhmab8f.fsf@gnu.org> From: Eli Zaretskii To: "J.P." In-Reply-To: <87k016y7o9.fsf@neverwas.me> (jp@neverwas.me) Subject: Re: bug#60730: 29.0.60; Free variable with :buffer keyword in ert-with-temp-file References: <87o7r5ji3q.fsf@neverwas.me> <874jsazqzz.fsf@neverwas.me> <83edreaehg.fsf@gnu.org> <87k016y7o9.fsf@neverwas.me> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 60730 Cc: stefankangas@gmail.com, 60730@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: "J.P." > Cc: 60730@debbugs.gnu.org, stefankangas@gmail.com > Date: Sat, 28 Jan 2023 07:56:22 -0800 > > Eli Zaretskii writes: > > >> Not sure if that's the right call, though. If this keyword is already > >> seeing action in the wild, perhaps it's worth ensuring that its argument > >> arrives unquoted? Or maybe another type check (to accompany the one for > >> `name') would do? > > > > Can you show the results of macro-expansion both when coding has a > > value and when it is nil (and then coding-system-for-write is nil or > > has a non-nil value)? > > `coding-system-for-write' nil, keyword nil > > (ert-with-temp-file myfile :coding nil) > (let* ((coding-system-for-write nil) ...) > > ;; keyword absent > > (ert-with-temp-file myfile) > (let* ((coding-system-for-write nil) ...) > > `coding-system-for-write' nil, keyword non-nil > > (ert-with-temp-file myfile :coding utf-8) > (let* ((coding-system-for-write utf-8) ...) > > ;; keyword quoted > > (ert-with-temp-file myfile :coding 'utf-8) > (let* ((coding-system-for-write 'utf-8) ...) > > `coding-system-for-write' non-nil, keyword nil > > (setq coding-system-for-write 'utf-8) > > (ert-with-temp-file myfile :coding nil) > (let* ((coding-system-for-write utf-8) ...) > > ;; keyword absent > > (ert-with-temp-file myfile myfile) > (let* ((coding-system-for-write utf-8) ...) > > `coding-system-for-write' non-nil, keyword non-nil > > (setq coding-system-for-write 'utf-8) > > (ert-with-temp-file myfile :coding raw-text) > (let* ((coding-system-for-write raw-text) ...) > > ;; keyword quoted > > (ert-with-temp-file myfile :coding 'raw-text) > (let* ((coding-system-for-write 'raw-text) ...) Thanks, but I'm not sure I follow: coding-system's name should always be quoted, as it's a symbol. So why things like the below: (ert-with-temp-file myfile :coding raw-text) are relevant? AFAIU, they are a mistake: raw-text should be quoted, as in 'raw-text. Is the problem that a coding-system symbol is not quoted? From debbugs-submit-bounces@debbugs.gnu.org Sat Jan 28 21:00:55 2023 Received: (at 60730) by debbugs.gnu.org; 29 Jan 2023 02:00:55 +0000 Received: from localhost ([127.0.0.1]:41810 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pLx03-0003Bt-0G for submit@debbugs.gnu.org; Sat, 28 Jan 2023 21:00:55 -0500 Received: from mail-108-mta170.mxroute.com ([136.175.108.170]:44047) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pLwzy-0003BU-RA for 60730@debbugs.gnu.org; Sat, 28 Jan 2023 21:00:53 -0500 Received: from mail-111-mta2.mxroute.com ([136.175.111.2] filter006.mxroute.com) (Authenticated sender: mN4UYu2MZsgR) by mail-108-mta170.mxroute.com (ZoneMTA) with ESMTPSA id 185fb415f6b000011e.001 for <60730@debbugs.gnu.org> (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES128-GCM-SHA256); Sun, 29 Jan 2023 02:00:43 +0000 X-Zone-Loop: 9f068ea718255192d60d071a4a4b9b04ad673896b926 X-Originating-IP: [136.175.111.2] DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=neverwas.me ; s=x; h=Content-Type:MIME-Version:Message-ID:Date:References:In-Reply-To: Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=vJuBH2Fb+UN4APlBuKYRs3ExnvWu/Zv1/DsORmEX8xU=; b=bcTvkt7PYc/2l3cVglqpLzWAux OOW0WzrBjHS3N6JtlKiczP6qWgcVpD8G8wqyx8u5E55XziiJzuHLhAqHOKKeVWLvzEDIgY9QnAfMf qx32RxIXpN+kBWITdrhWBPFkKyDBPr6D+4Xiutyk3fcsIUYol82wtSsvmJW81IVW2kclJ7RTCRKMe 704ytxEB//cmEIMUUB4sSjS3wfik9juI/KcFagRXNJCcGIf5M0CxCFws0tafKSHB9URyc9qE5toL/ wMhud9ApIY1vO+lA8SFxk/Xs27y2gGtKwTTLNVNE9fRngR5w5j+RW61z3U6VQEW53Z2UKKqVzkwDF IX9SbD0g==; From: "J.P." To: Eli Zaretskii Subject: Re: bug#60730: 29.0.60; Free variable with :buffer keyword in ert-with-temp-file In-Reply-To: <838rhmab8f.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 28 Jan 2023 18:13:20 +0200") References: <87o7r5ji3q.fsf@neverwas.me> <874jsazqzz.fsf@neverwas.me> <83edreaehg.fsf@gnu.org> <87k016y7o9.fsf@neverwas.me> <838rhmab8f.fsf@gnu.org> Date: Sat, 28 Jan 2023 18:00:40 -0800 Message-ID: <874jsaumk7.fsf@neverwas.me> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Authenticated-Id: masked@neverwas.me X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 60730 Cc: stefankangas@gmail.com, 60730@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain Eli Zaretskii writes: > Thanks, but I'm not sure I follow: coding-system's name should always > be quoted, as it's a symbol. So why things like the below: > > (ert-with-temp-file myfile :coding raw-text) > > are relevant? AFAIU, they are a mistake: raw-text should be quoted, > as in 'raw-text. I shouldn't have included the keyword argument; it only muddies the waters here. The correctness of the output, what we expect to see in the expanded form, is of primary concern. > Is the problem that a coding-system symbol is not quoted? When the value of `coding-system-for-write' is non-nil, only quoting it twice survives expansion: (setq coding-system-for-write ''raw-text) (ert-with-temp-file myfile) -> (let* ((coding-system-for-write 'raw-text) ...) Otherwise, we get a free variable: (setq coding-system-for-write 'raw-text) (ert-with-temp-file myfile) -> (let* ((coding-system-for-write raw-text) ...) BTW, I'm not setting `coding-system-for-write' myself. That's being done by the diagnostic tool. --=-=-= Content-Type: image/png Content-Disposition: attachment; filename=flymake-ert-with-temp-file.png Content-Transfer-Encoding: base64 Content-Description: Error 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 AElFTkSuQmCC --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sat Jan 28 23:36:05 2023 Received: (at 60730) by debbugs.gnu.org; 29 Jan 2023 04:36:05 +0000 Received: from localhost ([127.0.0.1]:41915 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pLzQD-00018p-CI for submit@debbugs.gnu.org; Sat, 28 Jan 2023 23:36:05 -0500 Received: from mail-108-mta25.mxroute.com ([136.175.108.25]:45517) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pLzQ8-00018H-NZ for 60730@debbugs.gnu.org; Sat, 28 Jan 2023 23:36:04 -0500 Received: from mail-111-mta2.mxroute.com ([136.175.111.2] filter006.mxroute.com) (Authenticated sender: mN4UYu2MZsgR) by mail-108-mta25.mxroute.com (ZoneMTA) with ESMTPSA id 185fbcf6411000011e.001 for <60730@debbugs.gnu.org> (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES128-GCM-SHA256); Sun, 29 Jan 2023 04:35:50 +0000 X-Zone-Loop: 1e43018938cdd6c15625d47db1e3088665a5fe85f95a X-Originating-IP: [136.175.111.2] DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=neverwas.me ; s=x; h=Content-Type:MIME-Version:Message-ID:Date:References:In-Reply-To: Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=v3XbDttVVDmIN03tTDCvPos0PT3QVDDrdEkQIIr20hA=; b=iwFXtCEspbWvP+7+zgclexpxms HuU/kVv6Yq9PtlCf774zuwYOsMy21kWmlft2OxK9trpnRrheTocGvw7GYsS8wF4gNapqaVFTP7RyV zDTbF+R3nsFWBOnp6jj4YoF2kzNgJoKsN523JIvZwXhymD9csrdDcdGdjhs0CzDg9dIvagrMa9Mkp gjM1tZSB7V/PmADNyrUTca9KYfwh6ukpQJgXpO03HLoahoPJyJZY+2UoN/Y8inz+mwan0KMtjtwJ7 sb+P+u8L6Zz2nKW+qvygzk/rArElXHX3Kq3YA5+BZ0D8hO7F5+oyKE8leDL/dmKYyd/tMpiCNr0ZE 6BYWQnbg==; From: "J.P." To: Eli Zaretskii Subject: Re: bug#60730: 29.0.60; Free variable with :buffer keyword in ert-with-temp-file In-Reply-To: <874jsaumk7.fsf@neverwas.me> (J. P.'s message of "Sat, 28 Jan 2023 18:00:40 -0800") References: <87o7r5ji3q.fsf@neverwas.me> <874jsazqzz.fsf@neverwas.me> <83edreaehg.fsf@gnu.org> <87k016y7o9.fsf@neverwas.me> <838rhmab8f.fsf@gnu.org> <874jsaumk7.fsf@neverwas.me> Date: Sat, 28 Jan 2023 20:35:47 -0800 Message-ID: <875ycqt0t8.fsf@neverwas.me> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-Authenticated-Id: masked@neverwas.me X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 60730 Cc: stefankangas@gmail.com, 60730@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) "J.P." writes: > Eli Zaretskii writes: > >> Thanks, but I'm not sure I follow: coding-system's name should always >> be quoted, as it's a symbol. So why things like the below: >> >> (ert-with-temp-file myfile :coding raw-text) >> >> are relevant? AFAIU, they are a mistake: raw-text should be quoted, >> as in 'raw-text. If, as you say, an argument to `:coding' should only ever be quoted, e.g., :coding 'raw-text then `coding' will end up quoted as well, so something like this might be enough: diff --git a/lisp/emacs-lisp/ert-x.el b/lisp/emacs-lisp/ert-x.el index 98a017c8a8e..aa02c79d32f 100644 --- a/lisp/emacs-lisp/ert-x.el +++ b/lisp/emacs-lisp/ert-x.el @@ -484,7 +484,7 @@ ert-with-temp-file (suffix (or suffix ert-temp-file-suffix (ert--with-temp-file-generate-suffix (or (macroexp-file-name) buffer-file-name))))) - `(let* ((coding-system-for-write ,(or coding coding-system-for-write)) + `(let* ((coding-system-for-write ,(or coding `',coding-system-for-write)) (,temp-file (,(if directory 'file-name-as-directory 'identity) (make-temp-file ,prefix ,directory ,suffix ,text))) (,name ,(if directory From debbugs-submit-bounces@debbugs.gnu.org Sun Jan 29 01:29:15 2023 Received: (at 60730) by debbugs.gnu.org; 29 Jan 2023 06:29:15 +0000 Received: from localhost ([127.0.0.1]:42060 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pM1Bj-0004FM-6U for submit@debbugs.gnu.org; Sun, 29 Jan 2023 01:29:15 -0500 Received: from eggs.gnu.org ([209.51.188.92]:42402) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pM1Bh-0004F6-D6 for 60730@debbugs.gnu.org; Sun, 29 Jan 2023 01:29:13 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pM1Bb-0006UO-MN; Sun, 29 Jan 2023 01:29:07 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=jwkhD7lqlzTsnZsKA0FGszAWjY1NRBfW4dr9nDmetRA=; b=R9rELhb0YDwp 4MRSSs7/0v7NXifqwE8GQJ8MnBON3TtNkTJ3flSGpjE/aKWq7h40p9brM0VRI4xcqLDcV65AeN3+D bNgwuRD4zdZQiqOic9tLSaoxAgoPOvApVT3AoUuJQqdC4PqUU02+XaH99gWxwBhpBRKLaokHkpdKf wvRfCnVFPxiVCzFQEczUY/LHT+ZdxXNtancV3cdUYPahNsRIVf7XvPBJ8L4vXYTG0Cb1MeT3JFUBE 7sRHEUTq9I8oN7rIT3mFjAyZOhAZxHqf11u8OmqBTESGOPr5VqZ4HESOYfEXtvu8Kp9Oxd/mNaUKU I1HLbl9Cq1sWBji3QDYuQQ==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pM1Ba-00087W-Ta; Sun, 29 Jan 2023 01:29:07 -0500 Date: Sun, 29 Jan 2023 08:28:57 +0200 Message-Id: <83pmax97me.fsf@gnu.org> From: Eli Zaretskii To: "J.P." In-Reply-To: <874jsaumk7.fsf@neverwas.me> (jp@neverwas.me) Subject: Re: bug#60730: 29.0.60; Free variable with :buffer keyword in ert-with-temp-file References: <87o7r5ji3q.fsf@neverwas.me> <874jsazqzz.fsf@neverwas.me> <83edreaehg.fsf@gnu.org> <87k016y7o9.fsf@neverwas.me> <838rhmab8f.fsf@gnu.org> <874jsaumk7.fsf@neverwas.me> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 60730 Cc: stefankangas@gmail.com, 60730@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: "J.P." > Cc: 60730@debbugs.gnu.org, stefankangas@gmail.com > Date: Sat, 28 Jan 2023 18:00:40 -0800 > > When the value of `coding-system-for-write' is non-nil, only quoting it > twice survives expansion: > > (setq coding-system-for-write ''raw-text) > (ert-with-temp-file myfile) > > -> (let* ((coding-system-for-write 'raw-text) ...) > > Otherwise, we get a free variable: > > (setq coding-system-for-write 'raw-text) > (ert-with-temp-file myfile) > > -> (let* ((coding-system-for-write raw-text) ...) OK, in that case we should indeed solve this in the code by something like the patch you proposed. From debbugs-submit-bounces@debbugs.gnu.org Sun Jan 29 01:38:46 2023 Received: (at 60730) by debbugs.gnu.org; 29 Jan 2023 06:38:46 +0000 Received: from localhost ([127.0.0.1]:42083 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pM1Kw-0004bG-Fj for submit@debbugs.gnu.org; Sun, 29 Jan 2023 01:38:46 -0500 Received: from eggs.gnu.org ([209.51.188.92]:38190) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pM1Kt-0004b0-Gy for 60730@debbugs.gnu.org; Sun, 29 Jan 2023 01:38:45 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pM1Kn-00085F-QX; Sun, 29 Jan 2023 01:38:37 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=NnkMN8jzHZXI6IomknsmwWZHMleFpORd+UU2b6Nmgxg=; b=drtLIRajPzc+ hj1Z5LLZejKz1mBalhUk1TUPh/maRxaUrZlYnmmEQCPKQ9f+jp7ADAEeJZfhNCVbCMeTMs69VxDxX nWgfYwLcrvtjrTPvphHEO+3uFr71P8ejDVygjMHlKwLTah57uHYNBO40kRZ1zCl5P8Eo7pzyrPSxD Vd6XMo6sP6aBLIpy/cHZLQtHdiR0hWMZDq8KA0oFsZc1zOB19fLmqLbmNKEQrbbQkYNdhZGVFF6YR YB/DJ22Qwck3LC8eTkdyaYcQwgx51yh4YRGSb4xZ/xARnkJe1qRDVDyo6fbfTa1ewAadfRsi8zZD7 BGRcSkXp0VRJ/cLqcbr4tg==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pM1Ki-0004BM-PS; Sun, 29 Jan 2023 01:38:34 -0500 Date: Sun, 29 Jan 2023 08:38:22 +0200 Message-Id: <83k015976p.fsf@gnu.org> From: Eli Zaretskii To: "J.P." In-Reply-To: <875ycqt0t8.fsf@neverwas.me> (jp@neverwas.me) Subject: Re: bug#60730: 29.0.60; Free variable with :buffer keyword in ert-with-temp-file References: <87o7r5ji3q.fsf@neverwas.me> <874jsazqzz.fsf@neverwas.me> <83edreaehg.fsf@gnu.org> <87k016y7o9.fsf@neverwas.me> <838rhmab8f.fsf@gnu.org> <874jsaumk7.fsf@neverwas.me> <875ycqt0t8.fsf@neverwas.me> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 60730 Cc: stefankangas@gmail.com, 60730@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: "J.P." > Cc: 60730@debbugs.gnu.org, stefankangas@gmail.com > Date: Sat, 28 Jan 2023 20:35:47 -0800 > > "J.P." writes: > > > Eli Zaretskii writes: > > > >> Thanks, but I'm not sure I follow: coding-system's name should always > >> be quoted, as it's a symbol. So why things like the below: > >> > >> (ert-with-temp-file myfile :coding raw-text) > >> > >> are relevant? AFAIU, they are a mistake: raw-text should be quoted, > >> as in 'raw-text. > > If, as you say, an argument to `:coding' should only ever be quoted, e.g., > > :coding 'raw-text > > then `coding' will end up quoted as well, so something like this might > be enough: If you say so. The `', stuff looks strange to me, but the backticks in Emacs Lisp have always been black magic. What we need to ensure that both :coding 'raw-text and :coding some-coding-variable do work as expected, including when coding-system-for-write's value is a non-nil symbol of a coding-system. Thanks. From debbugs-submit-bounces@debbugs.gnu.org Sun Jan 29 04:56:14 2023 Received: (at 60730) by debbugs.gnu.org; 29 Jan 2023 09:56:14 +0000 Received: from localhost ([127.0.0.1]:42305 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pM4Q1-0004Dc-Qf for submit@debbugs.gnu.org; Sun, 29 Jan 2023 04:56:14 -0500 Received: from mail-out.m-online.net ([212.18.0.10]:42908) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pM4Pz-0004DT-NU for 60730@debbugs.gnu.org; Sun, 29 Jan 2023 04:56:12 -0500 Received: from frontend03.mail.m-online.net (unknown [192.168.6.182]) by mail-out.m-online.net (Postfix) with ESMTP id 4P4RXT6FY3z1s94H; Sun, 29 Jan 2023 10:56:09 +0100 (CET) Received: from localhost (dynscan3.mnet-online.de [192.168.6.84]) by mail.m-online.net (Postfix) with ESMTP id 4P4RXT4T2jz1qqlR; Sun, 29 Jan 2023 10:56:09 +0100 (CET) X-Virus-Scanned: amavisd-new at mnet-online.de Received: from mail.mnet-online.de ([192.168.8.182]) by localhost (dynscan3.mail.m-online.net [192.168.6.84]) (amavisd-new, port 10024) with ESMTP id VHcgSFO5awZ3; Sun, 29 Jan 2023 10:56:08 +0100 (CET) X-Auth-Info: LGp9Y50lgdl6UILrDwCqoEw8q4v/OBFawzQuCIlQyngumN8hXgHXmz+5I8md6rBC Received: from tiger.home (aftr-82-135-86-131.dynamic.mnet-online.de [82.135.86.131]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mail.mnet-online.de (Postfix) with ESMTPSA; Sun, 29 Jan 2023 10:56:08 +0100 (CET) Received: by tiger.home (Postfix, from userid 1000) id 2170B160104; Sun, 29 Jan 2023 10:56:08 +0100 (CET) From: Andreas Schwab To: Eli Zaretskii Subject: Re: bug#60730: 29.0.60; Free variable with :buffer keyword in ert-with-temp-file References: <87o7r5ji3q.fsf@neverwas.me> <874jsazqzz.fsf@neverwas.me> <83edreaehg.fsf@gnu.org> <87k016y7o9.fsf@neverwas.me> <838rhmab8f.fsf@gnu.org> <874jsaumk7.fsf@neverwas.me> <83pmax97me.fsf@gnu.org> X-Yow: ..Am I in a SOAP OPERA?? Date: Sun, 29 Jan 2023 10:56:08 +0100 In-Reply-To: <83pmax97me.fsf@gnu.org> (Eli Zaretskii's message of "Sun, 29 Jan 2023 08:28:57 +0200") Message-ID: <87o7qhoe9z.fsf@linux-m68k.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.4 (/) X-Debbugs-Envelope-To: 60730 Cc: 60730@debbugs.gnu.org, stefankangas@gmail.com, "J.P." X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.4 (-) On Jan 29 2023, Eli Zaretskii wrote: >> From: "J.P." >> Cc: 60730@debbugs.gnu.org, stefankangas@gmail.com >> Date: Sat, 28 Jan 2023 18:00:40 -0800 >> >> When the value of `coding-system-for-write' is non-nil, only quoting it >> twice survives expansion: >> >> (setq coding-system-for-write ''raw-text) >> (ert-with-temp-file myfile) >> >> -> (let* ((coding-system-for-write 'raw-text) ...) >> >> Otherwise, we get a free variable: >> >> (setq coding-system-for-write 'raw-text) >> (ert-with-temp-file myfile) >> >> -> (let* ((coding-system-for-write raw-text) ...) > > OK, in that case we should indeed solve this in the code by something > like the patch you proposed. I am surprised that the commit worked for you when you installed it. Do you perhaps have defined a global variable undecided-unix in your Emacs instance? -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1 "And now for something completely different." From debbugs-submit-bounces@debbugs.gnu.org Sun Jan 29 05:29:51 2023 Received: (at 60730) by debbugs.gnu.org; 29 Jan 2023 10:29:51 +0000 Received: from localhost ([127.0.0.1]:42318 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pM4wY-00054j-Ue for submit@debbugs.gnu.org; Sun, 29 Jan 2023 05:29:51 -0500 Received: from eggs.gnu.org ([209.51.188.92]:41768) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pM4wW-00054H-J9 for 60730@debbugs.gnu.org; Sun, 29 Jan 2023 05:29:49 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pM4wQ-0007DE-4A; Sun, 29 Jan 2023 05:29:42 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=xqJg2i6DyMPoZfq8llag00e0ngcS69mNgqQpWn888v8=; b=QjFMXlElDFDO PCbCJlQgdZNcYatKXRO7zezgdmEh2d6y44ZdgNhoWWU0jsH9ze6SHYv3zpzzWPTk7qYWq6rqmSqiR BaH+z5XntkYPMBkR6vP3Y5aoXD79xyAqgksu+883yTyo6iHdzuZXTqFHoG7UluuEAntUs3YT+SFGl xmorIbH2wSMnjuUQ0NY+unP8MgSxfjxkjp3yASmIAOI96qmLkTDMOC0/ZQOKhXBAUhlJPLqONNSbM Fe7y51dpy4pp8n2yG6uBk2mQ/dL2fCifVUFP+0guACSX7HFCXsJlsg6Xf2vW3Dr3TMuXVPsX2UvTq y8Y5sI2CQrIfXOJS6F7WNw==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pM4wO-0007aV-AZ; Sun, 29 Jan 2023 05:29:41 -0500 Date: Sun, 29 Jan 2023 12:29:31 +0200 Message-Id: <831qnd8whg.fsf@gnu.org> From: Eli Zaretskii To: Andreas Schwab In-Reply-To: <87o7qhoe9z.fsf@linux-m68k.org> (message from Andreas Schwab on Sun, 29 Jan 2023 10:56:08 +0100) Subject: Re: bug#60730: 29.0.60; Free variable with :buffer keyword in ert-with-temp-file References: <87o7r5ji3q.fsf@neverwas.me> <874jsazqzz.fsf@neverwas.me> <83edreaehg.fsf@gnu.org> <87k016y7o9.fsf@neverwas.me> <838rhmab8f.fsf@gnu.org> <874jsaumk7.fsf@neverwas.me> <83pmax97me.fsf@gnu.org> <87o7qhoe9z.fsf@linux-m68k.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 60730 Cc: 60730@debbugs.gnu.org, stefankangas@gmail.com, jp@neverwas.me X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Andreas Schwab > Cc: "J.P." , stefankangas@gmail.com, 60730@debbugs.gnu.org > Date: Sun, 29 Jan 2023 10:56:08 +0100 > > On Jan 29 2023, Eli Zaretskii wrote: > > >> From: "J.P." > >> Cc: 60730@debbugs.gnu.org, stefankangas@gmail.com > >> Date: Sat, 28 Jan 2023 18:00:40 -0800 > >> > >> When the value of `coding-system-for-write' is non-nil, only quoting it > >> twice survives expansion: > >> > >> (setq coding-system-for-write ''raw-text) > >> (ert-with-temp-file myfile) > >> > >> -> (let* ((coding-system-for-write 'raw-text) ...) > >> > >> Otherwise, we get a free variable: > >> > >> (setq coding-system-for-write 'raw-text) > >> (ert-with-temp-file myfile) > >> > >> -> (let* ((coding-system-for-write raw-text) ...) > > > > OK, in that case we should indeed solve this in the code by something > > like the patch you proposed. > > I am surprised that the commit worked for you when you installed it. Do > you perhaps have defined a global variable undecided-unix in your Emacs > instance? No. From debbugs-submit-bounces@debbugs.gnu.org Sun Jan 29 09:08:13 2023 Received: (at 60730) by debbugs.gnu.org; 29 Jan 2023 14:08:13 +0000 Received: from localhost ([127.0.0.1]:42491 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pM8Lt-00057G-78 for submit@debbugs.gnu.org; Sun, 29 Jan 2023 09:08:13 -0500 Received: from mail-108-mta236.mxroute.com ([136.175.108.236]:38259) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pM8Lr-00056y-FS for 60730@debbugs.gnu.org; Sun, 29 Jan 2023 09:08:12 -0500 Received: from mail-111-mta2.mxroute.com ([136.175.111.2] filter006.mxroute.com) (Authenticated sender: mN4UYu2MZsgR) by mail-108-mta236.mxroute.com (ZoneMTA) with ESMTPSA id 185fddb460a000011e.001 for <60730@debbugs.gnu.org> (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES128-GCM-SHA256); Sun, 29 Jan 2023 14:08:04 +0000 X-Zone-Loop: ebbdc384f4aa6290e0fe462f3152ffca4e667fc407f4 X-Originating-IP: [136.175.111.2] DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=neverwas.me ; s=x; h=Content-Type:MIME-Version:Message-ID:Date:References:In-Reply-To: Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=cmsiMl8y7WQ7OyrZZ2z+RHzmVB3UN0q4oNXsTRIjFFM=; b=TLP5dA9d7oFLZsSgQ8/xmkgeo/ w+8eeTfNUCQ16Y803VDo87c6rdAqw4iVFUOSx6ma7vAQT+ObMjcuTIj1R16X0zu/d/cINJu3MajCN chrjolWc4U7lMx3llrRkvotmOuJvaPENEuwQ6YwDz7U0dUN88xHyN/Pg5Jcw/uyzhBtIOYUDkJR5l ubzJf89QQykP4PihUZJjrIrvqstCav4+CxSnXA8nhcbhGYenTfrDWz6efNE88dZgjJ1AiSBlDRMRn Bw+yqzDLE15kHTDb/tNPuzTCT9GFU6cu07e/L9h+BIKICGh8mzQgj2If6ldD6djP1lQSoIs8OMVvD 7D5Zb0CQ==; From: "J.P." To: Eli Zaretskii Subject: Re: bug#60730: 29.0.60; Free variable with :buffer keyword in ert-with-temp-file In-Reply-To: <83k015976p.fsf@gnu.org> (Eli Zaretskii's message of "Sun, 29 Jan 2023 08:38:22 +0200") References: <87o7r5ji3q.fsf@neverwas.me> <874jsazqzz.fsf@neverwas.me> <83edreaehg.fsf@gnu.org> <87k016y7o9.fsf@neverwas.me> <838rhmab8f.fsf@gnu.org> <874jsaumk7.fsf@neverwas.me> <875ycqt0t8.fsf@neverwas.me> <83k015976p.fsf@gnu.org> Date: Sun, 29 Jan 2023 06:08:01 -0800 Message-ID: <87lelll9ha.fsf@neverwas.me> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-Authenticated-Id: masked@neverwas.me X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 60730 Cc: stefankangas@gmail.com, 60730@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Eli Zaretskii writes: >> "J.P." writes: >> >> If, as you say, an argument to `:coding' should only ever be quoted, e.g., >> >> :coding 'raw-text >> >> then `coding' will end up quoted as well, so something like this might >> be enough: > > If you say so. The `', stuff looks strange to me, but the backticks > in Emacs Lisp have always been black magic. > > What we need to ensure that both > > :coding 'raw-text > > and > > :coding some-coding-variable > > do work as expected, including when coding-system-for-write's value is > a non-nil symbol of a coding-system. Right, whatever the solution, it should cover those bases. Although, if `some-coding-variable' evaluates to nil, the change I proposed would not fall back on `coding-system-for-write'. (But perhaps it should? [1]) Also, thinking about this in earnest (for once), I'm unsure why we need to capture the value of `coding-system-for-write' at expansion time. Wouldn't it be preferable to defer evaluation until the test actually runs? IOW, when the `:coding' keyword is absent, shouldn't the final form contain -> (let* ((coding-system-for-write coding-system-for-write) ... or even -> (let* (... (meaning nothing)? If this "deferred" approach makes sense, perhaps something like this will suffice: diff --git a/lisp/emacs-lisp/ert-x.el b/lisp/emacs-lisp/ert-x.el index 98a017c8a8e..2605fc22ddf 100644 --- a/lisp/emacs-lisp/ert-x.el +++ b/lisp/emacs-lisp/ert-x.el @@ -475,7 +475,7 @@ ert-with-temp-file (:directory (setq directory (pop body))) (:text (setq text (pop body))) (:buffer (setq buffer (pop body))) - (:coding (setq coding (pop body))) + (:coding (setq coding (list (pop body)))) (_ (push keyw extra-keywords) (pop body)))) (when extra-keywords (error "Invalid keywords: %s" (mapconcat #'symbol-name extra-keywords " "))) @@ -484,7 +484,7 @@ ert-with-temp-file (suffix (or suffix ert-temp-file-suffix (ert--with-temp-file-generate-suffix (or (macroexp-file-name) buffer-file-name))))) - `(let* ((coding-system-for-write ,(or coding coding-system-for-write)) + `(let* (,@(and coding `((coding-system-for-write ,(car coding)))) (,temp-file (,(if directory 'file-name-as-directory 'identity) (make-temp-file ,prefix ,directory ,suffix ,text))) (,name ,(if directory Note that with this change, `coding-system-for-write' would only be bound when the user supplies a `:coding' argument, even if that argument is nil [2]. Anyway, if this "deferred" stuff is simply wrongheaded, please forget I ever mentioned it. Thanks. [1] If incorporating such "fallback" behavior into the "deferred" approach mentioned above is desirable, we could try something like diff --git a/lisp/emacs-lisp/ert-x.el b/lisp/emacs-lisp/ert-x.el index 98a017c8a8e..3439aacf1ab 100644 --- a/lisp/emacs-lisp/ert-x.el +++ b/lisp/emacs-lisp/ert-x.el @@ -484,7 +484,7 @@ ert-with-temp-file (suffix (or suffix ert-temp-file-suffix (ert--with-temp-file-generate-suffix (or (macroexp-file-name) buffer-file-name))))) - `(let* ((coding-system-for-write ,(or coding coding-system-for-write)) + `(let* ((coding-system-for-write (or ,coding coding-system-for-write)) (,temp-file (,(if directory 'file-name-as-directory 'identity) (make-temp-file ,prefix ,directory ,suffix ,text))) (,name ,(if directory [2] My main concern with the "fallback" route is that the user loses a rather convenient means of ignoring whatever value of `coding-system-for-write' exists in their testing environment. IOW, they cannot easily opt to favor the default selection procedure mentioned in the doc string (for `c-s-f-w'). As a user of this macro, I feel it might be handy to have the option of supplying a literal nil (or a variable evaluating to nil) to signal such intent. From debbugs-submit-bounces@debbugs.gnu.org Sun Jan 29 10:10:40 2023 Received: (at 60730) by debbugs.gnu.org; 29 Jan 2023 15:10:40 +0000 Received: from localhost ([127.0.0.1]:45203 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pM9KJ-0007RB-Ru for submit@debbugs.gnu.org; Sun, 29 Jan 2023 10:10:40 -0500 Received: from eggs.gnu.org ([209.51.188.92]:46372) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pM9KI-0007Qy-BV for 60730@debbugs.gnu.org; Sun, 29 Jan 2023 10:10:38 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pM9KC-0002Cf-G8; Sun, 29 Jan 2023 10:10:32 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=qiduauj8sBlcoMY9k54w6Z4ptw1A1ZwK62UAfaYC0E4=; b=I9378d4D52jz 75zBOE/sqb5TLJ+KjClhOhw9h5VQCY+oXQBFeJAChDogCU1hoSTCldjzttVtXbh4doWRE7UK4NSiz nMOu9C0pETt3kPlxLitCemJ/Gw7q5gAI/jpn3IMJULfypwv9inLgXObcN7ossTrLPgK00C6zJ4K6F fSEv2PlDiUEcSOA1aNTYwnJvm9ZkMO1DknlM/FfyNsdhIO5O6ezFfkb2bkvx7eqGUL7v4IbLQG88E mkjNXnRTGzYuLVerhyZ3cB2gNyrQUmswjRTg5IQULmr/OI9mOO4LnXrjgHI8882wBT6OTaqy54Zl6 jUlDsc2z4FH22u7fj3S9Gw==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pM9KB-0007R5-5H; Sun, 29 Jan 2023 10:10:31 -0500 Date: Sun, 29 Jan 2023 17:10:21 +0200 Message-Id: <83pmax74wy.fsf@gnu.org> From: Eli Zaretskii To: "J.P." In-Reply-To: <87lelll9ha.fsf@neverwas.me> (jp@neverwas.me) Subject: Re: bug#60730: 29.0.60; Free variable with :buffer keyword in ert-with-temp-file References: <87o7r5ji3q.fsf@neverwas.me> <874jsazqzz.fsf@neverwas.me> <83edreaehg.fsf@gnu.org> <87k016y7o9.fsf@neverwas.me> <838rhmab8f.fsf@gnu.org> <874jsaumk7.fsf@neverwas.me> <875ycqt0t8.fsf@neverwas.me> <83k015976p.fsf@gnu.org> <87lelll9ha.fsf@neverwas.me> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 60730 Cc: stefankangas@gmail.com, 60730@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: "J.P." > Cc: 60730@debbugs.gnu.org, stefankangas@gmail.com > Date: Sun, 29 Jan 2023 06:08:01 -0800 > > > What we need to ensure that both > > > > :coding 'raw-text > > > > and > > > > :coding some-coding-variable > > > > do work as expected, including when coding-system-for-write's value is > > a non-nil symbol of a coding-system. > > Right, whatever the solution, it should cover those bases. Although, if > `some-coding-variable' evaluates to nil, the change I proposed would not > fall back on `coding-system-for-write'. (But perhaps it should? [1]) Setting :coding to nil is unusual and I don't expect that to happen. Its semantics is tricky and most people aren't aware of that, so they (rightfully) don't use it. > diff --git a/lisp/emacs-lisp/ert-x.el b/lisp/emacs-lisp/ert-x.el > index 98a017c8a8e..2605fc22ddf 100644 > --- a/lisp/emacs-lisp/ert-x.el > +++ b/lisp/emacs-lisp/ert-x.el > @@ -475,7 +475,7 @@ ert-with-temp-file > (:directory (setq directory (pop body))) > (:text (setq text (pop body))) > (:buffer (setq buffer (pop body))) > - (:coding (setq coding (pop body))) > + (:coding (setq coding (list (pop body)))) > (_ (push keyw extra-keywords) (pop body)))) > (when extra-keywords > (error "Invalid keywords: %s" (mapconcat #'symbol-name extra-keywords " "))) > @@ -484,7 +484,7 @@ ert-with-temp-file > (suffix (or suffix ert-temp-file-suffix > (ert--with-temp-file-generate-suffix > (or (macroexp-file-name) buffer-file-name))))) > - `(let* ((coding-system-for-write ,(or coding coding-system-for-write)) > + `(let* (,@(and coding `((coding-system-for-write ,(car coding)))) > (,temp-file (,(if directory 'file-name-as-directory 'identity) > (make-temp-file ,prefix ,directory ,suffix ,text))) > (,name ,(if directory I don't think this is right. coding-system-for-write exists and should be heeded because it gives the user control on binding the encoding just for this single command via "C-x RET c" prefix. By contrast, the value that comes from :coding is determined by the Lisp program, and "C-x RET c" should override it. From debbugs-submit-bounces@debbugs.gnu.org Sun Jan 29 11:19:12 2023 Received: (at 60730) by debbugs.gnu.org; 29 Jan 2023 16:19:12 +0000 Received: from localhost ([127.0.0.1]:45285 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pMAOd-0003BF-Fd for submit@debbugs.gnu.org; Sun, 29 Jan 2023 11:19:11 -0500 Received: from mail-108-mta219.mxroute.com ([136.175.108.219]:37913) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pMAOb-0003Ay-0i for 60730@debbugs.gnu.org; Sun, 29 Jan 2023 11:19:10 -0500 Received: from mail-111-mta2.mxroute.com ([136.175.111.2] filter006.mxroute.com) (Authenticated sender: mN4UYu2MZsgR) by mail-108-mta219.mxroute.com (ZoneMTA) with ESMTPSA id 185fe5321d0000011e.001 for <60730@debbugs.gnu.org> (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES128-GCM-SHA256); Sun, 29 Jan 2023 16:18:59 +0000 X-Zone-Loop: 8c1c865f134db6afc84d03c0a4a259b0cabb6f5e929b X-Originating-IP: [136.175.111.2] DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=neverwas.me ; s=x; h=Content-Type:MIME-Version:Message-ID:Date:References:In-Reply-To: Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=A3AySpsWe933V7zbTIxru9rmNL4WGUE7S52gmIPdyAE=; b=S1u4ftylmiuIFRd1QICSK01IW7 foCyBuRIBuwCIPv+MkZ+uvs8N3fqN3SI5FuDe4HUTCshKp/uO62xsuJyrFd8bCtDEqajrJHa7yTnI Qa97HEmm6ag00KZ0fnDbsFLz1fkTItzJ7nWfntJhH9cSNmD86aOyY39t8U7hXWHgLxLPvVf/oo1Xc 8mD0hcTdy5WNWvv3o61ifMmMpdXk67xs9yAgavbsG4uLbTT+ukDglk6b4XXhQ9go9Jxut8BohQw9Q Rchgwqfq8KbKCYZU21g9k26m97t/M6BEylQslYuVOJkaLW2cdbIWSEHvrZRpzV8bDy9G/7RENseM6 yNPv3ZNw==; From: "J.P." To: Eli Zaretskii Subject: Re: bug#60730: 29.0.60; Free variable with :buffer keyword in ert-with-temp-file In-Reply-To: <83pmax74wy.fsf@gnu.org> (Eli Zaretskii's message of "Sun, 29 Jan 2023 17:10:21 +0200") References: <87o7r5ji3q.fsf@neverwas.me> <874jsazqzz.fsf@neverwas.me> <83edreaehg.fsf@gnu.org> <87k016y7o9.fsf@neverwas.me> <838rhmab8f.fsf@gnu.org> <874jsaumk7.fsf@neverwas.me> <875ycqt0t8.fsf@neverwas.me> <83k015976p.fsf@gnu.org> <87lelll9ha.fsf@neverwas.me> <83pmax74wy.fsf@gnu.org> Date: Sun, 29 Jan 2023 08:18:48 -0800 Message-ID: <87sfftjouv.fsf@neverwas.me> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-Authenticated-Id: masked@neverwas.me X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 60730 Cc: stefankangas@gmail.com, 60730@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Eli Zaretskii writes: >> From: "J.P." >> Cc: 60730@debbugs.gnu.org, stefankangas@gmail.com >> Date: Sun, 29 Jan 2023 06:08:01 -0800 >> >> > What we need to ensure that both >> > >> > :coding 'raw-text >> > >> > and >> > >> > :coding some-coding-variable >> > >> > do work as expected, including when coding-system-for-write's value is >> > a non-nil symbol of a coding-system. >> >> Right, whatever the solution, it should cover those bases. Although, if >> `some-coding-variable' evaluates to nil, the change I proposed would not >> fall back on `coding-system-for-write'. (But perhaps it should? [1]) > > Setting :coding to nil is unusual and I don't expect that to happen. > Its semantics is tricky and most people aren't aware of that, so they > (rightfully) don't use it. If it's unlikely that a user would specify nil explicitly or provide a variable that might evaluate to nil, then the question of whether to fall back to `coding-system-for-write' is less important. >> diff --git a/lisp/emacs-lisp/ert-x.el b/lisp/emacs-lisp/ert-x.el >> index 98a017c8a8e..2605fc22ddf 100644 >> --- a/lisp/emacs-lisp/ert-x.el >> +++ b/lisp/emacs-lisp/ert-x.el >> @@ -475,7 +475,7 @@ ert-with-temp-file >> (:directory (setq directory (pop body))) >> (:text (setq text (pop body))) >> (:buffer (setq buffer (pop body))) >> - (:coding (setq coding (pop body))) >> + (:coding (setq coding (list (pop body)))) >> (_ (push keyw extra-keywords) (pop body)))) >> (when extra-keywords >> (error "Invalid keywords: %s" (mapconcat #'symbol-name extra-keywords " "))) >> @@ -484,7 +484,7 @@ ert-with-temp-file >> (suffix (or suffix ert-temp-file-suffix >> (ert--with-temp-file-generate-suffix >> (or (macroexp-file-name) buffer-file-name))))) >> - `(let* ((coding-system-for-write ,(or coding coding-system-for-write)) >> + `(let* (,@(and coding `((coding-system-for-write ,(car coding)))) >> (,temp-file (,(if directory 'file-name-as-directory 'identity) >> (make-temp-file ,prefix ,directory ,suffix ,text))) >> (,name ,(if directory > > I don't think this is right. coding-system-for-write exists and > should be heeded because it gives the user control on binding the > encoding just for this single command via "C-x RET c" prefix. By > contrast, the value that comes from :coding is determined by the Lisp > program, and "C-x RET c" should override it. Interesting. Makes sense to limit any damage done to that variable to the extent of the test run. Guess that should have occurred to me. So, based on what you've said, a couple remaining possibilities are diff --git a/lisp/emacs-lisp/ert-x.el b/lisp/emacs-lisp/ert-x.el index 98a017c8a8e..3439aacf1ab 100644 --- a/lisp/emacs-lisp/ert-x.el +++ b/lisp/emacs-lisp/ert-x.el @@ -484,7 +484,7 @@ ert-with-temp-file (suffix (or suffix ert-temp-file-suffix (ert--with-temp-file-generate-suffix (or (macroexp-file-name) buffer-file-name))))) - `(let* ((coding-system-for-write ,(or coding coding-system-for-write)) + `(let* ((coding-system-for-write (or ,coding coding-system-for-write)) (,temp-file (,(if directory 'file-name-as-directory 'identity) (make-temp-file ,prefix ,directory ,suffix ,text))) (,name ,(if directory and diff --git a/lisp/emacs-lisp/ert-x.el b/lisp/emacs-lisp/ert-x.el index 98a017c8a8e..3439aacf1ab 100644 --- a/lisp/emacs-lisp/ert-x.el +++ b/lisp/emacs-lisp/ert-x.el @@ -484,7 +484,7 @@ ert-with-temp-file (suffix (or suffix ert-temp-file-suffix (ert--with-temp-file-generate-suffix (or (macroexp-file-name) buffer-file-name))))) - `(let* ((coding-system-for-write ,(or coding coding-system-for-write)) + `(let* ((coding-system-for-write ,(or coding 'coding-system-for-write)) (,temp-file (,(if directory 'file-name-as-directory 'identity) (make-temp-file ,prefix ,directory ,suffix ,text))) (,name ,(if directory The bottom one doesn't fall back if `coding' is a variable that evaluates to nil. Of course, there are surely other (perhaps smarter) ways to go about this, in case anyone else wants to take a stab. From unknown Fri Aug 15 18:09:24 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Mon, 27 Feb 2023 12:24:06 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator