svn commit: r225631 - user/gabor/tre-integration/contrib/tre/lib

Gabor Kovesdan gabor at FreeBSD.org
Fri Sep 16 22:38:57 UTC 2011


Author: gabor
Date: Fri Sep 16 22:38:57 2011
New Revision: 225631
URL: http://svn.freebsd.org/changeset/base/225631

Log:
  - Factor out duplicated macro into a common header file

Modified:
  user/gabor/tre-integration/contrib/tre/lib/fastmatch.c
  user/gabor/tre-integration/contrib/tre/lib/regexec.c
  user/gabor/tre-integration/contrib/tre/lib/tre-internal.h

Modified: user/gabor/tre-integration/contrib/tre/lib/fastmatch.c
==============================================================================
--- user/gabor/tre-integration/contrib/tre/lib/fastmatch.c	Fri Sep 16 19:53:56 2011	(r225630)
+++ user/gabor/tre-integration/contrib/tre/lib/fastmatch.c	Fri Sep 16 22:38:57 2011	(r225631)
@@ -127,28 +127,6 @@ tre_fastfree(fastmatch_t *preg)
   tre_free_fast(preg);
 }
 
-/* XXX: avoid duplication */
-#define ADJUST_OFFSETS							\
-  {									\
-    size_t slen = (size_t)(pmatch[0].rm_eo - pmatch[0].rm_so);		\
-    size_t offset = pmatch[0].rm_so;					\
-    int ret;								\
-									\
-    if ((len != (unsigned)-1) && (pmatch[0].rm_eo > len))		\
-      return REG_NOMATCH;						\
-    if ((long long)pmatch[0].rm_eo - pmatch[0].rm_so < 0)		\
-      return REG_NOMATCH;						\
-    ret = tre_match_fast(preg, &string[offset], slen, type, nmatch,	\
-			 pmatch, eflags);				\
-    for (unsigned i = 0; (i == 0) || (!(eflags & REG_NOSUB) &&		\
-         (i < nmatch)); i++)						\
-      {									\
-        pmatch[i].rm_so += offset;					\
-        pmatch[i].rm_eo += offset;					\
-      }									\
-    return ret;								\
-  }
-
 int
 tre_fastnexec(const fastmatch_t *preg, const char *string, size_t len,
          size_t nmatch, regmatch_t pmatch[], int eflags)
@@ -156,7 +134,8 @@ tre_fastnexec(const fastmatch_t *preg, c
   tre_str_type_t type = (TRE_MB_CUR_MAX == 1) ? STR_BYTE : STR_MBS;
 
   if (eflags & REG_STARTEND)
-    ADJUST_OFFSETS
+    CALL_WITH_OFFSET(tre_match_fast(preg, &string[offset], slen,
+		     type, nmatch, pmatch, eflags));
   else
     return tre_match_fast(preg, string, len, type, nmatch,
       pmatch, eflags);
@@ -176,7 +155,8 @@ tre_fastwnexec(const fastmatch_t *preg, 
   tre_str_type_t type = STR_WIDE;
 
   if (eflags & REG_STARTEND)
-    ADJUST_OFFSETS
+    CALL_WITH_OFFSET(tre_match_fast(preg, &string[offset], slen,
+		     type, nmatch, pmatch, eflags));
   else
     return tre_match_fast(preg, string, len, type, nmatch,
       pmatch, eflags);

Modified: user/gabor/tre-integration/contrib/tre/lib/regexec.c
==============================================================================
--- user/gabor/tre-integration/contrib/tre/lib/regexec.c	Fri Sep 16 19:53:56 2011	(r225630)
+++ user/gabor/tre-integration/contrib/tre/lib/regexec.c	Fri Sep 16 22:38:57 2011	(r225631)
@@ -303,27 +303,6 @@ tre_match(const tre_tnfa_t *tnfa, const 
   return status;
 }
 
-#define ADJUST_OFFSETS							\
-  {									\
-    size_t slen = (size_t)(pmatch[0].rm_eo - pmatch[0].rm_so);		\
-    size_t offset = pmatch[0].rm_so;					\
-    int ret;								\
-									\
-    if ((len != (unsigned)-1) && (pmatch[0].rm_eo > len))		\
-      return REG_NOMATCH;						\
-    if ((long long)pmatch[0].rm_eo - pmatch[0].rm_so < 0)		\
-      return REG_NOMATCH;						\
-    ret = tre_match(tnfa, &str[offset], slen, type, nmatch,		\
-		    pmatch, eflags, preg->shortcut, preg->heur);	\
-    for (unsigned i = 0; (i == 0) || (!(eflags & REG_NOSUB) &&		\
-	 (i < nmatch)); i++)						\
-      {									\
-	pmatch[i].rm_so += offset;					\
-	pmatch[i].rm_eo += offset;					\
-      }									\
-    return ret;								\
-  }
-
 int
 tre_regnexec(const regex_t *preg, const char *str, size_t len,
 	 size_t nmatch, regmatch_t pmatch[], int eflags)
@@ -332,7 +311,8 @@ tre_regnexec(const regex_t *preg, const 
   tre_str_type_t type = (TRE_MB_CUR_MAX == 1) ? STR_BYTE : STR_MBS;
 
   if (eflags & REG_STARTEND)
-    ADJUST_OFFSETS
+    CALL_WITH_OFFSET(tre_match(tnfa, &str[offset], slen, type, nmatch,
+		     pmatch, eflags, preg->shortcut, preg->heur));
   else
     return tre_match(tnfa, str, len, type, nmatch, pmatch, eflags,
 		     preg->shortcut, preg->heur);
@@ -356,7 +336,8 @@ tre_regwnexec(const regex_t *preg, const
   tre_str_type_t type = STR_WIDE;
 
   if (eflags & REG_STARTEND)
-    ADJUST_OFFSETS
+    CALL_WITH_OFFSET(tre_match(tnfa, &str[offset], slen, type, nmatch,
+		     pmatch, eflags, preg->shortcut, preg->heur));
   else
     return tre_match(tnfa, str, len, STR_WIDE, nmatch, pmatch, eflags,
 		     preg->shortcut, preg->heur);

Modified: user/gabor/tre-integration/contrib/tre/lib/tre-internal.h
==============================================================================
--- user/gabor/tre-integration/contrib/tre/lib/tre-internal.h	Fri Sep 16 19:53:56 2011	(r225630)
+++ user/gabor/tre-integration/contrib/tre/lib/tre-internal.h	Fri Sep 16 22:38:57 2011	(r225631)
@@ -256,6 +256,26 @@ struct tnfa {
   int params_depth;
 };
 
+#define CALL_WITH_OFFSET(fn)						\
+  do									\
+    {									\
+      size_t slen = (size_t)(pmatch[0].rm_eo - pmatch[0].rm_so);	\
+      size_t offset = pmatch[0].rm_so;					\
+      int ret;								\
+									\
+      if ((len != (unsigned)-1) && (pmatch[0].rm_eo > len))		\
+	return REG_NOMATCH;						\
+      if ((long long)pmatch[0].rm_eo - pmatch[0].rm_so < 0)		\
+	return REG_NOMATCH;						\
+      ret = fn;								\
+      for (unsigned i = 0; (!(eflags & REG_NOSUB) && (i < nmatch)); i++)\
+	{								\
+	  pmatch[i].rm_so += offset;					\
+	  pmatch[i].rm_eo += offset;					\
+	}								\
+      return ret;							\
+    } while (0 /*CONSTCOND*/)
+
 int
 tre_convert_pattern(const char *regex, size_t n, tre_char_t **w,
 		    size_t *wn);


More information about the svn-src-user mailing list