Subject: bug#30910: 26.0.91; Incorrect Edebug spec for def-edebug-spec

From: Gemini Lasswell <[email-masked]>
Date: Mon, 15 Jul 2019 15:29:08 -0700

Lars Ingebrigtsen <[email-masked]> writes:

> But you say that it has an edebug spec, but:
>
> (symbol-plist 'def-edebug-spec)
> => nil

Do (require 'edebug) first, then that will work.

> I thought that perhaps saying something like
>
> (eval-and-compile
>   (put 'def-edebug-spec 'edebug-form-spec '(sexp sexp)))
>
> might be a fix, but it doesn't seem to have any effect...

(def-edebug-spec def-edebug-spec (&rest sexp))

would be a fix, but so would be deleting it entirely.

Since there is no code needing to be debugged inside of an Edebug spec,
the only reason I can think of for having an Edebug spec for
def-edebug-spec is to check whether the specs defined with it are
validly formed.  The error messages issued during Edebug spec matching
are not very good, but maybe someone will be inspired to do something
about that someday.

Right now the only Edebug specs that get matched to the def-edebug-spec
definition are the ones declared with def-edebug-spec, not the ones in
macro definitions, because:

(get-edebug-spec 'defmacro)
=> (&define name lambda-list lambda-doc
	 [&optional
	  ("declare" &rest sexp)]
	 def-body)

If we had a Edebug spec for Edebug specs that wasn't broken, we could
change the defmacro spec to use it, and see what happens.