emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Define progn_ignore to run Fprogn and ignore output


From: Chris Gregory
Subject: Define progn_ignore to run Fprogn and ignore output
Date: Mon, 26 Dec 2016 20:14:47 -0600

This patch defines progn_ignore to do Fprogn but not return a result.
This will minorly speed up all operations using `unwind_body'.  It also
simplifies the code for `Fprog1' without sacrificing performance.

diff --git a/src/eval.c b/src/eval.c
index ddcccc2..7e02838 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -456,10 +456,17 @@ usage: (progn BODY...)  */)
 /* Evaluate BODY sequentially, discarding its value.  Suitable for
    record_unwind_protect.  */
 
+static void
+progn_ignore (Lisp_Object body)
+{
+  while (CONSP (body))
+    eval_sub (XCAR (body));
+}
+
 void
 unwind_body (Lisp_Object body)
 {
-  Fprogn (body);
+  progn_ignore (body);
 }
 
 DEFUN ("prog1", Fprog1, Sprog1, 1, UNEVALLED, 0,
@@ -470,15 +477,8 @@ usage: (prog1 FIRST BODY...)  */)
   (Lisp_Object args)
 {
   Lisp_Object val;
-  Lisp_Object args_left;
-
-  args_left = args;
-  val = args;
-
-  val = eval_sub (XCAR (args_left));
-  while (CONSP (args_left = XCDR (args_left)))
-    eval_sub (XCAR (args_left));
-
+  val = eval_sub (XCAR (args));
+  progn_ignore (XCDR (args));
   return val;
 }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]