String.st
branchjv
changeset 18488 cb7a21f38b77
parent 18487 8735bd9eee2f
child 18556 2c67b0fa6ff5
--- a/String.st	Wed Jun 17 06:22:00 2015 +0100
+++ b/String.st	Wed Jun 17 06:33:49 2015 +0100
@@ -1835,26 +1835,28 @@
 
     cp = __stringVal(self);
     l = __stringSize(self);
-    if (!__qIsStringLike(self)) {
+    if (__qClass(self) == String) {
+	cont:    
+	h = 2166136261U;
+	while (l >= 4) {
+	    l -= 4;
+	    h = (h ^ cp[0]) * 16777619;
+	    h = (h ^ cp[1]) * 16777619;
+	    h = (h ^ cp[2]) * 16777619;
+	    h = (h ^ cp[3]) * 16777619;
+	    cp += 4;
+    	}
+    	while (l--) {
+	    h = (h ^ *cp++) * 16777619;
+    	}
+    	// make it a smallInteger
+    	h = (h ^ (h >> 30)) & 0x3FFFFFFF;
+    	RETURN ( __mkSmallInteger(h));
+    } else {        
 	int n = __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(self))->c_ninstvars));
-
 	cp += n;
-    }    
-    h = 2166136261U;
-    while (l >= 4) {
-	l -= 4;
-	h = (h ^ cp[0]) * 16777619;
-	h = (h ^ cp[1]) * 16777619;
-	h = (h ^ cp[2]) * 16777619;
-	h = (h ^ cp[3]) * 16777619;
-	cp += 4;
+	goto cont;
     }
-    while (l--) {
-	h = (h ^ *cp++) * 16777619;
-    }
-    // make it a smallInteger
-    h = (h ^ (h >> 30)) & 0x3FFFFFFF;
-    RETURN ( __mkSmallInteger(h));
 #endif /* not SCHTEAM */
 %}.
     ^ self primitiveFailed
@@ -1944,28 +1946,28 @@
 
     cp = __stringVal(self);
     l = __stringSize(self);
-    if (!__qIsStringLike(self)) {
+    if (__qClass(self) == String) {
+	cont:    
+	h = 2166136261U;
+	while (l >= 4) {
+	    l -= 4;
+	    h = (h ^ cp[0]) * 16777619;
+	    h = (h ^ cp[1]) * 16777619;
+	    h = (h ^ cp[2]) * 16777619;
+	    h = (h ^ cp[3]) * 16777619;
+	    cp += 4;
+    	}
+    	while (l--) {
+	    h = (h ^ *cp++) * 16777619;
+    	}
+    	// make it a smallInteger
+    	h = (h ^ (h >> 30)) & 0x3FFFFFFF;
+    	RETURN ( __mkSmallInteger(h));
+    } else {        
 	int n = __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(self))->c_ninstvars));
-
 	cp += n;
-	l -= n;
+	goto cont;
     }
-
-    h = 2166136261U;
-    while (l >= 4) {
-	l -= 4;
-	h = (h ^ cp[0]) * 16777619;
-	h = (h ^ cp[1]) * 16777619;
-	h = (h ^ cp[2]) * 16777619;
-	h = (h ^ cp[3]) * 16777619;
-	cp += 4;
-    }
-    while (l--) {
-	h = (h ^ *cp++) * 16777619;
-    }
-    // make it a smallInteger
-    h = (h ^ (h >> 30)) & 0x3FFFFFFF;
-    RETURN ( __mkSmallInteger(h));
 #endif /* not SCHTEAM */
 %}.
     ^ self primitiveFailed