From: Sam Steingold Date: Mon, 7 Apr 2008 16:01:47 +0000 (+0000) Subject: lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables X-Git-Tag: emacs-pretest-23.0.90~6464 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=49ec8931145d0bb09986e047a82ff1fe5f0bd27b;p=emacs.git lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables to the init values, similar to emacs-lisp eval-defun --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9f51e4a0ab8..e7a74037af8 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,13 @@ +2008-04-07 Sam Steingold + + * 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 * pcvs-util.el (cvs-map): Avoid recursion :-( diff --git a/lisp/progmodes/inf-lisp.el b/lisp/progmodes/inf-lisp.el index 89a2890973c..ca94af2394d 100644 --- a/lisp/progmodes/inf-lisp.el +++ b/lisp/progmodes/inf-lisp.el @@ -323,16 +323,40 @@ Prefix argument means switch to the Lisp buffer afterwards." (comint-send-string (inferior-lisp-proc) "\n") (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. -Prefix argument means switch to the Lisp buffer afterwards." - (interactive "P") +The actually processing is done by `do-string' and `do-region' + which determine whether the code is compiled before evaluation. +DEFVAR forms reset the variables to the init values." (save-excursion (end-of-defun) (skip-chars-backward " \t\n\r\f") ; Makes allegro happy - (let ((end (point))) + (let ((end (point)) (case-fold-search t)) (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))) (defun lisp-eval-last-sexp (&optional and-go) @@ -341,27 +365,19 @@ Prefix argument means switch to the Lisp buffer afterwards." (interactive "P") (lisp-eval-region (save-excursion (backward-sexp) (point)) (point) and-go)) -;;; Common Lisp COMPILE sux. (defun lisp-compile-region (start end &optional and-go) "Compile the current region in the inferior Lisp process. Prefix argument means switch to the Lisp buffer afterwards." (interactive "r\nP") - (comint-send-string - (inferior-lisp-proc) - (format "(funcall (compile nil `(lambda () (progn 'compile %s))))\n" - (buffer-substring start end))) + (lisp-compile-string (buffer-substring-no-properties start end)) (if and-go (switch-to-lisp t))) (defun lisp-compile-defun (&optional and-go) "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." (interactive "P") - (save-excursion - (end-of-defun) - (skip-chars-backward " \t\n\r\f") ; Makes allegro happy - (let ((e (point))) - (beginning-of-defun) - (lisp-compile-region (point) e))) + (lisp-do-defun 'lisp-compile-string 'lisp-compile-region) (if and-go (switch-to-lisp t))) (defun switch-to-lisp (eob-p)