diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2013-01-20 20:53:57 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2013-01-20 20:53:57 +0200 |
commit | 8f54dd0de27cbb617ef7c3a1f5a3d57502c117aa (patch) | |
tree | 99d0b5d85b33d27afef3b790ceec5d27bd6565e7 | |
parent | ee914dac4c736ae28bdacef7e5cc498c9cea38f2 (diff) | |
parent | cb565f17eb9f4ce96c6a78fec2951120fee75a35 (diff) | |
download | egawk-8f54dd0de27cbb617ef7c3a1f5a3d57502c117aa.tar.gz egawk-8f54dd0de27cbb617ef7c3a1f5a3d57502c117aa.tar.bz2 egawk-8f54dd0de27cbb617ef7c3a1f5a3d57502c117aa.zip |
Merge branch 'gawk-4.0-stable'
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | re.c | 40 | ||||
-rw-r--r-- | test/ChangeLog | 5 | ||||
-rw-r--r-- | test/Makefile.am | 10 | ||||
-rw-r--r-- | test/Makefile.in | 9 | ||||
-rw-r--r-- | test/reginttrad.awk | 6 | ||||
-rw-r--r-- | test/reginttrad.ok | 1 |
7 files changed, 75 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 */ @@ -408,7 +409,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'); @@ -604,3 +605,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 8d31a03d..47329fdf 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. + 2013-01-16 Arnold D. Robbins <arnold@skeeve.com> Fix tests to work with make diffout: diff --git a/test/Makefile.am b/test/Makefile.am index 8484e4db..98d82e7b 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -681,6 +681,8 @@ EXTRA_DIST = \ regeq.ok \ regexprange.awk \ regexprange.ok \ + reginttrad.awk \ + reginttrad.ok \ regrange.awk \ regrange.ok \ regtest.sh \ @@ -951,7 +953,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 \ symtab1 symtab2 symtab3 symtab4 symtab5 symtab6 symtab7 \ @@ -1743,6 +1745,7 @@ charasbytes: od -c -t x1 | sed -e 's/ */ /g' -e 's/ *$$//' >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + symtab6: @echo $@ @$(AWK) -d__$@ -f $(srcdir)/$@.awk @@ -1755,6 +1758,11 @@ symtab8: @grep -v '^ENVIRON' __$@ | grep -v '^PROCINFO' | grep -v '^FILENAME' >> _$@ ; rm __$@ @-$(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 b7c142b6..1b986df2 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -893,6 +893,8 @@ EXTRA_DIST = \ regeq.ok \ regexprange.awk \ regexprange.ok \ + reginttrad.awk \ + reginttrad.ok \ regrange.awk \ regrange.ok \ regtest.sh \ @@ -1162,7 +1164,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 \ symtab1 symtab2 symtab3 symtab4 symtab5 symtab6 symtab7 \ @@ -2134,6 +2136,11 @@ symtab8: @$(AWK) -d__$@ -f $(srcdir)/$@.awk $(srcdir)/$@.in >_$@ @grep -v '^ENVIRON' __$@ | grep -v '^PROCINFO' | grep -v '^FILENAME' >> _$@ ; rm __$@ @-$(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,}/ |