]> git.eshelyaron.com Git - emacs.git/commitdiff
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
authorSam Steingold <sds@gnu.org>
Mon, 7 Apr 2008 16:01:47 +0000 (16:01 +0000)
committerSam Steingold <sds@gnu.org>
Mon, 7 Apr 2008 16:01:47 +0000 (16:01 +0000)
to the init values, similar to emacs-lisp eval-defun

lisp/ChangeLog
lisp/progmodes/inf-lisp.el

index 9f51e4a0ab8d76bca011fefd0949768562841d3d..e7a74037af8c5b1c4c6f93a600c43cf18a77e9de 100644 (file)
@@ -1,3 +1,13 @@
+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>
 
        * pcvs-util.el (cvs-map): Avoid recursion :-(
index 89a2890973c21bbce82c9bbc26ebe35b1d92841d..ca94af2394d41846bb4dda4a6f3cc2e8a2bd351e 100644 (file)
@@ -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)