Commit 49ec8931 authored by Sam Steingold's avatar Sam Steingold
Browse files

lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables

to the init values, similar to emacs-lisp eval-defun
parent f7e4a59c
2008-04-07 Sam Steingold <sds@gnu.org>
* progmodes/inf-lisp.el (lisp-compile-string, lisp-eval-string):
Add helper functions.
(lisp-do-defun): Extracted the common part of lisp-eval-defun and
lisp-compile-defun; DEFVAR forms reset the variables to the init
values, just like in emacs-lisp mode eval-defun.
(lisp-eval-defun, lisp-compile-defun): Use lisp-do-defun.
(lisp-compile-region): Use lisp-compile-string.
2008-04-07 Stefan Monnier <monnier@iro.umontreal.ca> 2008-04-07 Stefan Monnier <monnier@iro.umontreal.ca>
   
* pcvs-util.el (cvs-map): Avoid recursion :-( * pcvs-util.el (cvs-map): Avoid recursion :-(
......
...@@ -323,16 +323,40 @@ Prefix argument means switch to the Lisp buffer afterwards." ...@@ -323,16 +323,40 @@ Prefix argument means switch to the Lisp buffer afterwards."
(comint-send-string (inferior-lisp-proc) "\n") (comint-send-string (inferior-lisp-proc) "\n")
(if and-go (switch-to-lisp t))) (if and-go (switch-to-lisp t)))
(defun lisp-eval-defun (&optional and-go) (defun lisp-compile-string (string)
"Send the string to the inferior Lisp process to be compiled and executed."
(comint-send-string
(inferior-lisp-proc)
(format "(funcall (compile nil (lambda () %s)))\n" string)))
(defun lisp-eval-string (string)
"Send the string to the inferior Lisp process to be executed."
(comint-send-string (inferior-lisp-proc) (concat string "\n")))
(defun lisp-do-defun (do-string do-region)
"Send the current defun to the inferior Lisp process. "Send the current defun to the inferior Lisp process.
Prefix argument means switch to the Lisp buffer afterwards." The actually processing is done by `do-string' and `do-region'
(interactive "P") which determine whether the code is compiled before evaluation.
DEFVAR forms reset the variables to the init values."
(save-excursion (save-excursion
(end-of-defun) (end-of-defun)
(skip-chars-backward " \t\n\r\f") ; Makes allegro happy (skip-chars-backward " \t\n\r\f") ; Makes allegro happy
(let ((end (point))) (let ((end (point)) (case-fold-search t))
(beginning-of-defun) (beginning-of-defun)
(lisp-eval-region (point) end))) (if (looking-at "(defvar")
(funcall do-string
;; replace `defvar' with `defparameter'
(concat "(defparameter "
(buffer-substring-no-properties (+ (point) 7) end)
"\n"))
(funcall do-region (point) end)))))
(defun lisp-eval-defun (&optional and-go)
"Send the current defun to the inferior Lisp process.
DEFVAR forms reset the variables to the init values.
Prefix argument means switch to the Lisp buffer afterwards."
(interactive "P")
(lisp-do-defun 'lisp-eval-string 'lisp-eval-region)
(if and-go (switch-to-lisp t))) (if and-go (switch-to-lisp t)))
(defun lisp-eval-last-sexp (&optional and-go) (defun lisp-eval-last-sexp (&optional and-go)
...@@ -341,27 +365,19 @@ Prefix argument means switch to the Lisp buffer afterwards." ...@@ -341,27 +365,19 @@ Prefix argument means switch to the Lisp buffer afterwards."
(interactive "P") (interactive "P")
(lisp-eval-region (save-excursion (backward-sexp) (point)) (point) and-go)) (lisp-eval-region (save-excursion (backward-sexp) (point)) (point) and-go))
;;; Common Lisp COMPILE sux.
(defun lisp-compile-region (start end &optional and-go) (defun lisp-compile-region (start end &optional and-go)
"Compile the current region in the inferior Lisp process. "Compile the current region in the inferior Lisp process.
Prefix argument means switch to the Lisp buffer afterwards." Prefix argument means switch to the Lisp buffer afterwards."
(interactive "r\nP") (interactive "r\nP")
(comint-send-string (lisp-compile-string (buffer-substring-no-properties start end))
(inferior-lisp-proc)
(format "(funcall (compile nil `(lambda () (progn 'compile %s))))\n"
(buffer-substring start end)))
(if and-go (switch-to-lisp t))) (if and-go (switch-to-lisp t)))
(defun lisp-compile-defun (&optional and-go) (defun lisp-compile-defun (&optional and-go)
"Compile the current defun in the inferior Lisp process. "Compile the current defun in the inferior Lisp process.
DEFVAR forms reset the variables to the init values.
Prefix argument means switch to the Lisp buffer afterwards." Prefix argument means switch to the Lisp buffer afterwards."
(interactive "P") (interactive "P")
(save-excursion (lisp-do-defun 'lisp-compile-string 'lisp-compile-region)
(end-of-defun)
(skip-chars-backward " \t\n\r\f") ; Makes allegro happy
(let ((e (point)))
(beginning-of-defun)
(lisp-compile-region (point) e)))
(if and-go (switch-to-lisp t))) (if and-go (switch-to-lisp t)))
(defun switch-to-lisp (eob-p) (defun switch-to-lisp (eob-p)
......
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