%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
;ELC ;;; Compiled ;;; in Emacs version 25.2.1 ;;; with all optimizations. ;;; This file uses dynamic docstrings, first added in Emacs 19.29. ;;; This file does not contain utf-8 non-ASCII characters, ;;; and so can be loaded in Emacs versions earlier than 23. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (byte-code "\300\301!\210\302\303!\210\304\303\305\306\307\310\311\312\313\314& \210\315\316\317\320\321DD\322\307\303\323\324&\210\315\325\317\320\326DD\327\307\303\323\330&\210\315\331\317\320\332DD\333\307\303\323\334&\210\315\335\317\320\336DD\337\307\303\323\340&\210\315\341\317\320\342DD\343\307\303\323\344&\210\315\345\317\320\346DD\347\307\303\323\350&\210\315\351\317\320\352DD\353\307\303\323\354&\210\355\356\357\360\307\303%\210\355\361\362\363\307\303%\207" [require edebug provide testcover custom-declare-group nil "Code-coverage tester." :group lisp :prefix "testcover-" :version "21.1" custom-declare-variable testcover-constants funcall function #[0 "\300\207" [(nil t emacs-build-time emacs-version emacs-major-version emacs-minor-version)] 1] "Variables whose values never change. No brown splotch is shown for\nthese. This list is quite incomplete!" :type (repeat variable) testcover-1value-functions #[0 "\300\207" [(backward-char barf-if-buffer-read-only beginning-of-line buffer-disable-undo buffer-enable-undo current-global-map deactivate-mark delete-backward-char delete-char delete-region ding forward-char function* insert insert-and-inherit kill-all-local-variables kill-line kill-paragraph kill-region kill-sexp lambda minibuffer-complete-and-exit narrow-to-region next-line push-mark put-text-property run-hooks set-match-data signal substitute-key-definition suppress-keymap undo use-local-map while widen yank)] 1] "Functions that always return the same value. No brown splotch is shown\nfor these. This list is quite incomplete! Notes: Nobody ever changes the\ncurrent global map. The macro `lambda' is self-evaluating, hence always\nreturns the same value (the function it defines may return varying values\nwhen called)." (repeat symbol) testcover-noreturn-functions #[0 "\300\207" [(error noreturn throw signal)] 1] "Subset of `testcover-1value-functions' -- these never return. We mark\nthem as having returned nil just before calling them." (repeat symbol) testcover-compose-functions #[0 "\300\207" [(+ - * / = append length list make-keymap make-sparse-keymap mapcar message propertize replace-regexp-in-string run-with-idle-timer set-buffer-modified-p)] 1] "Functions that are 1-valued if all their args are either constants or\ncalls to one of the `testcover-1value-functions', so if that's true then no\nbrown splotch is shown for these. This list is quite incomplete! Most\nside-effect-free functions should be here." (repeat symbol) testcover-progn-functions #[0 "\300\207" [(define-key fset function goto-char mapc overlay-put progn save-current-buffer save-excursion save-match-data save-restriction save-selected-window save-window-excursion set set-default set-marker-insertion-type setq setq-default with-current-buffer with-output-to-temp-buffer with-syntax-table with-temp-buffer with-temp-file with-temp-message with-timeout)] 1] "Functions whose return value is the same as their last argument. No\nbrown splotch is shown for these if the last argument is a constant or a\ncall to one of the `testcover-1value-functions'. This list is probably\nincomplete!" (repeat symbol) testcover-prog1-functions #[0 "\300\207" [(prog1 unwind-protect)] 1] "Functions whose return value is the same as their first argument. No\nbrown splotch is shown for these if the first argument is a constant or a\ncall to one of the `testcover-1value-functions'." (repeat symbol) testcover-potentially-1value-functions #[0 "\300\207" [(add-hook and beep or remove-hook unless when)] 1] "Functions that are potentially 1-valued. No brown splotch if actually\n1-valued, no error if actually multi-valued." (repeat symbol) custom-declare-face testcover-nohits ((t (:background "DeepPink2"))) "Face for forms that had no hits during coverage test" testcover-1value ((t (:background "Wheat2"))) "Face for forms that always produced the same value during coverage test"] 10) #@81 Symbols declared with defconst in the last file processed by `testcover-start'. (defvar testcover-module-constants nil (#$ . 4332)) #@131 Symbols declared with defun in the last file processed by `testcover-start', whose functions should always return the same value. (defvar testcover-module-1value-functions nil (#$ . 4471)) #@130 Symbols declared with defun in the last file processed by `testcover-start', whose functions might always return the same value. (defvar testcover-module-potentially-1value-functions nil (#$ . 4667)) #@60 Locally bound to coverage vector for function in progress. (defvar testcover-vector nil (#$ . 4873)) #@308 Uses edebug to instrument all macros and functions in FILENAME, then changes the instrumentation from edebug to testcover--much faster, no problems with type-ahead or post-command-hook, etc. If BYTE-COMPILE is non-nil, byte-compiles each function after instrumenting. (fn FILENAME &optional BYTE-COMPILE) (defalias 'testcover-start #[513 "\304!\305\306\307\310B\311\312$\210\312\211\312\313!\210)\210\211\205B \314 !\211\205@ \211@\315@!\2039 \316\317@\"\210\320@!\210A\266\202\202! \262\207" [load-read-function edebug-form-data testcover-module-constants testcover-module-1value-functions find-file advice--add-function :around #[0 "\300\301!\207" [default-value load-read-function] 2] #[257 "\300\301\"\207" [set-default load-read-function] 4 "\n\n(fn GV--VAL)"] testcover--read nil eval-buffer reverse fboundp message "Compiling %s..." byte-compile] 9 (#$ . 4981) "fStart covering file: "]) #@41 Start coverage on function under point. (defalias 'testcover-this-defun #[0 "\301\302\303!K)\304!\210\211\207" [edebug-all-defs t eval-defun nil testcover-reinstrument] 3 (#$ . 5897) nil]) #@105 Read a form using edebug, changing edebug callbacks to testcover callbacks. (fn ORIG &optional STREAM) (defalias 'testcover--read #[513 "\211\204 \262\211p=\203 \302\303 )\304!\210\211\207\206 \305!\207" [standard-input edebug-all-defs t edebug-read-and-maybe-wrap-form testcover-reinstrument read] 5 (#$ . 6095)]) #@246 Reinstruments FORM to use testcover instead of edebug. This function modifies the list that FORM points to. Result is nil if FORM should return multiple values, t if should always return same value, `maybe' if either is acceptable. (fn FORM) (defalias 'testcover-reinstrument #[257 "\211\242\306\211\204 9\203 >\204 >\205>\307\202>:\203/ \310!\210\311A!\210\306\202>\n>\204; >\203D \311A!\210\307\202>\f>\204P >\203Y \311A!\210\312\202>*>\203g \311A!\202>+>\203| \311AA!\210\310A@!\202>,>\203\213 \313A\310\"\202>\314=\203\262 \315\240\210A\316\233\241\210A@A@\317N-\311\3208A@AA!)\202>\321=\2032A@\322=\204\312 -A@A@\323I\210\3208\262\211AA\241\210\310\3208!\262\307=\203\347 \324\202\350 \325\240\210\211\203\364 -\326I\210\3208\242.>\203A@\327BB\240\210\330\240\210-\326I\210\307\262\202.\3208\242\326=\203.\307\262-\326I\210\324\240\210\211\202>\331=\203[\311\316\233!\262\211\307=\203KA@B\211\312=\205>A@ B\211\202>\332>\203oA@ B\311AA!\202>\333>\203\222\311AA!\210\311A@!\262\320A@8\203\216\211\202>\307\202>\334>\203\247\335\311A@\"\210\311AA!\202>\336=\203\314\310A@!\210\310\3208!\311\316\233!\205\307\211\205\307\312\266\202\202>\337=\203\336\313A\311\"\205>\312\202>\340=\203\310\3208!\313\341\342\316\233\"\311\"\205\374\211\205\374\312\266\202\202>\343=\203\307\202>\344=\203\343\nB\310A@!)\202>\345=\2032\346\343\n\"\310A@!)\202>\326=\203\231A@9\203C\307\202>A@@\321=\203u\316A@89\203u-\320A@8\326I\210A\324\320A@8\316A@8E\240\210\307\202>A@@\321=\203\206\316A@8\202\211A@@\262\nB\310A@!)\202>\347=\203A@9\203\252\312\202>A@@\321=\203\340\316A@89\203\340-\320A@8\326I\210A\330\325\320A@8\350BB\316A@8E\240\210\312\202>A@@\321=\203\361\316A@8\202\364A@@\262.B.\310A@!)\202>\351=\2038A@\242\343=\2038A@A@9\2038A@A@AAB\262\310!\262AA\241\210\211\202>\311A!\210\306\207" [testcover-constants testcover-module-constants testcover-1value-functions testcover-module-1value-functions testcover-potentially-1value-functions testcover-module-potentially-1value-functions nil t testcover-reinstrument testcover-reinstrument-list maybe testcover-reinstrument-compose edebug-enter testcover-enter 3 edebug-coverage 2 edebug-after 0 ok-coverage testcover-1value testcover-after 1value (nil) progn defun (defconst defcustom) (dotimes dolist) (let let*) mapc if cond condition-case mapcar cdr quote \` \, remq noreturn (nil) apply testcover-progn-functions testcover-prog1-functions testcover-compose-functions testcover-vector testcover-noreturn-functions] 10 (#$ . 6427)]) #@279 Reinstruments each form in LIST to use testcover instead of edebug. This function modifies the forms in LIST. Result is `testcover-reinstrument's value for the last form in LIST. If the LIST is empty, its evaluation will always be nil, so we return t for 1-valued. (fn LIST) (defalias 'testcover-reinstrument-list #[257 "\300:\203 \301\211A\262\242!\262\202 \211\207" [t testcover-reinstrument] 5 (#$ . 9132)]) #@329 For a compositional function, the result is 1-valued if all arguments are, potentially 1-valued if all arguments are either definitely or potentially 1-valued, and multi-valued otherwise. FUN should be `testcover-reinstrument' for compositional functions, `testcover-reinstrument-list' for clauses in a `cond'. (fn LIST FUN) (defalias 'testcover-reinstrument-compose #[514 "\300C\301\302\303\304\305\306\"\307\"\310\311%\"\210\211\242\207" [t mapc make-byte-code 257 "\300!\262\301\242\302=\203 \301\240\207\301\242\303=\205 \211?\205 \301\304\240\207" vconcat vector [t maybe nil] 3 "\n\n(fn X)"] 11 (#$ . 9559)]) #@82 Turn off instrumentation of all macros and functions in FILENAME. (fn FILENAME) (defalias 'testcover-end #[257 "\300!\301!\207" [find-file-noselect eval-buffer] 4 (#$ . 10194) "fStop covering file: "]) #@213 Internal function for coverage testing. Invokes TESTCOVER-FUN while binding `testcover-vector' to the code-coverage vector for TESTCOVER-SYM (the name of the current function). (fn TESTCOVER-SYM TESTCOVER-FUN) (defalias 'testcover-enter #[514 "\301N\211 )\207" [testcover-vector edebug-coverage] 4 (#$ . 10406)]) #@125 Internal function for coverage testing. Returns VAL after installing it in `testcover-vector' at offset IDX. (fn IDX VAL) (defalias 'testcover-after #[514 "H\301=\203 I\210\202 H\232\204 \302I\210\207" [testcover-vector unknown ok-coverage] 5 (#$ . 10730)]) (put 'testcover-after 'gv-expander #[771 "\300\301\302\303\304\305 \"\306\"\307\310%\"\207" [gv-get make-byte-code 514 "\300\302\303\304\305\306\301 #\307\"\310\311%\"\207" vconcat vector [make-byte-code 257 "\303\304\300\301E\302!E\207" vconcat vector [progn testcover-after] 5 "\n\n(fn STORE)"] 12 "\n\n(fn GETTER SETTER)"] 12 "\n\n(fn DO IDX VAL)"]) #@203 Internal function for coverage testing. Returns VAL after installing it in `testcover-vector' at offset IDX. Error if FORM does not always return the same value during coverage testing. (fn IDX VAL) (defalias 'testcover-1value #[514 "H\301=\203 \301BI\210\202) H\242\301=\203$ HA\232\204) \302\303\"\210\207" [testcover-vector 1value error "Value of form marked with `1value' does vary: %s"] 6 (#$ . 11372)]) #@626 Marks one DEF (a function or macro symbol) to highlight its contained forms that did not get completely tested during coverage tests. A marking with the face `testcover-nohits' (default = red) indicates that the form was never evaluated. A marking using the `testcover-1value' face (default = tan) indicates that the form always evaluated to the same value. The forms throw, error, and signal are not marked. They do not return and would always get a red mark. Some forms that always return the same value (e.g., setq of a constant), always get a tan mark that can't be eliminated by adding more test cases. (fn DEF) (defalias 'testcover-mark #[257 "\211\300N\211@\3018\211G\302 \303N\304\211\203 \203 \204$ \305\306\n\"\210\307V\205\215 \310!q\210\311\312\313 \314SH\315#\"\"\210\307V\203\212 S\262H\262\316=\204C \242\317=\204C H\\\211\262\203C \320S\"\262\321\322\n\323>\203\204 \324\202\205 \325#\210\202C \326!\207" [edebug 2 buffer-modified-p edebug-coverage nil error "Missing edebug data for function %s" 0 marker-buffer mapc delete-overlay overlays-in + 1 ok-coverage 1value make-overlay overlay-put face (unknown 1value) testcover-nohits testcover-1value set-buffer-modified-p] 17 (#$ . 11803)]) #@145 Mark all forms in BUFFER that did not get completely tested during coverage tests. This function creates many overlays. (fn &optional BUFFER) (defalias 'testcover-mark-all #[256 "\211\203 \301!\210\302b\210\211\205% \211@\211@\303N\203 \304@!\210A\266\202\202\f \207" [edebug-form-data switch-to-buffer 1 edebug testcover-mark] 5 (#$ . 13066) "bMark forms in buffer: "]) #@49 Remove all overlays from FILENAME. (fn BUFFER) (defalias 'testcover-unmark-all #[257 "\3001 \211q\210\301\302\303\304\305 \"\"0\207\210\306\207" [(error) mapc delete-overlay overlays-in 1 buffer-size nil] 6 (#$ . 13451) "bUnmark forms in buffer: "]) #@64 Moves point to next line in current buffer that has a splotch. (defalias 'testcover-next-mark #[0 "\300`!b\210\301\207" [next-overlay-change nil] 2 (#$ . 13709) nil])