diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2016-04-24 18:09:04 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2016-04-24 18:09:04 +0300 |
commit | d3a98a0d3e60408e462b864eb74056e5e8ddad74 (patch) | |
tree | 7805bb4006a59dae1da4b1a57ee10daabd2f1b65 | |
parent | df4688e6a576822b39ee5db4c4b0770246635169 (diff) | |
parent | c65ebdef5333b1a9b891d4235367dc158d3f05b4 (diff) | |
download | egawk-d3a98a0d3e60408e462b864eb74056e5e8ddad74.tar.gz egawk-d3a98a0d3e60408e462b864eb74056e5e8ddad74.tar.bz2 egawk-d3a98a0d3e60408e462b864eb74056e5e8ddad74.zip |
Merge branch 'gawk-4.1-stable'
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | dfa.c | 70 | ||||
-rw-r--r-- | pc/ChangeLog | 4 | ||||
-rw-r--r-- | pc/Makefile.tst | 2 | ||||
-rw-r--r-- | test/ChangeLog | 4 | ||||
-rw-r--r-- | test/Makefile.am | 2 | ||||
-rw-r--r-- | test/Makefile.in | 3 |
7 files changed, 43 insertions, 46 deletions
@@ -1,3 +1,7 @@ +2016-04-24 Arnold D. Robbins <arnold@skeeve.com> + + * dfa.c: Sync with GNU grep. + 2016-04-11 Arnold D. Robbins <arnold@skeeve.com> * regex_internal.c: Replace _GL_ATTRIBUTE_PURE with @@ -377,11 +377,6 @@ struct dfa */ int *multibyte_prop; - /* A table indexed by byte values that contains the corresponding wide - character (if any) for that byte. WEOF means the byte is not a - valid single-byte character. */ - wint_t mbrtowc_cache[NOTCHAR]; - /* Array of the bracket expression in the DFA. */ struct mb_char_classes *mbcsets; size_t nmbcsets; @@ -458,19 +453,10 @@ struct dfa static void regexp (void); -static void -dfambcache (struct dfa *d) -{ - int i; - for (i = CHAR_MIN; i <= CHAR_MAX; ++i) - { - char c = i; - unsigned char uc = i; - mbstate_t s = { 0 }; - wchar_t wc; - d->mbrtowc_cache[uc] = mbrtowc (&wc, &c, 1, &s) <= 1 ? wc : WEOF; - } -} +/* A table indexed by byte values that contains the corresponding wide + character (if any) for that byte. WEOF means the byte is not a + valid single-byte character. */ +static wint_t mbrtowc_cache[NOTCHAR]; /* Store into *PWC the result of converting the leading bytes of the multibyte buffer S of length N bytes, using the mbrtowc_cache in *D @@ -493,7 +479,7 @@ static size_t mbs_to_wchar (wint_t *pwc, char const *s, size_t n, struct dfa *d) { unsigned char uc = s[0]; - wint_t wc = d->mbrtowc_cache[uc]; + wint_t wc = mbrtowc_cache[uc]; if (wc == WEOF) { @@ -698,25 +684,18 @@ static charclass letters; /* Set of characters that are newline. */ static charclass newline; -/* Add this to the test for whether a byte is word-constituent, since on - BSD-based systems, many values in the 128..255 range are classified as - alphabetic, while on glibc-based systems, they are not. */ -#ifdef __GLIBC__ -# define is_valid_unibyte_character(c) 1 -#else -# define is_valid_unibyte_character(c) (btowc (c) != WEOF) -#endif - -/* C is a "word-constituent" byte. */ -#define IS_WORD_CONSTITUENT(C) \ - (is_valid_unibyte_character (C) && (isalnum (C) || (C) == '_')) +static bool +unibyte_word_constituent (unsigned char c) +{ + return mbrtowc_cache[c] != WEOF && (isalnum (c) || (c) == '_'); +} static int char_context (unsigned char c) { if (c == eolbyte) return CTX_NEWLINE; - if (IS_WORD_CONSTITUENT (c)) + if (unibyte_word_constituent (c)) return CTX_LETTER; return CTX_NONE; } @@ -735,23 +714,29 @@ wchar_context (wint_t wc) void dfasyntax (reg_syntax_t bits, int fold, unsigned char eol) { - unsigned int i; - + int i; syntax_bits_set = 1; syntax_bits = bits; case_fold = fold != 0; eolbyte = eol; - for (i = 0; i < NOTCHAR; ++i) + for (i = CHAR_MIN; i <= CHAR_MAX; ++i) { - sbit[i] = char_context (i); - switch (sbit[i]) + char c = i; + unsigned char uc = i; + mbstate_t s = { 0 }; + wchar_t wc; + mbrtowc_cache[uc] = mbrtowc (&wc, &c, 1, &s) <= 1 ? wc : WEOF; + + /* Now that mbrtowc_cache[uc] is set, use it to calculate sbit. */ + sbit[uc] = char_context (uc); + switch (sbit[uc]) { case CTX_LETTER: - setbit (i, letters); + setbit (uc, letters); break; case CTX_NEWLINE: - setbit (i, newline); + setbit (uc, newline); break; } } @@ -1516,7 +1501,7 @@ lex (void) { zeroset (ccl); for (c2 = 0; c2 < NOTCHAR; ++c2) - if (IS_WORD_CONSTITUENT (c2)) + if (unibyte_word_constituent (c2)) setbit (c2, ccl); if (c == 'W') notset (ccl); @@ -2741,7 +2726,7 @@ dfastate (state_num s, struct dfa *d, state_num trans[]) state_letter = state; for (i = 0; i < NOTCHAR; ++i) - trans[i] = (IS_WORD_CONSTITUENT (i)) ? state_letter : state; + trans[i] = unibyte_word_constituent (i) ? state_letter : state; trans[eolbyte] = state_newline; } else @@ -2847,7 +2832,7 @@ dfastate (state_num s, struct dfa *d, state_num trans[]) if (c == eolbyte) trans[c] = state_newline; - else if (IS_WORD_CONSTITUENT (c)) + else if (unibyte_word_constituent (c)) trans[c] = state_letter; else if (c < NOTCHAR) trans[c] = state; @@ -3653,7 +3638,6 @@ void dfacomp (char const *s, size_t len, struct dfa *d, int searchflag) { dfainit (d); - dfambcache (d); dfaparse (s, len, d); dfassbuild (d); diff --git a/pc/ChangeLog b/pc/ChangeLog index c2e0e986..bcc3a934 100644 --- a/pc/ChangeLog +++ b/pc/ChangeLog @@ -1,3 +1,7 @@ +2016-04-23 Eli Zaretskii <eliz@gnu.org> + + * Makefile.tst (pty1): Ignore errors (happens with MinGW). + 2016-04-17 Scott Deifik <scottd.mail@sbcglobal.net> * Makefile.tst: Sync with mainline. diff --git a/pc/Makefile.tst b/pc/Makefile.tst index 9d0cfdcf..966bde4f 100644 --- a/pc/Makefile.tst +++ b/pc/Makefile.tst @@ -1271,7 +1271,7 @@ watchpoint1: pty1: @echo $@ @echo Expect pty1 to fail with DJGPP and MinGW. - @case `uname` in \ + @-case `uname` in \ *[Oo][Ss]/390*) : ;; \ *) AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ ; \ $(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ ;; \ diff --git a/test/ChangeLog b/test/ChangeLog index ab4849dd..f58a2ef3 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,7 @@ +2016-04-24 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (pty1): Ignore errors. + 2016-04-17 Arnold D. Robbins <arnold@skeeve.com> * Makefile.am (pty1): Really disable test on z/OS. diff --git a/test/Makefile.am b/test/Makefile.am index c2efb066..09bcc769 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -2226,7 +2226,7 @@ watchpoint1: pty1: @echo $@ - @case `uname` in \ + @-case `uname` in \ *[Oo][Ss]/390*) : ;; \ *) AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ ; \ $(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ ;; \ diff --git a/test/Makefile.in b/test/Makefile.in index d3065fa0..9a03ce74 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -271,6 +271,7 @@ pkgextensiondir = @pkgextensiondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -2664,7 +2665,7 @@ watchpoint1: pty1: @echo $@ - @case `uname` in \ + @-case `uname` in \ *[Oo][Ss]/390*) : ;; \ *) AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ ; \ $(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ ;; \ |