[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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

From: Lars Ingebrigtsen
Subject: bug#30910: 26.0.91; Incorrect Edebug spec for def-edebug-spec
Date: Thu, 18 Jul 2019 15:03:26 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux)

Gemini Lasswell <address@hidden> writes:

> Lars Ingebrigtsen <address@hidden> 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.

Ah, right:

(symbol-plist 'def-edebug-spec)
=> (edebug-form-spec (&define :name edebug-spec name &or "nil" edebug-spec-p 
"t" "0" (&rest edebug-spec)))

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

Yeah, I guess.

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

The current spec was added with this helpful commit message:

commit 1fe3d50701adcd8929745edf24158a4a50459ea0
Author: Daniel LaLiberte <address@hidden>
Date:   Thu Mar 24 20:38:34 1994 +0000

    New version from author.

And this is the code, that has gone virtually unchanged since 1994.
Note the "Out of date" comment, which was there in 1994:

;;;;* Spec for def-edebug-spec
;;; Out of date.

(defun edebug-spec-p (object)
  "Return non-nil if OBJECT is a symbol with an edebug-form-spec property."
  (and (symbolp object)
       (get object 'edebug-form-spec)))

(def-edebug-spec def-edebug-spec
  ;; Top level is different from lower levels.
  (&define :name edebug-spec name
           &or "nil" edebug-spec-p "t" "0" (&rest edebug-spec)))

(def-edebug-spec edebug-spec-list
  ;; A list must have something in it, or it is nil, a symbolp
  ((edebug-spec . [&or nil edebug-spec])))

(def-edebug-spec edebug-spec
   (vector &rest edebug-spec)           ; matches a vector
   ("vector" &rest edebug-spec)         ; matches a vector spec
   ("quote" symbolp)
   [edebug-lambda-list-keywordp &rest edebug-spec]
   [keywordp gate edebug-spec]
   edebug-spec-p  ;; Including all the special ones e.g. form.
   symbolp;; a predicate

So it does sound more like a test for whether the specs are well-formed,
and not really...  anything with edebug proper?

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


(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no

reply via email to

[Prev in Thread] Current Thread [Next in Thread]