From: <bi...@us...> - 2007-05-02 20:41:16
|
Revision: 346 http://svn.sourceforge.net/oorexx/?rev=346&view=rev Author: bigrixx Date: 2007-05-02 13:41:17 -0700 (Wed, 02 May 2007) Log Message: ----------- [ 1711477 ] tab characters are not consistently recognized as whitespace Modified Paths: -------------- interpreter/trunk/kernel/classes/NumberStringClass.cpp interpreter/trunk/kernel/classes/StringClass.cpp interpreter/trunk/kernel/classes/StringClassMisc.cpp interpreter/trunk/kernel/classes/StringClassWord.cpp interpreter/trunk/kernel/expression/BuiltinFunctions.cpp interpreter/trunk/kernel/instructions/ParseTarget.cpp interpreter/trunk/kernel/parser/Scanner.cpp interpreter/trunk/kernel/runtime/RexxConstants.hpp Modified: interpreter/trunk/kernel/classes/NumberStringClass.cpp =================================================================== --- interpreter/trunk/kernel/classes/NumberStringClass.cpp 2007-05-02 20:40:40 UTC (rev 345) +++ interpreter/trunk/kernel/classes/NumberStringClass.cpp 2007-05-02 20:41:17 UTC (rev 346) @@ -1109,13 +1109,13 @@ InPtr = number; /*Point to start of input string. */ EndData = InPtr + length; /*Point to end of Data + 1. */ - while (*InPtr == ch_BLANK) /* Skip all leading blanks. */ + while (*InPtr == ch_BLANK || *InPtr == ch_TAB) /* Skip all leading blanks. */ InPtr++; /* Skip it, and go on to next char */ /* Is this a sign Character? */ if ((ch = *InPtr) == ch_MINUS || ch == ch_PLUS) { InPtr++; /* Yes, skip it. */ - while (*InPtr == ch_BLANK) /* Ship all leading blanks. */ + while (*InPtr == ch_BLANK || *InPtr == ch_TAB) /* Ship all leading blanks. */ InPtr++; /* Skip it, and go on to next char */ } @@ -1175,7 +1175,7 @@ } /* At this point all that should be */ /* left Are trailing blanks. */ - while (*InPtr == ch_BLANK) /* Skip all trailing blanks */ + while (*InPtr == ch_BLANK || *InPtr == ch_TAB) /* Skip all trailing blanks */ InPtr++; /* Skip it, and go on to next char */ if (InPtr >= EndData) /* Did we reach end of data */ return false; /* this was fine */ @@ -1757,7 +1757,7 @@ InPtr = number; /*Point to start of input string. */ EndData = InPtr + length; /*Point to end of Data + 1. */ - while (*InPtr == ch_BLANK) /* Ship all leading blanks. */ + while (*InPtr == ch_BLANK || *InPtr = ch_TAB) /* Ship all leading blanks. */ InPtr++; /* Skip it, and go on to next char */ /* Is this a sign Character? */ if ((ch = *InPtr) == ch_MINUS || ch == ch_PLUS) @@ -1766,7 +1766,7 @@ if (ch == ch_MINUS) /* is it a Minus sign? */ this->sign = -1; /* Yup, indicate a negative number. */ } - while (*InPtr == ch_BLANK) /* Ship all leading blanks. */ + while (*InPtr == ch_BLANK || *InPtr == ch_TAB) /* Ship all leading blanks. */ InPtr++; /* Skip it, and go on to next char */ ch = *InPtr; /* Get 1st Digit. */ MaxDigits = NumDigits = length; /* Set our max digits counter. */ Modified: interpreter/trunk/kernel/classes/StringClass.cpp =================================================================== --- interpreter/trunk/kernel/classes/StringClass.cpp 2007-05-02 20:40:40 UTC (rev 345) +++ interpreter/trunk/kernel/classes/StringClass.cpp 2007-05-02 20:41:17 UTC (rev 346) @@ -642,12 +642,12 @@ secondStart = (stringchar_t *)second->getStringData(); /* get pointer to start of data */ /* while we have leading blanks. */ - while (firstLen > 0 && *firstStart == ch_BLANK) { + while (firstLen > 0 && (*firstStart == ch_BLANK || *firstStart == ch_TAB)) { firstStart++; /* ignore character and look at next */ firstLen--; /* and string is now one char less. */ } /* while we have leading blanks. */ - while (secondLen > 0 && *secondStart == ch_BLANK) { + while (secondLen > 0 && (*secondStart == ch_BLANK || *secondStart == ch_TAB)) { secondStart++; /* ignore character and look at next */ secondLen--; /* and string is now one char less. */ } @@ -1677,14 +1677,14 @@ digitsLeft = this->getLength(); /* Skip all leading blanks */ - for (; digitsLeft && *digitPtr == ch_BLANK; ++digitPtr, --digitsLeft) ; + for (; digitsLeft && (*digitPtr == ch_BLANK || *digitPtr == ch_TAB); ++digitPtr, --digitsLeft) ; if (digitsLeft){ /* Still Digits left ? */ if (*digitPtr == ch_PLUS || *digitPtr == ch_MINUS) { /* need to move past the sign and */ /* remove any remaining blanks. */ for (++digitPtr, --digitsLeft; - digitsLeft && *digitPtr == ' '; + digitsLeft && (*digitPtr == ' ' || *digitPtr == '\t'); ++digitPtr, --digitsLeft) ; /* Yes, skip any blanks */ if (!digitsLeft) /* Did we reach end of data ? */ @@ -1704,7 +1704,7 @@ } /* if chars left make sure all are */ /* blanks. */ - for (; digitsLeft && *digitPtr == ch_BLANK; ++digitPtr, --digitsLeft) ; + for (; digitsLeft && (*digitPtr == ch_BLANK || *digitPtr == ch_TAB); ++digitPtr, --digitsLeft) ; /* skipped all trailing blanks. */ /* we better be at the end of the */ /* string, otherwise its invalid. */ Modified: interpreter/trunk/kernel/classes/StringClassMisc.cpp =================================================================== --- interpreter/trunk/kernel/classes/StringClassMisc.cpp 2007-05-02 20:40:40 UTC (rev 345) +++ interpreter/trunk/kernel/classes/StringClassMisc.cpp 2007-05-02 20:41:17 UTC (rev 346) @@ -114,7 +114,7 @@ if (c != '\0' && strchr((char *)Set, c) != NULL) Count++; /* bump count */ else { - if (c == ' ') { /* if c blank */ + if (c == ' ' || c == '\t') { /* if c blank */ if (!SpaceFound) { /* if 1st blank */ /* save position */ Residue = (Count % Modulus); @@ -133,7 +133,7 @@ } } if (rc) { /* still good? */ - if (c == ' ') /* if trailing blank */ + if (c == ' ' || c == '\t') /* if trailing blank */ rc = false; /* report error */ else if (SpaceFound && (Count % Modulus) != Residue) rc = false; /* grouping problem */ Modified: interpreter/trunk/kernel/classes/StringClassWord.cpp =================================================================== --- interpreter/trunk/kernel/classes/StringClassWord.cpp 2007-05-02 20:40:40 UTC (rev 345) +++ interpreter/trunk/kernel/classes/StringClassWord.cpp 2007-05-02 20:41:17 UTC (rev 346) @@ -70,7 +70,7 @@ Length = *StringLength; /* get the length */ for (;Length; Length--) { /* scan entire string */ - if (*Scan != ' ') /* if not a space */ + if (*Scan != ' ' && *Scan != '\t') /* if not a space */ break; /* just quit the loop */ Scan++; /* step to next character */ } @@ -99,7 +99,7 @@ Length = *StringLength; /* get the length */ for (;Length; Length--) { /* scan entire string */ - if (*Scan == ' ') /* if not a space */ + if (*Scan == ' ' || *Scan == '\t') /* if not a space */ break; /* just quit the loop */ Scan++; /* step to next character */ } Modified: interpreter/trunk/kernel/expression/BuiltinFunctions.cpp =================================================================== --- interpreter/trunk/kernel/expression/BuiltinFunctions.cpp 2007-05-02 20:40:40 UTC (rev 345) +++ interpreter/trunk/kernel/expression/BuiltinFunctions.cpp 2007-05-02 20:41:17 UTC (rev 346) @@ -1211,13 +1211,6 @@ switch (*formatscan) { /* process each format piece */ -// case ' ': /* blank to skip */ -// case '/': /* slash to skip */ -// case ':': /* colon to skip */ -// case '.': /* period to skip */ -// /* code moved to otherwise */ -// break; /* go around */ - case 'm': /* month spec */ /* test and convert */ output->month = (int16_t) getNumber(inputscan, MONTH_SIZE, &invalid); Modified: interpreter/trunk/kernel/instructions/ParseTarget.cpp =================================================================== --- interpreter/trunk/kernel/instructions/ParseTarget.cpp 2007-05-02 20:40:40 UTC (rev 345) +++ interpreter/trunk/kernel/instructions/ParseTarget.cpp 2007-05-02 20:41:17 UTC (rev 346) @@ -312,7 +312,7 @@ /* scan for nonblanks is guaranteed to stop before getting into */ /* trouble, which eliminates the need to check against the */ /* length */ - while (*scan == ' ') { + while (*scan == ' ' || *scan == '\t') { scan++; /* step for each match found */ } /* set the new location */ @@ -321,7 +321,18 @@ word = OREF_NULLSTRING; /* just return a null string */ else { /* have a real word */ /* look for the next blank */ - endScan = (stringchar_t *)memchr(scan, ' ', this->end - this->subcurrent); + endScan = NULL; + stringchar_t *scanner = scan; + stringchar_t *endPosition = string->getStringData() + this->end; + while (scanner < endPosition) + { + if (*scanner == ' ' || *scanner == '\t') + { + endScan = scanner; + break; + } + scanner++; + } if (endScan == NULL) { /* no match? */ /* calculate the length */ length = this->end - this->subcurrent; @@ -366,14 +377,25 @@ /* scan for nonblanks is guaranteed to stop before getting into */ /* trouble, which eliminates the need to check against the */ /* length */ - while (*scan == ' ') { + while (*scan == ' ' && *scan != '\t') { scan++; /* step for each match found */ } /* set the new location */ this->subcurrent = scan - (this->string->getStringData()); if (this->subcurrent < this->end) {/* something left over? */ /* look for the next blank */ - endScan = (stringchar_t *)memchr(scan, ' ', this->end - this->subcurrent); + endScan = NULL; + stringchar_t *scanner = scan; + stringchar_t *endPosition = string->getStringData() + this->end; + while (scanner < endPosition) + { + if (*scanner == ' ' || *scanner == '\t') + { + endScan = scanner; + break; + } + scanner++; + } if (endScan == NULL) /* no match? */ this->subcurrent = this->end; /* use the rest of it */ else Modified: interpreter/trunk/kernel/parser/Scanner.cpp =================================================================== --- interpreter/trunk/kernel/parser/Scanner.cpp 2007-05-02 20:40:40 UTC (rev 345) +++ interpreter/trunk/kernel/parser/Scanner.cpp 2007-05-02 20:41:17 UTC (rev 346) @@ -611,7 +611,7 @@ real_length = length; /* pick up the string length */ for (i = 0; i < length; i++) { /* loop through entire string */ /* got a blank? */ - if (this->current[inpointer] == ' ') { + if (this->current[inpointer] == ' ' || this->current[inpointer] == '\t') { blanks = true; /* remember scanning blanks */ /* don't like initial blanks or groups after the first */ /* which are not in twos (hex) or fours (binary) */ @@ -669,7 +669,7 @@ /* get the next nibble */ nibble = this->current[inpointer]; inpointer++; /* step to the next character */ - while (nibble == ' ') { /* step over any inter-nibble blanks */ + while (nibble == ' ' || nibble == '\t') { /* step over any inter-nibble blanks */ /* get the next nibble */ nibble = this->current[inpointer]; inpointer++; /* step to the next character */ @@ -714,7 +714,7 @@ /* get the next bit */ nibble = this->current[inpointer]; inpointer++; /* step to the next character */ - while (nibble == ' ') { /* step over any inter-nibble blanks */ + while (nibble == ' ' || nibble == '\t') { /* step over any inter-nibble blanks */ /* get the next nibble */ nibble = this->current[inpointer]; inpointer++; /* step to the next character */ Modified: interpreter/trunk/kernel/runtime/RexxConstants.hpp =================================================================== --- interpreter/trunk/kernel/runtime/RexxConstants.hpp 2007-05-02 20:40:40 UTC (rev 345) +++ interpreter/trunk/kernel/runtime/RexxConstants.hpp 2007-05-02 20:41:17 UTC (rev 346) @@ -523,4 +523,5 @@ const stringchar_t ch_FIVE = '5'; /* Define the Five character. */ const stringchar_t ch_NINE = '9'; /* Define the Nine character. */ const stringchar_t ch_EXPONENT = 'E'; /* Define the exponent marker. */ +const stringchar_t ch_TAB = '\t'; /* Define a Blank character. */ #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |