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 21:27:18 +0100 Message-ID: <87imnm4315.fsf@web.de> References: <87mucz98y9.fsf@web.de> <87r22brq3b.fsf@gnus.org> <87eeya9z3z.fsf@web.de> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="208959"; 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 21:28:38 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 1iVLjJ-000sAQ-Qf for geb-bug-gnu-emacs@m.gmane.org; Thu, 14 Nov 2019 21:28:37 +0100 Original-Received: from localhost ([::1]:33440 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iVLjI-00055v-6Y for geb-bug-gnu-emacs@m.gmane.org; Thu, 14 Nov 2019 15:28:36 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:40546) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iVLio-00054M-DO for bug-gnu-emacs@gnu.org; Thu, 14 Nov 2019 15:28:07 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iVLim-0008Ea-Ht for bug-gnu-emacs@gnu.org; Thu, 14 Nov 2019 15:28:06 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:54711) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iVLik-0008EJ-MW for bug-gnu-emacs@gnu.org; Thu, 14 Nov 2019 15:28:04 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1iVLik-0003vk-DG for bug-gnu-emacs@gnu.org; Thu, 14 Nov 2019 15:28: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 20:28: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.157376324615045 (code B ref 38195); Thu, 14 Nov 2019 20:28:02 +0000 Original-Received: (at 38195) by debbugs.gnu.org; 14 Nov 2019 20:27:26 +0000 Original-Received: from localhost ([127.0.0.1]:35299 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iVLi9-0003ua-Mz for submit@debbugs.gnu.org; Thu, 14 Nov 2019 15:27:25 -0500 Original-Received: from mout.web.de ([212.227.17.12]:49011) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iVLi7-0003uK-KT for 38195@debbugs.gnu.org; Thu, 14 Nov 2019 15:27:24 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1573763227; bh=Yli3OUSLxRHcbEup7QQ4ylxR8G+3+gpp2iVflsZ5FjQ=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=GPdWfuM6Rn4DEZoTVDLI5rSyCXVQYD84WPVdy988yLrtFRvNtQE9h2ojeIUtj1m9c TfakunzgdlZajMLUEd9uKZdiKowwMlfY9MMPn9t8kG6Il+eWkOQvJyptq7xUKHq72a MY/7Z2jeRO0eBbBQk8bsWJlWE+SY1SzCHohDkDTQ= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Original-Received: from drachen.dragon ([94.218.222.9]) by smtp.web.de (mrweb102 [213.165.67.124]) with ESMTPSA (Nemesis) id 0LmcjH-1hwI8W0F5H-00aBH7; Thu, 14 Nov 2019 21:27:07 +0100 In-Reply-To: (Stefan Monnier's message of "Thu, 14 Nov 2019 14:08:24 -0500") X-Provags-ID: V03:K1:Z7JiRSVY0XcgjQ6IuBVuy6LPeON59YpUnmgrjp4qC6cbSOopA+F Y4W/6LsDQmGsff9I9OwqCpdpgfku/LNsyZyxmAeyZpyAq243RCgDT/0/Mo0FRRacCX4aQKS 9x4qcaBQpYI9kHmuhNDXSOa1xbtDb9RSLjpZL3w/t0uDUlkZcqPRjoRZkinAvl0bI+kuCbI WVvGGCbvjAN8XAmoFsrxw== X-UI-Out-Filterresults: notjunk:1;V03:K0:RbwW0eeX62U=:z1oY9KQ10tea8oHpXuZZ4u AX6L+xm5iKZGDwyhj9y0p7mDnhnnmle9VbSHuRZZUvOhZgqC5+oBWYf+4qhIyfWQJbQisvBkf kmoorK/cgJODjSI+4GgzI6xJ4ePmwAqVNDksRm59gwwOqFOfb8jGE5E7bqbGqIcNeIUHHGwjO baF+1Kmjb7x6guZe8yk4qrB37SlkEzdpgF8Kfe2BbDdByc7BWGxzwsJJoyM6GpvqnAayvBp2V xIR5ErQSPkmlkTEZJ4XP2h2K5uXCqIK4mRQxVCQqCVk7YUysT1Br3buyuk/kqYKHavd1EVjXe pNs4XTSx6Lz1OzUo6YdjpZT43gRA0LvrTZ5QP/wSkptZx6vJ61p+zVAI5cAvRktCQIL/rz6NS DhJX7Gdu+ABvkY6fuw+zd0Fkpxz1nGzaz/Lq3F0y5KzrdBmGnMP8wVP53Ae8UslCsko8SYXqe dXoMO/Va+xRW5iPbbTuhcYgp857WnP94kdWlEVRyGhqdEH5zr+jdhxZWs16QX1N3dJQhScEhI eO4DPoAZiK5X4XWup2yKsEe2MJ3v+5ssppAthFnGoZg640XyYSFcb/VQVClez5tESdQHdhdA3 G5AwhxcSYJtOAgLzTA9mYj9k15Yj5967gdhWQ9jj6jYzAyzK4wQf870kjG/svA4qx+GG6T2OL N86jAHPAXY8R0COZCDm9SpMJzZ7knSYUJ1oAiPRHop+HJNktUKzbg64sfKLTyzeF0Xfs+48Rv Erp8xp5dA/q/st7my0QP+Etfvetr7MmUHsZOsSnz7/L/wnMO+3s6vsf3HXe5VfV10SmmMZTK 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:171612 Archived-At: Stefan Monnier writes: > > +(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. > > Do you really mean "advised"? It seems that this tests whether the code > is *instrumented* by looking past the (potential) pieces of advice. It tests both - sorry, a bit ugly - for the sake of fitting into the existing code. As a predicate it tests whether the thing is advised, and the return value is the unwrapped original function when it can be unwrapped, or t if it can't. > > + (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))))) > > [ That's pretty ugly. I think I'd move the `app` and the `let` outside > of those patterns and into the code of the corresponding branch. ] Hmm, that's what I had first, and I find this better...I guess nobody else does, so I'll do what you suggest. > > ;; 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))))) > > Yuck! > > Can't we just use `defalias` rather than `fset` (and that should > take care of calling `defalias-fset-function` when needed)? That's what I want to know too! I guess we can, but I thought defalias would change the source file association as a side effect? > That's because if I have `foo` as an alias for `bar` and I advise `foo` > I don't want it to affect `bar`: if you want to affect both, then you > should advise `bar`. I hoped it would be like that. So after advising `foo` the `symbol-function' of `foo` is no longer a symbol, so there is no need to call `indirect-function' in my change. That wasn't clear to me. Michael.