oops - basicNew was bad for subclasses of String.
authorClaus Gittinger <cg@exept.de>
Sat, 16 May 1998 18:58:23 +0200
changeset 3449 84160615c630
parent 3448 1cd92aa2411a
child 3450 8e2ebfb882bd
oops - basicNew was bad for subclasses of String.
String.st
--- a/String.st	Sat May 16 17:34:42 1998 +0200
+++ b/String.st	Sat May 16 18:58:23 1998 +0200
@@ -105,127 +105,127 @@
     int nInstVars, instsize;
 
     if (__isSmallInteger(anInteger)) {
-	len = __intVal(anInteger);
-	if (len >= 0) {
-	    if (self == String) {
-		instsize = OHDR_SIZE + len + 1;
-		if (__CanDoQuickNew(instsize)) {        /* OBJECT ALLOCATION */
-		    /*
-		     * the most common case
-		     */
-		    __qCheckedNew(newString, instsize);
-		    __InstPtr(newString)->o_class = self; /* no need for PROTECT - there was no GC */
-		    __qSTORE(newString, self);
-
-		    cp = __stringVal(newString);
+        len = __intVal(anInteger);
+        if (len >= 0) {
+            instsize = OHDR_SIZE + len + 1;
+            if (self == String) {
+                if (__CanDoQuickNew(instsize)) {        /* OBJECT ALLOCATION */
+                    /*
+                     * the most common case
+                     */
+                    __qCheckedNew(newString, instsize);
+                    __InstPtr(newString)->o_class = self; /* no need for PROTECT - there was no GC */
+                    __qSTORE(newString, self);
+
+                    cp = __stringVal(newString);
 
 #if defined(memset4) && !defined(NON_ASCII)
-		    {
-			/* 
-			 * no sizeof(int) here please -
-			 * - memset4 (if defined) fills 4-bytes on ALL machines 
-			 */
-			int l4 = len >> 2;
-
-			if (len & 3) l4++;
-			memset4(cp, 0x20202020, l4);
-			cp[len] = '\0';
-		    }
+                    {
+                        /* 
+                         * no sizeof(int) here please -
+                         * - memset4 (if defined) fills 4-bytes on ALL machines 
+                         */
+                        int l4 = len >> 2;
+
+                        if (len & 3) l4++;
+                        memset4(cp, 0x20202020, l4);
+                        cp[len] = '\0';
+                    }
 #else
 # ifdef FAST_MEMSET
-		    memset(cp, ' ', len);
-		    cp[len] = '\0';
+                    memset(cp, ' ', len);
+                    cp[len] = '\0';
 # else
-		    while (len >= 8) {
-#  ifndef NON_ASCII       /* i.e. EBCDIC ;-) */
+                    while (len >= 8) {
+#  ifndef NON_ASCII       /* i.e. EBCDIC  */
 #   ifdef INT64
-			((INT64 *)cp)[0] = 0x2020202020202020L;
+                        ((INT64 *)cp)[0] = 0x2020202020202020L;
 #   else
-			((int *)cp)[0] = 0x20202020;
-			((int *)cp)[1] = 0x20202020;
+                        ((int *)cp)[0] = 0x20202020;
+                        ((int *)cp)[1] = 0x20202020;
 #   endif
 #  else
-			cp[0] = cp[1] = cp[2] = cp[3] = ' ';
-			cp[4] = cp[5] = cp[6] = cp[7] = ' ';
+                        cp[0] = cp[1] = cp[2] = cp[3] = ' ';
+                        cp[4] = cp[5] = cp[6] = cp[7] = ' ';
 #  endif
-			cp += 8; 
-			len -= 8;
-		    }
-		    while (len--)
-			*cp++ = ' ';
-		    *cp = '\0';
+                        cp += 8; 
+                        len -= 8;
+                    }
+                    while (len--)
+                        *cp++ = ' ';
+                    *cp = '\0';
 # endif /* not FAST_MEMSET */
 #endif /* not memset4 */
 
-		    RETURN (newString);
-		}
-		nInstVars = 0;
-	    } else {
-		nInstVars = __intVal(__ClassInstPtr(self)->c_ninstvars);
-		instsize += __OBJS2BYTES__(nInstVars);
-	    }
-
-	    __PROTECT_CONTEXT__;
-	    __qNew(newString, instsize);        /* OBJECT ALLOCATION */
-	    __UNPROTECT_CONTEXT__;
-
-	    if (newString == nil) goto fail;
-
-	    __InstPtr(newString)->o_class = self;
-	    __qSTORE(newString, self);
-
-	    if (nInstVars) {
-		/*
-		 * nil-out instvars
-		 */
+                    RETURN (newString);
+                }
+                nInstVars = 0;
+            } else {
+                nInstVars = __intVal(__ClassInstPtr(self)->c_ninstvars);
+                instsize += __OBJS2BYTES__(nInstVars);
+            }
+
+            __PROTECT_CONTEXT__;
+            __qNew(newString, instsize);        /* OBJECT ALLOCATION */
+            __UNPROTECT_CONTEXT__;
+
+            if (newString == nil) goto fail;
+
+            __InstPtr(newString)->o_class = self;
+            __qSTORE(newString, self);
+
+            if (nInstVars) {
+                /*
+                 * nil-out instvars
+                 */
 #if defined(memset4)
-		memset4(__InstPtr(newString)->i_instvars, nil, nInstVars);
+                memset4(__InstPtr(newString)->i_instvars, nil, nInstVars);
 #else
 # if defined(FAST_MEMSET) && ! defined(NEGATIVE_ADDRESSES)
-		/*
-		 * knowing that nil is 0
-		 */
-		memset(__InstPtr(newString)->i_instvars, 0, __OBJS2BYTES__(nInstVars));
+                /*
+                 * knowing that nil is 0
+                 */
+                memset(__InstPtr(newString)->i_instvars, 0, __OBJS2BYTES__(nInstVars));
 # else
-		op = __InstPtr(newString)->i_instvars;
-		do {
-		    *op++ = nil;
-		} while (--nInstVars);
+                op = __InstPtr(newString)->i_instvars;
+                do {
+                    *op++ = nil;
+                } while (--nInstVars);
 # endif
 #endif
-		cp = __stringVal(newString) + __OBJS2BYTES__(nInstVars);
-	    } else {
-		cp = __stringVal(newString);
-	    }
-
-	    /*
-	     * fill with spaces
-	     */
+                cp = __stringVal(newString) + __OBJS2BYTES__(nInstVars);
+            } else {
+                cp = __stringVal(newString);
+            }
+
+            /*
+             * fill with spaces
+             */
 #ifdef FAST_MEMSET
-	    memset(cp, ' ', len);
-	    *(cp + len) = '\0';
+            memset(cp, ' ', len);
+            *(cp + len) = '\0';
 #else
-	    while (len >= 8) {
+            while (len >= 8) {
 # ifndef NON_ASCII       /* i.e. EBCDIC ;-) */
 #  ifdef INT64
-		((INT64 *)cp)[0] = 0x2020202020202020L;
+                ((INT64 *)cp)[0] = 0x2020202020202020L;
 #  else
-		((int *)cp)[0] = 0x20202020;
-		((int *)cp)[1] = 0x20202020;
+                ((int *)cp)[0] = 0x20202020;
+                ((int *)cp)[1] = 0x20202020;
 #  endif
 # else
-		cp[0] = cp[1] = cp[2] = cp[3] = ' ';
-		cp[4] = cp[5] = cp[6] = cp[7] = ' ';
+                cp[0] = cp[1] = cp[2] = cp[3] = ' ';
+                cp[4] = cp[5] = cp[6] = cp[7] = ' ';
 # endif
-		cp += 8;
-		len -= 8;
-	    }
-	    while (len--)
-		*cp++ = ' ';
-	    *cp = '\0';
+                cp += 8;
+                len -= 8;
+            }
+            while (len--)
+                *cp++ = ' ';
+            *cp = '\0';
 #endif
-	    RETURN (newString);
-	}
+            RETURN (newString);
+        }
     }
 fail: ;;
 %}.
@@ -2713,5 +2713,5 @@
 !String class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/String.st,v 1.115 1998-04-24 13:12:44 ca Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/String.st,v 1.116 1998-05-16 16:58:23 cg Exp $'
 ! !