summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2016-09-09 08:40:01 +0300
committerArnold D. Robbins <arnold@skeeve.com>2016-09-09 08:40:01 +0300
commitcbff5bd8144c06b2c6790060462c68a22e0d4452 (patch)
tree7efd17dd15803ccbf7b4f8e1a8edddf12ffd371f
parent35c5aa16e79027691c057f53da3b506b7fc3c7e2 (diff)
parent41232b08f9db67a0a6d3e86324d776496c212560 (diff)
downloadgawk-cbff5bd8144c06b2c6790060462c68a22e0d4452.tar.gz
Merge branch 'master' into feature/typed-regex
-rw-r--r--ChangeLog4
-rw-r--r--dfa.c45
2 files changed, 36 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index 5542d69e..09d2a22f 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;
+ }
}
}