summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
authorGemini Lasswell <gazally@runbox.com>2017-10-14 09:13:36 -0700
committerGemini Lasswell <gazally@runbox.com>2017-10-22 10:47:50 -0700
commite07cf691decf01dc3cbe19a413708570b95bc41b (patch)
tree0500a27e83dcef7fdf5bb846562e9d92c67fbf58 /lisp/emacs-lisp
parent9c8f8de0f3e00d4f862fa5c17e3b46fcd23e5f7f (diff)
downloademacs-e07cf691decf01dc3cbe19a413708570b95bc41b.tar.gz
emacs-e07cf691decf01dc3cbe19a413708570b95bc41b.tar.bz2
emacs-e07cf691decf01dc3cbe19a413708570b95bc41b.zip
Change Edebug's behavior-changing hooks to variables
* lisp/emacs-lisp/edebug.el (edebug-after-instrumentation-functions) (edebug-new-definition-functions): Deleted. (edebug-after-instrumentation-function) (edebug-new-definition-function): New variables. (edebug-behavior-alist): Update docstring. (edebug-read-and-maybe-wrap-form1, edebug-make-form-wrapper): Use new variables. * lisp/emacs-lisp/testcover.el (testcover-start) (testcover-this-defun): Use `edebug-after-instrumentation-function' and `edebug-new-definition-function'. (testcover-after-instrumentation): Return passed form. (testcover-init-definition): Use argument instead of `edebug-def-name'. * doc/lispref/edebug.texi (Edebug Options): Replace descriptions of `edebug-after-instrumentation-functions' and `edebug-new-definition-functions' with `edebug-after-instrumentation-function' and `edebug-new-definition-function'.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r--lisp/emacs-lisp/edebug.el37
-rw-r--r--lisp/emacs-lisp/testcover.el23
2 files changed, 28 insertions, 32 deletions
diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el
index 77523de32c5..0e8f77e29a8 100644
--- a/lisp/emacs-lisp/edebug.el
+++ b/lisp/emacs-lisp/edebug.el
@@ -1065,16 +1065,17 @@ circular objects. Let `read' read everything else."
(defvar edebug-error-point nil)
(defvar edebug-best-error nil)
-;; Hooks which may be used to extend Edebug's functionality. See
+;; Functions which may be used to extend Edebug's functionality. See
;; Testcover for an example.
-(defvar edebug-after-instrumentation-functions nil
- "Abnormal hook run on code after instrumentation for debugging.
-Each function is called with one argument, a form which has just
-been instrumented for Edebugging.")
-
-(defvar edebug-new-definition-functions '(edebug-announce-definition)
- "Abnormal hook run after Edebug wraps a new definition.
-After Edebug has initialized its own data, each hook function is
+(defvar edebug-after-instrumentation-function #'identity
+ "Function to run on code after instrumentation for debugging.
+The function is called with one argument, a FORM which has just
+been instrumented for Edebugging, and it should return either FORM
+or a replacement form to use in its place.")
+
+(defvar edebug-new-definition-function #'edebug-new-definition
+ "Function to call after Edebug wraps a new definition.
+After Edebug has initialized its own data, this function is
called with one argument, the symbol associated with the
definition, which may be the actual symbol defined or one
generated by Edebug.")
@@ -1087,9 +1088,9 @@ Each definition instrumented by Edebug will have a
the instrumented code is running, Edebug will look here for the
implementations of `edebug-enter', `edebug-before', and
`edebug-after'. Edebug's instrumentation may be used for a new
-purpose by adding an entry to this alist and a hook to
-`edebug-new-definition-functions' which sets `edebug-behavior'
-for the definition.")
+purpose by adding an entry to this alist, and setting
+`edebug-new-definition-function' to a function which sets
+`edebug-behavior' for the definition.")
(defun edebug-read-and-maybe-wrap-form ()
;; Read a form and wrap it with edebug calls, if the conditions are right.
@@ -1189,8 +1190,7 @@ for the definition.")
;; Not a defining form, and not edebugging.
(t (edebug-read-sexp)))))
- (run-hook-with-args 'edebug-after-instrumentation-functions result)
- result)))
+ (funcall edebug-after-instrumentation-function result))))
(defvar edebug-def-args) ; args of defining form.
(defvar edebug-def-interactive) ; is it an emacs interactive function?
@@ -1383,13 +1383,14 @@ expressions; a `progn' form will be returned enclosing these forms."
edebug-offset-list
edebug-top-window-data
))
- (put edebug-def-name 'edebug-behavior 'edebug)
- (run-hook-with-args 'edebug-new-definition-functions edebug-def-name)
+
+ (funcall edebug-new-definition-function edebug-def-name)
result
)))
-(defun edebug-announce-definition (def-name)
- "Announce Edebug's processing of DEF-NAME."
+(defun edebug-new-definition (def-name)
+ "Set up DEF-NAME to use Edebug's instrumentation functions."
+ (put def-name 'edebug-behavior 'edebug)
(message "Edebug: %s" def-name))
diff --git a/lisp/emacs-lisp/testcover.el b/lisp/emacs-lisp/testcover.el
index 3628968974c..797cc682171 100644
--- a/lisp/emacs-lisp/testcover.el
+++ b/lisp/emacs-lisp/testcover.el
@@ -193,12 +193,9 @@ If BYTE-COMPILE is non-nil, byte compile each function after instrumenting."
testcover-module-constants nil
testcover-module-1value-functions nil
testcover-module-potentially-1value-functions nil)
- (cl-letf ((edebug-all-defs t)
- (edebug-after-instrumentation-functions)
- (edebug-new-definition-functions))
- (add-hook 'edebug-after-instrumentation-functions 'testcover-after-instrumentation)
- (add-hook 'edebug-new-definition-functions 'testcover-init-definition)
- (remove-hook 'edebug-new-definition-functions 'edebug-announce-definition)
+ (let ((edebug-all-defs t)
+ (edebug-after-instrumentation-function #'testcover-after-instrumentation)
+ (edebug-new-definition-function #'testcover-init-definition))
(eval-buffer buf)))
(when byte-compile
(dolist (x (reverse edebug-form-data))
@@ -210,12 +207,9 @@ If BYTE-COMPILE is non-nil, byte compile each function after instrumenting."
(defun testcover-this-defun ()
"Start coverage on function under point."
(interactive)
- (cl-letf ((edebug-all-defs t)
- (edebug-after-instrumentation-functions)
- (edebug-new-definition-functions))
- (add-hook 'edebug-after-instrumentation-functions 'testcover-after-instrumentation)
- (add-hook 'edebug-new-definition-functions 'testcover-init-definition)
- (remove-hook 'edebug-new-definition-functions 'edebug-announce-definition)
+ (let ((edebug-all-defs t)
+ (edebug-after-instrumentation-function #'testcover-after-instrumentation)
+ (edebug-new-definition-function #'testcover-init-definition))
(eval-defun nil)))
(defun testcover-end (filename)
@@ -231,11 +225,12 @@ If BYTE-COMPILE is non-nil, byte compile each function after instrumenting."
(defun testcover-after-instrumentation (form)
"Analyze FORM for code coverage."
- (testcover-analyze-coverage form))
+ (testcover-analyze-coverage form)
+ form)
(defun testcover-init-definition (sym)
"Mark SYM as under test coverage."
- (message "Testcover: %s" edebug-def-name)
+ (message "Testcover: %s" sym)
(put sym 'edebug-behavior 'testcover))
(defun testcover-enter (func _args body)