--- a/String.st Thu Jul 19 12:36:38 2012 +0200
+++ b/String.st Thu Jul 19 15:23:22 2012 +0200
@@ -3724,84 +3724,82 @@
unsigned char c;
REGISTER OBJ slf = self;
- if (((__qClass(slf)==String) || (__qClass(slf)==Symbol))
- && __isNonNilObject(aStringOrChar)
- && ((__qClass(aStringOrChar)==String) || (__qClass(aStringOrChar)==Symbol))) {
- src1 = __stringVal(slf);
- src2 = __stringVal(aStringOrChar);
-
- if (src1[0] != src2[0]) {
- if (__qSize(aStringOrChar) == (OHDR_SIZE+1) /* 1 for the 0-byte */) {
- RETURN (true);
- }
- RETURN ( false );
- }
-
- len1 = __qSize(slf);
- len2 = __qSize(aStringOrChar);
- if (len1 < len2) {
- RETURN ( false );
- }
+ if (__qIsStringLike(slf) &&__isStringLike(aStringOrChar)) {
+ src1 = __stringVal(slf);
+ src2 = __stringVal(aStringOrChar);
+
+ if (src1[0] != src2[0]) {
+ if (__qSize(aStringOrChar) == (OHDR_SIZE+1) /* 1 for the 0-byte */) {
+ RETURN (true);
+ }
+ RETURN ( false );
+ }
+
+ len1 = __qSize(slf);
+ len2 = __qSize(aStringOrChar);
+ if (len1 < len2) {
+ RETURN ( false );
+ }
#ifdef UINT64
- while (len2 > (OHDR_SIZE+sizeof(UINT64))) {
- if ( ((UINT64 *)src1)[0] != ((UINT64 *)src2)[0] ) {
- RETURN (false);
- }
- len2 -= sizeof(UINT64);
- src1 += sizeof(UINT64);
- src2 += sizeof(UINT64);
- }
+ while (len2 > (OHDR_SIZE+sizeof(UINT64))) {
+ if ( ((UINT64 *)src1)[0] != ((UINT64 *)src2)[0] ) {
+ RETURN (false);
+ }
+ len2 -= sizeof(UINT64);
+ src1 += sizeof(UINT64);
+ src2 += sizeof(UINT64);
+ }
#else
# ifdef __UNROLL_LOOPS__
- while (len2 > (OHDR_SIZE+sizeof(INT)*4)) {
- if ( ((unsigned INT *)src1)[0] != ((unsigned INT *)src2)[0]) {
- RETURN (false);
- }
- if ( ((unsigned INT *)src1)[1] != ((unsigned INT *)src2)[1]) {
- RETURN (false);
- }
- if ( ((unsigned INT *)src1)[2] != ((unsigned INT *)src2)[2]) {
- RETURN (false);
- }
- if ( ((unsigned INT *)src1)[3] != ((unsigned INT *)src2)[3]) {
- RETURN (false);
- }
- len2 -= sizeof(INT)*4;
- src1 += sizeof(INT)*4;
- src2 += sizeof(INT)*4;
- }
+ while (len2 > (OHDR_SIZE+sizeof(INT)*4)) {
+ if ( ((unsigned INT *)src1)[0] != ((unsigned INT *)src2)[0]) {
+ RETURN (false);
+ }
+ if ( ((unsigned INT *)src1)[1] != ((unsigned INT *)src2)[1]) {
+ RETURN (false);
+ }
+ if ( ((unsigned INT *)src1)[2] != ((unsigned INT *)src2)[2]) {
+ RETURN (false);
+ }
+ if ( ((unsigned INT *)src1)[3] != ((unsigned INT *)src2)[3]) {
+ RETURN (false);
+ }
+ len2 -= sizeof(INT)*4;
+ src1 += sizeof(INT)*4;
+ src2 += sizeof(INT)*4;
+ }
# endif /* __UNROLL_LOOPS__ */
#endif /* UINT64 */
- while (len2 > (OHDR_SIZE+sizeof(INT))) {
- if ( ((unsigned INT *)src1)[0] != ((unsigned INT *)src2)[0]) {
- RETURN (false);
- }
- len2 -= sizeof(INT);
- src1 += sizeof(INT);
- src2 += sizeof(INT);
- }
-
- while (c = *src2++) {
- if (c != *src1) {
- RETURN ( false );
- }
- src1++;
- }
- RETURN (true);
+ while (len2 > (OHDR_SIZE+sizeof(INT))) {
+ if ( ((unsigned INT *)src1)[0] != ((unsigned INT *)src2)[0]) {
+ RETURN (false);
+ }
+ len2 -= sizeof(INT);
+ src1 += sizeof(INT);
+ src2 += sizeof(INT);
+ }
+
+ while (c = *src2++) {
+ if (c != *src1) {
+ RETURN ( false );
+ }
+ src1++;
+ }
+ RETURN (true);
}
if (__isCharacter(aStringOrChar)) {
- int val;
-
- val = __intVal(_characterVal(aStringOrChar));
- if ((unsigned)val <= 0xFF) {
- len1 = __stringSize(slf);
- if (len1 > 0) {
- RETURN ( (__stringVal(slf)[0] == val) ? true : false);
- }
- }
- RETURN ( false );
+ int val;
+
+ val = __intVal(_characterVal(aStringOrChar));
+ if ((unsigned)val <= 0xFF) {
+ len1 = __stringSize(slf);
+ if (len1 > 0) {
+ RETURN ( (__stringVal(slf)[0] == val) ? true : false);
+ }
+ }
+ RETURN ( false );
}
%}.
^ super startsWith:aStringOrChar
@@ -3832,9 +3830,9 @@
!String class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/String.st,v 1.285 2012-07-11 17:07:34 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/String.st,v 1.286 2012-07-19 13:23:22 stefan Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/String.st,v 1.285 2012-07-11 17:07:34 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/String.st,v 1.286 2012-07-19 13:23:22 stefan Exp $'
! !