diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | re.c | 40 | ||||
-rw-r--r-- | test/ChangeLog | 5 | ||||
-rw-r--r-- | test/Makefile.am | 9 | ||||
-rw-r--r-- | test/Makefile.in | 9 | ||||
-rw-r--r-- | test/reginttrad.awk | 6 | ||||
-rw-r--r-- | test/reginttrad.ok | 1 |
7 files changed, 74 insertions, 3 deletions
@@ -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, @@ -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,}/ |