diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2020-11-01 19:58:47 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2020-11-01 19:58:47 +0200 |
commit | 6faeff915e961443d66b10caf9af4cbed6fb8451 (patch) | |
tree | a97975ecfa619a23637ffa24af41e10d57f0e57c | |
parent | c2f26d724d65ae3972920013e785906bb4983c96 (diff) | |
download | egawk-6faeff915e961443d66b10caf9af4cbed6fb8451.tar.gz egawk-6faeff915e961443d66b10caf9af4cbed6fb8451.tar.bz2 egawk-6faeff915e961443d66b10caf9af4cbed6fb8451.zip |
Fix a bug in dfa.c, add test case.
-rw-r--r-- | pc/ChangeLog | 4 | ||||
-rw-r--r-- | pc/Makefile.tst | 8 | ||||
-rw-r--r-- | support/ChangeLog | 4 | ||||
-rw-r--r-- | support/dfa.c | 5 | ||||
-rw-r--r-- | test/Makefile.am | 6 | ||||
-rw-r--r-- | test/Makefile.in | 11 | ||||
-rw-r--r-- | test/Maketests | 5 | ||||
-rw-r--r-- | test/dfacheck2.awk | 1 | ||||
-rw-r--r-- | test/dfacheck2.in | 3 | ||||
-rw-r--r-- | test/dfacheck2.ok | 1 |
10 files changed, 44 insertions, 4 deletions
diff --git a/pc/ChangeLog b/pc/ChangeLog index c7eb8c00..fe1a53d7 100644 --- a/pc/ChangeLog +++ b/pc/ChangeLog @@ -1,3 +1,7 @@ +2020-11-01 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.tst: Rebuilt. + 2020-10-05 Arnold D. Robbins <arnold@skeeve.com> * Makefile.tst: Rebuilt. diff --git a/pc/Makefile.tst b/pc/Makefile.tst index 25766393..318a5b64 100644 --- a/pc/Makefile.tst +++ b/pc/Makefile.tst @@ -149,7 +149,8 @@ BASIC_TESTS = \ back89 backgsub badassign1 badbuild \ callparam childin clobber closebad clsflnam compare compare2 \ concat1 concat2 concat3 concat4 concat5 convfmt \ - datanonl defref delargv delarpm2 delarprm delfunc dfamb1 dfastress dynlj \ + datanonl defref delargv delarpm2 delarprm delfunc \ + dfacheck2 dfamb1 dfastress dynlj \ escapebrace eofsplit eofsrc1 exit2 exitval1 exitval2 exitval3 \ fcall_exit fcall_exit2 fldchg fldchgnf fldterm fnamedat fnarray fnarray2 \ fnaryscl fnasgnm fnmisc fordel forref forsimp fsbs fscaret fsnul1 \ @@ -1495,6 +1496,11 @@ delfunc: @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +dfacheck2: + @echo $@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + dfamb1: @echo $@ $(ZOS_FAIL) @[ -z "$$GAWKLOCALE" ] && GAWKLOCALE=ENU_USA.1252; export GAWKLOCALE; \ diff --git a/support/ChangeLog b/support/ChangeLog index b81b0e71..edef437e 100644 --- a/support/ChangeLog +++ b/support/ChangeLog @@ -1,3 +1,7 @@ +2020-11-01 Arnold D. Robbins <arnold@skeeve.com> + + * dfa.c: Synced from GNULIB. + 2020-10-15 Arnold D. Robbins <arnold@skeeve.com> * random.c: Move code to using prototypes. diff --git a/support/dfa.c b/support/dfa.c index 8aef2f37..df32dd90 100644 --- a/support/dfa.c +++ b/support/dfa.c @@ -2437,7 +2437,7 @@ merge_nfa_state (struct dfa *d, idx_t tindex, char *flags, continue; } - if (!(flags[sindex] & (OPT_LPAREN | OPT_RPAREN))) + if (sindex != tindex && !(flags[sindex] & (OPT_LPAREN | OPT_RPAREN))) { idx_t j; @@ -2445,6 +2445,9 @@ merge_nfa_state (struct dfa *d, idx_t tindex, char *flags, { idx_t dindex = follows[tindex].elems[j].index; + if (dindex == tindex) + continue; + if (follows[tindex].elems[j].constraint != iconstraint) continue; diff --git a/test/Makefile.am b/test/Makefile.am index d6bf7c20..aebdf83b 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -253,6 +253,9 @@ EXTRA_DIST = \ dfacheck1.awk \ dfacheck1.in \ dfacheck1.ok \ + dfacheck2.awk \ + dfacheck2.in \ + dfacheck2.ok \ dfamb1.awk \ dfamb1.in \ dfamb1.ok \ @@ -1371,7 +1374,8 @@ BASIC_TESTS = \ back89 backgsub badassign1 badbuild \ callparam childin clobber closebad clsflnam compare compare2 \ concat1 concat2 concat3 concat4 concat5 convfmt \ - datanonl defref delargv delarpm2 delarprm delfunc dfamb1 dfastress dynlj \ + datanonl defref delargv delarpm2 delarprm delfunc \ + dfacheck2 dfamb1 dfastress dynlj \ escapebrace eofsplit eofsrc1 exit2 exitval1 exitval2 exitval3 \ fcall_exit fcall_exit2 fldchg fldchgnf fldterm fnamedat fnarray fnarray2 \ fnaryscl fnasgnm fnmisc fordel forref forsimp fsbs fscaret fsnul1 \ diff --git a/test/Makefile.in b/test/Makefile.in index 884d353d..bed55b9f 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -516,6 +516,9 @@ EXTRA_DIST = \ dfacheck1.awk \ dfacheck1.in \ dfacheck1.ok \ + dfacheck2.awk \ + dfacheck2.in \ + dfacheck2.ok \ dfamb1.awk \ dfamb1.in \ dfamb1.ok \ @@ -1634,7 +1637,8 @@ BASIC_TESTS = \ back89 backgsub badassign1 badbuild \ callparam childin clobber closebad clsflnam compare compare2 \ concat1 concat2 concat3 concat4 concat5 convfmt \ - datanonl defref delargv delarpm2 delarprm delfunc dfamb1 dfastress dynlj \ + datanonl defref delargv delarpm2 delarprm delfunc \ + dfacheck2 dfamb1 dfastress dynlj \ escapebrace eofsplit eofsrc1 exit2 exitval1 exitval2 exitval3 \ fcall_exit fcall_exit2 fldchg fldchgnf fldterm fnamedat fnarray fnarray2 \ fnaryscl fnasgnm fnmisc fordel forref forsimp fsbs fscaret fsnul1 \ @@ -3164,6 +3168,11 @@ delfunc: @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +dfacheck2: + @echo $@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + dfamb1: @echo $@ $(ZOS_FAIL) @[ -z "$$GAWKLOCALE" ] && GAWKLOCALE=en_US.UTF-8; export GAWKLOCALE; \ diff --git a/test/Maketests b/test/Maketests index 2cf71332..7fc7d87f 100644 --- a/test/Maketests +++ b/test/Maketests @@ -256,6 +256,11 @@ delfunc: @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +dfacheck2: + @echo $@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + dfamb1: @echo $@ $(ZOS_FAIL) @[ -z "$$GAWKLOCALE" ] && GAWKLOCALE=en_US.UTF-8; export GAWKLOCALE; \ diff --git a/test/dfacheck2.awk b/test/dfacheck2.awk new file mode 100644 index 00000000..baafcf9c --- /dev/null +++ b/test/dfacheck2.awk @@ -0,0 +1 @@ +/^x+x+x+x+y$/ diff --git a/test/dfacheck2.in b/test/dfacheck2.in new file mode 100644 index 00000000..b22b41c2 --- /dev/null +++ b/test/dfacheck2.in @@ -0,0 +1,3 @@ +xxy +xxxy +xxxxy diff --git a/test/dfacheck2.ok b/test/dfacheck2.ok new file mode 100644 index 00000000..816275bb --- /dev/null +++ b/test/dfacheck2.ok @@ -0,0 +1 @@ +xxxxy |