GNU bug report logs - #68345
29.1; cl-defstruct'ed struct errors out in the constructor compiler macro if a slot is called "quote"

Previous Next

Package: emacs;

Reported by: Kisaragi Hiu <mail <at> kisaragi-hiu.com>

Date: Tue, 9 Jan 2024 12:33:01 UTC

Severity: normal

Found in version 29.1

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: Kisaragi Hiu <mail <at> kisaragi-hiu.com>
Subject: bug#68345: closed (Re: bug#68345: 29.1; cl-defstruct'ed struct
 errors out in the constructor compiler macro if a slot is called "quote")
Date: Wed, 10 Jan 2024 13:48:05 +0000
[Message part 1 (text/plain, inline)]
Your bug report

#68345: 29.1; cl-defstruct'ed struct errors out in the constructor compiler macro if a slot is called "quote"

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to 68345 <at> debbugs.gnu.org.

-- 
68345: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=68345
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Eli Zaretskii <eliz <at> gnu.org>
To: Kisaragi Hiu <mail <at> kisaragi-hiu.com>
Cc: gerd.moellmann <at> gmail.com, 68345-done <at> debbugs.gnu.org
Subject: Re: bug#68345: 29.1;
 cl-defstruct'ed struct errors out in the constructor compiler macro
 if a slot is called "quote"
Date: Wed, 10 Jan 2024 14:55:01 +0200
> Cc: 68345 <at> debbugs.gnu.org
> Date: Wed, 10 Jan 2024 07:46:56 +0900
> From:  Kisaragi Hiu via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
> 
> On 2024/01/09 23:59, Gerd Möllmann wrote:
> > Could you please check with Emacs/master? Seems to work there.
> 
> It works as I'd expect at master (commit 
> fccaeabc959f5403ce49744030bd2620352b59f8), without errors. I should've 
> checked master before filing this report - sorry about that.
> 
> I might run a bisect later to see how it was fixed, but this appears to 
> no longer be an issue.

Thanks, closing.

[Message part 3 (message/rfc822, inline)]
From: Kisaragi Hiu <mail <at> kisaragi-hiu.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 29.1; cl-defstruct'ed struct errors out in the constructor compiler
 macro if a slot is called "quote"
Date: Tue, 9 Jan 2024 21:32:06 +0900
* The problem

If a struct is defined to have a slot called "quote", the constructor
will fail during the compiler macro phase.

    (require 'cl-lib)
    (cl-defstruct my-test quote)
    (make-my-test :quote "'") ; error: (invalid-function "'")

    (put 'make-my-test 'compiler-macro nil) ; disable the compiler macro
    (make-my-test :quote "'") ; => #s(test "'")

I have tested Emacs 25.3, 26.3, 27.2, 28.2, and 29.1; this error is in
all these versions.

* Why this is a bug

This feels like a bug to me, because it's not clear that this would be
an unsupported use case, and because of the inconsistent behavior
between the constructor being inlined vs. without a compiler macro.

* Potential directions

This could be "fixed" by either digging into cl-defstruct and cl-lib
then fixing it properly, or by simply declaring in the documentation
that this is not supported. I wish for a proper fix, but the
documentation workaround also seems fine to me.

* Additional info

This is what the compiler macro for make-my-test expands into:

    (cl-block make-my-test
      (record
       ("'" my-test)
       "'"))

In GNU Emacs 29.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.38,
cairo version 1.17.8)
Windowing system distributor 'The X.Org Foundation', version 11.0.12101010
System Description: Arch Linux



This bug report was last modified 1 year and 193 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.