[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 <gazally@runbox.com> writes:
> Lars Ingebrigtsen <larsi@gnus.org> 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 <liberte@gnu.org>
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
(&or
(vector &rest edebug-spec) ; matches a vector
("vector" &rest edebug-spec) ; matches a vector spec
("quote" symbolp)
edebug-spec-list
stringp
[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.
Right.
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no