diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2016-09-09 08:39:54 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2016-09-09 08:39:54 +0300 |
commit | d6493fae8856653b4eaa866e859f51b7218e4446 (patch) | |
tree | d453db4f13892d9ea8ad855b6dac5683252d99ac | |
parent | 02eaa0a97d906ebedfb298f6797190606093457c (diff) | |
parent | 41232b08f9db67a0a6d3e86324d776496c212560 (diff) | |
download | egawk-d6493fae8856653b4eaa866e859f51b7218e4446.tar.gz egawk-d6493fae8856653b4eaa866e859f51b7218e4446.tar.bz2 egawk-d6493fae8856653b4eaa866e859f51b7218e4446.zip |
Merge branch 'master' into feature/nocopy
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | dfa.c | 45 |
2 files changed, 36 insertions, 13 deletions
@@ -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. @@ -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; + } } } |