diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-06-13 20:46:11 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-06-13 20:46:11 +0000 |
commit | bad859ca3e54168c455dd41810b9c62cfd15d7d2 (patch) | |
tree | 5ad879fd1e91f1d1a8a69693f1dbef3123e8b261 /regparse.c | |
parent | 114ae69b457b1f02d2c63dd3c1b11bfffaf9b3fd (diff) | |
download | ruby-bad859ca3e54168c455dd41810b9c62cfd15d7d2.tar.gz |
* regparse.c (PFETCH_READY): suppress Wunused-but-set-variable.
* regparse.c (is_onechar_cclass): restructured to clarify that c is
used iff found == 1.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36072 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'regparse.c')
-rw-r--r-- | regparse.c | 40 |
1 files changed, 17 insertions, 23 deletions
diff --git a/regparse.c b/regparse.c index 149d857f8e..e2504bd688 100644 --- a/regparse.c +++ b/regparse.c @@ -264,8 +264,8 @@ strdup_with_null(OnigEncoding enc, UChar* s, UChar* end) #define PEND_VALUE 0 #ifdef __GNUC__ -/* get rid of Wunused-but-set-variable */ -#define PFETCH_READY UChar* pfetch_prev = NULL +/* get rid of Wunused-but-set-variable and Wuninitialized */ +#define PFETCH_READY UChar* pfetch_prev = NULL; (void)pfetch_prev #else #define PFETCH_READY UChar* pfetch_prev #endif @@ -5684,10 +5684,9 @@ countbits(unsigned int bits) static int is_onechar_cclass(CClassNode* cc, OnigCodePoint* code) { - OnigCodePoint c; + OnigCodePoint c; /* c is used iff found == 1 */ int found = 0; - int i, j = -1; - Bits b1, b2; + int i; BBuf *bbuf = cc->mbuf; if (IS_NCCLASS_NOT(cc)) return 0; @@ -5699,42 +5698,37 @@ is_onechar_cclass(CClassNode* cc, OnigCodePoint* code) data = (OnigCodePoint* )(bbuf->p) + 1; if ((n == 1) && (data[0] == data[1])) { /* only one char found in the bbuf, save the code point. */ - found = 1; c = data[0]; + if ((c >= SINGLE_BYTE_SIZE) || !BITSET_AT(cc->bs, c)) { + /* set found=1 if c is not included in the bitset */ + found = 1; + } } else { return 0; /* the bbuf contains multiple chars */ } } - if (found && (c < SINGLE_BYTE_SIZE) && BITSET_AT(cc->bs, c)) { - /* c is included in the bitset, ignore the result of bbuf. */ - found = 0; - } - /* check bitset */ for (i = 0; i < (int )BITSET_SIZE; i++) { - b1 = cc->bs[i]; + Bits b1 = cc->bs[i]; if (b1 != 0) { if (((b1 & (b1 - 1)) == 0) && (found == 0)) { found = 1; - j = i; - b2 = b1; + c = BITS_IN_ROOM * i + countbits(b1 - 1); } else { return 0; /* the character class contains multiple chars */ } } } - if (found == 0) { - /* the character class contains no char. */ - return 0; - } - if (j >= 0) { - /* only one char found in the bitset, calculate the code point. */ - c = BITS_IN_ROOM * j + countbits(b2 - 1); + + if (found) { + *code = c; + return 1; } - *code = c; - return 1; + + /* the character class contains no char. */ + return 0; } |