aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2016-09-09 08:39:54 +0300
committerArnold D. Robbins <arnold@skeeve.com>2016-09-09 08:39:54 +0300
commitd6493fae8856653b4eaa866e859f51b7218e4446 (patch)
treed453db4f13892d9ea8ad855b6dac5683252d99ac
parent02eaa0a97d906ebedfb298f6797190606093457c (diff)
parent41232b08f9db67a0a6d3e86324d776496c212560 (diff)
downloadegawk-d6493fae8856653b4eaa866e859f51b7218e4446.tar.gz
egawk-d6493fae8856653b4eaa866e859f51b7218e4446.tar.bz2
egawk-d6493fae8856653b4eaa866e859f51b7218e4446.zip
Merge branch 'master' into feature/nocopy
-rw-r--r--ChangeLog4
-rw-r--r--dfa.c45
2 files changed, 36 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index e8173dc0..c526863a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2016-09-09 Arnold D. Robbins <arnold@skeeve.com>
+
+ * dfa.c: Sync with grep.
+
2016-09-08 Paul Eggert <eggert@cs.ucla.edu>
* dfa.c, dfa.h: Sync with grep.
diff --git a/dfa.c b/dfa.c
index cf9b2ba8..b162a3b3 100644
--- a/dfa.c
+++ b/dfa.c
@@ -1487,7 +1487,7 @@ lex (struct dfa *dfa)
{
zeroset (ccl);
for (c2 = 0; c2 < NOTCHAR; ++c2)
- if (unibyte_word_constituent (dfa, c2))
+ if (dfa->syntax.sbit[c2] == CTX_LETTER)
setbit (c2, ccl);
if (c == 'W')
notset (ccl);
@@ -2204,11 +2204,10 @@ charclass_context (struct dfa const *dfa, charclass c)
int context = 0;
unsigned int j;
- if (tstbit (dfa->syntax.eolbyte, c))
- context |= CTX_NEWLINE;
-
for (j = 0; j < CHARCLASS_WORDS; ++j)
{
+ if (c[j] & dfa->syntax.newline[j])
+ context |= CTX_NEWLINE;
if (c[j] & dfa->syntax.letters[j])
context |= CTX_LETTER;
if (c[j] & ~(dfa->syntax.letters[j] | dfa->syntax.newline[j]))
@@ -2702,13 +2701,27 @@ dfastate (state_num s, struct dfa *d, state_num trans[])
is to fail miserably. */
if (d->searchflag)
{
+ int c;
+
state_newline = 0;
state_letter = d->min_trcount - 1;
state = d->initstate_notbol;
- for (i = 0; i < NOTCHAR; ++i)
- trans[i] = unibyte_word_constituent (d, i) ? state_letter : state;
- trans[d->syntax.eolbyte] = state_newline;
+ for (c = 0; c < NOTCHAR; ++c)
+ {
+ switch (d->syntax.sbit[c])
+ {
+ case CTX_NEWLINE:
+ trans[c] = state_newline;
+ break;
+ case CTX_LETTER:
+ trans[c] = state_letter;
+ break;
+ default:
+ trans[c] = state;
+ break;
+ }
+ }
}
else
for (i = 0; i < NOTCHAR; ++i)
@@ -2811,12 +2824,18 @@ dfastate (state_num s, struct dfa *d, state_num trans[])
{
int c = j * CHARCLASS_WORD_BITS + k;
- if (c == d->syntax.eolbyte)
- trans[c] = state_newline;
- else if (unibyte_word_constituent (d, c))
- trans[c] = state_letter;
- else if (c < NOTCHAR)
- trans[c] = state;
+ switch (d->syntax.sbit[c])
+ {
+ case CTX_NEWLINE:
+ trans[c] = state_newline;
+ break;
+ case CTX_LETTER:
+ trans[c] = state_letter;
+ break;
+ default:
+ trans[c] = state;
+ break;
+ }
}
}