m4-patches
[Top][All Lists]
Advanced

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

Re: speed up translit


From: Eric Blake
Subject: Re: speed up translit
Date: Thu, 19 Feb 2009 23:29:11 +0000 (UTC)
User-agent: Loom/3.14 (http://gmane.org/)

Eric Blake <ebb9 <at> byu.net> writes:

> The trick is recognizing that for a small conversion
> set, the overhead of creating a 256-byte map and processing one byte at a
> time is large compared to searching a word at a time for just the bytes
> that need processing.

It helps if I don't introduce regressions when the second argument is empty:

>From ccc1379c1360edc29e6f8d3ee3a88756e4fe1b44 Mon Sep 17 00:00:00 2001
From: Eric Blake <address@hidden>
Date: Thu, 19 Feb 2009 16:26:55 -0700
Subject: [PATCH] Fix regression in translit.

* src/builtin.c (m4_translit): Use correct comparison.
* doc/m4.texinfo (Translit): Enhance test.

Signed-off-by: Eric Blake <address@hidden>
---
 ChangeLog      |    8 +++++++-
 doc/m4.texinfo |    6 ++++++
 src/builtin.c  |    4 ++--
 3 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index edff0b8..1124a5e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,8 @@
-2009-02-18  Eric Blake  <address@hidden>
+2009-02-19  Eric Blake  <address@hidden>
+
+       Fix regression in translit.
+       * src/builtin.c (m4_translit): Use correct comparison.
+       * doc/m4.texinfo (Translit): Enhance test.

        Speed up input engine, by searching for quotes by buffer.
        * src/input.c (struct input_block): Add end pointer to string.
@@ -6,6 +10,8 @@
        (next_token): For quotes, attempt a buffer search.
        * NEWS: Document this.

+2009-02-18  Eric Blake  <address@hidden>
+
        Speed up translit when from argument is short.
        * m4/gnulib-cache.m4: Import memchr2 module.
        * src/builtin.c (m4_translit): Use memchr2 when possible.
diff --git a/doc/m4.texinfo b/doc/m4.texinfo
index 10e63ef..6877ecc 100644
--- a/doc/m4.texinfo
+++ b/doc/m4.texinfo
@@ -5800,6 +5800,12 @@ Translit
 @result{}fgcdefgcde
 translit(`abcdeabcde', `ab', `ba')
 @result{}bacdebacde
+translit(`abcdeabcde', `e', `f')
address@hidden
+translit(`abc', `', `cde')
address@hidden
+translit(`', `a', `bc')
address@hidden
 @end example
 @end ignore

diff --git a/src/builtin.c b/src/builtin.c
index 504075a..6378fb7 100644
--- a/src/builtin.c
+++ b/src/builtin.c
@@ -1824,10 +1824,10 @@ m4_translit (struct obstack *obs, int argc, token_data 
**argv)
   char found[UCHAR_MAX + 1];
   unsigned char ch;

-  if (bad_argc (argv[0], argc, 3, 4) || !*from)
+  if (bad_argc (argv[0], argc, 3, 4) || !*data || !*from)
     {
       /* builtin(`translit') is blank, but translit(`abc') is abc.  */
-      if (argc <= 2)
+      if (2 <= argc)
        obstack_grow (obs, data, strlen (data));
       return;
     }
-- 
1.6.1.2








reply via email to

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