diff options
| -rw-r--r-- | src/RESearch.cxx | 35 | ||||
| -rw-r--r-- | src/RESearch.h | 2 | 
2 files changed, 17 insertions, 20 deletions
| diff --git a/src/RESearch.cxx b/src/RESearch.cxx index 86f2d0e9e..de4dc08a9 100644 --- a/src/RESearch.cxx +++ b/src/RESearch.cxx @@ -254,8 +254,6 @@ RESearch::RESearch(CharClassify *charClassTable) {  	charClass = charClassTable;  	sta = NOP;                  /* status of lastpat */  	bol = 0; -	constexpr unsigned char nul = 0; -	std::fill(bittab, std::end(bittab), nul);  	nfa[0] = END;  	Clear();  } @@ -423,8 +421,7 @@ const char *RESearch::Compile(const char *pattern, Sci::Position length, bool ca  			return badpat("No previous regular expression");  	} -	constexpr unsigned char nul = 0; -	std::fill(bittab, std::end(bittab), nul); +	bittab.fill(0);  	nfa[0] = END;  	char *mp=nfa;          /* nfa pointer       */ @@ -435,8 +432,6 @@ const char *RESearch::Compile(const char *pattern, Sci::Position length, bool ca  	int tagi = 0;          /* tag stack index   */  	int tagc = 1;          /* actual tag count  */ -	char mask = 0;         /* xor mask -CCL/NCL */ -  	sta = NOP;  	const char *p=pattern;     /* pattern pointer   */ @@ -469,16 +464,14 @@ const char *RESearch::Compile(const char *pattern, Sci::Position length, bool ca  			break;  		case '[': {               /* match char class */ -			*mp++ = CCL;  			int prevChar = 0; +			char mask = 0;      /* xor mask -CCL/NCL */  			i++;  			if (*++p == '^') {  				mask = '\377';  				i++;  				p++; -			} else { -				mask = 0;  			}  			if (*p == '-') {	/* real dash */ @@ -565,9 +558,11 @@ const char *RESearch::Compile(const char *pattern, Sci::Position length, bool ca  			if (!*p)  				return badpat("Missing ]"); -			for (int n = 0; n < BITBLK; bittab[n++] = 0) -				*mp++ = static_cast<char>(mask ^ bittab[n]); - +			*mp++ = CCL; +			for (const unsigned char byte : bittab) { +				*mp++ = mask ^ byte; +			} +			bittab.fill(0);  		} break;  		case '*':               /* match 0 or more... */ @@ -666,9 +661,10 @@ const char *RESearch::Compile(const char *pattern, Sci::Position length, bool ca  						*mp++ = static_cast<unsigned char>(c);  					} else {  						*mp++ = CCL; -						mask = 0; -						for (int n = 0; n < BITBLK; bittab[n++] = 0) -							*mp++ = static_cast<char>(mask ^ bittab[n]); +						for (const unsigned char byte : bittab) { +							*mp++ = byte; +						} +						bittab.fill(0);  					}  				}  			} @@ -700,11 +696,12 @@ const char *RESearch::Compile(const char *pattern, Sci::Position length, bool ca  					*mp++ = CHR;  					*mp++ = c;  				} else { -					*mp++ = CCL; -					mask = 0;  					ChSetWithCase(c, false); -					for (int n = 0; n < BITBLK; bittab[n++] = 0) -						*mp++ = static_cast<char>(mask ^ bittab[n]); +					*mp++ = CCL; +					for (const unsigned char byte : bittab) { +						*mp++ = byte; +					} +					bittab.fill(0);  				}  			}  			break; diff --git a/src/RESearch.h b/src/RESearch.h index 4dee666a0..b7955dc79 100644 --- a/src/RESearch.h +++ b/src/RESearch.h @@ -51,7 +51,7 @@ private:  	char nfa[MAXNFA];    /* automaton */  	int sta;  	int failure; -	unsigned char bittab[BITBLK]; /* bit table for CCL pre-set bits */ +	std::array<unsigned char, BITBLK> bittab {}; /* bit table for CCL pre-set bits */  	CharClassify *charClass;  	bool iswordc(unsigned char x) const noexcept {  		return charClass->IsWord(x); | 
