annotate lisp/emacs-lisp/testcover.el @ 72863:526dc1f36b09

(produce_image_glyph): Automatically crop wide images at right window edge so we can draw the cursor on the same row to avoid confusing redisplay by placing the cursor outside the visible window area.
author Kim F. Storm <storm@cua.dk>
date Thu, 14 Sep 2006 09:37:44 +0000
parents 067115a6e738
children 7a3f13e2dd57 c5406394f567
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
1 ;;;; testcover.el -- Visual code-coverage tool
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
2
68648
067115a6e738 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64993
diff changeset
3 ;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
4
52042
c195b419ef52 Updated contact address.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 50328
diff changeset
5 ;; Author: Jonathan Yavner <jyavner@member.fsf.org>
c195b419ef52 Updated contact address.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 50328
diff changeset
6 ;; Maintainer: Jonathan Yavner <jyavner@member.fsf.org>
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
7 ;; Keywords: lisp utility
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
8
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
10
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
14 ;; any later version.
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
15
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
20
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64085
18a818a2ee7c Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 64031
diff changeset
23 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18a818a2ee7c Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 64031
diff changeset
24 ;; Boston, MA 02110-1301, USA.
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
25
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
26
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
27 ;;; Commentary:
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
28
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
29 ;; * Use `testcover-start' to instrument a Lisp file for coverage testing.
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
30 ;; * Use `testcover-mark-all' to add overlay "splotches" to the Lisp file's
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
31 ;; buffer to show where coverage is lacking. Normally, a red splotch
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
32 ;; indicates the form was never evaluated; a brown splotch means it always
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
33 ;; evaluted to the same value.
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
34 ;; * Use `testcover-next-mark' (bind it to a key!) to jump to the next spot
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
35 ;; that has a splotch.
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
36
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
37 ;; * Basic algorithm: use `edebug' to mark up the function text with
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
38 ;; instrumentation callbacks, then replace edebug's callbacks with ours.
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
39 ;; * To show good coverage, we want to see two values for every form, except
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
40 ;; functions that always return the same value and `defconst' variables
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
41 ;; need show only one value for good coverage. To avoid the brown
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
42 ;; splotch, the definitions for constants and 1-valued functions must
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
43 ;; precede the references.
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
44 ;; * Use the macro `1value' in your Lisp code to mark spots where the local
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
45 ;; code environment causes a function or variable to always have the same
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
46 ;; value, but the function or variable is not intrinsically 1-valued.
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
47 ;; * Use the macro `noreturn' in your Lisp code to mark function calls that
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
48 ;; never return, because of the local code environment, even though the
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
49 ;; function being called is capable of returning in other cases.
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
50
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
51 ;; Problems:
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
52 ;; * To detect different values, we store the form's result in a vector and
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
53 ;; compare the next result using `equal'. We don't copy the form's
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
54 ;; result, so if caller alters it (`setcar', etc.) we'll think the next
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
55 ;; call has the same value! Also, equal thinks two strings are the same
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
56 ;; if they differ only in properties.
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
57 ;; * Because we have only a "1value" class and no "always nil" class, we have
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
58 ;; to treat as potentially 1-valued any `and' whose last term is 1-valued,
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
59 ;; in case the last term is always nil. Example:
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
60 ;; (and (< (point) 1000) (forward-char 10))
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
61 ;; This form always returns nil. Similarly, `or', `if', and `cond' are
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
62 ;; treated as potentially 1-valued if all clauses are, in case those
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
63 ;; values are always nil. Unlike truly 1-valued functions, it is not an
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
64 ;; error if these "potentially" 1-valued forms actually return differing
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
65 ;; values.
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
66
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
67 (require 'edebug)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
68 (provide 'testcover)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
69
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
70
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
71 ;;;==========================================================================
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
72 ;;; User options
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
73 ;;;==========================================================================
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
74
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
75 (defgroup testcover nil
64031
c04d583fdac9 (testcover): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 63223
diff changeset
76 "Code-coverage tester."
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
77 :group 'lisp
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
78 :prefix "testcover-"
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
79 :version "21.1")
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
80
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
81 (defcustom testcover-constants
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
82 '(nil t emacs-build-time emacs-version emacs-major-version
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
83 emacs-minor-version)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
84 "Variables whose values never change. No brown splotch is shown for
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
85 these. This list is quite incomplete!"
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
86 :group 'testcover
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
87 :type '(repeat variable))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
88
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
89 (defcustom testcover-1value-functions
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
90 '(backward-char barf-if-buffer-read-only beginning-of-line
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
91 buffer-disable-undo buffer-enable-undo current-global-map
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
92 deactivate-mark delete-backward-char delete-char delete-region ding
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
93 forward-char function* insert insert-and-inherit kill-all-local-variables
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
94 kill-line kill-paragraph kill-region kill-sexp lambda
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
95 minibuffer-complete-and-exit narrow-to-region next-line push-mark
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
96 put-text-property run-hooks set-match-data signal
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
97 substitute-key-definition suppress-keymap undo use-local-map while widen
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
98 yank)
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
99 "Functions that always return the same value. No brown splotch is shown
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
100 for these. This list is quite incomplete! Notes: Nobody ever changes the
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
101 current global map. The macro `lambda' is self-evaluating, hence always
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
102 returns the same value (the function it defines may return varying values
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
103 when called)."
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
104 :group 'testcover
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
105 :type 'hook)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
106
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
107 (defcustom testcover-noreturn-functions
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
108 '(error noreturn throw signal)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
109 "Subset of `testcover-1value-functions' -- these never return. We mark
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
110 them as having returned nil just before calling them."
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
111 :group 'testcover
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
112 :type 'hook)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
113
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
114 (defcustom testcover-compose-functions
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
115 '(+ - * / = append length list make-keymap make-sparse-keymap
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
116 mapcar message propertize replace-regexp-in-string
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
117 run-with-idle-timer set-buffer-modified-p)
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
118 "Functions that are 1-valued if all their args are either constants or
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
119 calls to one of the `testcover-1value-functions', so if that's true then no
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
120 brown splotch is shown for these. This list is quite incomplete! Most
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
121 side-effect-free functions should be here."
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
122 :group 'testcover
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
123 :type 'hook)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
124
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
125 (defcustom testcover-progn-functions
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
126 '(define-key fset function goto-char mapc overlay-put progn
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
127 save-current-buffer save-excursion save-match-data
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
128 save-restriction save-selected-window save-window-excursion
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
129 set set-default set-marker-insertion-type setq setq-default
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
130 with-current-buffer with-output-to-temp-buffer with-syntax-table
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
131 with-temp-buffer with-temp-file with-temp-message with-timeout)
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
132 "Functions whose return value is the same as their last argument. No
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
133 brown splotch is shown for these if the last argument is a constant or a
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
134 call to one of the `testcover-1value-functions'. This list is probably
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
135 incomplete!"
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
136 :group 'testcover
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
137 :type 'hook)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
138
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
139 (defcustom testcover-prog1-functions
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
140 '(prog1 unwind-protect)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
141 "Functions whose return value is the same as their first argument. No
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
142 brown splotch is shown for these if the first argument is a constant or a
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
143 call to one of the `testcover-1value-functions'."
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
144 :group 'testcover
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
145 :type 'hook)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
146
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
147 (defcustom testcover-potentially-1value-functions
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
148 '(add-hook and beep or remove-hook unless when)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
149 "Functions that are potentially 1-valued. No brown splotch if actually
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 56458
diff changeset
150 1-valued, no error if actually multi-valued."
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 56458
diff changeset
151 :group 'testcover)
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
152
63223
c77bef56f877 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-387
Miles Bader <miles@gnu.org>
parents: 62531
diff changeset
153 (defface testcover-nohits
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
154 '((t (:background "DeepPink2")))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
155 "Face for forms that had no hits during coverage test"
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
156 :group 'testcover)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
157
63223
c77bef56f877 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-387
Miles Bader <miles@gnu.org>
parents: 62531
diff changeset
158 (defface testcover-1value
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
159 '((t (:background "Wheat2")))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
160 "Face for forms that always produced the same value during coverage test"
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
161 :group 'testcover)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
162
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
163
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
164 ;;;=========================================================================
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
165 ;;; Other variables
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
166 ;;;=========================================================================
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
167
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
168 (defvar testcover-module-constants nil
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
169 "Symbols declared with defconst in the last file processed by
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
170 `testcover-start'.")
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
171
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
172 (defvar testcover-module-1value-functions nil
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
173 "Symbols declared with defun in the last file processed by
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
174 `testcover-start', whose functions should always return the same value.")
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
175
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
176 (defvar testcover-module-potentially-1value-functions nil
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
177 "Symbols declared with defun in the last file processed by
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
178 `testcover-start', whose functions might always return the same value.")
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
179
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
180 (defvar testcover-vector nil
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
181 "Locally bound to coverage vector for function in progress.")
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
182
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
183
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
184 ;;;=========================================================================
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
185 ;;; Add instrumentation to your module
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
186 ;;;=========================================================================
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
187
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
188 (defun testcover-start (filename &optional byte-compile)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
189 "Uses edebug to instrument all macros and functions in FILENAME, then
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
190 changes the instrumentation from edebug to testcover--much faster, no
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
191 problems with type-ahead or post-command-hook, etc. If BYTE-COMPILE is
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
192 non-nil, byte-compiles each function after instrumenting."
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
193 (interactive "f")
53196
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
194 (let ((buf (find-file filename))
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
195 (load-read-function 'testcover-read)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
196 (edebug-all-defs t))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
197 (setq edebug-form-data nil
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
198 testcover-module-constants nil
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
199 testcover-module-1value-functions nil)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
200 (eval-buffer buf))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
201 (when byte-compile
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
202 (dolist (x (reverse edebug-form-data))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
203 (when (fboundp (car x))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
204 (message "Compiling %s..." (car x))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
205 (byte-compile (car x))))))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
206
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
207 ;;;###autoload
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
208 (defun testcover-this-defun ()
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
209 "Start coverage on function under point."
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
210 (interactive)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
211 (let* ((edebug-all-defs t)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
212 (x (symbol-function (eval-defun nil))))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
213 (testcover-reinstrument x)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
214 x))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
215
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
216 (defun testcover-read (&optional stream)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
217 "Read a form using edebug, changing edebug callbacks to testcover callbacks."
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
218 (let ((x (edebug-read stream)))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
219 (testcover-reinstrument x)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
220 x))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
221
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
222 (defun testcover-reinstrument (form)
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
223 "Reinstruments FORM to use testcover instead of edebug. This
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
224 function modifies the list that FORM points to. Result is nil if
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
225 FORM should return multiple vlues, t if should always return same
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
226 value, 'maybe if either is acceptable."
53196
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
227 (let ((fun (car-safe form))
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
228 id val)
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
229 (cond
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
230 ((not fun) ;Atom
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
231 (when (or (not (symbolp form))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
232 (memq form testcover-constants)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
233 (memq form testcover-module-constants))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
234 t))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
235 ((consp fun) ;Embedded list
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
236 (testcover-reinstrument fun)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
237 (testcover-reinstrument-list (cdr form))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
238 nil)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
239 ((or (memq fun testcover-1value-functions)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
240 (memq fun testcover-module-1value-functions))
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
241 ;;Should always return same value
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
242 (testcover-reinstrument-list (cdr form))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
243 t)
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
244 ((or (memq fun testcover-potentially-1value-functions)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
245 (memq fun testcover-module-potentially-1value-functions))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
246 ;;Might always return same value
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
247 (testcover-reinstrument-list (cdr form))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
248 'maybe)
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
249 ((memq fun testcover-progn-functions)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
250 ;;1-valued if last argument is
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
251 (testcover-reinstrument-list (cdr form)))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
252 ((memq fun testcover-prog1-functions)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
253 ;;1-valued if first argument is
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
254 (testcover-reinstrument-list (cddr form))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
255 (testcover-reinstrument (cadr form)))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
256 ((memq fun testcover-compose-functions)
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
257 ;;1-valued if all arguments are. Potentially 1-valued if all
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
258 ;;arguments are either definitely or potentially.
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
259 (testcover-reinstrument-compose (cdr form) 'testcover-reinstrument))
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
260 ((eq fun 'edebug-enter)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
261 ;;(edebug-enter 'SYM ARGS #'(lambda nil FORMS))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
262 ;; => (testcover-enter 'SYM #'(lambda nil FORMS))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
263 (setcar form 'testcover-enter)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
264 (setcdr (nthcdr 1 form) (nthcdr 3 form))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
265 (let ((testcover-vector (get (cadr (cadr form)) 'edebug-coverage)))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
266 (testcover-reinstrument-list (nthcdr 2 (cadr (nth 2 form))))))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
267 ((eq fun 'edebug-after)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
268 ;;(edebug-after (edebug-before XXX) YYY FORM)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
269 ;; => (testcover-after YYY FORM), mark XXX as ok-coverage
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
270 (unless (eq (cadr form) 0)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
271 (aset testcover-vector (cadr (cadr form)) 'ok-coverage))
53196
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
272 (setq id (nth 2 form))
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
273 (setcdr form (nthcdr 2 form))
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
274 (setq val (testcover-reinstrument (nth 2 form)))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
275 (if (eq val t)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
276 (setcar form 'testcover-1value)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
277 (setcar form 'testcover-after))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
278 (when val
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
279 ;;1-valued or potentially 1-valued
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
280 (aset testcover-vector id '1value))
53196
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
281 (cond
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
282 ((memq (car-safe (nth 2 form)) testcover-noreturn-functions)
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
283 ;;This function won't return, so set the value in advance
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
284 ;;(edebug-after (edebug-before XXX) YYY FORM)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
285 ;; => (progn (edebug-after YYY nil) FORM)
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
286 (setcar (cdr form) `(,(car form) ,id nil))
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
287 (setcar form 'progn)
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
288 (aset testcover-vector id '1value)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
289 (setq val t))
53196
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
290 ((eq (car-safe (nth 2 form)) '1value)
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
291 ;;This function is always supposed to return the same value
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
292 (setq val t)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
293 (aset testcover-vector id '1value)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
294 (setcar form 'testcover-1value)))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
295 val)
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
296 ((eq fun 'defun)
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
297 (setq val (testcover-reinstrument-list (nthcdr 3 form)))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
298 (when (eq val t)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
299 (push (cadr form) testcover-module-1value-functions))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
300 (when (eq val 'maybe)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
301 (push (cadr form) testcover-module-potentially-1value-functions)))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
302 ((memq fun '(defconst defcustom))
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
303 ;;Define this symbol as 1-valued
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
304 (push (cadr form) testcover-module-constants)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
305 (testcover-reinstrument-list (cddr form)))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
306 ((memq fun '(dotimes dolist))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
307 ;;Always returns third value from SPEC
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
308 (testcover-reinstrument-list (cddr form))
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
309 (setq val (testcover-reinstrument-list (cadr form)))
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
310 (if (nth 2 (cadr form))
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
311 val
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
312 ;;No third value, always returns nil
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
313 t))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
314 ((memq fun '(let let*))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
315 ;;Special parsing for second argument
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
316 (mapc 'testcover-reinstrument-list (cadr form))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
317 (testcover-reinstrument-list (cddr form)))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
318 ((eq fun 'if)
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
319 ;;Potentially 1-valued if both THEN and ELSE clauses are
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
320 (testcover-reinstrument (cadr form))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
321 (let ((then (testcover-reinstrument (nth 2 form)))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
322 (else (testcover-reinstrument-list (nthcdr 3 form))))
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
323 (and then else 'maybe)))
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
324 ((eq fun 'cond)
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
325 ;;Potentially 1-valued if all clauses are
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
326 (when (testcover-reinstrument-compose (cdr form)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
327 'testcover-reinstrument-list)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
328 'maybe))
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
329 ((eq fun 'condition-case)
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
330 ;;Potentially 1-valued if BODYFORM is and all HANDLERS are
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
331 (let ((body (testcover-reinstrument (nth 2 form)))
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
332 (errs (testcover-reinstrument-compose
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
333 (mapcar #'cdr (nthcdr 3 form))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
334 'testcover-reinstrument-list)))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
335 (and body errs 'maybe)))
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
336 ((eq fun 'quote)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
337 ;;Don't reinstrument what's inside!
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
338 ;;This doesn't apply within a backquote
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
339 t)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
340 ((eq fun '\`)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
341 ;;Quotes are not special within backquotes
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
342 (let ((testcover-1value-functions
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
343 (cons 'quote testcover-1value-functions)))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
344 (testcover-reinstrument (cadr form))))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
345 ((eq fun '\,)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
346 ;;In commas inside backquotes, quotes are special again
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
347 (let ((testcover-1value-functions
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
348 (remq 'quote testcover-1value-functions)))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
349 (testcover-reinstrument (cadr form))))
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
350 ((eq fun '1value)
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
351 ;;Hack - pretend the arg is 1-valued here
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
352 (cond
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
353 ((symbolp (cadr form))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
354 ;;A pseudoconstant variable
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
355 t)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
356 ((and (eq (car (cadr form)) 'edebug-after)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
357 (symbolp (nth 3 (cadr form))))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
358 ;;Reference to pseudoconstant
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
359 (aset testcover-vector (nth 2 (cadr form)) '1value)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
360 (setcar (cdr form) `(testcover-1value ,(nth 2 (cadr form))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
361 ,(nth 3 (cadr form))))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
362 t)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
363 (t
53196
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
364 (if (eq (car (cadr form)) 'edebug-after)
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
365 (setq id (car (nth 3 (cadr form))))
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
366 (setq id (car (cadr form))))
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
367 (let ((testcover-1value-functions
53196
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
368 (cons id testcover-1value-functions)))
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
369 (testcover-reinstrument (cadr form))))))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
370 ((eq fun 'noreturn)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
371 ;;Hack - pretend the arg has no return
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
372 (cond
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
373 ((symbolp (cadr form))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
374 ;;A pseudoconstant variable
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
375 'maybe)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
376 ((and (eq (car (cadr form)) 'edebug-after)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
377 (symbolp (nth 3 (cadr form))))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
378 ;;Reference to pseudoconstant
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
379 (aset testcover-vector (nth 2 (cadr form)) '1value)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
380 (setcar (cdr form) `(progn (testcover-after ,(nth 2 (cadr form)) nil)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
381 ,(nth 3 (cadr form))))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
382 'maybe)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
383 (t
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
384 (if (eq (car (cadr form)) 'edebug-after)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
385 (setq id (car (nth 3 (cadr form))))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
386 (setq id (car (cadr form))))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
387 (let ((testcover-noreturn-functions
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
388 (cons id testcover-noreturn-functions)))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
389 (testcover-reinstrument (cadr form))))))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
390 ((and (eq fun 'apply)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
391 (eq (car-safe (cadr form)) 'quote)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
392 (symbolp (cadr (cadr form))))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
393 ;;Apply of a constant symbol. Process as 1value or noreturn
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
394 ;;depending on symbol.
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
395 (setq fun (cons (cadr (cadr form)) (cddr form))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
396 val (testcover-reinstrument fun))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
397 (setcdr (cdr form) (cdr fun))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
398 val)
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
399 (t ;Some other function or weird thing
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
400 (testcover-reinstrument-list (cdr form))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
401 nil))))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
402
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
403 (defun testcover-reinstrument-list (list)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
404 "Reinstruments each form in LIST to use testcover instead of edebug.
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
405 This function modifies the forms in LIST. Result is `testcover-reinstrument's
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
406 value for the last form in LIST. If the LIST is empty, its evaluation will
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
407 always be nil, so we return t for 1-valued."
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
408 (let ((result t))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
409 (while (consp list)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
410 (setq result (testcover-reinstrument (pop list))))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
411 result))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
412
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
413 (defun testcover-reinstrument-compose (list fun)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
414 "For a compositional function, the result is 1-valued if all
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
415 arguments are, potentially 1-valued if all arguments are either
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
416 definitely or potentially 1-valued, and multi-valued otherwise.
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
417 FUN should be `testcover-reinstrument' for compositional functions,
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
418 `testcover-reinstrument-list' for clauses in a `cond'."
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
419 (let ((result t))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
420 (mapc #'(lambda (x)
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
421 (setq x (funcall fun x))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
422 (cond
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
423 ((eq result t)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
424 (setq result x))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
425 ((eq result 'maybe)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
426 (when (not x)
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
427 (setq result nil)))))
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
428 list)
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
429 result))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
430
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
431 (defun testcover-end (buffer)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
432 "Turn off instrumentation of all macros and functions in FILENAME."
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
433 (interactive "b")
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
434 (let ((buf (find-file-noselect buffer)))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
435 (eval-buffer buf t)))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
436
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
437
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
438 ;;;=========================================================================
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
439 ;;; Accumulate coverage data
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
440 ;;;=========================================================================
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
441
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
442 (defun testcover-enter (testcover-sym testcover-fun)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
443 "Internal function for coverage testing. Invokes TESTCOVER-FUN while
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
444 binding `testcover-vector' to the code-coverage vector for TESTCOVER-SYM
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
445 \(the name of the current function)."
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
446 (let ((testcover-vector (get testcover-sym 'edebug-coverage)))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
447 (funcall testcover-fun)))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
448
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
449 (defun testcover-after (idx val)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
450 "Internal function for coverage testing. Returns VAL after installing it in
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
451 `testcover-vector' at offset IDX."
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
452 (cond
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
453 ((eq (aref testcover-vector idx) 'unknown)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
454 (aset testcover-vector idx val))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
455 ((not (equal (aref testcover-vector idx) val))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
456 (aset testcover-vector idx 'ok-coverage)))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
457 val)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
458
53196
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
459 (defun testcover-1value (idx val)
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
460 "Internal function for coverage testing. Returns VAL after installing it in
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
461 `testcover-vector' at offset IDX. Error if FORM does not always return the
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
462 same value during coverage testing."
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
463 (cond
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
464 ((eq (aref testcover-vector idx) '1value)
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
465 (aset testcover-vector idx (cons '1value val)))
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
466 ((not (and (eq (car-safe (aref testcover-vector idx)) '1value)
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
467 (equal (cdr (aref testcover-vector idx)) val)))
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
468 (error "Value of form marked with `1value' does vary: %s" val)))
53196
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
469 val)
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
470
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
471
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
472
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
473 ;;;=========================================================================
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
474 ;;; Display the coverage data as color splotches on your code.
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
475 ;;;=========================================================================
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
476
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
477 (defun testcover-mark (def)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
478 "Marks one DEF (a function or macro symbol) to highlight its contained forms
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
479 that did not get completely tested during coverage tests.
63223
c77bef56f877 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-387
Miles Bader <miles@gnu.org>
parents: 62531
diff changeset
480 A marking with the face `testcover-nohits' (default = red) indicates that the
c77bef56f877 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-387
Miles Bader <miles@gnu.org>
parents: 62531
diff changeset
481 form was never evaluated. A marking using the `testcover-1value' face
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
482 \(default = tan) indicates that the form always evaluated to the same value.
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
483 The forms throw, error, and signal are not marked. They do not return and
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
484 would always get a red mark. Some forms that always return the same
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
485 value (e.g., setq of a constant), always get a tan mark that can't be
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
486 eliminated by adding more test cases."
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
487 (let* ((data (get def 'edebug))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
488 (def-mark (car data))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
489 (points (nth 2 data))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
490 (len (length points))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
491 (changed (buffer-modified-p))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
492 (coverage (get def 'edebug-coverage))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
493 ov j item)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
494 (or (and def-mark points coverage)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
495 (error "Missing edebug data for function %s" def))
56458
71315b2afe5b Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 53196
diff changeset
496 (when (> len 0)
50328
dda666362e84 No error when marking functions whose body just returns a constant. Handle
Jonathan Yavner <jyavner@member.fsf.org>
parents: 47667
diff changeset
497 (set-buffer (marker-buffer def-mark))
dda666362e84 No error when marking functions whose body just returns a constant. Handle
Jonathan Yavner <jyavner@member.fsf.org>
parents: 47667
diff changeset
498 (mapc 'delete-overlay
dda666362e84 No error when marking functions whose body just returns a constant. Handle
Jonathan Yavner <jyavner@member.fsf.org>
parents: 47667
diff changeset
499 (overlays-in def-mark (+ def-mark (aref points (1- len)) 1)))
dda666362e84 No error when marking functions whose body just returns a constant. Handle
Jonathan Yavner <jyavner@member.fsf.org>
parents: 47667
diff changeset
500 (while (> len 0)
dda666362e84 No error when marking functions whose body just returns a constant. Handle
Jonathan Yavner <jyavner@member.fsf.org>
parents: 47667
diff changeset
501 (setq len (1- len)
dda666362e84 No error when marking functions whose body just returns a constant. Handle
Jonathan Yavner <jyavner@member.fsf.org>
parents: 47667
diff changeset
502 data (aref coverage len))
dda666362e84 No error when marking functions whose body just returns a constant. Handle
Jonathan Yavner <jyavner@member.fsf.org>
parents: 47667
diff changeset
503 (when (and (not (eq data 'ok-coverage))
53196
b3327f1ed9e1 Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52401
diff changeset
504 (not (eq (car-safe data) '1value))
50328
dda666362e84 No error when marking functions whose body just returns a constant. Handle
Jonathan Yavner <jyavner@member.fsf.org>
parents: 47667
diff changeset
505 (setq j (+ def-mark (aref points len))))
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
506 (setq ov (make-overlay (1- j) j))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
507 (overlay-put ov 'face
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
508 (if (memq data '(unknown 1value))
63223
c77bef56f877 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-387
Miles Bader <miles@gnu.org>
parents: 62531
diff changeset
509 'testcover-nohits
c77bef56f877 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-387
Miles Bader <miles@gnu.org>
parents: 62531
diff changeset
510 'testcover-1value))))
50328
dda666362e84 No error when marking functions whose body just returns a constant. Handle
Jonathan Yavner <jyavner@member.fsf.org>
parents: 47667
diff changeset
511 (set-buffer-modified-p changed))))
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
512
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
513 (defun testcover-mark-all (&optional buffer)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
514 "Mark all forms in BUFFER that did not get completley tested during
50328
dda666362e84 No error when marking functions whose body just returns a constant. Handle
Jonathan Yavner <jyavner@member.fsf.org>
parents: 47667
diff changeset
515 coverage tests. This function creates many overlays."
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
516 (interactive "b")
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
517 (if buffer
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
518 (switch-to-buffer buffer))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
519 (goto-char 1)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
520 (dolist (x edebug-form-data)
50328
dda666362e84 No error when marking functions whose body just returns a constant. Handle
Jonathan Yavner <jyavner@member.fsf.org>
parents: 47667
diff changeset
521 (if (get (car x) 'edebug)
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
522 (testcover-mark (car x)))))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
523
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
524 (defun testcover-unmark-all (buffer)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
525 "Remove all overlays from FILENAME."
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
526 (interactive "b")
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
527 (condition-case nil
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
528 (progn
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
529 (set-buffer buffer)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
530 (mapc 'delete-overlay (overlays-in 1 (buffer-size))))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
531 (error nil))) ;Ignore "No such buffer" errors
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
532
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
533 (defun testcover-next-mark ()
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
534 "Moves point to next line in current buffer that has a splotch."
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
535 (interactive)
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
536 (goto-char (next-overlay-change (point)))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
537 (end-of-line))
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
538
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52135
diff changeset
539 ;;; arch-tag: 72324a4a-4a2e-4142-9249-cc56d6757588
47667
96b260e0ff3d New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff changeset
540 ;; testcover.el ends here.