aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2013-01-20 20:53:57 +0200
committerArnold D. Robbins <arnold@skeeve.com>2013-01-20 20:53:57 +0200
commit8f54dd0de27cbb617ef7c3a1f5a3d57502c117aa (patch)
tree99d0b5d85b33d27afef3b790ceec5d27bd6565e7
parentee914dac4c736ae28bdacef7e5cc498c9cea38f2 (diff)
parentcb565f17eb9f4ce96c6a78fec2951120fee75a35 (diff)
downloadegawk-8f54dd0de27cbb617ef7c3a1f5a3d57502c117aa.tar.gz
egawk-8f54dd0de27cbb617ef7c3a1f5a3d57502c117aa.tar.bz2
egawk-8f54dd0de27cbb617ef7c3a1f5a3d57502c117aa.zip
Merge branch 'gawk-4.0-stable'
-rw-r--r--ChangeLog7
-rw-r--r--re.c40
-rw-r--r--test/ChangeLog5
-rw-r--r--test/Makefile.am10
-rw-r--r--test/Makefile.in9
-rw-r--r--test/reginttrad.awk6
-rw-r--r--test/reginttrad.ok1
7 files changed, 75 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index f74cc679..e98a0f45 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 8ad255e2..b81cf62d 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 */
@@ -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,}/