Commit 713c3fb1 authored by Dave Love's avatar Dave Love
Browse files

(eval-defun): Re-written to avoid

capturing variables.
parent 5f6a0375
;;; lisp-mode.el --- Lisp mode, and its idiosyncratic commands. ;;; lisp-mode.el --- Lisp mode, and its idiosyncratic commands.
;; Copyright (C) 1985, 1986 Free Software Foundation, Inc. ;; Copyright (C) 1985, 1986, 1999 Free Software Foundation, Inc.
;; Maintainer: FSF ;; Maintainer: FSF
;; Keywords: lisp, languages ;; Keywords: lisp, languages
...@@ -356,6 +356,13 @@ if it already has a value.\) ...@@ -356,6 +356,13 @@ if it already has a value.\)
With argument, insert value in current buffer after the defun. With argument, insert value in current buffer after the defun.
Return the result of evaluation." Return the result of evaluation."
(interactive "P") (interactive "P")
(save-excursion
;; Arrange for eval-region to "read" the (possibly) altered form.
;; eval-region handles recording which file defines a function or
;; variable. Re-written using `apply' to avoid capturing
;; variables like `end'.
(apply
#'eval-region
(let ((standard-output (if eval-defun-arg-internal (current-buffer) t)) (let ((standard-output (if eval-defun-arg-internal (current-buffer) t))
beg end form) beg end form)
;; Read the form from the buffer, and record where it ends. ;; Read the form from the buffer, and record where it ends.
...@@ -374,18 +381,14 @@ Return the result of evaluation." ...@@ -374,18 +381,14 @@ Return the result of evaluation."
(default-boundp (nth 1 form))) (default-boundp (nth 1 form)))
;; Force variable to be bound. ;; Force variable to be bound.
(set-default (nth 1 form) (eval (nth 2 form))))) (set-default (nth 1 form) (eval (nth 2 form)))))
;; Now arrange for eval-region to "read" the (possibly) altered form. (list beg end standard-output
;; eval-region handles recording which file defines a function or variable. `(lambda (ignore)
(save-excursion
(eval-region beg end standard-output
#'(lambda (ignore)
;; Skipping to the end of the specified region ;; Skipping to the end of the specified region
;; will make eval-region return. ;; will make eval-region return.
(goto-char end) (goto-char ,end)
form)) ,form)))))
;; The result of evaluation has been put onto VALUES. ;; The result of evaluation has been put onto VALUES. So return it.
;; So return it. (car values))
(car values))))
(defun lisp-comment-indent () (defun lisp-comment-indent ()
(if (looking-at "\\s<\\s<\\s<") (if (looking-at "\\s<\\s<\\s<")
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment