diff options
| author | Dave Love | 1999-10-19 13:42:46 +0000 |
|---|---|---|
| committer | Dave Love | 1999-10-19 13:42:46 +0000 |
| commit | 2ac5018110fe1be5ffed40a652040896c06b8bd7 (patch) | |
| tree | 7041aef4c1619563af508471e07574c36d6fd249 | |
| parent | 03d50ed616a80ce5cc3349f2895a458c8b91f95c (diff) | |
| download | emacs-2ac5018110fe1be5ffed40a652040896c06b8bd7.tar.gz emacs-2ac5018110fe1be5ffed40a652040896c06b8bd7.zip | |
Removed -- not now needed by edebug.
| -rw-r--r-- | lisp/emacs-lisp/eval-reg.el | 235 |
1 files changed, 0 insertions, 235 deletions
diff --git a/lisp/emacs-lisp/eval-reg.el b/lisp/emacs-lisp/eval-reg.el deleted file mode 100644 index 30f990a2757..00000000000 --- a/lisp/emacs-lisp/eval-reg.el +++ /dev/null | |||
| @@ -1,235 +0,0 @@ | |||
| 1 | ;;; eval-reg.el --- Redefine eval-region, and subrs that use it, in Lisp | ||
| 2 | |||
| 3 | ;; Copyright (C) 1994, 1996 Free Software Foundation, Inc. | ||
| 4 | |||
| 5 | ;; Author: Daniel LaLiberte <liberte@cs.uiuc.edu> | ||
| 6 | ;; Keywords: lisp | ||
| 7 | |||
| 8 | ;; This file is part of GNU Emacs. | ||
| 9 | |||
| 10 | ;; GNU Emacs is free software; you can redistribute it and/or modify | ||
| 11 | ;; it under the terms of the GNU General Public License as published by | ||
| 12 | ;; the Free Software Foundation; either version 2, or (at your option) | ||
| 13 | ;; any later version. | ||
| 14 | |||
| 15 | ;; GNU Emacs is distributed in the hope that it will be useful, | ||
| 16 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 17 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 18 | ;; GNU General Public License for more details. | ||
| 19 | |||
| 20 | ;; You should have received a copy of the GNU General Public License | ||
| 21 | ;; along with GNU Emacs; see the file COPYING. If not, write to | ||
| 22 | ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
| 23 | ;; Boston, MA 02111-1307, USA. | ||
| 24 | |||
| 25 | ;;; Commentary: | ||
| 26 | |||
| 27 | ;; eval-region, eval-buffer, and eval-current-buffer are redefined in | ||
| 28 | ;; Lisp to allow customizations by Lisp code. eval-region calls | ||
| 29 | ;; `read', `eval', and `prin1', so Lisp replacements of these | ||
| 30 | ;; functions will affect eval-region and anything else that calls it. | ||
| 31 | ;; eval-buffer and eval-current-buffer are redefined in Lisp to call | ||
| 32 | ;; eval-region on the buffer. | ||
| 33 | |||
| 34 | ;; Because of dynamic binding, all local variables are protected from | ||
| 35 | ;; being seen by eval by giving them funky names. But variables in | ||
| 36 | ;; routines that call eval-region are similarly exposed. | ||
| 37 | |||
| 38 | ;; Perhaps this should be one of several files in an `elisp' package | ||
| 39 | ;; that replaces Emacs Lisp subroutines with Lisp versions of the | ||
| 40 | ;; same. | ||
| 41 | |||
| 42 | ;; Eval-region may be installed, after loading, by calling: | ||
| 43 | ;; (elisp-eval-region-install). Installation can be undone with: | ||
| 44 | ;; (elisp-eval-region-uninstall). | ||
| 45 | |||
| 46 | ;;; Code: | ||
| 47 | |||
| 48 | '(defpackage "elisp-eval-region" | ||
| 49 | (:nicknames "elisp") | ||
| 50 | (:use "elisp") | ||
| 51 | (:export | ||
| 52 | elisp-eval-region-install | ||
| 53 | elisp-eval-region-uninstall | ||
| 54 | elisp-eval-region-level | ||
| 55 | with-elisp-eval-region | ||
| 56 | eval-region | ||
| 57 | eval-buffer | ||
| 58 | eval-current-buffer | ||
| 59 | )) | ||
| 60 | '(in-package elisp-eval-region) | ||
| 61 | |||
| 62 | ;; Save standard versions. | ||
| 63 | (if (not (fboundp 'original-eval-region)) | ||
| 64 | (defalias 'original-eval-region (symbol-function 'eval-region))) | ||
| 65 | (if (not (fboundp 'original-eval-buffer)) | ||
| 66 | (defalias 'original-eval-buffer | ||
| 67 | (if (fboundp 'eval-buffer) ;; only in Emacs 19 | ||
| 68 | (symbol-function 'eval-buffer) | ||
| 69 | 'undefined))) | ||
| 70 | (if (not (fboundp 'original-eval-current-buffer)) | ||
| 71 | (defalias 'original-eval-current-buffer | ||
| 72 | (symbol-function 'eval-current-buffer))) | ||
| 73 | |||
| 74 | (defvar elisp-eval-region-level 0 | ||
| 75 | "If the value is 0, use the original version of `elisp-eval-region'. | ||
| 76 | Callers of `elisp-eval-region' should increment `elisp-eval-region-level' | ||
| 77 | while the Lisp version should be used. Installing `elisp-eval-region' | ||
| 78 | increments it once, and uninstalling decrements it.") | ||
| 79 | |||
| 80 | ;; Installing and uninstalling should always be used in pairs, | ||
| 81 | ;; or just install once and never uninstall. | ||
| 82 | (defun elisp-eval-region-install () | ||
| 83 | (interactive) | ||
| 84 | (defalias 'eval-region 'elisp-eval-region) | ||
| 85 | (defalias 'eval-buffer 'elisp-eval-buffer) | ||
| 86 | (defalias 'eval-current-buffer 'elisp-eval-current-buffer) | ||
| 87 | (setq elisp-eval-region-level (1+ elisp-eval-region-level))) | ||
| 88 | |||
| 89 | (defun elisp-eval-region-uninstall () | ||
| 90 | (interactive) | ||
| 91 | (if (> 1 elisp-eval-region-level) | ||
| 92 | (setq elisp-eval-region-level (1- elisp-eval-region-level)) | ||
| 93 | (setq elisp-eval-region-level 0) | ||
| 94 | (defalias 'eval-region (symbol-function 'original-eval-region)) | ||
| 95 | (defalias 'eval-buffer (symbol-function 'original-eval-buffer)) | ||
| 96 | (defalias 'eval-current-buffer | ||
| 97 | (symbol-function 'original-eval-current-buffer)) | ||
| 98 | )) | ||
| 99 | |||
| 100 | (put 'with-elisp-eval-region 'lisp-indent-function 1) | ||
| 101 | (put 'with-elisp-eval-region 'lisp-indent-hook 1) | ||
| 102 | (put 'with-elisp-eval-region 'edebug-form-spec t) | ||
| 103 | |||
| 104 | (defmacro with-elisp-eval-region (flag &rest body) | ||
| 105 | "If FLAG is nil, decrement `eval-region-level' while executing BODY. | ||
| 106 | The effect of decrementing all the way to zero is that `eval-region' | ||
| 107 | will use the original `eval-region', which may be the Emacs subr or some | ||
| 108 | previous redefinition. Before calling this macro, this package should | ||
| 109 | already have been installed, using `elisp-eval-region-install', which | ||
| 110 | increments the count once. So if another package still requires the | ||
| 111 | Lisp version of the code, the count will still be non-zero. | ||
| 112 | |||
| 113 | The count is not bound locally by this macro, so changes by BODY to | ||
| 114 | its value will not be lost." | ||
| 115 | (` (let ((elisp-code (function (lambda () (,@ body))))) | ||
| 116 | (if (not (, flag)) | ||
| 117 | (unwind-protect | ||
| 118 | (progn | ||
| 119 | (setq elisp-eval-region-level (1- elisp-eval-region-level)) | ||
| 120 | (funcall elisp-code)) | ||
| 121 | (setq elisp-eval-region-level (1+ elisp-eval-region-level))) | ||
| 122 | (funcall elisp-code))))) | ||
| 123 | |||
| 124 | |||
| 125 | (defun elisp-eval-region (elisp-start elisp-end &optional elisp-output | ||
| 126 | elisp-read-function) | ||
| 127 | "Execute the region as Lisp code. | ||
| 128 | When called from programs, expects two arguments, | ||
| 129 | giving starting and ending indices in the current buffer | ||
| 130 | of the text to be executed. | ||
| 131 | Programs can pass third argument PRINTFLAG which controls printing of output: | ||
| 132 | nil means discard it; anything else is stream for print. | ||
| 133 | |||
| 134 | Also the fourth argument READ-FUNCTION, if non-nil, is used | ||
| 135 | instead of `read' to read each expression. It gets one argument | ||
| 136 | which is the input stream for reading characters. | ||
| 137 | |||
| 138 | This version, from `eval-reg.el', allows Lisp customization of read, | ||
| 139 | eval, and the printer." | ||
| 140 | |||
| 141 | ;; Because this doesn't narrow to the region, one other difference | ||
| 142 | ;; concerns inserting whitespace after the expression being evaluated. | ||
| 143 | |||
| 144 | (interactive "r") | ||
| 145 | (if (= 0 elisp-eval-region-level) | ||
| 146 | (original-eval-region elisp-start elisp-end elisp-output) | ||
| 147 | (let ((elisp-pnt (point)) | ||
| 148 | (elisp-buf (current-buffer));; Outside buffer | ||
| 149 | (elisp-inside-buf (current-buffer));; Buffer current while evalling | ||
| 150 | ;; Mark the end because it may move. | ||
| 151 | (elisp-end-marker (set-marker (make-marker) elisp-end)) | ||
| 152 | elisp-form | ||
| 153 | elisp-val) | ||
| 154 | (goto-char elisp-start) | ||
| 155 | (elisp-skip-whitespace) | ||
| 156 | (while (< (point) elisp-end-marker) | ||
| 157 | (setq elisp-form | ||
| 158 | (cond (elisp-read-function | ||
| 159 | (funcall elisp-read-function elisp-buf)) | ||
| 160 | (load-read-function | ||
| 161 | (funcall load-read-function elisp-buf)) | ||
| 162 | (t | ||
| 163 | (read elisp-buf)))) | ||
| 164 | |||
| 165 | (let ((elisp-current-buffer (current-buffer))) | ||
| 166 | ;; Restore the inside current-buffer. | ||
| 167 | (set-buffer elisp-inside-buf) | ||
| 168 | (setq elisp-val (eval elisp-form)) | ||
| 169 | ;; Remember current buffer for next time. | ||
| 170 | (setq elisp-inside-buf (current-buffer)) | ||
| 171 | ;; Should this be protected? | ||
| 172 | (set-buffer elisp-current-buffer)) | ||
| 173 | |||
| 174 | (if elisp-output | ||
| 175 | (let ((standard-output (or elisp-output t))) | ||
| 176 | (setq values (cons elisp-val values)) | ||
| 177 | (if (eq standard-output t) | ||
| 178 | (prin1 elisp-val) | ||
| 179 | (princ "\n") | ||
| 180 | (prin1 elisp-val) | ||
| 181 | (princ "\n") | ||
| 182 | ))) | ||
| 183 | (goto-char (min (max elisp-end-marker (point)) | ||
| 184 | (progn (elisp-skip-whitespace) (point)))) | ||
| 185 | ) ; while | ||
| 186 | (if elisp-output nil | ||
| 187 | ;; like save-excursion recovery, but done only if no error occurs | ||
| 188 | ;; but mark is not restored | ||
| 189 | (set-buffer elisp-buf) | ||
| 190 | (goto-char elisp-pnt)) | ||
| 191 | nil))) | ||
| 192 | |||
| 193 | |||
| 194 | (defun elisp-skip-whitespace () | ||
| 195 | ;; Leave point before the next token, skipping white space and comments. | ||
| 196 | (skip-chars-forward " \t\r\n\f") | ||
| 197 | (while (= (following-char) ?\;) | ||
| 198 | (skip-chars-forward "^\n\r") ; skip the comment | ||
| 199 | (skip-chars-forward " \t\r\n\f"))) | ||
| 200 | |||
| 201 | |||
| 202 | (defun elisp-eval-current-buffer (&optional elisp-output) | ||
| 203 | "Execute the current buffer as Lisp code. | ||
| 204 | Programs can pass argument PRINTFLAG which controls printing of output: | ||
| 205 | nil means discard it; anything else is stream for print. | ||
| 206 | |||
| 207 | This version calls `eval-region' on the whole buffer." | ||
| 208 | ;; The standard eval-current-buffer doesn't use eval-region. | ||
| 209 | (interactive) | ||
| 210 | (eval-region (point-min) (point-max) elisp-output)) | ||
| 211 | |||
| 212 | |||
| 213 | (defun elisp-eval-buffer (&optional elisp-bufname elisp-printflag filename | ||
| 214 | unibyte do-allow-print) | ||
| 215 | "Execute BUFFER as Lisp code. Use current buffer if BUFFER is nil. | ||
| 216 | Programs can pass argument PRINTFLAG which controls printing of | ||
| 217 | output: nil means discard it; anything else is stream for print. | ||
| 218 | |||
| 219 | The argument FILENAME is accepted and ignored, just to avoid | ||
| 220 | crashes. | ||
| 221 | |||
| 222 | This version calls `eval-region' on the whole buffer." | ||
| 223 | (interactive) | ||
| 224 | (if (null elisp-bufname) | ||
| 225 | (setq elisp-bufname (current-buffer))) | ||
| 226 | (save-excursion | ||
| 227 | (set-buffer (or (get-buffer elisp-bufname) | ||
| 228 | (error "No such buffer: %s" elisp-bufname))) | ||
| 229 | (eval-region (point-min) (point-max) elisp-printflag | ||
| 230 | unibyte do-allow-print))) | ||
| 231 | |||
| 232 | |||
| 233 | (provide 'eval-reg) | ||
| 234 | |||
| 235 | ;;; eval-reg.el ends here | ||