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