Subject: bug#69533: closed (Re: bug#69533: 30.0.50; Wrong byte compilation of a certain apply syntax)

From: [email-masked] (GNU bug Tracking System)
Date: Mon, 04 Mar 2024 13:28:02 +0000

Your bug report

#69533: 30.0.50; Wrong byte compilation of a certain apply syntax

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 [email-masked].

-- 
69533: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=69533
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#69533: 30.0.50; Wrong byte compilation of a certain apply syntax
From: Mattias Engdegård <[email-masked]>
To: "Basil L. Contovounesios" <[email-masked]>
Cc: Michael Heerdegen <[email-masked]>, Andreas Schwab <[email-masked]>, [email-masked], Stefan Monnier <[email-masked]>
Date: Mon, 4 Mar 2024 14:25:50 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

> This was probably just a mistake of mine; a `<=` should have been `<`.

Actually `>=` should have been `>`.
Pushed to master; closing the bug.

Subject: 30.0.50; Wrong byte compilation of a certain apply syntax
From: Michael Heerdegen <[email-masked]>
To: [email-masked]
Date: Mon, 04 Mar 2024 02:51:42 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello,

C-h f apply says:

| ...
| With a single argument, call the argument's first element using the
| other elements as args.

Issue 1:  This doc sentence has to be moved after the following example,
because that example:

| Thus, (apply '+ 1 2 '(3 4)) returns 10.

is an example for the more widespread syntax.

That sentence actually explains a special case: it tells that this is
also allowed:

  (apply '(+ 1 2)) ==> 3

Issue 2: The byte compiler currently miscompiles such expressions:

Expected:

  (funcall (lambda () (apply '(+ 1 2)))) ==> 3

but

  (funcall (byte-compile '(lambda () (apply '(+ 1 2)))))
   ~~> Error: Invalid function: (+ 1 2)

AFAIU this is `byte-optimize-apply's fault:

(byte-optimize-apply '(apply '(+ 1 2)))
 ==> (funcall '(+ 1 2) '+ '1 '2) ; Ouch!

TIA,

Michael.