--- a/Behavior.st Tue Aug 14 10:55:15 2018 +0200
+++ b/Behavior.st Tue Aug 14 10:55:25 2018 +0200
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
"
COPYRIGHT (c) 1988 by Claus Gittinger
All Rights Reserved
@@ -2563,7 +2561,7 @@
%{ /* NOCONTEXT */
#ifdef __SCHTEAM__
if (anInteger.isSmallInteger()) {
- return __c__._RETURN( self.basicNew( anInteger.intValue()) );
+ return __c__._RETURN( self.basicNew( anInteger.intValue()) );
}
#else
OBJ newobj;
@@ -2582,299 +2580,299 @@
double *dp;
if (__isSmallInteger(anInteger)) {
- nindexedinstvars = __intVal(anInteger);
- if (nindexedinstvars >= 0) {
- nInstVars = __intVal(__INST(instSize));
- flags = __intVal(__INST(flags)) & ARRAYMASK;
- switch (flags) {
- case BYTEARRAY:
- nBytes = nindexedinstvars + __OBJS2BYTES__(nInstVars);
- instsize = OHDR_SIZE + nBytes;
- if (__CanDoQuickNew(instsize)) { /* OBJECT ALLOCATION */
- /*
- * the most common case
- */
- __qCheckedNew(newobj, instsize);
- __InstPtr(newobj)->o_class = self;
- __qSTORE(newobj, self);
- nilIt:
- cp = (char *)__InstPtr(newobj)->i_instvars;
+ nindexedinstvars = __intVal(anInteger);
+ if (nindexedinstvars >= 0) {
+ nInstVars = __intVal(__INST(instSize));
+ flags = __intVal(__INST(flags)) & ARRAYMASK;
+ switch (flags) {
+ case BYTEARRAY:
+ nBytes = nindexedinstvars + __OBJS2BYTES__(nInstVars);
+ instsize = OHDR_SIZE + nBytes;
+ if (__CanDoQuickNew(instsize)) { /* OBJECT ALLOCATION */
+ /*
+ * the most common case
+ */
+ __qCheckedNew(newobj, instsize);
+ __InstPtr(newobj)->o_class = self;
+ __qSTORE(newobj, self);
+ nilIt:
+ cp = (char *)__InstPtr(newobj)->i_instvars;
# if defined(memset4) && defined(FAST_ARRAY_MEMSET4) || defined(FAST_MEMSET4)
- memset4(cp, 0, (nBytes+3) >> 2);
+ memset4(cp, 0, (nBytes+3) >> 2);
# elif defined(FAST_ARRAY_MEMSET)
- memset(cp, 0, nBytes);
+ memset(cp, 0, nBytes);
# else
- while (nBytes >= (sizeof(INT) * 8L)) {
- ((INT *)cp)[0] = (INT)0;
- ((INT *)cp)[1] = (INT)0;
- ((INT *)cp)[2] = (INT)0;
- ((INT *)cp)[3] = (INT)0;
- ((INT *)cp)[4] = (INT)0;
- ((INT *)cp)[5] = (INT)0;
- ((INT *)cp)[6] = (INT)0;
- ((INT *)cp)[7] = (INT)0;
- cp += (sizeof(INT) * 8L);
- nBytes -= (sizeof(INT) * 8L);
- }
- while (nBytes >= sizeof(INT)) {
- *(INT *)cp = (INT)0;
- cp += sizeof(INT);
- nBytes -= sizeof(INT);
- }
- while (nBytes--)
- *cp++ = 0;
+ while (nBytes >= (sizeof(INT) * 8L)) {
+ ((INT *)cp)[0] = (INT)0;
+ ((INT *)cp)[1] = (INT)0;
+ ((INT *)cp)[2] = (INT)0;
+ ((INT *)cp)[3] = (INT)0;
+ ((INT *)cp)[4] = (INT)0;
+ ((INT *)cp)[5] = (INT)0;
+ ((INT *)cp)[6] = (INT)0;
+ ((INT *)cp)[7] = (INT)0;
+ cp += (sizeof(INT) * 8L);
+ nBytes -= (sizeof(INT) * 8L);
+ }
+ while (nBytes >= sizeof(INT)) {
+ *(INT *)cp = (INT)0;
+ cp += sizeof(INT);
+ nBytes -= sizeof(INT);
+ }
+ while (nBytes--)
+ *cp++ = 0;
# endif
- RETURN ( newobj );
- }
- __PROTECT_CONTEXT__
- __qNew(newobj, instsize); /* OBJECT ALLOCATION */
- __UNPROTECT_CONTEXT__
- if (newobj == nil) {
- break;
- }
- __InstPtr(newobj)->o_class = self;
- __qSTORE(newobj, self);
- goto nilIt;
- break;
-
- case WORDARRAY:
- case SWORDARRAY:
- nBytes = __OBJS2BYTES__(nInstVars) + nindexedinstvars * 2;
- instsize = OHDR_SIZE + nBytes;
- __PROTECT_CONTEXT__
- __qNew(newobj, instsize); /* OBJECT ALLOCATION */
- __UNPROTECT_CONTEXT__
- if (newobj == nil) {
- break;
- }
- __InstPtr(newobj)->o_class = self;
- __qSTORE(newobj, self);
- goto nilIt;
-
- case LONGARRAY:
- case SLONGARRAY:
- nBytes = __OBJS2BYTES__(nInstVars) + nindexedinstvars * 4;
- instsize = OHDR_SIZE + nBytes;
- __PROTECT_CONTEXT__
- __qNew(newobj, instsize); /* OBJECT ALLOCATION */
- __UNPROTECT_CONTEXT__
- if (newobj == nil) {
- break;
- }
- __InstPtr(newobj)->o_class = self;
- __qSTORE(newobj, self);
- goto nilIt;
-
- case LONGLONGARRAY:
- case SLONGLONGARRAY:
- instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
+ RETURN ( newobj );
+ }
+ __PROTECT_CONTEXT__
+ __qNew(newobj, instsize); /* OBJECT ALLOCATION */
+ __UNPROTECT_CONTEXT__
+ if (newobj == nil) {
+ break;
+ }
+ __InstPtr(newobj)->o_class = self;
+ __qSTORE(newobj, self);
+ goto nilIt;
+ break;
+
+ case WORDARRAY:
+ case SWORDARRAY:
+ nBytes = __OBJS2BYTES__(nInstVars) + nindexedinstvars * 2;
+ instsize = OHDR_SIZE + nBytes;
+ __PROTECT_CONTEXT__
+ __qNew(newobj, instsize); /* OBJECT ALLOCATION */
+ __UNPROTECT_CONTEXT__
+ if (newobj == nil) {
+ break;
+ }
+ __InstPtr(newobj)->o_class = self;
+ __qSTORE(newobj, self);
+ goto nilIt;
+
+ case LONGARRAY:
+ case SLONGARRAY:
+ nBytes = __OBJS2BYTES__(nInstVars) + nindexedinstvars * 4;
+ instsize = OHDR_SIZE + nBytes;
+ __PROTECT_CONTEXT__
+ __qNew(newobj, instsize); /* OBJECT ALLOCATION */
+ __UNPROTECT_CONTEXT__
+ if (newobj == nil) {
+ break;
+ }
+ __InstPtr(newobj)->o_class = self;
+ __qSTORE(newobj, self);
+ goto nilIt;
+
+ case LONGLONGARRAY:
+ case SLONGLONGARRAY:
+ instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
# ifdef __NEED_LONGLONG_ALIGN
- instsize = ((instsize-1) + __LONGLONG_ALIGN) & ~(__LONGLONG_ALIGN-1);
+ instsize = ((instsize-1) + __LONGLONG_ALIGN) & ~(__LONGLONG_ALIGN-1);
# endif
- instsize += nindexedinstvars * 8;
- nBytes = instsize - OHDR_SIZE;
-
- __PROTECT_CONTEXT__
- __qNew(newobj, instsize); /* OBJECT ALLOCATION */
- __UNPROTECT_CONTEXT__
- if (newobj == nil) {
- break;
- }
- __InstPtr(newobj)->o_class = self;
- __qSTORE(newobj, self);
- goto nilIt;
- break;
-
- case FLOATARRAY:
- instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
+ instsize += nindexedinstvars * 8;
+ nBytes = instsize - OHDR_SIZE;
+
+ __PROTECT_CONTEXT__
+ __qNew(newobj, instsize); /* OBJECT ALLOCATION */
+ __UNPROTECT_CONTEXT__
+ if (newobj == nil) {
+ break;
+ }
+ __InstPtr(newobj)->o_class = self;
+ __qSTORE(newobj, self);
+ goto nilIt;
+ break;
+
+ case FLOATARRAY:
+ instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
# ifdef __NEED_FLOATARRAY_ALIGN
- instsize = ((instsize-1) + __FLOATARRAY_ALIGN) & ~(__FLOATARRAY_ALIGN-1);
+ instsize = ((instsize-1) + __FLOATARRAY_ALIGN) & ~(__FLOATARRAY_ALIGN-1);
# endif
- instsize += nindexedinstvars * sizeof(float);
- nBytes = instsize - OHDR_SIZE;
-
- __PROTECT_CONTEXT__
- __qNew(newobj, instsize); /* OBJECT ALLOCATION */
- __UNPROTECT_CONTEXT__
- if (newobj == nil) {
- break;
- }
- __InstPtr(newobj)->o_class = self;
- __qSTORE(newobj, self);
+ instsize += nindexedinstvars * sizeof(float);
+ nBytes = instsize - OHDR_SIZE;
+
+ __PROTECT_CONTEXT__
+ __qNew(newobj, instsize); /* OBJECT ALLOCATION */
+ __UNPROTECT_CONTEXT__
+ if (newobj == nil) {
+ break;
+ }
+ __InstPtr(newobj)->o_class = self;
+ __qSTORE(newobj, self);
# if defined(__FLOAT0_IS_INT0) /* knowin that float 0.0 is all-zeros */
- goto nilIt;
+ goto nilIt;
# else
- op = __InstPtr(newobj)->i_instvars;
- while (nInstVars-- != 0)
- *op++ = nil;
- fp = (float *)op;
- while (nindexedinstvars-- != 0)
- *fp++ = 0.0;
+ op = __InstPtr(newobj)->i_instvars;
+ while (nInstVars-- != 0)
+ *op++ = nil;
+ fp = (float *)op;
+ while (nindexedinstvars-- != 0)
+ *fp++ = 0.0;
# endif
- RETURN ( newobj );
- break;
-
- case DOUBLEARRAY:
- instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
+ RETURN ( newobj );
+ break;
+
+ case DOUBLEARRAY:
+ instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
# ifdef __NEED_DOUBLE_ALIGN
- instsize = ((instsize-1) + __DOUBLE_ALIGN) & ~(__DOUBLE_ALIGN-1);
+ instsize = ((instsize-1) + __DOUBLE_ALIGN) & ~(__DOUBLE_ALIGN-1);
# endif
- instsize += nindexedinstvars * sizeof(double);
- nBytes = instsize - OHDR_SIZE;
-
- __PROTECT_CONTEXT__
- __qNew(newobj, instsize); /* OBJECT ALLOCATION */
- __UNPROTECT_CONTEXT__
- if (newobj == nil) {
- break;
- }
- __InstPtr(newobj)->o_class = self;
- __qSTORE(newobj, self);
+ instsize += nindexedinstvars * sizeof(double);
+ nBytes = instsize - OHDR_SIZE;
+
+ __PROTECT_CONTEXT__
+ __qNew(newobj, instsize); /* OBJECT ALLOCATION */
+ __UNPROTECT_CONTEXT__
+ if (newobj == nil) {
+ break;
+ }
+ __InstPtr(newobj)->o_class = self;
+ __qSTORE(newobj, self);
# if defined(__DOUBLE0_IS_INT0) /* knowin that double 0.0 is all-zeros */
- goto nilIt;
+ goto nilIt;
# else
- op = __InstPtr(newobj)->i_instvars;
- while (nInstVars-- != 0)
- *op++ = nil;
+ op = __InstPtr(newobj)->i_instvars;
+ while (nInstVars-- != 0)
+ *op++ = nil;
# ifdef __NEED_DOUBLE_ALIGN
- /*
- * care for double alignment
- * add filler.
- */
- if ((INT)op & (__DOUBLE_ALIGN-1)) {
- *op++ = nil;
- }
+ /*
+ * care for double alignment
+ * add filler.
+ */
+ if ((INT)op & (__DOUBLE_ALIGN-1)) {
+ *op++ = nil;
+ }
# endif
- dp = (double *)op;
- while (nindexedinstvars-- != 0)
- *dp++ = 0.0;
+ dp = (double *)op;
+ while (nindexedinstvars-- != 0)
+ *dp++ = 0.0;
# endif
- RETURN ( newobj );
- break;
-
- case WKPOINTERARRAY:
- case POINTERARRAY:
- nInstVars += nindexedinstvars;
- instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
- __PROTECT_CONTEXT__
- __qNew(newobj, instsize); /* OBJECT ALLOCATION */
- __UNPROTECT_CONTEXT__
- if (newobj == nil) {
- break;
- }
- __InstPtr(newobj)->o_class = self;
- __qSTORE(newobj, self);
+ RETURN ( newobj );
+ break;
+
+ case WKPOINTERARRAY:
+ case POINTERARRAY:
+ nInstVars += nindexedinstvars;
+ instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
+ __PROTECT_CONTEXT__
+ __qNew(newobj, instsize); /* OBJECT ALLOCATION */
+ __UNPROTECT_CONTEXT__
+ if (newobj == nil) {
+ break;
+ }
+ __InstPtr(newobj)->o_class = self;
+ __qSTORE(newobj, self);
# if defined(memset4) && defined(FAST_ARRAY_MEMSET4) || defined(FAST_MEMSET4)
- memset4(__InstPtr(newobj)->i_instvars, nil, nInstVars);
+ memset4(__InstPtr(newobj)->i_instvars, nil, nInstVars);
# else
- /*
- * knowing that nil is 0
- */
+ /*
+ * knowing that nil is 0
+ */
# ifdef sparc
# define FAST_ARRAY_MEMSET_DOUBLES_UNROLLED
# endif
# if defined(FAST_ARRAY_MEMSET_DOUBLES_UNROLLED)
- op = __InstPtr(newobj)->i_instvars;
- if (nInstVars > 8) {
- *op++ = nil; /* for alignment */
- nInstVars--;
- while (nInstVars >= 8) {
- *(double *)op = 0.0;
- ((double *)op)[1] = 0.0;
- ((double *)op)[2] = 0.0;
- ((double *)op)[3] = 0.0;
- op += 8;
- nInstVars -= 8;
- }
- }
- while (nInstVars != 0) {
- *op++ = 0;
- nInstVars--;
- }
+ op = __InstPtr(newobj)->i_instvars;
+ if (nInstVars > 8) {
+ *op++ = nil; /* for alignment */
+ nInstVars--;
+ while (nInstVars >= 8) {
+ *(double *)op = 0.0;
+ ((double *)op)[1] = 0.0;
+ ((double *)op)[2] = 0.0;
+ ((double *)op)[3] = 0.0;
+ op += 8;
+ nInstVars -= 8;
+ }
+ }
+ while (nInstVars != 0) {
+ *op++ = 0;
+ nInstVars--;
+ }
# else
# if defined(FAST_ARRAY_MEMSET_LONGLONG_UNROLLED)
- op = __InstPtr(newobj)->i_instvars;
- if (nInstVars > 8) {
- *op++ = nil; /* for alignment */
- nInstVars--;
- while (nInstVars >= 8) {
- *(long long *)op = 0;
- ((long long *)op)[1] = 0;
- ((long long *)op)[2] = 0;
- ((long long *)op)[3] = 0;
- op += 8;
- nInstVars -= 8;
- }
- }
- while (nInstVars != 0) {
- *op++ = 0;
- nInstVars--;
- }
+ op = __InstPtr(newobj)->i_instvars;
+ if (nInstVars > 8) {
+ *op++ = nil; /* for alignment */
+ nInstVars--;
+ while (nInstVars >= 8) {
+ *(long long *)op = 0;
+ ((long long *)op)[1] = 0;
+ ((long long *)op)[2] = 0;
+ ((long long *)op)[3] = 0;
+ op += 8;
+ nInstVars -= 8;
+ }
+ }
+ while (nInstVars != 0) {
+ *op++ = 0;
+ nInstVars--;
+ }
# else
# if defined(FAST_ARRAY_MEMSET)
- memset(__InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE);
+ memset(__InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE);
# else
- op = __InstPtr(newobj)->i_instvars;
- while (nInstVars >= 8) {
- nInstVars -= 8;
- op[0] = nil; op[1] = nil;
- op[2] = nil; op[3] = nil;
- op[4] = nil; op[5] = nil;
- op[6] = nil; op[7] = nil;
- op += 8;
- }
- while (nInstVars-- != 0)
- *op++ = nil;
+ op = __InstPtr(newobj)->i_instvars;
+ while (nInstVars >= 8) {
+ nInstVars -= 8;
+ op[0] = nil; op[1] = nil;
+ op[2] = nil; op[3] = nil;
+ op[4] = nil; op[5] = nil;
+ op[6] = nil; op[7] = nil;
+ op += 8;
+ }
+ while (nInstVars-- != 0)
+ *op++ = nil;
# endif
# endif
# endif
# endif
- RETURN ( newobj );
- break;
-
- default:
- /*
- * new:n for non-variable classes only allowed if
- * n == 0
- */
- if (nindexedinstvars == 0) {
- instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
- __PROTECT_CONTEXT__
- __qNew(newobj, instsize); /* OBJECT ALLOCATION */
- __UNPROTECT_CONTEXT__
- if (newobj == nil) {
- break;
- }
- __InstPtr(newobj)->o_class = self;
- __qSTORE(newobj, self);
-
- if (nInstVars) {
+ RETURN ( newobj );
+ break;
+
+ default:
+ /*
+ * new:n for non-variable classes only allowed if
+ * n == 0
+ */
+ if (nindexedinstvars == 0) {
+ instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
+ __PROTECT_CONTEXT__
+ __qNew(newobj, instsize); /* OBJECT ALLOCATION */
+ __UNPROTECT_CONTEXT__
+ if (newobj == nil) {
+ break;
+ }
+ __InstPtr(newobj)->o_class = self;
+ __qSTORE(newobj, self);
+
+ if (nInstVars) {
# if defined(memset4) && defined(FAST_OBJECT_MEMSET4) || defined(FAST_MEMSET4)
- memset4(__InstPtr(newobj)->i_instvars, nil, nInstVars);
+ memset4(__InstPtr(newobj)->i_instvars, nil, nInstVars);
# else
# if defined(FAST_MEMSET)
- /*
- * knowing that nil is 0
- */
- memset(__InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE);
+ /*
+ * knowing that nil is 0
+ */
+ memset(__InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE);
# else
- op = __InstPtr(newobj)->i_instvars;
- do {
- *op++ = nil;
- } while (--nInstVars != 0);
+ op = __InstPtr(newobj)->i_instvars;
+ do {
+ *op++ = nil;
+ } while (--nInstVars != 0);
# endif
# endif
- }
- RETURN ( newobj );
- }
- break;
- }
- }
+ }
+ RETURN ( newobj );
+ }
+ break;
+ }
+ }
}
#endif /* not SCHTEAM */
%}.
@@ -2884,26 +2882,26 @@
"
(anInteger isMemberOf:SmallInteger) ifFalse:[
- "
- the argument is either not an integer,
- or a LargeInteger (which means that its definitely too big)
- "
- self error:'argument to new: must be Integer' mayProceed:true.
- ^ nil
+ "
+ the argument is either not an integer,
+ or a LargeInteger (which means that its definitely too big)
+ "
+ self argumentError:'argument to new: must be Integer' with:anInteger.
+ ^ nil
].
(anInteger < 0) ifTrue:[
- "
- the argument is negative,
- "
- self error:'bad (negative) argument to new:'.
- ^ nil
+ "
+ the argument is negative,
+ "
+ self argumentError:'bad (negative) argument to new:' with:anInteger.
+ ^ nil
].
self isVariable ifFalse:[
- "
- this class does not have any indexed instance variables
- "
- self error:'class has no indexed instvars - cannot create with new:'.
- ^ nil
+ "
+ this class does not have any indexed instance variables
+ "
+ self argumentError:'class has no indexed instvars - cannot create with new:'.
+ ^ nil
].
"
memory allocation failed.
@@ -2914,6 +2912,8 @@
Bad luck - you should increase the swap space on your machine.
"
^ AllocationFailure raise.
+
+ "Modified: / 14-08-2018 / 10:54:18 / Claus Gittinger"
!
decodeFromLiteralArray:anArray