GNU bug report logs - #79880
func-arity should take into account that advices change arity

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: emacs; Reported by: Jonas Bernoulli <jonas@HIDDEN>; dated Tue, 25 Nov 2025 20:22:15 UTC; Maintainer for emacs is bug-gnu-emacs@HIDDEN.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 25 Nov 2025 20:31:55 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Nov 25 15:31:55 2025
Received: from localhost ([127.0.0.1]:42328 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vNzha-0004t2-9D
	for submit <at> debbugs.gnu.org; Tue, 25 Nov 2025 15:31:54 -0500
Received: from lists.gnu.org ([2001:470:142::17]:45894)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <monnier@HIDDEN>)
 id 1vNLdi-0001XZ-S2
 for submit <at> debbugs.gnu.org; Sun, 23 Nov 2025 20:45:16 -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 <monnier@HIDDEN>)
 id 1vNLdY-000668-0s
 for bug-gnu-emacs@HIDDEN; Sun, 23 Nov 2025 20:45:04 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <monnier@HIDDEN>)
 id 1vNLdW-0002C0-PU
 for bug-gnu-emacs@HIDDEN; Sun, 23 Nov 2025 20:45:03 -0500
Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1])
 by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id C813D81703;
 Sun, 23 Nov 2025 20:45:01 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1763948701;
 bh=OhO4tVRDV4JJ/WEitY/uQlRs8awp1VLQlZQGwb3VJF8=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=HFoc2uuiwHYiygGKjCFsAY8pO0BDi99GmQn+aZ0NHk9wwDu+WV0HnQzz0RWKXBx8y
 /+nuDsVnw+CayhHLK261oFjU7FFFkF0K2jnLP1Y45PqPlztcOBmnGOM4CHwD/Ya2dd
 uX0i4QxKtnahVkictLAy/po6OssEKFvj1B/L30vvngS7umPds+0n9zepVO7BGgVQcT
 8Q9lT4wVDzLx6ZA3t8Ww3Oh6EXy6AWhYUt1yBcjt1RY5/ROkyJB9FIdLy/s5R/lqTY
 Ce6poWtqi7WxnGAeYcrRdFDGTPTHJScPEv5xNuYQfXGgwkjNVBD3soau6cTmpESazQ
 sEifCvnQ4Vfdw==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 0915E8053B;
 Sun, 23 Nov 2025 20:45:01 -0500 (EST)
Received: from asado (unknown [181.28.45.30])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id D58431207B0;
 Sun, 23 Nov 2025 20:44:59 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
To: Jonas Bernoulli <jonas@HIDDEN>
Subject: Re: func-arity should take into account that advices change arity
In-Reply-To: <87see5iks1.fsf@HIDDEN>
Message-ID: <jwvwm3gcikc.fsf-monnier+emacs@HIDDEN>
References: <87see5iks1.fsf@HIDDEN>
Date: Sun, 23 Nov 2025 20:44:56 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL -0.249 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
Received-SPF: pass client-ip=132.204.25.50;
 envelope-from=monnier@HIDDEN; helo=mailscanner.iro.umontreal.ca
X-Spam_score_int: -42
X-Spam_score: -4.3
X-Spam_bar: ----
X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: submit
Cc: bug-gnu-emacs@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

