Mercurial > emacs
annotate lisp/emacs-lisp/testcover.el @ 102911:e25ee95fb5b0
*** empty log message ***
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Thu, 09 Apr 2009 16:43:51 +0000 |
parents | a9dc0e7c3f2b |
children | 1d1d5d9bd884 |
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 |
100908 | 3 ;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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 |
94655
90a2847062be
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
11 ;; GNU Emacs is free software: you can redistribute it and/or modify |
47667
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 |
94655
90a2847062be
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
13 ;; the Free Software Foundation, either version 3 of the License, or |
90a2847062be
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
14 ;; (at your option) any later version. |
47667
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 |
94655
90a2847062be
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
23 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
24 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
25 ;;; Commentary: |
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 ;; * 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
|
28 ;; * 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
|
29 ;; 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
|
30 ;; 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
|
31 ;; evaluted to the same value. |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
32 ;; * 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
|
33 ;; that has a splotch. |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
34 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
35 ;; * 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
|
36 ;; 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
|
37 ;; * 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
|
38 ;; 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
|
39 ;; 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
|
40 ;; 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
|
41 ;; precede the references. |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
42 ;; * 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
|
43 ;; 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
|
44 ;; 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
|
45 ;; * 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
|
46 ;; 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
|
47 ;; 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
|
48 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
49 ;; Problems: |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
50 ;; * 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
|
51 ;; 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
|
52 ;; 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
|
53 ;; 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
|
54 ;; if they differ only in properties. |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
55 ;; * 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
|
56 ;; 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
|
57 ;; 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
|
58 ;; (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
|
59 ;; 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
|
60 ;; 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
|
61 ;; 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
|
62 ;; 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
|
63 ;; values. |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
64 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
65 (require 'edebug) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
66 (provide 'testcover) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
67 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
68 |
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 ;;; User options |
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 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
73 (defgroup testcover nil |
64031
c04d583fdac9
(testcover): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents:
63223
diff
changeset
|
74 "Code-coverage tester." |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
75 :group 'lisp |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
76 :prefix "testcover-" |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
77 :version "21.1") |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
78 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
79 (defcustom testcover-constants |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
80 '(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
|
81 emacs-minor-version) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
82 "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
|
83 these. This list is quite incomplete!" |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
84 :group 'testcover |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
85 :type '(repeat variable)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
86 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
87 (defcustom testcover-1value-functions |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
88 '(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
|
89 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
|
90 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
|
91 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
|
92 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
|
93 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
|
94 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
|
95 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
|
96 yank) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
97 "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
|
98 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
|
99 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
|
100 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
|
101 when called)." |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
102 :group 'testcover |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
103 :type 'hook) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
104 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
105 (defcustom testcover-noreturn-functions |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
106 '(error noreturn throw signal) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
107 "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
|
108 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
|
109 :group 'testcover |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
110 :type 'hook) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
111 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
112 (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
|
113 '(+ - * / = 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
|
114 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
|
115 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
|
116 "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
|
117 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
|
118 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
|
119 side-effect-free functions should be here." |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
120 :group 'testcover |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
121 :type 'hook) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
122 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
123 (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
|
124 '(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
|
125 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
|
126 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
|
127 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
|
128 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
|
129 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
|
130 "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
|
131 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
|
132 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
|
133 incomplete!" |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
134 :group 'testcover |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
135 :type 'hook) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
136 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
137 (defcustom testcover-prog1-functions |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
138 '(prog1 unwind-protect) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
139 "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
|
140 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
|
141 call to one of the `testcover-1value-functions'." |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
142 :group 'testcover |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
143 :type 'hook) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
144 |
56458
71315b2afe5b
Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
53196
diff
changeset
|
145 (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
|
146 '(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
|
147 "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
|
148 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
|
149 :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
|
150 |
63223
c77bef56f877
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-387
Miles Bader <miles@gnu.org>
parents:
62531
diff
changeset
|
151 (defface testcover-nohits |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
152 '((t (:background "DeepPink2"))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
153 "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
|
154 :group 'testcover) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
155 |
63223
c77bef56f877
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-387
Miles Bader <miles@gnu.org>
parents:
62531
diff
changeset
|
156 (defface testcover-1value |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
157 '((t (:background "Wheat2"))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
158 "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
|
159 :group 'testcover) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
160 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
161 |
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 ;;; Other variables |
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 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
166 (defvar testcover-module-constants nil |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
167 "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
|
168 `testcover-start'.") |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
169 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
170 (defvar testcover-module-1value-functions nil |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
171 "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
|
172 `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
|
173 |
71315b2afe5b
Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
53196
diff
changeset
|
174 (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
|
175 "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
|
176 `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
|
177 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
178 (defvar testcover-vector nil |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
179 "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
|
180 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
181 |
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 ;;; Add instrumentation to your module |
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 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
186 (defun testcover-start (filename &optional byte-compile) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
187 "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
|
188 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
|
189 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
|
190 non-nil, byte-compiles each function after instrumenting." |
76705
e61171cf2862
(testcover-start, testcover-end, testcover-mark-all, testcover-unmark-all): Add
Eli Zaretskii <eliz@gnu.org>
parents:
75346
diff
changeset
|
191 (interactive "fStart covering file: ") |
53196
b3327f1ed9e1
Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
52401
diff
changeset
|
192 (let ((buf (find-file filename)) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
193 (load-read-function 'testcover-read) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
194 (edebug-all-defs t)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
195 (setq edebug-form-data nil |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
196 testcover-module-constants nil |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
197 testcover-module-1value-functions nil) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
198 (eval-buffer buf)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
199 (when byte-compile |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
200 (dolist (x (reverse edebug-form-data)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
201 (when (fboundp (car x)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
202 (message "Compiling %s..." (car x)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
203 (byte-compile (car x)))))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
204 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
205 ;;;###autoload |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
206 (defun testcover-this-defun () |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
207 "Start coverage on function under point." |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
208 (interactive) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
209 (let* ((edebug-all-defs t) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
210 (x (symbol-function (eval-defun nil)))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
211 (testcover-reinstrument x) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
212 x)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
213 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
214 (defun testcover-read (&optional stream) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
215 "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
|
216 (let ((x (edebug-read stream))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
217 (testcover-reinstrument x) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
218 x)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
219 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
220 (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
|
221 "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
|
222 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
|
223 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
|
224 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
|
225 (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
|
226 id val) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
227 (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
|
228 ((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
|
229 (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
|
230 (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
|
231 (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
|
232 t)) |
71315b2afe5b
Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
53196
diff
changeset
|
233 ((consp fun) ;Embedded list |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
234 (testcover-reinstrument fun) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
235 (testcover-reinstrument-list (cdr form)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
236 nil) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
237 ((or (memq fun testcover-1value-functions) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
238 (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
|
239 ;;Should always return same value |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
240 (testcover-reinstrument-list (cdr form)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
241 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
|
242 ((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
|
243 (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
|
244 ;;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
|
245 (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
|
246 'maybe) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
247 ((memq fun testcover-progn-functions) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
248 ;;1-valued if last argument is |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
249 (testcover-reinstrument-list (cdr form))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
250 ((memq fun testcover-prog1-functions) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
251 ;;1-valued if first argument is |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
252 (testcover-reinstrument-list (cddr form)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
253 (testcover-reinstrument (cadr form))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
254 ((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
|
255 ;;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
|
256 ;;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
|
257 (testcover-reinstrument-compose (cdr form) 'testcover-reinstrument)) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
258 ((eq fun 'edebug-enter) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
259 ;;(edebug-enter 'SYM ARGS #'(lambda nil FORMS)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
260 ;; => (testcover-enter 'SYM #'(lambda nil FORMS)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
261 (setcar form 'testcover-enter) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
262 (setcdr (nthcdr 1 form) (nthcdr 3 form)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
263 (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
|
264 (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
|
265 ((eq fun 'edebug-after) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
266 ;;(edebug-after (edebug-before XXX) YYY FORM) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
267 ;; => (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
|
268 (unless (eq (cadr form) 0) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
269 (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
|
270 (setq id (nth 2 form)) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
271 (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
|
272 (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
|
273 (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
|
274 (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
|
275 (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
|
276 (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
|
277 ;;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
|
278 (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
|
279 (cond |
b3327f1ed9e1
Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
52401
diff
changeset
|
280 ((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
|
281 ;;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
|
282 ;;(edebug-after (edebug-before XXX) YYY FORM) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
283 ;; => (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
|
284 (setcar (cdr form) `(,(car form) ,id nil)) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
285 (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
|
286 (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
|
287 (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
|
288 ((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
|
289 ;;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
|
290 (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
|
291 (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
|
292 (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
|
293 val) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
294 ((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
|
295 (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
|
296 (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
|
297 (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
|
298 (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
|
299 (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
|
300 ((memq fun '(defconst defcustom)) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
301 ;;Define this symbol as 1-valued |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
302 (push (cadr form) testcover-module-constants) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
303 (testcover-reinstrument-list (cddr form))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
304 ((memq fun '(dotimes dolist)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
305 ;;Always returns third value from SPEC |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
306 (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
|
307 (setq val (testcover-reinstrument-list (cadr form))) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
308 (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
|
309 val |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
310 ;;No third value, always returns nil |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
311 t)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
312 ((memq fun '(let let*)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
313 ;;Special parsing for second argument |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
314 (mapc 'testcover-reinstrument-list (cadr form)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
315 (testcover-reinstrument-list (cddr form))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
316 ((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
|
317 ;;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
|
318 (testcover-reinstrument (cadr form)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
319 (let ((then (testcover-reinstrument (nth 2 form))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
320 (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
|
321 (and then else 'maybe))) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
322 ((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
|
323 ;;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
|
324 (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
|
325 '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
|
326 'maybe)) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
327 ((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
|
328 ;;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
|
329 (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
|
330 (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
|
331 (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
|
332 '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
|
333 (and body errs 'maybe))) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
334 ((eq fun 'quote) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
335 ;;Don't reinstrument what's inside! |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
336 ;;This doesn't apply within a backquote |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
337 t) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
338 ((eq fun '\`) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
339 ;;Quotes are not special within backquotes |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
340 (let ((testcover-1value-functions |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
341 (cons 'quote testcover-1value-functions))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
342 (testcover-reinstrument (cadr form)))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
343 ((eq fun '\,) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
344 ;;In commas inside backquotes, quotes are special again |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
345 (let ((testcover-1value-functions |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
346 (remq 'quote testcover-1value-functions))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
347 (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
|
348 ((eq fun '1value) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
349 ;;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
|
350 (cond |
71315b2afe5b
Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
53196
diff
changeset
|
351 ((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
|
352 ;;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
|
353 t) |
71315b2afe5b
Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
53196
diff
changeset
|
354 ((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
|
355 (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
|
356 ;;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
|
357 (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
|
358 (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
|
359 ,(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
|
360 t) |
71315b2afe5b
Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
53196
diff
changeset
|
361 (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
|
362 (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
|
363 (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
|
364 (setq id (car (cadr form)))) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
365 (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
|
366 (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
|
367 (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
|
368 ((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
|
369 ;;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
|
370 (cond |
71315b2afe5b
Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
53196
diff
changeset
|
371 ((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
|
372 ;;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
|
373 'maybe) |
71315b2afe5b
Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
53196
diff
changeset
|
374 ((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
|
375 (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
|
376 ;;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
|
377 (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
|
378 (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
|
379 ,(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
|
380 'maybe) |
71315b2afe5b
Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
53196
diff
changeset
|
381 (t |
71315b2afe5b
Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
53196
diff
changeset
|
382 (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
|
383 (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
|
384 (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
|
385 (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
|
386 (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
|
387 (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
|
388 ((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
|
389 (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
|
390 (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
|
391 ;;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
|
392 ;;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
|
393 (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
|
394 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
|
395 (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
|
396 val) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
397 (t ;Some other function or weird thing |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
398 (testcover-reinstrument-list (cdr form)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
399 nil)))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
400 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
401 (defun testcover-reinstrument-list (list) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
402 "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
|
403 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
|
404 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
|
405 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
|
406 (let ((result t)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
407 (while (consp list) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
408 (setq result (testcover-reinstrument (pop list)))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
409 result)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
410 |
56458
71315b2afe5b
Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
53196
diff
changeset
|
411 (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
|
412 "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
|
413 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
|
414 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
|
415 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
|
416 `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
|
417 (let ((result t)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
418 (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
|
419 (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
|
420 (cond |
71315b2afe5b
Added some additional functions to the `1-valued', `compose', and progn groups.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
53196
diff
changeset
|
421 ((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
|
422 (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
|
423 ((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
|
424 (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
|
425 (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
|
426 list) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
427 result)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
428 |
76705
e61171cf2862
(testcover-start, testcover-end, testcover-mark-all, testcover-unmark-all): Add
Eli Zaretskii <eliz@gnu.org>
parents:
75346
diff
changeset
|
429 (defun testcover-end (filename) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
430 "Turn off instrumentation of all macros and functions in FILENAME." |
76705
e61171cf2862
(testcover-start, testcover-end, testcover-mark-all, testcover-unmark-all): Add
Eli Zaretskii <eliz@gnu.org>
parents:
75346
diff
changeset
|
431 (interactive "fStop covering file: ") |
e61171cf2862
(testcover-start, testcover-end, testcover-mark-all, testcover-unmark-all): Add
Eli Zaretskii <eliz@gnu.org>
parents:
75346
diff
changeset
|
432 (let ((buf (find-file-noselect filename))) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
433 (eval-buffer buf t))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
434 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
435 |
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 ;;; Accumulate coverage data |
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 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
440 (defun testcover-enter (testcover-sym testcover-fun) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
441 "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
|
442 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
|
443 \(the name of the current function)." |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
444 (let ((testcover-vector (get testcover-sym 'edebug-coverage))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
445 (funcall testcover-fun))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
446 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
447 (defun testcover-after (idx val) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
448 "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
|
449 `testcover-vector' at offset IDX." |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
450 (cond |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
451 ((eq (aref testcover-vector idx) 'unknown) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
452 (aset testcover-vector idx val)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
453 ((not (equal (aref testcover-vector idx) val)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
454 (aset testcover-vector idx 'ok-coverage))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
455 val) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
456 |
53196
b3327f1ed9e1
Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
52401
diff
changeset
|
457 (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
|
458 "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
|
459 `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
|
460 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
|
461 (cond |
b3327f1ed9e1
Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
52401
diff
changeset
|
462 ((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
|
463 (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
|
464 ((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
|
465 (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
|
466 (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
|
467 val) |
b3327f1ed9e1
Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
52401
diff
changeset
|
468 |
b3327f1ed9e1
Ensure that forms marked with `1value' actually always return the same value.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
52401
diff
changeset
|
469 |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
470 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
471 ;;;========================================================================= |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
472 ;;; 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
|
473 ;;;========================================================================= |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
474 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
475 (defun testcover-mark (def) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
476 "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
|
477 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
|
478 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
|
479 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
|
480 \(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
|
481 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
|
482 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
|
483 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
|
484 eliminated by adding more test cases." |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
485 (let* ((data (get def 'edebug)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
486 (def-mark (car data)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
487 (points (nth 2 data)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
488 (len (length points)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
489 (changed (buffer-modified-p)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
490 (coverage (get def 'edebug-coverage)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
491 ov j item) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
492 (or (and def-mark points coverage) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
493 (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
|
494 (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
|
495 (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
|
496 (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
|
497 (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
|
498 (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
|
499 (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
|
500 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
|
501 (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
|
502 (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
|
503 (setq j (+ def-mark (aref points len)))) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
504 (setq ov (make-overlay (1- j) j)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
505 (overlay-put ov 'face |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
506 (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
|
507 'testcover-nohits |
c77bef56f877
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-387
Miles Bader <miles@gnu.org>
parents:
62531
diff
changeset
|
508 '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
|
509 (set-buffer-modified-p changed)))) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
510 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
511 (defun testcover-mark-all (&optional buffer) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
512 "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
|
513 coverage tests. This function creates many overlays." |
76705
e61171cf2862
(testcover-start, testcover-end, testcover-mark-all, testcover-unmark-all): Add
Eli Zaretskii <eliz@gnu.org>
parents:
75346
diff
changeset
|
514 (interactive "bMark forms in buffer: ") |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
515 (if buffer |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
516 (switch-to-buffer buffer)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
517 (goto-char 1) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
518 (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
|
519 (if (get (car x) 'edebug) |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
520 (testcover-mark (car x))))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
521 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
522 (defun testcover-unmark-all (buffer) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
523 "Remove all overlays from FILENAME." |
76705
e61171cf2862
(testcover-start, testcover-end, testcover-mark-all, testcover-unmark-all): Add
Eli Zaretskii <eliz@gnu.org>
parents:
75346
diff
changeset
|
524 (interactive "bUnmark forms in buffer: ") |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
525 (condition-case nil |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
526 (progn |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
527 (set-buffer buffer) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
528 (mapc 'delete-overlay (overlays-in 1 (buffer-size)))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
529 (error nil))) ;Ignore "No such buffer" errors |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
530 |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
531 (defun testcover-next-mark () |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
532 "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
|
533 (interactive) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
534 (goto-char (next-overlay-change (point))) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
535 (end-of-line)) |
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
536 |
93975
1e3a407766b9
Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
79704
diff
changeset
|
537 ;; arch-tag: 72324a4a-4a2e-4142-9249-cc56d6757588 |
47667
96b260e0ff3d
New major mode "SES" for spreadsheets.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
diff
changeset
|
538 ;; testcover.el ends here. |