* lisp/emacs-lisp/testcover.el: Don't use edebug--read (bug#20487)

* lisp/emacs-lisp/testcover.el: Use lexical-binding.
(testcover--read): Rename from testcover-read.  Change calling convention.
Use edebug-read-and-maybe-wrap-form now that edebug-read is gone.
(testcover-start): Use add-function.  Move edebug-all-defs binding to
testcover--read.
(testcover-this-defun): Tighten scope of edebug-all-defs binding.
(testcover-mark): Remove unused var `item'.

* src/lread.c (syms_of_lread): Default load-read-function to `read'.
This commit is contained in:
Stefan Monnier 2015-05-06 10:50:48 -04:00
parent 1f052a5f26
commit 1340aefd96
3 changed files with 21 additions and 14 deletions

View file

@ -1,4 +1,4 @@
;;;; testcover.el -- Visual code-coverage tool
;;;; testcover.el -- Visual code-coverage tool -*- lexical-binding:t -*-
;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
@ -191,8 +191,9 @@ problems with type-ahead or post-command-hook, etc. If BYTE-COMPILE is
non-nil, byte-compiles each function after instrumenting."
(interactive "fStart covering file: ")
(let ((buf (find-file filename))
(load-read-function 'testcover-read)
(edebug-all-defs t))
(load-read-function load-read-function))
(add-function :around load-read-function
#'testcover--read)
(setq edebug-form-data nil
testcover-module-constants nil
testcover-module-1value-functions nil)
@ -207,22 +208,26 @@ non-nil, byte-compiles each function after instrumenting."
(defun testcover-this-defun ()
"Start coverage on function under point."
(interactive)
(let* ((edebug-all-defs t)
(x (symbol-function (eval-defun nil))))
(let ((x (let ((edebug-all-defs t))
(symbol-function (eval-defun nil)))))
(testcover-reinstrument x)
x))
(defun testcover-read (&optional stream)
(defun testcover--read (orig &optional stream)
"Read a form using edebug, changing edebug callbacks to testcover callbacks."
(let ((x (edebug-read stream)))
(testcover-reinstrument x)
x))
(or stream (setq stream standard-input))
(if (eq stream (current-buffer))
(let ((x (let ((edebug-all-defs t))
(edebug-read-and-maybe-wrap-form))))
(testcover-reinstrument x)
x)
(funcall (or orig #'read) stream)))
(defun testcover-reinstrument (form)
"Reinstruments FORM to use testcover instead of edebug. This
function modifies the list that FORM points to. Result is nil if
FORM should return multiple values, t if should always return same
value, 'maybe if either is acceptable."
value, `maybe' if either is acceptable."
(let ((fun (car-safe form))
id val)
(cond
@ -495,7 +500,7 @@ eliminated by adding more test cases."
(len (length points))
(changed (buffer-modified-p))
(coverage (get def 'edebug-coverage))
ov j item)
ov j)
(or (and def-mark points coverage)
(error "Missing edebug data for function %s" def))
(when (> len 0)

View file

@ -5762,7 +5762,7 @@ garbage_collect_1 (void *end)
after GC. It's important to scan finalizers at this stage so
that we can be sure that unmarked finalizers are really
unreachable except for references from their associated functions
and from other finalizers. */
and from other finalizers. */
queue_doomed_finalizers (&doomed_finalizers, &finalizers);
mark_finalizer_list (&doomed_finalizers);

View file

@ -4592,8 +4592,10 @@ of the file, regardless of whether or not it has the `.elc' extension. */);
DEFVAR_LISP ("load-read-function", Vload_read_function,
doc: /* Function used by `load' and `eval-region' for reading expressions.
The default is nil, which means use the function `read'. */);
Vload_read_function = Qnil;
Called with a single argument (the stream from which to read).
The default is to use the function `read'. */);
DEFSYM (Qread, "read");
Vload_read_function = Qread;
DEFVAR_LISP ("load-source-file-function", Vload_source_file_function,
doc: /* Function called in `load' to load an Emacs Lisp source file.