aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--re.c40
-rw-r--r--test/ChangeLog5
-rw-r--r--test/Makefile.am9
-rw-r--r--test/Makefile.in9
-rw-r--r--test/reginttrad.awk6
-rw-r--r--test/reginttrad.ok1
7 files changed, 74 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 55ce091f..9f2d60d6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2013-01-20 Arnold D. Robbins <arnold@skeeve.com>
+
+ * re.c (regexflags2str): New routine.
+ (resetup): If do_intervals, also turn on RE_NO_BK_BRACES.
+ Thanks to Yan Lei <yanl.fnst@cn.fujitsu.com> for the
+ bug report.
+
2013-01-18 Arnold D. Robbins <arnold@skeeve.com>
Fix a problem with include ordering to get ptrdiff_t definition,
diff --git a/re.c b/re.c
index 9be46d96..711b53e4 100644
--- a/re.c
+++ b/re.c
@@ -27,6 +27,7 @@
static reg_syntax_t syn;
static void check_bracket_exp(char *s, size_t len);
+const char *regexflags2str(int flags);
/* make_regexp --- generate compiled regular expressions */
@@ -394,7 +395,7 @@ resetup()
* variable remains for use with --traditional.
*/
if (do_intervals)
- syn |= RE_INTERVALS | RE_INVALID_INTERVAL_ORD;
+ syn |= RE_INTERVALS | RE_INVALID_INTERVAL_ORD | RE_NO_BK_BRACES;
(void) re_set_syntax(syn);
dfasyntax(syn, FALSE, '\n');
@@ -609,3 +610,40 @@ again:
done:
s[length] = save;
}
+
+/* regexflags2str --- make regex flags printable */
+
+const char *
+regexflags2str(int flags)
+{
+ static const struct flagtab regextab[] = {
+ { RE_BACKSLASH_ESCAPE_IN_LISTS, "RE_BACKSLASH_ESCAPE_IN_LISTS" },
+ { RE_BK_PLUS_QM, "RE_BK_PLUS_QM" },
+ { RE_CHAR_CLASSES, "RE_CHAR_CLASSES" },
+ { RE_CONTEXT_INDEP_ANCHORS, "RE_CONTEXT_INDEP_ANCHORS" },
+ { RE_CONTEXT_INDEP_OPS, "RE_CONTEXT_INDEP_OPS" },
+ { RE_CONTEXT_INVALID_OPS, "RE_CONTEXT_INVALID_OPS" },
+ { RE_DOT_NEWLINE, "RE_DOT_NEWLINE" },
+ { RE_DOT_NOT_NULL, "RE_DOT_NOT_NULL" },
+ { RE_HAT_LISTS_NOT_NEWLINE, "RE_HAT_LISTS_NOT_NEWLINE" },
+ { RE_INTERVALS, "RE_INTERVALS" },
+ { RE_LIMITED_OPS, "RE_LIMITED_OPS" },
+ { RE_NEWLINE_ALT, "RE_NEWLINE_ALT" },
+ { RE_NO_BK_BRACES, "RE_NO_BK_BRACES" },
+ { RE_NO_BK_PARENS, "RE_NO_BK_PARENS" },
+ { RE_NO_BK_REFS, "RE_NO_BK_REFS" },
+ { RE_NO_BK_VBAR, "RE_NO_BK_VBAR" },
+ { RE_NO_EMPTY_RANGES, "RE_NO_EMPTY_RANGES" },
+ { RE_UNMATCHED_RIGHT_PAREN_ORD, "RE_UNMATCHED_RIGHT_PAREN_ORD" },
+ { RE_NO_POSIX_BACKTRACKING, "RE_NO_POSIX_BACKTRACKING" },
+ { RE_NO_GNU_OPS, "RE_NO_GNU_OPS" },
+ { RE_DEBUG, "RE_DEBUG" },
+ { RE_INVALID_INTERVAL_ORD, "RE_INVALID_INTERVAL_ORD" },
+ { RE_ICASE, "RE_ICASE" },
+ { RE_CARET_ANCHORS_HERE, "RE_CARET_ANCHORS_HERE" },
+ { RE_CONTEXT_INVALID_DUP, "RE_CONTEXT_INVALID_DUP" },
+ { 0, NULL }
+ };
+
+ return genflags2str(flags, regextab);
+}
diff --git a/test/ChangeLog b/test/ChangeLog
index e9fc2498..b6feeb2e 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,8 @@
+2013-01-20 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (reginttrad): New test.
+ * reginttrad.awk, reginttrad.ok: New files.
+
2012-12-24 Arnold D. Robbins <arnold@skeeve.com>
* 4.0.2: Release tar ball made.
diff --git a/test/Makefile.am b/test/Makefile.am
index f6378f6c..f59aa52a 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -620,6 +620,8 @@ EXTRA_DIST = \
regeq.ok \
regexprange.awk \
regexprange.ok \
+ reginttrad.awk \
+ reginttrad.ok \
regrange.awk \
regrange.ok \
regtest.sh \
@@ -856,7 +858,7 @@ GAWK_EXT_TESTS = \
nastyparm next nondec nondec2 \
patsplit posix printfbad1 printfbad2 printfbad3 procinfs \
profile1 profile2 profile3 pty1 \
- rebuf regx8bit reint reint2 rsstart1 \
+ rebuf regx8bit reginttrad reint reint2 rsstart1 \
rsstart2 rsstart3 rstest6 shadow sortfor sortu splitarg4 strftime \
strtonum switch2
@@ -1480,6 +1482,11 @@ charasbytes:
od -c -t x1 | sed -e 's/ */ /g' -e 's/ *$$//' >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@
+reginttrad:
+ @echo $@
+ @$(AWK) --traditional -r -f $@.awk > _$@
+ @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@
+
# Targets generated for other tests:
include Maketests
diff --git a/test/Makefile.in b/test/Makefile.in
index 38a5d001..3066c31c 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -824,6 +824,8 @@ EXTRA_DIST = \
regeq.ok \
regexprange.awk \
regexprange.ok \
+ reginttrad.awk \
+ reginttrad.ok \
regrange.awk \
regrange.ok \
regtest.sh \
@@ -1060,7 +1062,7 @@ GAWK_EXT_TESTS = \
nastyparm next nondec nondec2 \
patsplit posix printfbad1 printfbad2 printfbad3 procinfs \
profile1 profile2 profile3 pty1 \
- rebuf regx8bit reint reint2 rsstart1 \
+ rebuf regx8bit reginttrad reint reint2 rsstart1 \
rsstart2 rsstart3 rstest6 shadow sortfor sortu splitarg4 strftime \
strtonum switch2
@@ -1856,6 +1858,11 @@ charasbytes:
AWKPATH=$(srcdir) $(AWK) -b -f $@.awk $(srcdir)/$@.in | \
od -c -t x1 | sed -e 's/ */ /g' -e 's/ *$$//' >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@
+
+reginttrad:
+ @echo $@
+ @$(AWK) --traditional -r -f $@.awk > _$@
+ @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@
Gt-dummy:
# file Maketests, generated from Makefile.am by the Gentests program
addcomma:
diff --git a/test/reginttrad.awk b/test/reginttrad.awk
new file mode 100644
index 00000000..9d115657
--- /dev/null
+++ b/test/reginttrad.awk
@@ -0,0 +1,6 @@
+BEGIN {
+ str1 = "aabbbc"
+ str2 = "aaabcc"
+ if (str1 ~ /b{2,}/) printf("\"%s\" matches /b{2,}/\n", str1)
+ if (str2 ~ /b{2,}/) printf("\"%s\" matches /b{2,}/\n", str2)
+}
diff --git a/test/reginttrad.ok b/test/reginttrad.ok
new file mode 100644
index 00000000..eaa278a6
--- /dev/null
+++ b/test/reginttrad.ok
@@ -0,0 +1 @@
+"aabbbc" matches /b{2,}/