From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Michael Heerdegen Newsgroups: gmane.emacs.bugs Subject: bug#38195: 27.0.50; `edebug-remove-instrumentation' doesn't work for adviced functions Date: Thu, 14 Nov 2019 17:55:28 +0100 Message-ID: <87eeya9z3z.fsf@web.de> References: <87mucz98y9.fsf@web.de> <87r22brq3b.fsf@gnus.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="89693"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) Cc: Lars Ingebrigtsen , 38195@debbugs.gnu.org To: Stefan Monnier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Nov 14 17:56:31 2019 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1iVIQ2-000N8V-OJ for geb-bug-gnu-emacs@m.gmane.org; Thu, 14 Nov 2019 17:56:30 +0100 Original-Received: from localhost ([::1]:59750 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iVIQ1-0002hi-CT for geb-bug-gnu-emacs@m.gmane.org; Thu, 14 Nov 2019 11:56:29 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:51442) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iVIPb-0002es-WF for bug-gnu-emacs@gnu.org; Thu, 14 Nov 2019 11:56:05 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iVIPa-0003n3-MO for bug-gnu-emacs@gnu.org; Thu, 14 Nov 2019 11:56:03 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:54541) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iVIPa-0003mz-DR for bug-gnu-emacs@gnu.org; Thu, 14 Nov 2019 11:56:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1iVIPa-0005JF-BM for bug-gnu-emacs@gnu.org; Thu, 14 Nov 2019 11:56:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Michael Heerdegen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 14 Nov 2019 16:56:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 38195 X-GNU-PR-Package: emacs Original-Received: via spool by 38195-submit@debbugs.gnu.org id=B38195.157375053220371 (code B ref 38195); Thu, 14 Nov 2019 16:56:02 +0000 Original-Received: (at 38195) by debbugs.gnu.org; 14 Nov 2019 16:55:32 +0000 Original-Received: from localhost ([127.0.0.1]:35129 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iVIP6-0005IU-2C for submit@debbugs.gnu.org; Thu, 14 Nov 2019 11:55:32 -0500 Original-Received: from mout.web.de ([217.72.192.78]:52491) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iVIP4-0005IF-W5 for 38195@debbugs.gnu.org; Thu, 14 Nov 2019 11:55:31 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1573750517; bh=k4BEEg5gQb3gpMA+u47fxxvKmt+H/+LuJCtfG9PZ3Rg=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=KFtSyxOoawZv/mph7kLZsBxmod6tudOY1ryUfntrsbIpd8OKSFSD8XBrIUXztPZtB hoOaBsgNBkAO0waEXb3uzLdMVxILtnLnQl8Bg4Rit9/Ww9XR6dymSghqmamuixVzWC YMYO26cF7Pw7By7a1p3K/CtVMV6t5oCisVUQnFVI= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Original-Received: from drachen.dragon ([94.218.222.9]) by smtp.web.de (mrweb101 [213.165.67.124]) with ESMTPSA (Nemesis) id 0Ls95v-1hkF3541fT-013vX8; Thu, 14 Nov 2019 17:55:17 +0100 In-Reply-To: <87r22brq3b.fsf@gnus.org> (Lars Ingebrigtsen's message of "Thu, 14 Nov 2019 06:20:40 +0100") X-Provags-ID: V03:K1:BCsd2fViEp3j80uYI4QKZl052PA+yFVMuHaIHRVLKsJrgQSGi7j 6FVAHwDcOPfa4QaZkPXe41a9aYfccvwz98FGl5CT97eseFltPzdXq3lBkPlpE1gcNlXwvAG 4lW4An7gEk9Fd98vI46vXDnLUzq0CjCWiZ1EGo3+tWaSiVwrx6FV1liig47+Rstgoh4nYqD DBNOFwKgLvTTIOAqElzEw== X-UI-Out-Filterresults: notjunk:1;V03:K0:MHWQMZcZjXk=:nvj106+CtLlCJdiQBCLh9A T/XqzwQTllmjfLwXjN9kKoehFTKsd2/hb9M6z2kt4uCASyyKM5ZXQQpu1i9g4rSajSoK3UqHO IA4alOSiqjllq4k3+13Vicob46goDCNWHEGULuG5HtwI7zn5cf78S+fsUZLxwupp+EnZ8NYvm gs4RyRchNt2PDoorPNr5AGOHw5XBGzXhvC/Zg+Qaulxg3l9LuLej4blGMEBwyLmyjkCV2cYoE BwyQKUmR61W2GfGvphWJWyzAcQfqfBnYTx/liyJzjI0ICLlCFGZBCNLPgSOgICGXYQKxYRPoX d7mhIC8WTdKNT3WKVB+W2yfi38SqtrPpdmkVeE1G5bMxJACbOQgKu3+KnE+cx0H6F0XF97WbN 7Jt8Er+heONt1r06rdgYeaGOvL7SYpwSbDb5TmTk2QCh1R2I8nw4eXEokwCw4z75eTbYP7hyj v3gWIXksVdQMuCFDuHKc4zEWy16wfHZRfaMCPxNS4H26GYmfpPl2g/48KzfLUSa+Zo3bJ6AGd rG40ZpfUix8tgLqnsmDxThczWJQHgPZf+4NhARXL0+8q8pIMA5tPml288gJ/SB+6a6pjC/Vy5 3nrCT+pvrSYKwhMxNgRS2cDs9ageGWb/kedQnlVkPFbD8P0BkmDVvWDVmiIgR1UDHl7MLVDe8 fCdapnjBNAhDfZgQAD9nCOA6UoS4oZbnA7EdiQ38ztfrz+Dv9gIDdUfeFDSgnmoOEuoQge3V6 VDpOgTDEthXPmLPClY5pff4dekwOZ/eI9hwROwIz4x4ZYq4MffNGQKcPMOsYFhYt64FzaH8Q X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 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.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:171603 Archived-At: --=-=-= Content-Type: text/plain Lars Ingebrigtsen writes: > > e.g. (just a random example) > > > > (defun f (x) (* 2 (+ 1 x))) > > > > (advice-add 'f :around (lambda (orig-f x) (1+ (funcall orig-f x)))) > > > > Instrument `f'. Then M-x edebug-remove-instrumentation gives > > > > "Found no functions to remove instrumentation from". > > This is due to edebug-unwrap* not actually unwrapping something if it > has been advised, apparently... I'm not familiar enough with how edebug > really works to fix that. Stefan, does this patch make sense? --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0001-WIP-Try-to-fix-edebug-remove-instrumentation-for-adv.patch Content-Transfer-Encoding: quoted-printable =46rom c1c2cd4faa0adc87f9334ec92ace8bcf5ae8333e Mon Sep 17 00:00:00 2001 From: Michael Heerdegen Date: Thu, 14 Nov 2019 17:47:51 +0100 Subject: [PATCH] WIP: Try to fix edebug-remove-instrumentation for advised funs =2D-- lisp/emacs-lisp/edebug.el | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el index 6b55d7cff0..e94adeb64b 100644 =2D-- a/lisp/emacs-lisp/edebug.el +++ b/lisp/emacs-lisp/edebug.el @@ -56,6 +56,7 @@ (require 'macroexp) (require 'cl-lib) (eval-when-compile (require 'pcase)) +(eval-when-compile (require 'subr-x)) ;;; Options @@ -4571,6 +4572,20 @@ edebug-unload-function ;; Continue standard unloading. nil) +(defun edebug--advised-p (symbol) + ;; Non-nil when SYMBOL's `symbol-function' is advised. The non-nil + ;; return value is the unwrapped base function if it was wrapped, + ;; and the symbol t else. + (pcase (symbol-function symbol) + ((and (pred advice--p) + (app advice--cd*r orig-f) + (let unwrapped (edebug-unwrap* orig-f))) + (if (equal unwrapped orig-f) t unwrapped)) + (`(macro . ,(and (pred advice--p) + (app advice--cd*r orig-f) + (let unwrapped (edebug-unwrap* orig-f)))) + (if (equal unwrapped orig-f) t `(macro . ,unwrapped))))) + (defun edebug-remove-instrumentation (functions) "Remove Edebug instrumentation from FUNCTIONS. Interactively, the user is prompted for the function to remove @@ -4582,9 +4597,13 @@ edebug-remove-instrumentation (lambda (symbol) (when (and (functionp symbol) (get symbol 'edebug)) - (let ((unwrapped (edebug-unwrap* (symbol-function symbol)))) - (unless (equal unwrapped (symbol-function symbol)) - (push symbol functions))))) + (if-let ((advised (edebug--advised-p symbol))) + (unless (eq advised t) + (push symbol functions)) + (let ((unwrapped (edebug-unwrap* + (symbol-function symbol)))) + (unless (equal unwrapped (symbol-function symbol)) + (push symbol functions)))))) obarray) (unless functions (error "Found no functions to remove instrumentation from")) @@ -4598,8 +4617,12 @@ edebug-remove-instrumentation functions))))) ;; Remove instrumentation. (dolist (symbol functions) - (setf (symbol-function symbol) - (edebug-unwrap* (symbol-function symbol)))) + (if-let ((advised (edebug--advised-p symbol))) + (unless (eq advised t) + (funcall (or (get symbol 'defalias-fset-function) #'fset) + symbol advised)) + (setf (symbol-function symbol) + (edebug-unwrap* (symbol-function symbol))))) (message "Removed edebug instrumentation from %s" (mapconcat #'symbol-name functions ", "))) =2D- 2.24.0 --=-=-= Content-Type: text/plain I'm not sure if I should use `indirect-function' somewhere instead of `symbol-function', but I also don't understand (and also didn't yet try to find out) why nadvice doesn't use `indirect-function' for its manipulations. Thanks, Michael. --=-=-=--