emacs-diffs
[Top][All Lists]
Advanced

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

master 39a401d: * lisp/emacs-lisp/edebug.el (edebug-match-lambda-expr):


From: Stefan Monnier
Subject: master 39a401d: * lisp/emacs-lisp/edebug.el (edebug-match-lambda-expr): Delete function
Date: Sat, 13 Feb 2021 17:50:36 -0500 (EST)

branch: master
commit 39a401ddae154b94e4c0e9c8ced1b27d9dc56daa
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>

    * lisp/emacs-lisp/edebug.el (edebug-match-lambda-expr): Delete function
    
    (lambda-expr): Define with `def-edebug-elem-spec` instead.
    (edebug--handle-&-spec-op): Remove left over code.
    (interactive): Re-add mistakenly removed spec elem.
    
    * doc/lispref/edebug.texi (Specification List): Remove `function-form`.
---
 doc/lispref/edebug.texi   | 10 +---------
 etc/NEWS                  |  4 +++-
 lisp/emacs-lisp/edebug.el | 36 ++++++++----------------------------
 3 files changed, 12 insertions(+), 38 deletions(-)

diff --git a/doc/lispref/edebug.texi b/doc/lispref/edebug.texi
index 2412e84..46f5cb9 100644
--- a/doc/lispref/edebug.texi
+++ b/doc/lispref/edebug.texi
@@ -1290,14 +1290,6 @@ Short for @code{&rest form}.  See @code{&rest} below.  
If your macro
 wraps its body of code with @code{lambda} before it is evaluated, use
 @code{def-body} instead.  See @code{def-body} below.
 
-@item function-form
-A function form: either a quoted function symbol, a quoted lambda
-expression, or a form (that should evaluate to a function symbol or
-lambda expression).  This is useful when an argument that's a lambda
-expression might be quoted with @code{quote} rather than
-@code{function}, since it instruments the body of the lambda expression
-either way.
-
 @item lambda-expr
 A lambda expression with no quoting.
 
@@ -1452,7 +1444,7 @@ match @var{spec} against the code and then call @var{fun} 
with the
 concatenation of the current name, @var{args...}, @var{prestring},
 the code that matched @code{spec}, and @var{poststring}.  If @var{fun}
 is absent, it defaults to a function that concatenates the arguments
-(with an @code{@} between the previous name and the new).
+(with an @code{@@} between the previous name and the new).
 
 @item name
 The argument, a symbol, is the name of the defining form.
diff --git a/etc/NEWS b/etc/NEWS
index de26c01..d865aa7 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -940,7 +940,9 @@ To customize obsolete user options, use 'customize-option' 
or
 **** 'get-edebug-spec' is obsolete, replaced by 'edebug-get-spec'.
 
 +++
-**** The Edebug spec operator ':name NAME' is obsolete.
+**** The spec operator ':name NAME' is obsolete, use '&name' instead.
++++
+**** The spec element 'function-form' is obsolete, use 'form' instead.
 
 +++
 *** New function 'def-edebug-elem-spec' to define Edebug spec elements.
diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el
index 867161e..1cc95f7 100644
--- a/lisp/emacs-lisp/edebug.el
+++ b/lisp/emacs-lisp/edebug.el
@@ -1753,7 +1753,6 @@ contains a circular object."
                (def-form . edebug-match-def-form)
                ;; Less frequently used:
                ;; (function . edebug-match-function)
-               (lambda-expr . edebug-match-lambda-expr)
                 (cl-macrolet-expr . edebug-match-cl-macrolet-expr)
                 (cl-macrolet-name . edebug-match-cl-macrolet-name)
                 (cl-macrolet-body . edebug-match-cl-macrolet-body)
@@ -1873,7 +1872,7 @@ and then matches the rest against the output of (FUN 
ARGS... HEAD)."
   (pcase-let*
       ((`(,spec ,fun . ,args) specs)
        (exps (edebug-cursor-expressions cursor))
-       (instrumented-head (edebug-match-one-spec cursor (or spec 'sexp)))
+       (instrumented-head (edebug-match-one-spec cursor spec))
        (consumed (- (length exps)
                     (length (edebug-cursor-expressions cursor))))
        (newspecs (apply fun (append args (seq-subseq exps 0 consumed)))))
@@ -2026,32 +2025,6 @@ and then matches the rest against the output of (FUN 
ARGS... HEAD)."
       offsets)
     specs))
 
-(defun edebug-match-lambda-expr (cursor)
-  ;; The expression must be a function.
-  ;; This will match any list form that begins with a symbol
-  ;; that has an edebug-form-spec beginning with &define.  In
-  ;; practice, only lambda expressions should be used.
-  ;; I could add a &lambda specification to avoid confusion.
-  (let* ((sexp (edebug-top-element-required
-               cursor "Expected lambda expression"))
-        (offset (edebug-top-offset cursor))
-        (head (and (consp sexp) (car sexp)))
-        (spec (and (symbolp head) (edebug-get-spec head)))
-        (edebug-inside-func nil))
-    ;; Find out if this is a defining form from first symbol.
-    (if (and (consp spec) (eq '&define (car spec)))
-       (prog1
-           (list
-            (edebug-defining-form
-             (edebug-new-cursor sexp offset)
-             (car offset);; before the sexp
-             (edebug-after-offset cursor)
-             (cons (symbol-name head) (cdr spec))))
-         (edebug-move-cursor cursor))
-      (edebug-no-match cursor "Expected lambda expression")
-      )))
-
-
 (cl-defmethod edebug--handle-&-spec-op ((_ (eql &name)) cursor specs)
   "Compute the name for `&name SPEC FUN` spec operator.
 
@@ -2271,12 +2244,19 @@ into `edebug--cl-macrolet-defs' which is checked in 
`edebug-list-form-args'."
      &optional ["&rest" arg]
      )))
 
+(def-edebug-elem-spec 'lambda-expr
+  '(("lambda" &define lambda-list lambda-doc
+     [&optional ("interactive" interactive)]
+     def-body)))
+
 (def-edebug-elem-spec 'arglist '(lambda-list))  ;; deprecated - use 
lambda-list.
 
 (def-edebug-elem-spec 'lambda-doc
   '(&optional [&or stringp
                    (&define ":documentation" def-form)]))
 
+(def-edebug-elem-spec 'interactive '(&optional &or stringp def-form))
+
 ;; A function-form is for an argument that may be a function or a form.
 ;; This specially recognizes anonymous functions quoted with quote.
 (def-edebug-elem-spec 'function-form          ;Deprecated, use `form'!



reply via email to

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