# HG changeset patch # User Claus Gittinger # Date 895337903 -7200 # Node ID 84160615c630a43ff8130c18a319668e1414ef90 # Parent 1cd92aa2411ae1d2cfdb4f5263e65ed0293d1949 oops - basicNew was bad for subclasses of String. diff -r 1cd92aa2411a -r 84160615c630 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 $' ! !