String.st
changeset 14217 d399ca31088f
parent 14201 c73c503ae8ef
child 14260 c8e2fa654d6d
--- 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 $'
 ! !