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