> I think that's problematic.  E.g., if a function gains a new argument
> and a package would like to support both the old and the new version,
> then it could use `func-arity' to determine whether to pass the new
> argument or not, but this breaks if a third-party advises the same
> function.

    (condition-case nil
        (foo bar baz)
      (wrong-number-of-arguments
       (foo bar)))

is the standard way to deal with changes in API.
I recommend not to use `func-arity`, ever.


        Stefan





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79880; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 25 Nov 2025 20:22:08 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Nov 25 15:22:08 2025
Received: from localhost ([127.0.0.1]:41840 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vNzY7-00010q-Nm
	for submit <at> debbugs.gnu.org; Tue, 25 Nov 2025 15:22:08 -0500
Received: from lists.gnu.org ([2001:470:142::17]:44308)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <jonas@HIDDEN>) id 1vMzBS-0008Eh-J5
 for submit <at> debbugs.gnu.org; Sat, 22 Nov 2025 20:46:35 -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 <jonas@HIDDEN>) id 1vMzBB-0003nf-CS
 for bug-gnu-emacs@HIDDEN; Sat, 22 Nov 2025 20:46:21 -0500
Received: from mail.hostpark.net ([212.243.197.30])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <jonas@HIDDEN>) id 1vMzB2-0002pW-IU
 for bug-gnu-emacs@HIDDEN; Sat, 22 Nov 2025 20:46:15 -0500
Received: from localhost (localhost [127.0.0.1])
 by mail.hostpark.net (Postfix) with ESMTP id D9652162C9;
 Sun, 23 Nov 2025 02:45:51 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=bernoul.li; h=
 content-type:content-type:mime-version:message-id:date:date
 :subject:subject:from:from; s=sel2011a; t=1763862351; bh=k7UUChl
 ou1TYkq6b5nf1mR67vQJuPkiofv2Hm5ICqbU=; b=tDIW2s2Qh2dEcSWYQwEZuvE
 kk8rtZifAeCIFOjl7wuV4AWiHQvQd5ram1BNnuZbv/Mu1t765AtXHPla5sTvMyzd
 LBZupPF3ugiijm1pAppvTjoXYLrj9HOoUQ8YKgW5Q5xT2JchMBzNjEobhuGgSJ2f
 TmZKF3Y+oj9gpwtP3nn4=
X-Virus-Scanned: by Hostpark/NetZone Mailprotection at hostpark.net
Received: from mail.hostpark.net ([127.0.0.1])
 by localhost (mail0.hostpark.net [127.0.0.1]) (amavis, port 10224) with ESMTP
 id xVCIA9zRMJ-p; Sun, 23 Nov 2025 02:45:51 +0100 (CET)
Received: from customer (localhost [127.0.0.1])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange secp256r1 server-signature RSA-PSS (2048 bits) server-digest
 SHA256) (No client certificate requested)
 by mail.hostpark.net (Postfix) with ESMTPSA id 341D9162C7;
 Sun, 23 Nov 2025 02:45:50 +0100 (CET)
From: Jonas Bernoulli <jonas@HIDDEN>
To: bug-gnu-emacs@HIDDEN, Stefan Monnier <monnier@HIDDEN>
Subject: func-arity should take into account that advices change arity
Date: Sun, 23 Nov 2025 02:45:50 +0100
Message-ID: <87see5iks1.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
Received-SPF: pass client-ip=212.243.197.30; envelope-from=jonas@HIDDEN;
 helo=mail.hostpark.net
X-Spam_score_int: -27
X-Spam_score: -2.8
X-Spam_bar: --
X-Spam_report: (-2.8 / 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,
 RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 0.9 (/)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.1 (/)

Hello,

Advising a function changes its arity.

(defun foo (a))

(func-arity 'foo)
  => (1 . 1)

(advice-add 'foo :around (lambda (fn a) (funcall fn a)))

(func-arity 'foo)
  => (0 . many)

I think that's problematic.  E.g., if a function gains a new argument
and a package would like to support both the old and the new version,
then it could use `func-arity' to determine whether to pass the new
argument or not, but this breaks if a third-party advises the same
function.

This could be dealt with by adding a new argument to `func-arity',
which controls whether any advice is peeled before determining the
arity.  I tend to think it should peel by default (i.e., the current
behavior looks like a bug to me).

I've been using a wrapper like this:

(defun my-func-arity (fn)
  (func-arity
   (advice--cd*r
    (if (symbolp fn) (symbol-function fn) fn))))

Thanks,
Jonas




Acknowledgement sent to Jonas Bernoulli <jonas@HIDDEN>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs@HIDDEN. Full text available.
Report forwarded to bug-gnu-emacs@HIDDEN:
bug#79880; Package emacs. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Tue, 25 Nov 2025 20:45:01 UTC

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