[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;
}
- Define progn_ignore to run Fprogn and ignore output,
Chris Gregory <=