unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#9907: 24.0.90; eshell:for command destructivly modifies list variables
@ 2011-10-29 23:09 Andreas Politz
  2011-10-30  3:59 ` Stefan Monnier
  0 siblings, 1 reply; 7+ messages in thread
From: Andreas Politz @ 2011-10-29 23:09 UTC (permalink / raw)
  To: 9907


M-x eshell

$ for l in $load-path {echo $l}

Do this two times. After the first time the value of `load-path' is
gone, because the lisp code implementing the loop destructively modifies
this list.  Idea of the following solution: Copy it.


diff -c -L /usr/share/emacs/24.0.90/lisp/eshell/esh-cmd.el.gz -L \#\<buffer\ esh-cmd.el.gz\> /tmp/jka-com2122MHr /tmp/buffer-content-2122LbA
*** /usr/share/emacs/24.0.90/lisp/eshell/esh-cmd.el.gz
--- #<buffer esh-cmd.el.gz>
***************
*** 494,500 ****
  			       (if (listp elem)
  				   elem
  				 (list 'list elem))))
! 			    (cdr (cddr terms)))))
  		    (list 'eshell-command-body
  			  (list 'quote (list nil)))
  		    (list 'eshell-test-body
--- 494,501 ----
  			       (if (listp elem)
  				   elem
  				 (list 'list elem))))
! 			    (cdr (cddr terms)))
!                            (list nil)))
  		    (list 'eshell-command-body
  			  (list 'quote (list nil)))
  		    (list 'eshell-test-body







^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#9907: 24.0.90; eshell:for command destructivly modifies list variables
  2011-10-29 23:09 bug#9907: 24.0.90; eshell:for command destructivly modifies list variables Andreas Politz
@ 2011-10-30  3:59 ` Stefan Monnier
  2011-10-30  5:43   ` Thierry Volpiatto
  0 siblings, 1 reply; 7+ messages in thread
From: Stefan Monnier @ 2011-10-30  3:59 UTC (permalink / raw)
  To: Andreas Politz; +Cc: 9907

> Do this two times. After the first time the value of `load-path' is
> gone, because the lisp code implementing the loop destructively modifies
> this list.  Idea of the following solution: Copy it.

Thanks.  I've installed the patch below instead, which uses backquotes
to clarify the code and simply avoids the in-place modification instead
of copying the list.


        Stefan


=== modified file 'lisp/ChangeLog'
--- lisp/ChangeLog	2011-10-30 03:39:11 +0000
+++ lisp/ChangeLog	2011-10-30 03:51:01 +0000
@@ -1,3 +1,18 @@
+2011-10-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* eshell/esh-cmd.el (eshell-rewrite-for-command): Don't modify the list
+	in place (bug#9907).
+	(eshell-subcommand-arg-values, eshell-rewrite-named-command)
+	(eshell-rewrite-if-command, eshell-rewrite-for-command)
+	(eshell-structure-basic-command, eshell-rewrite-while-command)
+	(eshell-invokify-arg, eshell-parse-pipeline, eshell-parse-command)
+	(eshell-parse-subcommand-argument, eshell-parse-lisp-argument)
+	(eshell-trap-errors, eshell-do-pipelines, eshell-do-eval)
+	(eshell-do-pipelines-synchronously, eshell-eval-command):
+	Use backquotes and prefer setq to set.
+	(eshell-lookup-function, function-p-func, eshell-functionp): Remove.
+	(eshell-macrop): Use functionp.
+
 2011-10-30  Chong Yidong  <cyd@gnu.org>
 
 	* emulation/viper-cmd.el (viper-exec-change): Use push-mark

=== modified file 'lisp/eshell/esh-cmd.el'
--- lisp/eshell/esh-cmd.el	2011-03-05 20:07:27 +0000
+++ lisp/eshell/esh-cmd.el	2011-10-30 03:57:59 +0000
@@ -356,35 +356,32 @@
 	  (mapcar
 	   (function
 	    (lambda (cmd)
+              (setq cmd
 	      (if (or (not (car sep-terms))
 		      (string= (car sep-terms) ";"))
-		  (setq cmd
-			(eshell-parse-pipeline cmd (not (car sep-terms))))
-		(setq cmd
-		      (list 'eshell-do-subjob
-			    (list 'list (eshell-parse-pipeline cmd)))))
+			(eshell-parse-pipeline cmd (not (car sep-terms)))
+		      `(eshell-do-subjob
+                        (list ,(eshell-parse-pipeline cmd)))))
 	      (setq sep-terms (cdr sep-terms))
 	      (if eshell-in-pipeline-p
 		  cmd
-		(list 'eshell-trap-errors cmd))))
+		`(eshell-trap-errors ,cmd))))
 	   (eshell-separate-commands terms "[&;]" nil 'sep-terms))))
     (let ((cmd commands))
       (while cmd
 	(if (cdr cmd)
-	    (setcar cmd (list 'eshell-commands (car cmd))))
+	    (setcar cmd `(eshell-commands ,(car cmd))))
 	(setq cmd (cdr cmd))))
     (setq commands
-	  (append (list 'progn)
-		  (if top-level
-		      (list '(run-hooks 'eshell-pre-command-hook)))
-		  (if (not top-level)
+	  `(progn
+             ,@(if top-level
+                   '((run-hooks 'eshell-pre-command-hook)))
+             ,@(if (not top-level)
 		      commands
-		    (list
-		     (list 'catch (quote 'top-level)
-			   (append (list 'progn) commands))
-		     '(run-hooks 'eshell-post-command-hook)))))
+                 `((catch 'top-level (progn ,@commands))
+                   (run-hooks 'eshell-post-command-hook)))))
     (if top-level
-	(list 'eshell-commands commands)
+	`(eshell-commands ,commands)
       commands)))
 
 (defun eshell-debug-command (tag subform)
@@ -417,9 +414,8 @@
   (while terms
     (if (and (listp (car terms))
 	     (eq (caar terms) 'eshell-as-subcommand))
-	(setcar terms (list 'eshell-convert
-			    (list 'eshell-command-to-value
-				  (car terms)))))
+	(setcar terms `(eshell-convert
+                        (eshell-command-to-value ,(car terms)))))
     (setq terms (cdr terms))))
 
 (defun eshell-rewrite-sexp-command (terms)
@@ -443,7 +439,7 @@
 	(cmd (car terms))
 	(args (cdr terms)))
     (if args
-	(list sym cmd (append (list 'list) (cdr terms)))
+	(list sym cmd `(list ,@(cdr terms)))
       (list sym cmd))))
 
 (defvar eshell-command-body)
@@ -469,62 +465,37 @@
 	   (eq (car (cadr arg)) 'eshell-command-to-value))
       (if share-output
 	  (cadr (cadr arg))
-	(list 'eshell-commands (cadr (cadr arg))
-	      silent))
+	`(eshell-commands ,(cadr (cadr arg)) ,silent))
     arg))
 
+(defvar eshell-last-command-status)     ;Define in esh-io.el.
+
 (defun eshell-rewrite-for-command (terms)
   "Rewrite a `for' command into its equivalent Eshell command form.
 Because the implementation of `for' relies upon conditional evaluation
 of its argument (i.e., use of a Lisp special form), it must be
 implemented via rewriting, rather than as a function."
-  (if (and (stringp (car terms))
-	   (string= (car terms) "for")
-	   (stringp (nth 2 terms))
-	   (string= (nth 2 terms) "in"))
+  (if (and (equal (car terms) "for")
+	   (equal (nth 2 terms) "in"))
       (let ((body (car (last terms))))
 	(setcdr (last terms 2) nil)
-	(list
-	 'let (list (list 'for-items
+	`(let ((for-items
 			  (append
-			   (list 'append)
-			   (mapcar
-			    (function
+                 ,@(mapcar
 			     (lambda (elem)
 			       (if (listp elem)
 				   elem
-				 (list 'list elem))))
+                        `(list ,elem)))
 			    (cdr (cddr terms)))))
-		    (list 'eshell-command-body
-			  (list 'quote (list nil)))
-		    (list 'eshell-test-body
-			  (list 'quote (list nil))))
-	 (list
-	  'progn
-	  (list
-	   'while (list 'car (list 'symbol-value
-				   (list 'quote 'for-items)))
-	   (list
-	    'progn
-	    (list 'let
-		  (list (list (intern (cadr terms))
-			      (list 'car
-				    (list 'symbol-value
-					  (list 'quote 'for-items)))))
-		  (list 'eshell-protect
-			(eshell-invokify-arg body t)))
-	    (list 'setcar 'for-items
-		  (list 'cadr
-			(list 'symbol-value
-			      (list 'quote 'for-items))))
-	    (list 'setcdr 'for-items
-		  (list 'cddr
-			(list 'symbol-value
-			      (list 'quote 'for-items))))))
-	  (list 'eshell-close-handles
-		'eshell-last-command-status
-		(list 'list (quote 'quote)
-		      'eshell-last-command-result)))))))
+               (eshell-command-body '(nil))
+               (eshell-test-body '(nil)))
+           (while (consp for-items)
+             (let ((,(intern (cadr terms)) (car for-items)))
+               (eshell-protect ,(eshell-invokify-arg body t)))
+             (setq for-items (cdr for-items)))
+           (eshell-close-handles
+            eshell-last-command-status
+            (list 'quote eshell-last-command-result))))))
 
 (defun eshell-structure-basic-command (func names keyword test body
 					    &optional else vocal-test)
@@ -540,8 +511,8 @@
   ;; that determine the truth of the statement.
   (unless (eq (car test) 'eshell-convert)
     (setq test
-	  (list 'progn test
-		(list 'eshell-exit-success-p))))
+	  `(progn ,test
+                  (eshell-exit-success-p))))
 
   ;; should we reverse the sense of the test?  This depends
   ;; on the `names' parameter.  If it's the symbol nil, yes.
@@ -551,20 +522,16 @@
   (if (or (eq names nil)
 	  (and (listp names)
 	       (string= keyword (cadr names))))
-      (setq test (list 'not test)))
+      (setq test `(not ,test)))
 
   ;; finally, create the form that represents this structured
   ;; command
-  (list
-   'let (list (list 'eshell-command-body
-		    (list 'quote (list nil)))
-	      (list 'eshell-test-body
-		    (list 'quote (list nil))))
-   (list func test body else)
-   (list 'eshell-close-handles
-	 'eshell-last-command-status
-	 (list 'list (quote 'quote)
-	       'eshell-last-command-result))))
+  `(let ((eshell-command-body '(nil))
+         (eshell-test-body '(nil)))
+     (,func ,test ,body ,else)
+     (eshell-close-handles
+        eshell-last-command-status
+        (list 'quote eshell-last-command-result))))
 
 (defun eshell-rewrite-while-command (terms)
   "Rewrite a `while' command into its equivalent Eshell command form.
@@ -576,8 +543,8 @@
       (eshell-structure-basic-command
        'while '("while" "until") (car terms)
        (eshell-invokify-arg (cadr terms) nil t)
-       (list 'eshell-protect
-	     (eshell-invokify-arg (car (last terms)) t)))))
+       `(eshell-protect
+         ,(eshell-invokify-arg (car (last terms)) t)))))
 
 (defun eshell-rewrite-if-command (terms)
   "Rewrite an `if' command into its equivalent Eshell command form.
@@ -589,15 +556,14 @@
       (eshell-structure-basic-command
        'if '("if" "unless") (car terms)
        (eshell-invokify-arg (cadr terms) nil t)
-       (list 'eshell-protect
-	     (eshell-invokify-arg
-	      (if (= (length terms) 4)
-		  (car (last terms 2))
-		(car (last terms))) t))
+       `(eshell-protect
+         ,(eshell-invokify-arg (car (last terms (if (= (length terms) 4) 2)))
+                               t))
        (if (= (length terms) 4)
-	   (list 'eshell-protect
-		 (eshell-invokify-arg
-		  (car (last terms)))) t))))
+	   `(eshell-protect
+             ,(eshell-invokify-arg (car (last terms)))) t))))
+
+(defvar eshell-last-command-result)     ;Defined in esh-io.el.
 
 (defun eshell-exit-success-p ()
   "Return non-nil if the last command was \"successful\".
@@ -634,8 +600,7 @@
 		  (if (<= (length pieces) 1)
 		      (car pieces)
 		    (assert (not eshell-in-pipeline-p))
-		    (list 'eshell-execute-pipeline
-			  (list 'quote pieces))))))
+		    `(eshell-execute-pipeline (quote ,pieces))))))
 	(setq bp (cdr bp))))
     ;; `results' might be empty; this happens in the case of
     ;; multi-line input
@@ -648,8 +613,8 @@
       (assert (car sep-terms))
       (setq final (eshell-structure-basic-command
 		   'if (string= (car sep-terms) "&&") "if"
-		   (list 'eshell-protect (car results))
-		   (list 'eshell-protect final)
+		   `(eshell-protect ,(car results))
+		   `(eshell-protect ,final)
 		   nil t)
 	    results (cdr results)
 	    sep-terms (cdr sep-terms)))
@@ -667,8 +632,8 @@
 	    (throw 'eshell-incomplete ?\{)
 	  (when (eshell-arg-delimiter (1+ end))
 	    (prog1
-		(list 'eshell-as-subcommand
-		      (eshell-parse-command (cons (1+ (point)) end)))
+		`(eshell-as-subcommand
+                  ,(eshell-parse-command (cons (1+ (point)) end)))
 	      (goto-char (1+ end))))))))
 
 (defun eshell-parse-lisp-argument ()
@@ -683,8 +648,8 @@
 		(end-of-file
 		 (throw 'eshell-incomplete ?\()))))
 	(if (eshell-arg-delimiter)
-	    (list 'eshell-command-to-value
-		  (list 'eshell-lisp-command (list 'quote obj)))
+	    `(eshell-command-to-value
+              (eshell-lisp-command (quote ,obj)))
 	  (ignore (goto-char here))))))
 
 (defun eshell-separate-commands (terms separator &optional
@@ -759,7 +724,7 @@
 
 Someday, when Scheme will become the dominant Emacs language, all of
 this grossness will be made to disappear by using `call/cc'..."
-  `(let ((eshell-this-command-hook (list 'ignore)))
+  `(let ((eshell-this-command-hook '(ignore)))
      (eshell-condition-case err
 	 (prog1
 	     ,object
@@ -769,6 +734,9 @@
 	(eshell-errorn (error-message-string err))
 	(eshell-close-handles 1)))))
 
+(defvar eshell-output-handle)           ;Defined in esh-io.el.
+(defvar eshell-error-handle)            ;Defined in esh-io.el.
+
 (defmacro eshell-copy-handles (object)
   "Duplicate current I/O handles, so OBJECT works with its own copy."
   `(let ((eshell-current-handles
@@ -793,14 +761,13 @@
       (progn
 	,(when (cdr pipeline)
 	   `(let (nextproc)
-	      (progn
-		(set 'nextproc
+              (setq nextproc
 		     (eshell-do-pipelines (quote ,(cdr pipeline)) t))
 		(eshell-set-output-handle ,eshell-output-handle
 					  'append nextproc)
 		(eshell-set-output-handle ,eshell-error-handle
 					  'append nextproc)
-		(set 'tailproc (or tailproc nextproc)))))
+              (setq tailproc (or tailproc nextproc))))
 	,(let ((head (car pipeline)))
 	   (if (memq (car head) '(let progn))
 	       (setq head (car (last head))))
@@ -824,19 +791,17 @@
 This is used on systems where `start-process' is not supported."
   (when (setq pipeline (cadr pipeline))
     `(let (result)
-       (progn
 	 ,(when (cdr pipeline)
 	    `(let (output-marker)
-	       (progn
-		 (set 'output-marker ,(point-marker))
+             (setq output-marker ,(point-marker))
 		 (eshell-set-output-handle ,eshell-output-handle
 					   'append output-marker)
 		 (eshell-set-output-handle ,eshell-error-handle
-					   'append output-marker))))
+                                       'append output-marker)))
 	 ,(let ((head (car pipeline)))
 	    (if (memq (car head) '(let progn))
 		(setq head (car (last head))))
-	    ;;; FIXME: is deferrable significant here?
+          ;; FIXME: is deferrable significant here?
 	    (when (memq (car head) eshell-deferrable-commands)
 	      (ignore
 	       (setcar head
@@ -846,15 +811,15 @@
 	 ;; redirected as we found them before running the pipe.
 	 ,(if (null (cdr pipeline))
 	      `(progn
-		 (set 'eshell-current-handles tail-handles)
-		 (set 'eshell-in-pipeline-p nil)))
-	 (set 'result ,(car pipeline))
+               (setq eshell-current-handles tail-handles)
+               (setq eshell-in-pipeline-p nil)))
+       (setq result ,(car pipeline))
 	 ;; tailproc gets the result of the last successful process in
 	 ;; the pipeline.
-	 (set 'tailproc (or result tailproc))
+       (setq tailproc (or result tailproc))
 	 ,(if (cdr pipeline)
 	      `(eshell-do-pipelines-synchronously (quote ,(cdr pipeline))))
-	 result))))
+       result)))
 
 (defalias 'eshell-process-identity 'identity)
 
@@ -965,14 +930,12 @@
       ;; we can just stick the new command at the end of the current
       ;; one, and everything will happen as it should
       (setcdr (last (cdr eshell-current-command))
-	      (list (list 'let '((here (and (eobp) (point))))
-			  (and input
-			       (list 'insert-and-inherit
-				     (concat input "\n")))
-			  '(if here
+	      (list `(let ((here (and (eobp) (point))))
+                       ,(and input
+                             `(insert-and-inherit ,(concat input "\n")))
+                       (if here
 			       (eshell-update-markers here))
-			  (list 'eshell-do-eval
-				(list 'quote command)))))
+                       (eshell-do-eval ',command))))
     (and eshell-debug-command
          (with-current-buffer (get-buffer-create "*eshell last cmd*")
            (erase-buffer)
@@ -1016,6 +979,7 @@
 
 (defmacro eshell-manipulate (tag &rest commands)
   "Manipulate a COMMAND form, with TAG as a debug identifier."
+  (declare (indent 1))
   ;; Check `bound'ness since at compile time the code until here has not
   ;; executed yet.
   (if (not (and (boundp 'eshell-debug-command) eshell-debug-command))
@@ -1025,39 +989,13 @@
        ,@commands
        (eshell-debug-command ,(concat "done " (eval tag)) form))))
 
-(put 'eshell-manipulate 'lisp-indent-function 1)
-
-;; eshell-lookup-function, eshell-functionp, and eshell-macrop taken
-;; from edebug
-
-(defsubst eshell-lookup-function (object)
-  "Return the ultimate function definition of OBJECT."
-  (while (and (symbolp object) (fboundp object))
-    (setq object (symbol-function object)))
-  object)
-
-(defconst function-p-func
-  (if (fboundp 'compiled-function-p)
-      'compiled-function-p
-    'byte-code-function-p))
-
-(defsubst eshell-functionp (object)
-  "Returns the function named by OBJECT, or nil if it is not a function."
-  (setq object (eshell-lookup-function object))
-  (if (or (subrp object)
-	  (funcall function-p-func object)
-	  (and (listp object)
-	       (eq (car object) 'lambda)
-	       (listp (car (cdr object)))))
-      object))
-
 (defsubst eshell-macrop (object)
   "Return t if OBJECT is a macro or nil otherwise."
-  (setq object (eshell-lookup-function object))
-  (if (and (listp object)
+  (and (symbolp object) (fboundp object)
+       (setq object (indirect-function object))
+       (listp object)
 	   (eq 'macro (car object))
-	   (eshell-functionp (cdr object)))
-      t))
+       (functionp (cdr object))))
 
 (defun eshell-do-eval (form &optional synchronous-p)
   "Evaluate form, simplifying it as we go.
@@ -1107,9 +1045,11 @@
 	      (eshell-do-eval (car eshell-command-body)))
 	  (unless (car eshell-test-body)
 	    (setcar eshell-test-body (eshell-copy-tree (car args))))
+	  (setcar eshell-command-body
+                  (eshell-copy-tree
 	  (if (cadr (eshell-do-eval (car eshell-test-body)))
-	      (setcar eshell-command-body (eshell-copy-tree (cadr args)))
-	    (setcar eshell-command-body (eshell-copy-tree (car (cddr args)))))
+                       (cadr args)
+                     (car (cddr args)))))
 	  (eshell-do-eval (car eshell-command-body) synchronous-p))
 	(setcar eshell-command-body nil)
 	(setcar eshell-test-body nil))
@@ -1140,9 +1080,7 @@
 	  (setq args (cdr args)))
 	(unless (eq (caar args) 'eshell-do-eval)
 	  (eshell-manipulate "handling special form"
-	    (setcar args (list 'eshell-do-eval
-			       (list 'quote (car args))
-			       synchronous-p))))
+	    (setcar args `(eshell-do-eval ',(car args) ,synchronous-p))))
 	(eval form))
        (t
 	(if (and args (not (memq (car form) '(run-hooks))))
@@ -1362,6 +1300,8 @@
   "Evaluate FORM, trapping errors and returning them."
   (eshell-eval* 'eshell-printn 'eshell-errorn form))
 
+(defvar eshell-last-output-end)         ;Defined in esh-mode.el.
+
 (defun eshell-lisp-command (object &optional args)
   "Insert Lisp OBJECT, using ARGS if a function."
   (catch 'eshell-external               ; deferred to an external command






^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#9907: 24.0.90; eshell:for command destructivly modifies list variables
  2011-10-30  3:59 ` Stefan Monnier
@ 2011-10-30  5:43   ` Thierry Volpiatto
  2011-10-30  8:00     ` Stefan Monnier
  0 siblings, 1 reply; 7+ messages in thread
From: Thierry Volpiatto @ 2011-10-30  5:43 UTC (permalink / raw)
  To: 9907

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>> Do this two times. After the first time the value of `load-path' is
>> gone, because the lisp code implementing the loop destructively modifies
>> this list.  Idea of the following solution: Copy it.
>
> Thanks.  I've installed the patch below instead, which uses backquotes
> to clarify the code and simply avoids the in-place modification instead
> of copying the list.
Eshell hang forever with this patch when using initial example given by
Andy.
 

-- 
  Thierry
Get my Gnupg key:
gpg --keyserver pgp.mit.edu --recv-keys 59F29997 






^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#9907: 24.0.90; eshell:for command destructivly modifies list variables
  2011-10-30  5:43   ` Thierry Volpiatto
@ 2011-10-30  8:00     ` Stefan Monnier
  2011-10-30 18:37       ` Thierry Volpiatto
  0 siblings, 1 reply; 7+ messages in thread
From: Stefan Monnier @ 2011-10-30  8:00 UTC (permalink / raw)
  To: Thierry Volpiatto; +Cc: 9907

>>> Do this two times. After the first time the value of `load-path' is
>>> gone, because the lisp code implementing the loop destructively modifies
>>> this list.  Idea of the following solution: Copy it.
>> Thanks.  I've installed the patch below instead, which uses backquotes
>> to clarify the code and simply avoids the in-place modification instead
>> of copying the list.
> Eshell hang forever with this patch when using initial example given by
> Andy.
 
Sorry 'bout that.  Should be fixed now, but please confirm.


        Stefan





^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#9907: 24.0.90; eshell:for command destructivly modifies list variables
  2011-10-30  8:00     ` Stefan Monnier
@ 2011-10-30 18:37       ` Thierry Volpiatto
  2011-11-18  2:05         ` Glenn Morris
  0 siblings, 1 reply; 7+ messages in thread
From: Thierry Volpiatto @ 2011-10-30 18:37 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 9907

Stefan Monnier <monnier@IRO.UMontreal.CA> writes:

>>>> Do this two times. After the first time the value of `load-path' is
>>>> gone, because the lisp code implementing the loop destructively modifies
>>>> this list.  Idea of the following solution: Copy it.
>>> Thanks.  I've installed the patch below instead, which uses backquotes
>>> to clarify the code and simply avoids the in-place modification instead
>>> of copying the list.
>> Eshell hang forever with this patch when using initial example given by
>> Andy.
>  
> Sorry 'bout that.  Should be fixed now, but please confirm.
It is working fine now, thanks.

-- 
  Thierry
Get my Gnupg key:
gpg --keyserver pgp.mit.edu --recv-keys 59F29997 





^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#9907: 24.0.90; eshell:for command destructivly modifies list variables
  2011-10-30 18:37       ` Thierry Volpiatto
@ 2011-11-18  2:05         ` Glenn Morris
  2011-11-18 14:49           ` Stefan Monnier
  0 siblings, 1 reply; 7+ messages in thread
From: Glenn Morris @ 2011-11-18  2:05 UTC (permalink / raw)
  To: 9907


>> Sorry 'bout that.  Should be fixed now, but please confirm.
> It is working fine now, thanks.

It was pointed out on emacs-devel that eshell pipes no longer work
(it's because I just closed this bug...):

emacs -Q -f eshell
ls | grep foo

  -> Wrong type argument: symbolp, (quote nil)
   and a stale grep process in M-x list-processes

Debugger entered--Lisp error: (wrong-type-argument symbolp (quote nil))
  (setq (quote nil) (quote #<process grep>))
  eval((setq (quote nil) (quote #<process grep>)))
  (setq result (eval form))
  (ignore (setq result (eval form)))
  (catch (quote eshell-replace-command) (ignore (setq result (eval form))))
  (setq new-form (catch (quote eshell-replace-command) (ignore (setq result (eval form)))))
  (if (setq new-form (catch (quote eshell-replace-command) (ignore (setq result (eval form))))) (progn (eshell-manipulate "substituting replacement form" (setcar form (car new-form)) (setcdr form (cdr new-form))) (eshell-do-eval form synchronous-p)) (if (and (memq (car form) eshell-deferrable-commands) (not eshell-current-subjob-p) result (eshell-processp result)) (if synchronous-p (eshell/wait result) (eshell-manipulate "inserting ignore form" (setcar form (quote ignore)) (setcdr form nil)) (throw (quote eshell-defer) result)) (list (quote quote) result)))
  (let (result new-form) (if (setq new-form (catch (quote eshell-replace-command) (ignore (setq result (eval form))))) (progn (eshell-manipulate "substituting replacement form" (setcar form (car new-form)) (setcdr form (cdr new-form))) (eshell-do-eval form synchronous-p)) (if (and (memq (car form) eshell-deferrable-commands) (not eshell-current-subjob-p) result (eshell-processp result)) (if synchronous-p (eshell/wait result) (eshell-manipulate "inserting ignore form" (setcar form (quote ignore)) (setcdr form nil)) (throw (quote eshell-defer) result)) (list (quote quote) result))))
  (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form (catch (quote eshell-replace-command) (ignore (setq result ...)))) (progn (eshell-manipulate "substituting replacement form" (setcar form (car new-form)) (setcdr form (cdr new-form))) (eshell-do-eval form synchronous-p)) (if (and (memq (car form) eshell-deferrable-commands) (not eshell-current-subjob-p) result (eshell-processp result)) (if synchronous-p (eshell/wait result) (eshell-manipulate "inserting ignore form" (setcar form ...) (setcdr form nil)) (throw (quote eshell-defer) result)) (list (quote quote) result))))))
  (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn (\,@ ...))) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr (eshell-do-eval ...)) (cadr args) (car (cddr args))))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car (cadr args)) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and (listp letarg) (not ...)) (setcdr letarg (list ...)))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval (quote ...) (\, synchronous-p)))))) (eval form)) (t (if (and args (not (memq (car form) (quote (run-hooks))))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form (catch ... ...)) (progn (eshell-manipulate "substituting replacement form" ... ...) (eshell-do-eval form synchronous-p)) (if (and ... ... result ...) (if synchronous-p ... ... ...) (list ... result))))))))
  (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn ...)) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr ...) (cadr args) (car ...)))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car ...) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and ... ...) (setcdr letarg ...))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval ... ...))))) (eval form)) (t (if (and args (not (memq (car form) (quote ...)))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval ... synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form ...) (progn ... ...) (if ... ... ...))))))))
  (cond ((not (listp form)) (list (quote quote) (eval form))) ((memq (car form) (quote (quote function))) form) (t (when (eq (car form) (quote eshell-do-eval)) (setq form (cadr (cadr form)))) (if (eshell-macrop (car form)) (let ((exp (eshell-copy-tree (macroexpand form)))) (eshell-manipulate (format "expanding macro `%s'" (symbol-name (car form))) (setcar form (car exp)) (setcdr form (cdr exp))))) (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree ...))) (while (cadr (eshell-do-eval ...)) (setcar eshell-command-body (if ... ... ...)) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree ...))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert ...) (eshell-do-eval ...)) (unless (car eshell-test-body) (setcar eshell-test-body ...)) (setcar eshell-command-body (eshell-copy-tree ...)) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq ... ...) (not ...)) (eshell-manipulate "evaluating let args" (dolist ... ...))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args ...))) (eval form)) (t (if (and args (not ...)) (eshell-manipulate (format "evaluating arguments to `%s'" ...) (while args ... ...))) (cond ((eq ... ...) (car ...)) ((eq ... ...) (cadr form)) (t (let ... ...))))))))
  eshell-do-eval((setq (quote nil) (quote #<process grep>)) nil)
  (let (nextproc) (eshell-do-eval (quote (setq (quote nil) (quote #<process grep>))) nil) (eshell-set-output-handle 1 (quote append) nextproc) (eshell-set-output-handle 2 (quote append) nextproc) (setq tailproc (or tailproc nextproc)))
  eval((let (nextproc) (eshell-do-eval (quote (setq (quote nil) (quote #<process grep>))) nil) (eshell-set-output-handle 1 (quote append) nextproc) (eshell-set-output-handle 2 (quote append) nextproc) (setq tailproc (or tailproc nextproc))))
  (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn (\,@ ...))) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr (eshell-do-eval ...)) (cadr args) (car (cddr args))))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car (cadr args)) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and (listp letarg) (not ...)) (setcdr letarg (list ...)))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval (quote ...) (\, synchronous-p)))))) (eval form)) (t (if (and args (not (memq (car form) (quote (run-hooks))))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form (catch ... ...)) (progn (eshell-manipulate "substituting replacement form" ... ...) (eshell-do-eval form synchronous-p)) (if (and ... ... result ...) (if synchronous-p ... ... ...) (list ... result))))))))
  (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn ...)) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr ...) (cadr args) (car ...)))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car ...) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and ... ...) (setcdr letarg ...))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval ... ...))))) (eval form)) (t (if (and args (not (memq (car form) (quote ...)))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval ... synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form ...) (progn ... ...) (if ... ... ...))))))))
  (cond ((not (listp form)) (list (quote quote) (eval form))) ((memq (car form) (quote (quote function))) form) (t (when (eq (car form) (quote eshell-do-eval)) (setq form (cadr (cadr form)))) (if (eshell-macrop (car form)) (let ((exp (eshell-copy-tree (macroexpand form)))) (eshell-manipulate (format "expanding macro `%s'" (symbol-name (car form))) (setcar form (car exp)) (setcdr form (cdr exp))))) (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree ...))) (while (cadr (eshell-do-eval ...)) (setcar eshell-command-body (if ... ... ...)) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree ...))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert ...) (eshell-do-eval ...)) (unless (car eshell-test-body) (setcar eshell-test-body ...)) (setcar eshell-command-body (eshell-copy-tree ...)) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq ... ...) (not ...)) (eshell-manipulate "evaluating let args" (dolist ... ...))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args ...))) (eval form)) (t (if (and args (not ...)) (eshell-manipulate (format "evaluating arguments to `%s'" ...) (while args ... ...))) (cond ((eq ... ...) (car ...)) ((eq ... ...) (cadr form)) (t (let ... ...))))))))
  eshell-do-eval((let (nextproc) (eshell-do-eval (quote (setq (quote nil) (quote #<process grep>))) nil) (eshell-set-output-handle 1 (quote append) nextproc) (eshell-set-output-handle 2 (quote append) nextproc) (setq tailproc (or tailproc nextproc))) nil)
  (setcar args (eshell-do-eval (car args) synchronous-p))
  (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args)))
  (progn (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))
  (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))
  (if (and args (not (memq (car form) (quote (run-hooks))))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args)))))
  (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn (\,@ ...))) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr (eshell-do-eval ...)) (cadr args) (car (cddr args))))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car (cadr args)) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and (listp letarg) (not ...)) (setcdr letarg (list ...)))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval (quote ...) (\, synchronous-p)))))) (eval form)) (t (if (and args (not (memq (car form) (quote (run-hooks))))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form (catch ... ...)) (progn (eshell-manipulate "substituting replacement form" ... ...) (eshell-do-eval form synchronous-p)) (if (and ... ... result ...) (if synchronous-p ... ... ...) (list ... result))))))))
  (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn ...)) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr ...) (cadr args) (car ...)))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car ...) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and ... ...) (setcdr letarg ...))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval ... ...))))) (eval form)) (t (if (and args (not (memq (car form) (quote ...)))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval ... synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form ...) (progn ... ...) (if ... ... ...))))))))
  (cond ((not (listp form)) (list (quote quote) (eval form))) ((memq (car form) (quote (quote function))) form) (t (when (eq (car form) (quote eshell-do-eval)) (setq form (cadr (cadr form)))) (if (eshell-macrop (car form)) (let ((exp (eshell-copy-tree (macroexpand form)))) (eshell-manipulate (format "expanding macro `%s'" (symbol-name (car form))) (setcar form (car exp)) (setcdr form (cdr exp))))) (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree ...))) (while (cadr (eshell-do-eval ...)) (setcar eshell-command-body (if ... ... ...)) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree ...))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert ...) (eshell-do-eval ...)) (unless (car eshell-test-body) (setcar eshell-test-body ...)) (setcar eshell-command-body (eshell-copy-tree ...)) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq ... ...) (not ...)) (eshell-manipulate "evaluating let args" (dolist ... ...))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args ...))) (eval form)) (t (if (and args (not ...)) (eshell-manipulate (format "evaluating arguments to `%s'" ...) (while args ... ...))) (cond ((eq ... ...) (car ...)) ((eq ... ...) (cadr form)) (t (let ... ...))))))))
  eshell-do-eval((progn (let (nextproc) (eshell-do-eval (quote (setq (quote nil) (quote #<process grep>))) nil) (eshell-set-output-handle 1 (quote append) nextproc) (eshell-set-output-handle 2 (quote append) nextproc) (setq tailproc (or tailproc nextproc))) nil (let ((eshell-in-pipeline-p (quote first))) (eshell-named-command* "ls"))) nil)
  (let ((eshell-current-handles (quote [nil (t . 1) (t . 1)]))) (eshell-do-eval (quote (progn (let (nextproc) (eshell-do-eval (quote (setq ... ...)) nil) (eshell-set-output-handle 1 (quote append) nextproc) (eshell-set-output-handle 2 (quote append) nextproc) (setq tailproc (or tailproc nextproc))) nil (let ((eshell-in-pipeline-p (quote first))) (eshell-named-command* "ls")))) nil))
  eval((let ((eshell-current-handles (quote [nil (t . 1) (t . 1)]))) (eshell-do-eval (quote (progn (let (nextproc) (eshell-do-eval (quote (setq ... ...)) nil) (eshell-set-output-handle 1 (quote append) nextproc) (eshell-set-output-handle 2 (quote append) nextproc) (setq tailproc (or tailproc nextproc))) nil (let ((eshell-in-pipeline-p (quote first))) (eshell-named-command* "ls")))) nil)))
  (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn (\,@ ...))) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr (eshell-do-eval ...)) (cadr args) (car (cddr args))))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car (cadr args)) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and (listp letarg) (not ...)) (setcdr letarg (list ...)))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval (quote ...) (\, synchronous-p)))))) (eval form)) (t (if (and args (not (memq (car form) (quote (run-hooks))))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form (catch ... ...)) (progn (eshell-manipulate "substituting replacement form" ... ...) (eshell-do-eval form synchronous-p)) (if (and ... ... result ...) (if synchronous-p ... ... ...) (list ... result))))))))
  (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn ...)) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr ...) (cadr args) (car ...)))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car ...) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and ... ...) (setcdr letarg ...))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval ... ...))))) (eval form)) (t (if (and args (not (memq (car form) (quote ...)))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval ... synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form ...) (progn ... ...) (if ... ... ...))))))))
  (cond ((not (listp form)) (list (quote quote) (eval form))) ((memq (car form) (quote (quote function))) form) (t (when (eq (car form) (quote eshell-do-eval)) (setq form (cadr (cadr form)))) (if (eshell-macrop (car form)) (let ((exp (eshell-copy-tree (macroexpand form)))) (eshell-manipulate (format "expanding macro `%s'" (symbol-name (car form))) (setcar form (car exp)) (setcdr form (cdr exp))))) (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree ...))) (while (cadr (eshell-do-eval ...)) (setcar eshell-command-body (if ... ... ...)) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree ...))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert ...) (eshell-do-eval ...)) (unless (car eshell-test-body) (setcar eshell-test-body ...)) (setcar eshell-command-body (eshell-copy-tree ...)) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq ... ...) (not ...)) (eshell-manipulate "evaluating let args" (dolist ... ...))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args ...))) (eval form)) (t (if (and args (not ...)) (eshell-manipulate (format "evaluating arguments to `%s'" ...) (while args ... ...))) (cond ((eq ... ...) (car ...)) ((eq ... ...) (cadr form)) (t (let ... ...))))))))
  eshell-do-eval((let ((eshell-current-handles (quote [nil (t . 1) (t . 1)]))) (eshell-do-eval (quote (progn (let (nextproc) (eshell-do-eval (quote (setq ... ...)) nil) (eshell-set-output-handle 1 (quote append) nextproc) (eshell-set-output-handle 2 (quote append) nextproc) (setq tailproc (or tailproc nextproc))) nil (let ((eshell-in-pipeline-p (quote first))) (eshell-named-command* "ls")))) nil)) nil)
  (setcar args (eshell-do-eval (car args) synchronous-p))
  (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args)))
  (progn (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))
  (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))
  (if (and args (not (memq (car form) (quote (run-hooks))))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args)))))
  (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn (\,@ ...))) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr (eshell-do-eval ...)) (cadr args) (car (cddr args))))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car (cadr args)) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and (listp letarg) (not ...)) (setcdr letarg (list ...)))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval (quote ...) (\, synchronous-p)))))) (eval form)) (t (if (and args (not (memq (car form) (quote (run-hooks))))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form (catch ... ...)) (progn (eshell-manipulate "substituting replacement form" ... ...) (eshell-do-eval form synchronous-p)) (if (and ... ... result ...) (if synchronous-p ... ... ...) (list ... result))))))))
  (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn ...)) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr ...) (cadr args) (car ...)))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car ...) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and ... ...) (setcdr letarg ...))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval ... ...))))) (eval form)) (t (if (and args (not (memq (car form) (quote ...)))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval ... synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form ...) (progn ... ...) (if ... ... ...))))))))
  (cond ((not (listp form)) (list (quote quote) (eval form))) ((memq (car form) (quote (quote function))) form) (t (when (eq (car form) (quote eshell-do-eval)) (setq form (cadr (cadr form)))) (if (eshell-macrop (car form)) (let ((exp (eshell-copy-tree (macroexpand form)))) (eshell-manipulate (format "expanding macro `%s'" (symbol-name (car form))) (setcar form (car exp)) (setcdr form (cdr exp))))) (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree ...))) (while (cadr (eshell-do-eval ...)) (setcar eshell-command-body (if ... ... ...)) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree ...))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert ...) (eshell-do-eval ...)) (unless (car eshell-test-body) (setcar eshell-test-body ...)) (setcar eshell-command-body (eshell-copy-tree ...)) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq ... ...) (not ...)) (eshell-manipulate "evaluating let args" (dolist ... ...))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args ...))) (eval form)) (t (if (and args (not ...)) (eshell-manipulate (format "evaluating arguments to `%s'" ...) (while args ... ...))) (cond ((eq ... ...) (car ...)) ((eq ... ...) (cadr form)) (t (let ... ...))))))))
  eshell-do-eval((progn (let ((eshell-current-handles (quote [nil (t . 1) (t . 1)]))) (eshell-do-eval (quote (progn (let (nextproc) (eshell-do-eval (quote ...) nil) (eshell-set-output-handle 1 (quote append) nextproc) (eshell-set-output-handle 2 (quote append) nextproc) (setq tailproc (or tailproc nextproc))) nil (let ((eshell-in-pipeline-p ...)) (eshell-named-command* "ls")))) nil)) (eshell-process-identity tailproc)) nil)
  (let ((eshell-in-pipeline-p (quote t)) tailproc) (eshell-do-eval (quote (progn (let ((eshell-current-handles (quote [nil ... ...]))) (eshell-do-eval (quote (progn ... nil ...)) nil)) (eshell-process-identity tailproc))) nil))
  eval((let ((eshell-in-pipeline-p (quote t)) tailproc) (eshell-do-eval (quote (progn (let ((eshell-current-handles (quote [nil ... ...]))) (eshell-do-eval (quote (progn ... nil ...)) nil)) (eshell-process-identity tailproc))) nil)))
  (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn (\,@ ...))) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr (eshell-do-eval ...)) (cadr args) (car (cddr args))))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car (cadr args)) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and (listp letarg) (not ...)) (setcdr letarg (list ...)))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval (quote ...) (\, synchronous-p)))))) (eval form)) (t (if (and args (not (memq (car form) (quote (run-hooks))))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form (catch ... ...)) (progn (eshell-manipulate "substituting replacement form" ... ...) (eshell-do-eval form synchronous-p)) (if (and ... ... result ...) (if synchronous-p ... ... ...) (list ... result))))))))
  (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn ...)) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr ...) (cadr args) (car ...)))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car ...) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and ... ...) (setcdr letarg ...))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval ... ...))))) (eval form)) (t (if (and args (not (memq (car form) (quote ...)))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval ... synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form ...) (progn ... ...) (if ... ... ...))))))))
  (cond ((not (listp form)) (list (quote quote) (eval form))) ((memq (car form) (quote (quote function))) form) (t (when (eq (car form) (quote eshell-do-eval)) (setq form (cadr (cadr form)))) (if (eshell-macrop (car form)) (let ((exp (eshell-copy-tree (macroexpand form)))) (eshell-manipulate (format "expanding macro `%s'" (symbol-name (car form))) (setcar form (car exp)) (setcdr form (cdr exp))))) (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree ...))) (while (cadr (eshell-do-eval ...)) (setcar eshell-command-body (if ... ... ...)) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree ...))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert ...) (eshell-do-eval ...)) (unless (car eshell-test-body) (setcar eshell-test-body ...)) (setcar eshell-command-body (eshell-copy-tree ...)) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq ... ...) (not ...)) (eshell-manipulate "evaluating let args" (dolist ... ...))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args ...))) (eval form)) (t (if (and args (not ...)) (eshell-manipulate (format "evaluating arguments to `%s'" ...) (while args ... ...))) (cond ((eq ... ...) (car ...)) ((eq ... ...) (cadr form)) (t (let ... ...))))))))
  eshell-do-eval((let ((eshell-in-pipeline-p (quote t)) tailproc) (eshell-do-eval (quote (progn (let ((eshell-current-handles (quote [nil ... ...]))) (eshell-do-eval (quote (progn ... nil ...)) nil)) (eshell-process-identity tailproc))) nil)) nil)
  (setcar args (eshell-do-eval (car args) synchronous-p))
  (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args)))
  (progn (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))
  (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))
  (if (and args (not (memq (car form) (quote (run-hooks))))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args)))))
  (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn (\,@ ...))) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr (eshell-do-eval ...)) (cadr args) (car (cddr args))))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car (cadr args)) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and (listp letarg) (not ...)) (setcdr letarg (list ...)))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval (quote ...) (\, synchronous-p)))))) (eval form)) (t (if (and args (not (memq (car form) (quote (run-hooks))))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form (catch ... ...)) (progn (eshell-manipulate "substituting replacement form" ... ...) (eshell-do-eval form synchronous-p)) (if (and ... ... result ...) (if synchronous-p ... ... ...) (list ... result))))))))
  (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn ...)) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr ...) (cadr args) (car ...)))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car ...) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and ... ...) (setcdr letarg ...))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval ... ...))))) (eval form)) (t (if (and args (not (memq (car form) (quote ...)))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval ... synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form ...) (progn ... ...) (if ... ... ...))))))))
  (cond ((not (listp form)) (list (quote quote) (eval form))) ((memq (car form) (quote (quote function))) form) (t (when (eq (car form) (quote eshell-do-eval)) (setq form (cadr (cadr form)))) (if (eshell-macrop (car form)) (let ((exp (eshell-copy-tree (macroexpand form)))) (eshell-manipulate (format "expanding macro `%s'" (symbol-name (car form))) (setcar form (car exp)) (setcdr form (cdr exp))))) (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree ...))) (while (cadr (eshell-do-eval ...)) (setcar eshell-command-body (if ... ... ...)) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree ...))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert ...) (eshell-do-eval ...)) (unless (car eshell-test-body) (setcar eshell-test-body ...)) (setcar eshell-command-body (eshell-copy-tree ...)) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq ... ...) (not ...)) (eshell-manipulate "evaluating let args" (dolist ... ...))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args ...))) (eval form)) (t (if (and args (not ...)) (eshell-manipulate (format "evaluating arguments to `%s'" ...) (while args ... ...))) (cond ((eq ... ...) (car ...)) ((eq ... ...) (cadr form)) (t (let ... ...))))))))
  eshell-do-eval((prog1 (let ((eshell-in-pipeline-p (quote t)) tailproc) (eshell-do-eval (quote (progn (let ((eshell-current-handles ...)) (eshell-do-eval (quote ...) nil)) (eshell-process-identity tailproc))) nil)) (run-hooks (quote eshell-this-command-hook))) nil)
  (condition-case err (eshell-do-eval (quote (prog1 (let ((eshell-in-pipeline-p (quote t)) tailproc) (eshell-do-eval (quote (progn ... ...)) nil)) (run-hooks (quote eshell-this-command-hook)))) nil) (error (run-hooks (quote eshell-this-command-hook)) (eshell-errorn (error-message-string err)) (eshell-close-handles 1)))
  eval((condition-case err (eshell-do-eval (quote (prog1 (let ((eshell-in-pipeline-p (quote t)) tailproc) (eshell-do-eval (quote (progn ... ...)) nil)) (run-hooks (quote eshell-this-command-hook)))) nil) (error (run-hooks (quote eshell-this-command-hook)) (eshell-errorn (error-message-string err)) (eshell-close-handles 1))))
  (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn (\,@ ...))) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr (eshell-do-eval ...)) (cadr args) (car (cddr args))))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car (cadr args)) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and (listp letarg) (not ...)) (setcdr letarg (list ...)))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval (quote ...) (\, synchronous-p)))))) (eval form)) (t (if (and args (not (memq (car form) (quote (run-hooks))))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form (catch ... ...)) (progn (eshell-manipulate "substituting replacement form" ... ...) (eshell-do-eval form synchronous-p)) (if (and ... ... result ...) (if synchronous-p ... ... ...) (list ... result))))))))
  (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn ...)) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr ...) (cadr args) (car ...)))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car ...) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and ... ...) (setcdr letarg ...))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval ... ...))))) (eval form)) (t (if (and args (not (memq (car form) (quote ...)))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval ... synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form ...) (progn ... ...) (if ... ... ...))))))))
  (cond ((not (listp form)) (list (quote quote) (eval form))) ((memq (car form) (quote (quote function))) form) (t (when (eq (car form) (quote eshell-do-eval)) (setq form (cadr (cadr form)))) (if (eshell-macrop (car form)) (let ((exp (eshell-copy-tree (macroexpand form)))) (eshell-manipulate (format "expanding macro `%s'" (symbol-name (car form))) (setcar form (car exp)) (setcdr form (cdr exp))))) (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree ...))) (while (cadr (eshell-do-eval ...)) (setcar eshell-command-body (if ... ... ...)) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree ...))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert ...) (eshell-do-eval ...)) (unless (car eshell-test-body) (setcar eshell-test-body ...)) (setcar eshell-command-body (eshell-copy-tree ...)) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq ... ...) (not ...)) (eshell-manipulate "evaluating let args" (dolist ... ...))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args ...))) (eval form)) (t (if (and args (not ...)) (eshell-manipulate (format "evaluating arguments to `%s'" ...) (while args ... ...))) (cond ((eq ... ...) (car ...)) ((eq ... ...) (cadr form)) (t (let ... ...))))))))
  eshell-do-eval((condition-case err (eshell-do-eval (quote (prog1 (let ((eshell-in-pipeline-p (quote t)) tailproc) (eshell-do-eval (quote (progn ... ...)) nil)) (run-hooks (quote eshell-this-command-hook)))) nil) (error (run-hooks (quote eshell-this-command-hook)) (eshell-errorn (error-message-string err)) (eshell-close-handles 1))) nil)
  (let ((eshell-this-command-hook (quote (ignore)))) (eshell-do-eval (quote (condition-case err (eshell-do-eval (quote (prog1 (let ... ...) (run-hooks ...))) nil) (error (run-hooks (quote eshell-this-command-hook)) (eshell-errorn (error-message-string err)) (eshell-close-handles 1)))) nil))
  eval((let ((eshell-this-command-hook (quote (ignore)))) (eshell-do-eval (quote (condition-case err (eshell-do-eval (quote (prog1 (let ... ...) (run-hooks ...))) nil) (error (run-hooks (quote eshell-this-command-hook)) (eshell-errorn (error-message-string err)) (eshell-close-handles 1)))) nil)))
  (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn (\,@ ...))) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr (eshell-do-eval ...)) (cadr args) (car (cddr args))))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car (cadr args)) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and (listp letarg) (not ...)) (setcdr letarg (list ...)))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval (quote ...) (\, synchronous-p)))))) (eval form)) (t (if (and args (not (memq (car form) (quote (run-hooks))))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form (catch ... ...)) (progn (eshell-manipulate "substituting replacement form" ... ...) (eshell-do-eval form synchronous-p)) (if (and ... ... result ...) (if synchronous-p ... ... ...) (list ... result))))))))
  (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn ...)) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr ...) (cadr args) (car ...)))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car ...) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and ... ...) (setcdr letarg ...))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval ... ...))))) (eval form)) (t (if (and args (not (memq (car form) (quote ...)))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval ... synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form ...) (progn ... ...) (if ... ... ...))))))))
  (cond ((not (listp form)) (list (quote quote) (eval form))) ((memq (car form) (quote (quote function))) form) (t (when (eq (car form) (quote eshell-do-eval)) (setq form (cadr (cadr form)))) (if (eshell-macrop (car form)) (let ((exp (eshell-copy-tree (macroexpand form)))) (eshell-manipulate (format "expanding macro `%s'" (symbol-name (car form))) (setcar form (car exp)) (setcdr form (cdr exp))))) (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree ...))) (while (cadr (eshell-do-eval ...)) (setcar eshell-command-body (if ... ... ...)) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree ...))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert ...) (eshell-do-eval ...)) (unless (car eshell-test-body) (setcar eshell-test-body ...)) (setcar eshell-command-body (eshell-copy-tree ...)) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq ... ...) (not ...)) (eshell-manipulate "evaluating let args" (dolist ... ...))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args ...))) (eval form)) (t (if (and args (not ...)) (eshell-manipulate (format "evaluating arguments to `%s'" ...) (while args ... ...))) (cond ((eq ... ...) (car ...)) ((eq ... ...) (cadr form)) (t (let ... ...))))))))
  eshell-do-eval((let ((eshell-this-command-hook (quote (ignore)))) (eshell-do-eval (quote (condition-case err (eshell-do-eval (quote (prog1 (let ... ...) (run-hooks ...))) nil) (error (run-hooks (quote eshell-this-command-hook)) (eshell-errorn (error-message-string err)) (eshell-close-handles 1)))) nil)) nil)
  (setcar args (eshell-do-eval (car args) synchronous-p))
  (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args)))
  (progn (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))
  (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))
  (if (and args (not (memq (car form) (quote (run-hooks))))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args)))))
  (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn (\,@ ...))) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr (eshell-do-eval ...)) (cadr args) (car (cddr args))))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car (cadr args)) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and (listp letarg) (not ...)) (setcdr letarg (list ...)))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval (quote ...) (\, synchronous-p)))))) (eval form)) (t (if (and args (not (memq (car form) (quote (run-hooks))))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form (catch ... ...)) (progn (eshell-manipulate "substituting replacement form" ... ...) (eshell-do-eval form synchronous-p)) (if (and ... ... result ...) (if synchronous-p ... ... ...) (list ... result))))))))
  (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn ...)) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr ...) (cadr args) (car ...)))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car ...) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and ... ...) (setcdr letarg ...))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval ... ...))))) (eval form)) (t (if (and args (not (memq (car form) (quote ...)))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval ... synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form ...) (progn ... ...) (if ... ... ...))))))))
  (cond ((not (listp form)) (list (quote quote) (eval form))) ((memq (car form) (quote (quote function))) form) (t (when (eq (car form) (quote eshell-do-eval)) (setq form (cadr (cadr form)))) (if (eshell-macrop (car form)) (let ((exp (eshell-copy-tree (macroexpand form)))) (eshell-manipulate (format "expanding macro `%s'" (symbol-name (car form))) (setcar form (car exp)) (setcdr form (cdr exp))))) (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree ...))) (while (cadr (eshell-do-eval ...)) (setcar eshell-command-body (if ... ... ...)) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree ...))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert ...) (eshell-do-eval ...)) (unless (car eshell-test-body) (setcar eshell-test-body ...)) (setcar eshell-command-body (eshell-copy-tree ...)) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq ... ...) (not ...)) (eshell-manipulate "evaluating let args" (dolist ... ...))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args ...))) (eval form)) (t (if (and args (not ...)) (eshell-manipulate (format "evaluating arguments to `%s'" ...) (while args ... ...))) (cond ((eq ... ...) (car ...)) ((eq ... ...) (cadr form)) (t (let ... ...))))))))
  eshell-do-eval((progn (let ((eshell-this-command-hook (quote (ignore)))) (eshell-do-eval (quote (condition-case err (eshell-do-eval (quote (prog1 ... ...)) nil) (error (run-hooks (quote eshell-this-command-hook)) (eshell-errorn (error-message-string err)) (eshell-close-handles 1)))) nil))) nil)
  (catch (quote top-level) (eshell-do-eval (quote (progn (let ((eshell-this-command-hook (quote ...))) (eshell-do-eval (quote (condition-case err ... ...)) nil)))) nil))
  eval((catch (quote top-level) (eshell-do-eval (quote (progn (let ((eshell-this-command-hook (quote ...))) (eshell-do-eval (quote (condition-case err ... ...)) nil)))) nil)))
  (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn (\,@ ...))) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr (eshell-do-eval ...)) (cadr args) (car (cddr args))))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car (cadr args)) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and (listp letarg) (not ...)) (setcdr letarg (list ...)))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval (quote ...) (\, synchronous-p)))))) (eval form)) (t (if (and args (not (memq (car form) (quote (run-hooks))))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form (catch ... ...)) (progn (eshell-manipulate "substituting replacement form" ... ...) (eshell-do-eval form synchronous-p)) (if (and ... ... result ...) (if synchronous-p ... ... ...) (list ... result))))))))
  (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn ...)) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr ...) (cadr args) (car ...)))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car ...) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and ... ...) (setcdr letarg ...))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval ... ...))))) (eval form)) (t (if (and args (not (memq (car form) (quote ...)))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval ... synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form ...) (progn ... ...) (if ... ... ...))))))))
  (cond ((not (listp form)) (list (quote quote) (eval form))) ((memq (car form) (quote (quote function))) form) (t (when (eq (car form) (quote eshell-do-eval)) (setq form (cadr (cadr form)))) (if (eshell-macrop (car form)) (let ((exp (eshell-copy-tree (macroexpand form)))) (eshell-manipulate (format "expanding macro `%s'" (symbol-name (car form))) (setcar form (car exp)) (setcdr form (cdr exp))))) (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree ...))) (while (cadr (eshell-do-eval ...)) (setcar eshell-command-body (if ... ... ...)) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree ...))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert ...) (eshell-do-eval ...)) (unless (car eshell-test-body) (setcar eshell-test-body ...)) (setcar eshell-command-body (eshell-copy-tree ...)) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq ... ...) (not ...)) (eshell-manipulate "evaluating let args" (dolist ... ...))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args ...))) (eval form)) (t (if (and args (not ...)) (eshell-manipulate (format "evaluating arguments to `%s'" ...) (while args ... ...))) (cond ((eq ... ...) (car ...)) ((eq ... ...) (cadr form)) (t (let ... ...))))))))
  eshell-do-eval((catch (quote top-level) (eshell-do-eval (quote (progn (let ((eshell-this-command-hook (quote ...))) (eshell-do-eval (quote (condition-case err ... ...)) nil)))) nil)) nil)
  (setcar args (eshell-do-eval (car args) synchronous-p))
  (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args)))
  (progn (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))
  (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))
  (if (and args (not (memq (car form) (quote (run-hooks))))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args)))))
  (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn (\,@ ...))) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr (eshell-do-eval ...)) (cadr args) (car (cddr args))))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car (cadr args)) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and (listp letarg) (not ...)) (setcdr letarg (list ...)))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval (quote ...) (\, synchronous-p)))))) (eval form)) (t (if (and args (not (memq (car form) (quote (run-hooks))))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form (catch ... ...)) (progn (eshell-manipulate "substituting replacement form" ... ...) (eshell-do-eval form synchronous-p)) (if (and ... ... result ...) (if synchronous-p ... ... ...) (list ... result))))))))
  (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn ...)) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr ...) (cadr args) (car ...)))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car ...) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and ... ...) (setcdr letarg ...))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval ... ...))))) (eval form)) (t (if (and args (not (memq (car form) (quote ...)))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval ... synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form ...) (progn ... ...) (if ... ... ...))))))))
  (cond ((not (listp form)) (list (quote quote) (eval form))) ((memq (car form) (quote (quote function))) form) (t (when (eq (car form) (quote eshell-do-eval)) (setq form (cadr (cadr form)))) (if (eshell-macrop (car form)) (let ((exp (eshell-copy-tree (macroexpand form)))) (eshell-manipulate (format "expanding macro `%s'" (symbol-name (car form))) (setcar form (car exp)) (setcdr form (cdr exp))))) (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree ...))) (while (cadr (eshell-do-eval ...)) (setcar eshell-command-body (if ... ... ...)) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree ...))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert ...) (eshell-do-eval ...)) (unless (car eshell-test-body) (setcar eshell-test-body ...)) (setcar eshell-command-body (eshell-copy-tree ...)) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq ... ...) (not ...)) (eshell-manipulate "evaluating let args" (dolist ... ...))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args ...))) (eval form)) (t (if (and args (not ...)) (eshell-manipulate (format "evaluating arguments to `%s'" ...) (while args ... ...))) (cond ((eq ... ...) (car ...)) ((eq ... ...) (cadr form)) (t (let ... ...))))))))
  eshell-do-eval((progn (quote nil) (catch (quote top-level) (eshell-do-eval (quote (progn (let ((eshell-this-command-hook ...)) (eshell-do-eval (quote ...) nil)))) nil)) (run-hooks (quote eshell-post-command-hook))) nil)
  (let ((eshell-current-handles (quote [nil (t . 1) (t . 1)])) eshell-current-subjob-p) (eshell-do-eval (quote (progn (quote nil) (catch (quote top-level) (eshell-do-eval (quote (progn ...)) nil)) (run-hooks (quote eshell-post-command-hook)))) nil))
  eval((let ((eshell-current-handles (quote [nil (t . 1) (t . 1)])) eshell-current-subjob-p) (eshell-do-eval (quote (progn (quote nil) (catch (quote top-level) (eshell-do-eval (quote (progn ...)) nil)) (run-hooks (quote eshell-post-command-hook)))) nil)))
  (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn (\,@ ...))) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr (eshell-do-eval ...)) (cadr args) (car (cddr args))))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car (cadr args)) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and (listp letarg) (not ...)) (setcdr letarg (list ...)))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval (quote ...) (\, synchronous-p)))))) (eval form)) (t (if (and args (not (memq (car form) (quote (run-hooks))))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval (car args) synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form (catch ... ...)) (progn (eshell-manipulate "substituting replacement form" ... ...) (eshell-do-eval form synchronous-p)) (if (and ... ... result ...) (if synchronous-p ... ... ...) (list ... result))))))))
  (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (while (cadr (eshell-do-eval (car eshell-test-body))) (setcar eshell-command-body (if (cddr args) (\` (progn ...)) (eshell-copy-tree (cadr args)))) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body))) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree (car args)))) (setcar eshell-command-body (eshell-copy-tree (if (cadr ...) (cadr args) (car ...)))) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq (car form) (quote let)) (not (eq (car ...) (quote eshell-do-eval)))) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and ... ...) (setcdr letarg ...))))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args (\` (eshell-do-eval ... ...))))) (eval form)) (t (if (and args (not (memq (car form) (quote ...)))) (eshell-manipulate (format "evaluating arguments to `%s'" (symbol-name (car form))) (while args (setcar args (eshell-do-eval ... synchronous-p)) (setq args (cdr args))))) (cond ((eq (car form) (quote progn)) (car (last form))) ((eq (car form) (quote prog1)) (cadr form)) (t (let (result new-form) (if (setq new-form ...) (progn ... ...) (if ... ... ...))))))))
  (cond ((not (listp form)) (list (quote quote) (eval form))) ((memq (car form) (quote (quote function))) form) (t (when (eq (car form) (quote eshell-do-eval)) (setq form (cadr (cadr form)))) (if (eshell-macrop (car form)) (let ((exp (eshell-copy-tree (macroexpand form)))) (eshell-manipulate (format "expanding macro `%s'" (symbol-name (car form))) (setcar form (car exp)) (setcdr form (cdr exp))))) (let ((args (cdr form))) (cond ((eq (car form) (quote while)) (when (car eshell-command-body) (assert (not synchronous-p)) (eshell-do-eval (car eshell-command-body)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) (unless (car eshell-test-body) (setcar eshell-test-body (eshell-copy-tree ...))) (while (cadr (eshell-do-eval ...)) (setcar eshell-command-body (if ... ... ...)) (eshell-do-eval (car eshell-command-body) synchronous-p) (setcar eshell-command-body nil) (setcar eshell-test-body (eshell-copy-tree ...))) (setcar eshell-command-body nil)) ((eq (car form) (quote if)) (if (car eshell-command-body) (progn (assert ...) (eshell-do-eval ...)) (unless (car eshell-test-body) (setcar eshell-test-body ...)) (setcar eshell-command-body (eshell-copy-tree ...)) (eshell-do-eval (car eshell-command-body) synchronous-p)) (setcar eshell-command-body nil) (setcar eshell-test-body nil)) ((eq (car form) (quote setcar)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((eq (car form) (quote setcdr)) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) ((memq (car form) (quote (let catch condition-case unwind-protect))) (if (and (eq ... ...) (not ...)) (eshell-manipulate "evaluating let args" (dolist ... ...))) (unless (eq (car form) (quote unwind-protect)) (setq args (cdr args))) (unless (eq (caar args) (quote eshell-do-eval)) (eshell-manipulate "handling special form" (setcar args ...))) (eval form)) (t (if (and args (not ...)) (eshell-manipulate (format "evaluating arguments to `%s'" ...) (while args ... ...))) (cond ((eq ... ...) (car ...)) ((eq ... ...) (cadr form)) (t (let ... ...))))))))
  eshell-do-eval((let ((eshell-current-handles (quote [nil (t . 1) (t . 1)])) eshell-current-subjob-p) (eshell-do-eval (quote (progn (quote nil) (catch (quote top-level) (eshell-do-eval (quote (progn ...)) nil)) (run-hooks (quote eshell-post-command-hook)))) nil)))
  (setq retval (eshell-do-eval eshell-current-command))
  (ignore (setq retval (eshell-do-eval eshell-current-command)))
  (catch (quote eshell-defer) (ignore (setq retval (eshell-do-eval eshell-current-command))))
  (let* (retval (proc (catch (quote eshell-defer) (ignore (setq retval (eshell-do-eval eshell-current-command)))))) (if (eshell-processp proc) (ignore (setq eshell-last-async-proc proc)) (cadr retval)))
  (progn (let* (retval (proc (catch (quote eshell-defer) (ignore (setq retval (eshell-do-eval eshell-current-command)))))) (if (eshell-processp proc) (ignore (setq eshell-last-async-proc proc)) (cadr retval))))
  (if eshell-current-command (progn (let* (retval (proc (catch (quote eshell-defer) (ignore (setq retval ...))))) (if (eshell-processp proc) (ignore (setq eshell-last-async-proc proc)) (cadr retval)))))
  (when eshell-current-command (let* (retval (proc (catch (quote eshell-defer) (ignore (setq retval (eshell-do-eval eshell-current-command)))))) (if (eshell-processp proc) (ignore (setq eshell-last-async-proc proc)) (cadr retval))))
  (progn (setq eshell-last-async-proc nil) (when eshell-current-command (let* (retval (proc (catch (quote eshell-defer) (ignore (setq retval ...))))) (if (eshell-processp proc) (ignore (setq eshell-last-async-proc proc)) (cadr retval)))))
  (condition-case err (progn (setq eshell-last-async-proc nil) (when eshell-current-command (let* (retval (proc (catch (quote eshell-defer) (ignore ...)))) (if (eshell-processp proc) (ignore (setq eshell-last-async-proc proc)) (cadr retval))))) (error (error (error-message-string err))))
  (eshell-condition-case err (progn (setq eshell-last-async-proc nil) (when eshell-current-command (let* (retval (proc (catch (quote eshell-defer) (ignore ...)))) (if (eshell-processp proc) (ignore (setq eshell-last-async-proc proc)) (cadr retval))))) (error (error (error-message-string err))))
  eshell-resume-eval()
  (catch (quote eshell-incomplete) (eshell-resume-eval))
  (let ((delim (catch (quote eshell-incomplete) (eshell-resume-eval)))) (if (listp delim) (setq delim (car delim))) (if (and delim (not (eq delim t))) (error "Unmatched delimiter: %c" delim)))
  (if eshell-current-command (setcdr (last (cdr eshell-current-command)) (list (\` (let ((here (and ... ...))) (\, (and input (\` ...))) (if here (eshell-update-markers here)) (eshell-do-eval (quote (\, command))))))) (and eshell-debug-command (with-current-buffer (get-buffer-create "*eshell last cmd*") (erase-buffer) (insert "command: \"" input "\"\n"))) (setq eshell-current-command command) (let ((delim (catch (quote eshell-incomplete) (eshell-resume-eval)))) (if (listp delim) (setq delim (car delim))) (if (and delim (not (eq delim t))) (error "Unmatched delimiter: %c" delim))))
  eshell-eval-command((let ((eshell-current-handles (quote [nil (t . 1) (t . 1)])) eshell-current-subjob-p) (eshell-do-eval (quote (progn (quote nil) (catch (quote top-level) (eshell-do-eval (quote (progn ...)) nil)) (run-hooks (quote eshell-post-command-hook)))) nil)) "ls | grep foo")
  (if (eshell-invoke-directly cmd input) (eval cmd) (eshell-eval-command cmd input))
  (ignore (if (eshell-invoke-directly cmd input) (eval cmd) (eshell-eval-command cmd input)))
  (catch (quote eshell-terminal) (ignore (if (eshell-invoke-directly cmd input) (eval cmd) (eshell-eval-command cmd input))))
  (and (catch (quote eshell-terminal) (ignore (if (eshell-invoke-directly cmd input) (eval cmd) (eshell-eval-command cmd input)))) (eshell-life-is-too-much))
  (progn (eshell-update-markers eshell-last-output-end) (setq input (buffer-substring-no-properties eshell-last-input-start (1- eshell-last-input-end))) (run-hooks (quote eshell-input-filter-functions)) (and (catch (quote eshell-terminal) (ignore (if (eshell-invoke-directly cmd input) (eval cmd) (eshell-eval-command cmd input)))) (eshell-life-is-too-much)))
  (if cmd (progn (eshell-update-markers eshell-last-output-end) (setq input (buffer-substring-no-properties eshell-last-input-start (1- eshell-last-input-end))) (run-hooks (quote eshell-input-filter-functions)) (and (catch (quote eshell-terminal) (ignore (if (eshell-invoke-directly cmd input) (eval cmd) (eshell-eval-command cmd input)))) (eshell-life-is-too-much))))
  (when cmd (eshell-update-markers eshell-last-output-end) (setq input (buffer-substring-no-properties eshell-last-input-start (1- eshell-last-input-end))) (run-hooks (quote eshell-input-filter-functions)) (and (catch (quote eshell-terminal) (ignore (if (eshell-invoke-directly cmd input) (eval cmd) (eshell-eval-command cmd input)))) (eshell-life-is-too-much)))
  (let ((cmd (eshell-parse-command-input eshell-last-output-end (1- (point))))) (when cmd (eshell-update-markers eshell-last-output-end) (setq input (buffer-substring-no-properties eshell-last-input-start (1- eshell-last-input-end))) (run-hooks (quote eshell-input-filter-functions)) (and (catch (quote eshell-terminal) (ignore (if (eshell-invoke-directly cmd input) (eval cmd) (eshell-eval-command cmd input)))) (eshell-life-is-too-much))))
  (progn (setq input (buffer-substring-no-properties eshell-last-output-end (1- (point)))) (run-hook-with-args (quote eshell-expand-input-functions) eshell-last-output-end (1- (point))) (let ((cmd (eshell-parse-command-input eshell-last-output-end (1- (point))))) (when cmd (eshell-update-markers eshell-last-output-end) (setq input (buffer-substring-no-properties eshell-last-input-start (1- eshell-last-input-end))) (run-hooks (quote eshell-input-filter-functions)) (and (catch (quote eshell-terminal) (ignore (if (eshell-invoke-directly cmd input) (eval cmd) (eshell-eval-command cmd input)))) (eshell-life-is-too-much)))))
  (condition-case err (progn (setq input (buffer-substring-no-properties eshell-last-output-end (1- (point)))) (run-hook-with-args (quote eshell-expand-input-functions) eshell-last-output-end (1- (point))) (let ((cmd (eshell-parse-command-input eshell-last-output-end (1- (point))))) (when cmd (eshell-update-markers eshell-last-output-end) (setq input (buffer-substring-no-properties eshell-last-input-start (1- eshell-last-input-end))) (run-hooks (quote eshell-input-filter-functions)) (and (catch (quote eshell-terminal) (ignore (if ... ... ...))) (eshell-life-is-too-much))))) (quit (eshell-reset t) (run-hooks (quote eshell-post-command-hook)) (signal (quote quit) nil)) (error (eshell-reset t) (eshell-interactive-print (concat (error-message-string err) "\n")) (run-hooks (quote eshell-post-command-hook)) (insert-and-inherit input)))
  (eshell-condition-case err (progn (setq input (buffer-substring-no-properties eshell-last-output-end (1- (point)))) (run-hook-with-args (quote eshell-expand-input-functions) eshell-last-output-end (1- (point))) (let ((cmd (eshell-parse-command-input eshell-last-output-end (1- (point))))) (when cmd (eshell-update-markers eshell-last-output-end) (setq input (buffer-substring-no-properties eshell-last-input-start (1- eshell-last-input-end))) (run-hooks (quote eshell-input-filter-functions)) (and (catch (quote eshell-terminal) (ignore (if ... ... ...))) (eshell-life-is-too-much))))) (quit (eshell-reset t) (run-hooks (quote eshell-post-command-hook)) (signal (quote quit) nil)) (error (eshell-reset t) (eshell-interactive-print (concat (error-message-string err) "\n")) (run-hooks (quote eshell-post-command-hook)) (insert-and-inherit input)))
  (let (input) (eshell-condition-case err (progn (setq input (buffer-substring-no-properties eshell-last-output-end (1- (point)))) (run-hook-with-args (quote eshell-expand-input-functions) eshell-last-output-end (1- (point))) (let ((cmd (eshell-parse-command-input eshell-last-output-end (1- ...)))) (when cmd (eshell-update-markers eshell-last-output-end) (setq input (buffer-substring-no-properties eshell-last-input-start (1- eshell-last-input-end))) (run-hooks (quote eshell-input-filter-functions)) (and (catch (quote eshell-terminal) (ignore ...)) (eshell-life-is-too-much))))) (quit (eshell-reset t) (run-hooks (quote eshell-post-command-hook)) (signal (quote quit) nil)) (error (eshell-reset t) (eshell-interactive-print (concat (error-message-string err) "\n")) (run-hooks (quote eshell-post-command-hook)) (insert-and-inherit input))))
  (if (= eshell-last-output-end (point)) (run-hooks (quote eshell-post-command-hook)) (let (input) (eshell-condition-case err (progn (setq input (buffer-substring-no-properties eshell-last-output-end (1- (point)))) (run-hook-with-args (quote eshell-expand-input-functions) eshell-last-output-end (1- (point))) (let ((cmd (eshell-parse-command-input eshell-last-output-end ...))) (when cmd (eshell-update-markers eshell-last-output-end) (setq input (buffer-substring-no-properties eshell-last-input-start ...)) (run-hooks (quote eshell-input-filter-functions)) (and (catch ... ...) (eshell-life-is-too-much))))) (quit (eshell-reset t) (run-hooks (quote eshell-post-command-hook)) (signal (quote quit) nil)) (error (eshell-reset t) (eshell-interactive-print (concat (error-message-string err) "\n")) (run-hooks (quote eshell-post-command-hook)) (insert-and-inherit input)))))
  (if proc-running-p (progn (eshell-update-markers eshell-last-output-end) (if (or eshell-send-direct-to-subprocesses (= eshell-last-input-start eshell-last-input-end)) (unless no-newline (process-send-string (eshell-interactive-process) "\n")) (process-send-region (eshell-interactive-process) eshell-last-input-start eshell-last-input-end))) (if (= eshell-last-output-end (point)) (run-hooks (quote eshell-post-command-hook)) (let (input) (eshell-condition-case err (progn (setq input (buffer-substring-no-properties eshell-last-output-end (1- ...))) (run-hook-with-args (quote eshell-expand-input-functions) eshell-last-output-end (1- (point))) (let ((cmd ...)) (when cmd (eshell-update-markers eshell-last-output-end) (setq input ...) (run-hooks ...) (and ... ...)))) (quit (eshell-reset t) (run-hooks (quote eshell-post-command-hook)) (signal (quote quit) nil)) (error (eshell-reset t) (eshell-interactive-print (concat (error-message-string err) "\n")) (run-hooks (quote eshell-post-command-hook)) (insert-and-inherit input))))))
  (if (and proc-running-p (not (eq (process-status (eshell-interactive-process)) (quote run)))) nil (if (or proc-running-p (>= (point) eshell-last-output-end)) (goto-char (point-max)) (let ((copy (eshell-get-old-input use-region))) (goto-char eshell-last-output-end) (insert-and-inherit copy))) (unless (or no-newline (and eshell-send-direct-to-subprocesses proc-running-p)) (insert-before-markers-and-inherit 10)) (if proc-running-p (progn (eshell-update-markers eshell-last-output-end) (if (or eshell-send-direct-to-subprocesses (= eshell-last-input-start eshell-last-input-end)) (unless no-newline (process-send-string (eshell-interactive-process) "\n")) (process-send-region (eshell-interactive-process) eshell-last-input-start eshell-last-input-end))) (if (= eshell-last-output-end (point)) (run-hooks (quote eshell-post-command-hook)) (let (input) (eshell-condition-case err (progn (setq input (buffer-substring-no-properties eshell-last-output-end ...)) (run-hook-with-args (quote eshell-expand-input-functions) eshell-last-output-end (1- ...)) (let (...) (when cmd ... ... ... ...))) (quit (eshell-reset t) (run-hooks (quote eshell-post-command-hook)) (signal (quote quit) nil)) (error (eshell-reset t) (eshell-interactive-print (concat ... "\n")) (run-hooks (quote eshell-post-command-hook)) (insert-and-inherit input)))))))
  (unless (and proc-running-p (not (eq (process-status (eshell-interactive-process)) (quote run)))) (if (or proc-running-p (>= (point) eshell-last-output-end)) (goto-char (point-max)) (let ((copy (eshell-get-old-input use-region))) (goto-char eshell-last-output-end) (insert-and-inherit copy))) (unless (or no-newline (and eshell-send-direct-to-subprocesses proc-running-p)) (insert-before-markers-and-inherit 10)) (if proc-running-p (progn (eshell-update-markers eshell-last-output-end) (if (or eshell-send-direct-to-subprocesses (= eshell-last-input-start eshell-last-input-end)) (unless no-newline (process-send-string (eshell-interactive-process) "\n")) (process-send-region (eshell-interactive-process) eshell-last-input-start eshell-last-input-end))) (if (= eshell-last-output-end (point)) (run-hooks (quote eshell-post-command-hook)) (let (input) (eshell-condition-case err (progn (setq input (buffer-substring-no-properties eshell-last-output-end ...)) (run-hook-with-args (quote eshell-expand-input-functions) eshell-last-output-end (1- ...)) (let (...) (when cmd ... ... ... ...))) (quit (eshell-reset t) (run-hooks (quote eshell-post-command-hook)) (signal (quote quit) nil)) (error (eshell-reset t) (eshell-interactive-print (concat ... "\n")) (run-hooks (quote eshell-post-command-hook)) (insert-and-inherit input)))))))
  (let ((proc-running-p (and (eshell-interactive-process) (not queue-p))) (inhibit-point-motion-hooks t) after-change-functions) (unless (and proc-running-p (not (eq (process-status (eshell-interactive-process)) (quote run)))) (if (or proc-running-p (>= (point) eshell-last-output-end)) (goto-char (point-max)) (let ((copy (eshell-get-old-input use-region))) (goto-char eshell-last-output-end) (insert-and-inherit copy))) (unless (or no-newline (and eshell-send-direct-to-subprocesses proc-running-p)) (insert-before-markers-and-inherit 10)) (if proc-running-p (progn (eshell-update-markers eshell-last-output-end) (if (or eshell-send-direct-to-subprocesses (= eshell-last-input-start eshell-last-input-end)) (unless no-newline (process-send-string (eshell-interactive-process) "\n")) (process-send-region (eshell-interactive-process) eshell-last-input-start eshell-last-input-end))) (if (= eshell-last-output-end (point)) (run-hooks (quote eshell-post-command-hook)) (let (input) (eshell-condition-case err (progn (setq input ...) (run-hook-with-args ... eshell-last-output-end ...) (let ... ...)) (quit (eshell-reset t) (run-hooks ...) (signal ... nil)) (error (eshell-reset t) (eshell-interactive-print ...) (run-hooks ...) (insert-and-inherit input))))))))
  eshell-send-input(nil)
  call-interactively(eshell-send-input nil nil)





^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#9907: 24.0.90; eshell:for command destructivly modifies list variables
  2011-11-18  2:05         ` Glenn Morris
@ 2011-11-18 14:49           ` Stefan Monnier
  0 siblings, 0 replies; 7+ messages in thread
From: Stefan Monnier @ 2011-11-18 14:49 UTC (permalink / raw)
  To: Glenn Morris; +Cc: Chming, 9907

>>> Sorry 'bout that.  Should be fixed now, but please confirm.
>> It is working fine now, thanks.
> It was pointed out on emacs-devel that eshell pipes no longer work
> (it's because I just closed this bug...):

> emacs -Q -f eshell
> ls | grep foo

> -> Wrong type argument: symbolp, (quote nil)
>    and a stale grep process in M-x list-processes

I just installed the patch below which seems to fix this problem.


        Stefan


=== modified file 'lisp/ChangeLog'
--- lisp/ChangeLog	2011-11-18 14:34:39 +0000
+++ lisp/ChangeLog	2011-11-18 14:48:12 +0000
@@ -1,5 +1,10 @@
 2011-11-18  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+	* eshell/esh-cmd.el (eshell-do-eval): Handle `setq' (bug#9907).
+	(eshell-rewrite-for-command): Remove workaround.
+	(eshell-do-pipelines, eshell-do-pipelines-synchronously)
+	(eshell-do-eval, eshell-exec-lisp): Avoid gratuitous setq.
+
 	* files-x.el (modify-file-local-variable): Obey commenting conventions.
 
 2011-11-17  Glenn Morris  <rgm@gnu.org>

=== modified file 'lisp/eshell/esh-cmd.el'
--- lisp/eshell/esh-cmd.el	2011-11-14 23:59:56 +0000
+++ lisp/eshell/esh-cmd.el	2011-11-18 14:41:23 +0000
@@ -480,25 +480,20 @@
       (let ((body (car (last terms))))
 	(setcdr (last terms 2) nil)
 	`(let ((for-items
-                ;; Apparently, eshell-do-eval only works for immutable
-                ;; let-bindings, i.e. we cannot use `setq' on `for-items'.
-                ;; Instead we store the list in the car of a cons-cell (which
-                ;; acts as a ref-cell) so we can setcar instead of setq.
-                (list
                  (append
                   ,@(mapcar
                      (lambda (elem)
                        (if (listp elem)
                            elem
                          `(list ,elem)))
-                     (cdr (cddr terms))))))
+                    (cdr (cddr terms)))))
                (eshell-command-body '(nil))
                (eshell-test-body '(nil)))
-           (while (consp (car for-items))
-             (let ((,(intern (cadr terms)) (caar for-items)))
+           (while (consp for-items)
+             (let ((,(intern (cadr terms)) (car for-items)))
                (eshell-protect
                 ,(eshell-invokify-arg body t)))
-             (setcar for-items (cdar for-items)))
+             (setq for-items (cdr for-items)))
            (eshell-close-handles
             eshell-last-command-status
             (list 'quote eshell-last-command-result))))))
@@ -766,9 +761,8 @@
     `(eshell-copy-handles
       (progn
 	,(when (cdr pipeline)
-	   `(let (nextproc)
-              (setq nextproc
-                    (eshell-do-pipelines (quote ,(cdr pipeline)) t))
+	   `(let ((nextproc
+		   (eshell-do-pipelines (quote ,(cdr pipeline)) t)))
               (eshell-set-output-handle ,eshell-output-handle
                                         'append nextproc)
               (eshell-set-output-handle ,eshell-error-handle
@@ -796,10 +790,9 @@
 Output of each command is passed as input to the next one in the pipeline.
 This is used on systems where `start-process' is not supported."
   (when (setq pipeline (cadr pipeline))
-    `(let (result)
+    `(progn
        ,(when (cdr pipeline)
-          `(let (output-marker)
-             (setq output-marker ,(point-marker))
+          `(let ((output-marker ,(point-marker)))
              (eshell-set-output-handle ,eshell-output-handle
                                        'append output-marker)
              (eshell-set-output-handle ,eshell-error-handle
@@ -819,13 +812,13 @@
             `(progn
                (setq eshell-current-handles tail-handles)
                (setq eshell-in-pipeline-p nil)))
-       (setq result ,(car pipeline))
+       (let ((result ,(car pipeline)))
        ;; tailproc gets the result of the last successful process in
        ;; the pipeline.
        (setq tailproc (or result tailproc))
        ,(if (cdr pipeline)
             `(eshell-do-pipelines-synchronously (quote ,(cdr pipeline))))
-       result)))
+         result))))
 
 (defalias 'eshell-process-identity 'identity)
 
@@ -890,8 +883,7 @@
 	 (eshell-print "errors\n"))
      (if eshell-debug-command
 	 (eshell-print "commands\n")))
-    ((or (string= (car args) "-h")
-	 (string= (car args) "--help"))
+    ((member (car args) '("-h" "--help"))
      (eshell-print "usage: eshell-debug [kinds]
 
 This command is used to aid in debugging problems related to Eshell
@@ -1091,6 +1083,11 @@
 	  (eshell-manipulate "handling special form"
 	    (setcar args `(eshell-do-eval ',(car args) ,synchronous-p))))
 	(eval form))
+       ((eq (car form) 'setq)
+	(if (cddr args) (error "Unsupported form (setq X1 E1 X2 E2..)"))
+        (eshell-manipulate "evaluating arguments to setq"
+          (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)))
+	(list 'quote (eval form)))
        (t
 	(if (and args (not (memq (car form) '(run-hooks))))
 	    (eshell-manipulate
@@ -1127,11 +1124,12 @@
 	  ;; Thus, aliases can even contain references to asynchronous
 	  ;; sub-commands, and things will still work out as they
 	  ;; should.
-	  (let (result new-form)
-	    (if (setq new-form
+	  (let* (result
+                 (new-form
 		      (catch 'eshell-replace-command
 			(ignore
-			 (setq result (eval form)))))
+                     (setq result (eval form))))))
+	    (if new-form
 		(progn
 		  (eshell-manipulate "substituting replacement form"
 		    (setcar form (car new-form))
@@ -1247,14 +1245,12 @@
 PRINTER and ERRPRINT are functions to use for printing regular
 messages, and errors.  FORM-P should be non-nil if FUNC-OR-FORM
 represent a lisp form; ARGS will be ignored in that case."
-  (let (result)
     (eshell-condition-case err
-	(progn
-	  (setq result
+      (let ((result
 		(save-current-buffer
 		  (if form-p
 		      (eval func-or-form)
-		    (apply func-or-form args))))
+                 (apply func-or-form args)))))
 	  (and result (funcall printer result))
 	  result)
       (error
@@ -1265,7 +1261,7 @@
 	     (let ((func-doc (eldoc-get-fnsym-args-string func-or-form)))
 	       (setq msg (format "usage: %s" func-doc))))
 	 (funcall errprint msg))
-       nil))))
+     nil)))
 
 (defsubst eshell-apply* (printer errprint func args)
   "Call FUNC, with ARGS, trapping errors and return them as output.

=== modified file 'lisp/eshell/esh-util.el'
--- lisp/eshell/esh-util.el	2011-03-10 07:16:04 +0000
+++ lisp/eshell/esh-util.el	2011-11-18 14:14:57 +0000
@@ -140,14 +140,13 @@
 (defmacro eshell-condition-case (tag form &rest handlers)
   "If `eshell-handle-errors' is non-nil, this is `condition-case'.
 Otherwise, evaluates FORM with no error handling."
+  (declare (indent 2))
   (if eshell-handle-errors
       `(condition-case ,tag
 	   ,form
 	 ,@handlers)
     form))
 
-(put 'eshell-condition-case 'lisp-indent-function 2)
-
 (defun eshell-find-delimiter
   (open close &optional bound reverse-p backslash-p)
   "From point, find the CLOSE delimiter corresponding to OPEN.
@@ -275,14 +274,14 @@
     text))
 
 (defmacro eshell-for (for-var for-list &rest forms)
-  "Iterate through a list"
+  "Iterate through a list."
+  (declare (indent 2))
   `(let ((list-iter ,for-list))
      (while list-iter
        (let ((,for-var (car list-iter)))
 	 ,@forms)
        (setq list-iter (cdr list-iter)))))
 
-(put 'eshell-for 'lisp-indent-function 2)
 
 (make-obsolete 'eshell-for 'dolist "24.1")
 






^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2011-11-18 14:49 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-10-29 23:09 bug#9907: 24.0.90; eshell:for command destructivly modifies list variables Andreas Politz
2011-10-30  3:59 ` Stefan Monnier
2011-10-30  5:43   ` Thierry Volpiatto
2011-10-30  8:00     ` Stefan Monnier
2011-10-30 18:37       ` Thierry Volpiatto
2011-11-18  2:05         ` Glenn Morris
2011-11-18 14:49           ` Stefan Monnier

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).