bug-grep
[Top][All Lists]
Advanced

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

[PATCH 3/4] dfa: refactor to prepare for upcoming optimizations


From: Paolo Bonzini
Subject: [PATCH 3/4] dfa: refactor to prepare for upcoming optimizations
Date: Tue, 7 Jun 2011 13:03:39 +0200

* src/dfa.c (parse_bracket_exp): Move optimization of MBCSET from here...
(addtok): ... to here.
---
 src/dfa.c |   25 ++++++++++++++++---------
 1 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/src/dfa.c b/src/dfa.c
index 6602ae8..8fc6ed0 100644
--- a/src/dfa.c
+++ b/src/dfa.c
@@ -1052,14 +1052,7 @@ parse_bracket_exp (void)
     dfawarn (_("character class syntax is [[:space:]], not [:space:]"));
 
 #if MBS_SUPPORT
-  if (MB_CUR_MAX > 1
-      && (!using_utf8()
-          || invert
-          || work_mbc->nchars != 0
-          || work_mbc->nch_classes != 0
-          || work_mbc->nranges != 0
-          || work_mbc->nequivs != 0
-          || work_mbc->ncoll_elems != 0))
+  if (MB_CUR_MAX > 1)
     {
       static charclass zeroclass;
       work_mbc->invert = invert;
@@ -1463,7 +1456,21 @@ addtok (token t)
 {
 #if MBS_SUPPORT
   if (MB_CUR_MAX > 1 && t == MBCSET)
-    addtok_mb (MBCSET, ((dfa->nmbcsets - 1) << 2) + 3);
+    {
+      struct mb_char_classes *work_mbc = &dfa->mbcsets[dfa->nmbcsets - 1];
+
+      /* UTF-8 allows treating a simple, non-inverted MBCSET like a CSET.  */
+      if (work_mbc->invert
+          || (!using_utf8() && work_mbc->cset != -1)
+          || work_mbc->nchars != 0
+          || work_mbc->nch_classes != 0
+          || work_mbc->nranges != 0
+          || work_mbc->nequivs != 0
+          || work_mbc->ncoll_elems != 0)
+        addtok_mb (MBCSET, ((dfa->nmbcsets - 1) << 2) + 3);
+      else
+        addtok (CSET + work_mbc->cset);
+    }
   else
 #endif
     addtok_mb (t, 3);
-- 
1.7.4.4





reply via email to

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