--- a/Array.st Wed May 24 14:44:58 1995 +0200
+++ b/Array.st Tue Jun 06 05:56:11 1995 +0200
@@ -21,7 +21,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libbasic/Array.st,v 1.27 1995-05-24 12:41:18 claus Exp $
+$Header: /cvs/stx/stx/libbasic/Array.st,v 1.28 1995-06-06 03:52:50 claus Exp $
'!
!Array class methodsFor:'documentation'!
@@ -42,7 +42,7 @@
version
"
-$Header: /cvs/stx/stx/libbasic/Array.st,v 1.27 1995-05-24 12:41:18 claus Exp $
+$Header: /cvs/stx/stx/libbasic/Array.st,v 1.28 1995-06-06 03:52:50 claus Exp $
"
!
@@ -107,10 +107,12 @@
nInstVars += nindexedinstvars;
instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
- PROTECT_CONTEXT
- _qAlignedNew(newobj, instsize, SENDER);
- UNPROTECT_CONTEXT
- if (newobj != nil) {
+ if (_CanDoQuickAlignedNew(instsize)) {
+ /*
+ * the most common case
+ */
+ _qCheckedAlignedNew(newobj, instsize);
+ ok: ;
_InstPtr(newobj)->o_class = self;
#if defined(FAST_ARRAY_MEMSET4)
memset4(_InstPtr(newobj)->i_instvars, nil, nInstVars);
@@ -183,6 +185,19 @@
# endif
#endif
RETURN ( newobj );
+ } else {
+ /*
+ * a GC will happen ...
+ * have to protect all context stuff
+ * (especially for self, but also for backtrace in case of
+ * allocation failure)
+ */
+ PROTECT_CONTEXT
+ _qAlignedNew(newobj, instsize, SENDER);
+ UNPROTECT_CONTEXT
+ if (newobj != nil) {
+ goto ok;
+ }
}
}
}