oops - basicNew was bad for subclasses of String.
--- 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 $'
! !