Subject: bug#12329: closed (Re: bug#12329: 24.1.50; edebug with defun* and defmacro*)

From: [email-masked] (GNU bug Tracking System)
Date: Thu, 24 Dec 2015 18:45:02 +0000

Your bug report

#12329: 24.1.50; edebug with defun* and defmacro*

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].

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

Subject: Re: bug#12329: 24.1.50; edebug with defun* and defmacro*
From: Alan Mackenzie <[email-masked]>
To: Nic Ferrier <[email-masked]>
Cc: [email-masked]
Date: Thu, 24 Dec 2015 18:46:50 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello, Nic.

I know it's over three years ago, but .....

On Sun, Sep 02, 2012 at 12:35:10AM +0100, Nic Ferrier wrote:

> (require 'cl)
> (defun* nic-test-1 (a)
>   10)

> ;; instrument the above function - it will enter the debugger instead of
> ;; instrumenting, that's wrong

I don't have an Emacs 24.1, and have difficulty building one.  So I've
tried these things out on 23.2 and 24.2.  My comments below apply
equally to both versions.

When I try to instrument the `defun*' form without having done the
`require', the instrumentation process does indeed enter edebug as
though it were a defvar.  After doing the `require', it instruments the
`defun*' properly.

> (nic-test-1 20)

> ;; evaling that will call the function but does not enter the debugger,
> ;; because the instrumenting didn't work

On evaluating (symbol-function 'nic-test-1), I get this form:

    (lambda (a) (block nic-test-1 (edebug-enter (quote nic-test-1) (list a) (function (lambda nil 10)))))

, which shows that the original form _has_ been instrumented.  This is
not apparent on running it, though, because there is no "stop point"
anywhere in the function for edbug to stop at.  When "10" is replaced by
"a", the instrumented form looks like:

   (lambda (a) (block nic-test-2 (edebug-enter (quote nic-test-2) (list a) (function (lambda nil (edebug-after 0 0 a))))))

; on running this, edebug does stop inside the function, just after
evaluating "a". 

> (cl-defun nic-test-2 (a)
>   30)

> ;; instrumenting that does seem to result in proper instrumentation

> (nic-test-2 20)

> ;; evaling that does not result in the debugger being entered though.

> I had a quick look on github, here are the relevant patches that look
> like they might be the problem:

> https://github.com/emacsmirror/emacs/commit/74e7f3ee6e3147e3c8f570ffeaadb4a9a5504f39
> https://github.com/emacsmirror/emacs/commit/498110b9cee6e53cc5339206772b7e0e840b9330

Sadly, these patches are now lost forever.  :-(.  This is an example of
why 40 hex-digit hashes are a poor identifier.  With a savannah (bzr)
revision number, or a date together with commit message text, they could
have been found easily.

> In GNU Emacs 24.1.50.1 (x86_64-unknown-linux-gnu, GTK+ Version 2.24.10)
>  of 2012-08-29 on nferrier
> Windowing system distributor `The X.Org Foundation', version 11.0.11103000
> Configured using:
>  `configure '--prefix=/home/nferrier/emacs-local''

[ .... ]

There may have been a bug here, in Emacs 24.1.  I don't think there was
in either 23.2 or 24.2.  So I'm closing this bug.

-- 
Alan Mackenzie (Nuremberg, Germany).

Subject: 24.1.50; edebug with defun* and defmacro*
From: Nic Ferrier <[email-masked]>
To: [email-masked]
Date: Sun, 02 Sep 2012 00:35:10 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

(require 'cl)
(defun* nic-test-1 (a)
  10)

;; instrument the above function - it will enter the debugger instead of
;; instrumenting, that's wrong

(nic-test-1 20)

;; evaling that will call the function but does not enter the debugger,
;; because the instrumenting didn't work

(cl-defun nic-test-2 (a)
  30)

;; instrumenting that does seem to result in proper instrumentation

(nic-test-2 20)

;; evaling that does not result in the debugger being entered though.

I had a quick look on github, here are the relevant patches that look
like they might be the problem:

https://github.com/emacsmirror/emacs/commit/74e7f3ee6e3147e3c8f570ffeaadb4a9a5504f39
https://github.com/emacsmirror/emacs/commit/498110b9cee6e53cc5339206772b7e0e840b9330

In GNU Emacs 24.1.50.1 (x86_64-unknown-linux-gnu, GTK+ Version 2.24.10)
 of 2012-08-29 on nferrier
Windowing system distributor `The X.Org Foundation', version 11.0.11103000
Configured using:
 `configure '--prefix=/home/nferrier/emacs-local''

Important settings:
  value of $LANG: en_GB.UTF-8
  locale-coding-system: utf-8-unix
  default enable-multibyte-characters: t

Major mode: Emacs-Lisp

Minor modes in effect:
  whitespace-mode: t
  eldoc-mode: t
  show-paren-mode: t
  server-mode: t
  rcirc-track-minor-mode: t
  display-time-mode: t
  cua-mode: t
  auto-insert-mode: t
  tooltip-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t
  hs-minor-mode: t

Recent input:
h a . SPC a n d SPC e d b <backspace> <backspace> <backspace> 
r e p o r t C-h f r e p o r t - <tab> C-g e <backspace> 
- e m a c s - b u g SPC i s SPC b r o k e n , <backspace> 
. <return> C-x o M-x <up> <return> <up> <return> q 
C-x k <return> y e s <return> C-x C-f <escape> <backspace> 
<escape> <backspace> <escape> <backspace> . e m <tab> 
n i <tab> <return> C-s o r g - e m a i l C-a C-x C-f 
C-g C-x o j <tab> i <backspace> m i n e SPC i s . SPC 
m y SPC <escape> <backspace> m y SPC o w n SPC h o 
o k SPC I SPC t h i n k . <return> C-x o C-x C-f p 
<backspace> e l p <tab> o r <tab> <tab> C-g <C-right> 
<C-right> <C-right> <C-right> <C-left> M-x c u s t 
<tab> i <tab> - v a r <tab> <return> m e s s <tab> 
- m o <tab> <return> <tab> <tab> <tab> <tab> <tab> 
<tab> <tab> <tab> <tab> C-k <tab> <return> 1 q <backspace> 
<tab> <return> 1 <tab> q C-x k <return> C-x C-f <up> 
<return> C-s o r g - e m C-s <up> <up> <up> <up> <up> 
<up> <up> <up> <up> <up> <down> <down> <C-right> <C-right> 
<C-right> <C-right> <C-left> C-a <right> <right> C-a 
C-k <C-down-mouse-1> <C-mouse-1> C-k <C-down-mouse-1> 
<C-mouse-1> <up> <down> C-x C-s M-x C-g C-h v <up> 
<return> C-x o <tab> <tab> <tab> <S-iso-lefttab> <return> 
<tab> <tab> <tab> <tab> <tab> <tab> <tab> <tab> <tab> 
<S-iso-lefttab> <return> <return> <tab> C-k <tab> <return> 
1 n i l <tab> <return> 1 q q C-x o C-x k <return> M-x 
<up> <up> <return>

Recent messages:
Apply settings and save for future sessions.
Hide the value of this option.
M-TAB: complete field; RET: enter value
Hide the value of this option.
M-TAB: complete field; RET: enter value
Change the state of this item.
custom-variable-mark-to-save: Saving message-mode-hook: Empty sexp -- use `nil'?
Change the state of this item.
Saving file /home/nferrier/.emacs.d/nic-custom.el...
Wrote /home/nferrier/.emacs.d/nic-custom.el [2 times]

Load-path shadows:
None found.

Features:
(shadow sort flyspell ispell cus-edit wid-edit mail-extr emacsbug
message format-spec rfc822 mml mml-sec mm-decode mm-bodies mailabbrev
gmm-utils mailheader sendmail mail-utils browse-url thingatpt imenu
parse-time multi-isearch jka-compr pp edebug elnode-tests fakir cl-macs
gv cl cl-lib face-remap dired-aux vc-git help-mode view network-stream
starttls tls hideshow disp-table whitespace ert find-func ewoc debug
eldoc load-dir bigint-autoloads dotassoc-autoloads edit-list-autoloads
esxml-autoloads gist-autoloads gh-autoloads groovy-mode-autoloads
js2-mode-autoloads legalese-autoloads load-dir-autoloads
logito-autoloads magit-autoloads markdown-mode-autoloads
mongo-elnode-autoloads elnode-autoloads elnode elnode-db json url-util
mailcap mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums
creole-autoloads fakir-autoloads mongo-autoloads org-presie-autoloads
eimp-autoloads pcache-autoloads finder-inf rainbow-mode-autoloads
shell-switcher-autoloads web-autoloads wgrep-autoloads wikidoc-autoloads
package paren server rcirc ring time cua-base autoinsert cus-start
cus-load nic-custom dired-x easymenu dired uniquify ffap url-parse
auth-source eieio gnus-util mm-util mail-prsvr password-cache url-vars
edmacro kmacro byte-opt warnings bytecomp byte-compile cconv macroexp
advice help-fns advice-preload time-date tooltip ediff-hook vc-hooks
lisp-float-type mwheel x-win x-dnd tool-bar dnd fontset image regexp-opt
fringe tabulated-list newcomment lisp-mode register page menu-bar
rfn-eshadow timer select scroll-bar mouse jit-lock font-lock syntax
facemenu font-core frame cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese hebrew greek romanian slovak
czech european ethiopic indian cyrillic chinese case-table epa-hook
jka-cmpr-hook help simple abbrev minibuffer loaddefs button faces
cus-face files text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget hashtable-print-readable backquote
make-network-process dynamic-setting system-font-setting
font-render-setting move-toolbar gtk x-toolkit x multi-tty emacs)