autoconf-patches
[Top][All Lists]
Advanced

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

[PATCH] use indirect dispatch instead of m4_case


From: Paolo Bonzini
Subject: [PATCH] use indirect dispatch instead of m4_case
Date: Fri, 5 Oct 2007 09:57:59 +0200

Just as an experiment, I tried replacing m4_case with indirect dispatch
in _AT_CHECK.  It *is* faster by about 10%.

There is no more duplicate code in general.m4 than there was before.

2007-10-04  Paolo Bonzini  <address@hidden>

        * general.m4 (AT_DIFF_STDERR(...), AT_DIFF_STDOUT(...): New,
        extracted from _AT_CHECK.
        (_AT_CHECK): Replace m4_case with m4_ifdef/m4_indir.
---
 ChangeLog               |    6 ++++++
 lib/autotest/general.m4 |   31 +++++++++++++++++--------------
 2 files changed, 23 insertions(+), 14 deletions(-)

diff --git a/lib/autotest/general.m4 b/lib/autotest/general.m4
index b87ba96..1065d0b 100644
--- a/lib/autotest/general.m4
+++ b/lib/autotest/general.m4
@@ -1486,6 +1486,19 @@ m4_popdef([at_lf])[]dnl
 m4_popdef([at_reason])])
 
 
+# AT_DIFF_STDERR/AT_DIFF_STDOUT
+# -----------------------------
+# These are subroutines of AT_CHECK.  Using indirect dispatch is a tad
+# faster than using m4_case, and these are called very frequently.
+m4_define([AT_DIFF_STDERR(stderr)], [echo stderr:; tee stderr <"$at_stderr"])
+m4_define([AT_DIFF_STDERR(ignore)], [echo stderr:; cat "$at_stderr"])
+m4_define([AT_DIFF_STDERR(experr)], [$at_diff experr "$at_stderr" || 
at_failed=:])
+m4_define([AT_DIFF_STDERR()],      [at_diff_devnull "$at_stderr" || 
at_failed=:])
+m4_define([AT_DIFF_STDOUT(stdout)], [echo stdout:; tee stdout <"$at_stdout"])
+m4_define([AT_DIFF_STDOUT(ignore)], [echo stdout:; cat "$at_stdout"])
+m4_define([AT_DIFF_STDOUT(expout)], [$at_diff expout "$at_stdout" || 
at_failed=:])
+m4_define([AT_DIFF_STDOUT()],      [at_diff_devnull "$at_stdout" || 
at_failed=:])
+
 # _AT_CHECK(COMMANDS, [STATUS = 0], STDOUT, STDERR,
 #           [RUN-IF-FAIL], [RUN-IF-PASS], SHELL_ESCAPE_IO)
 # ---------------------------------------------------------
@@ -1532,20 +1545,10 @@ else
 fi
 at_status=$?
 at_failed=false
-dnl Check stderr.
-m4_case([$4],
-       stderr, [echo stderr:; tee stderr <"$at_stderr"],
-       ignore, [echo stderr:; cat "$at_stderr"],
-       experr, [$at_diff experr "$at_stderr" || at_failed=:],
-        [],     [at_diff_devnull "$at_stderr" || at_failed=:],
-       [echo >>"$at_stderr"; 
AS_ECHO(["m4_ifval([$7],[AS_ESCAPE([$4])],[$4])"]) | $at_diff - "$at_stderr" || 
at_failed=:])
-dnl Check stdout.
-m4_case([$3],
-       stdout, [echo stdout:; tee stdout <"$at_stdout"],
-       ignore, [echo stdout:; cat "$at_stdout"],
-       expout, [$at_diff expout "$at_stdout" || at_failed=:],
-        [],     [at_diff_devnull "$at_stdout" || at_failed=:],
-       [echo >>"$at_stdout"; 
AS_ECHO(["m4_ifval([$7],[AS_ESCAPE([$3])],[$3])"]) | $at_diff - "$at_stdout" || 
at_failed=:])
+m4_ifdef([AT_DIFF_STDERR($4)], [m4_indir([AT_DIFF_STDERR($4)])],
+        [echo >>"$at_stderr"; 
AS_ECHO(["m4_ifval([$7],[AS_ESCAPE([$4])],[$4])"]) | $at_diff - "$at_stderr" || 
at_failed=:])
+m4_ifdef([AT_DIFF_STDOUT($3)], [m4_indir([AT_DIFF_STDOUT($3)])],
+        [echo >>"$at_stdout"; 
AS_ECHO(["m4_ifval([$7],[AS_ESCAPE([$3])],[$3])"]) | $at_diff - "$at_stdout" || 
at_failed=:])
 m4_if([$2], [ignore], [at_check_skip], [at_check_status m4_default([$2], 
[0])]) $at_status "$at_srcdir/AT_LINE"
 AS_IF($at_failed, [$5], [$6])
 $at_failed && at_log_failure AT_capture_files
-- 
1.5.2.4




reply via email to

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