# HG changeset patch # User Claus Gittinger # Date 824859821 -3600 # Node ID 6da206fcc1c42fb2d84280fadc09e0a66b57b50a # Parent 0ab2f56ecfc7f1debac144ed66cbd330204373fa keep ref to weak-element somewhere (this is a try) diff -r 0ab2f56ecfc7 -r 6da206fcc1c4 WeakArr.st --- a/WeakArr.st Tue Feb 20 22:12:52 1996 +0100 +++ b/WeakArr.st Wed Feb 21 00:43:41 1996 +0100 @@ -286,14 +286,13 @@ "evaluate the argument, aBlock for each element in the collection. - reimplemented for IGC readBarrier. You dont have to understand this." - |home| + |home element| %{ REGISTER OBJFUNC codeVal; REGISTER int index; unsigned int nIndex; static struct inlineCache val = _ILC1; REGISTER OBJ rHome; - OBJ el; extern OBJ __WEAK_READ__(); index = _intVal(_ClassInstPtr(__qClass(self))->c_ninstvars); @@ -304,9 +303,9 @@ #ifdef NEW_BLOCK_CALL for (; index < nIndex; index++) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); - (*codeVal)(aBlock, CON_COMMA el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); + (*codeVal)(aBlock, CON_COMMA element); } #else home = _BlockInstPtr(aBlock)->b_home; @@ -318,17 +317,17 @@ for (; index < nIndex; index++) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); - (*codeVal)(rHome, CON_COMMA el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); + (*codeVal)(rHome, CON_COMMA element); } } else { for (; index < nIndex; index++) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); - (*codeVal)(home, CON_COMMA el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); + (*codeVal)(home, CON_COMMA element); } } #endif @@ -336,16 +335,15 @@ for (; index < nIndex; index++) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); (*val.ilc_func)(aBlock, @symbol(value:), CON_COMMA nil, &val, - el); + element); } } -%} -. +%}. ^ self ! @@ -354,7 +352,7 @@ up to (and including) stop in the collection. - reimplemented for IGC readBarrier. You dont have to understand this." - |home| + |home element| %{ REGISTER OBJFUNC codeVal; REGISTER int index; @@ -362,7 +360,6 @@ int nIndex, nInsts; static struct inlineCache val = _ILC1; int indexLow, indexHigh; - OBJ el; extern OBJ __WEAK_READ__(); if (__bothSmallInteger(start, stop)) { @@ -382,9 +379,9 @@ #ifdef NEW_BLOCK_CALL for (index=indexLow; index <= indexHigh; index++) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); - (*codeVal)(aBlock, CON_COMMA el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); + (*codeVal)(aBlock, CON_COMMA element); } #else home = _BlockInstPtr(aBlock)->b_home; @@ -393,28 +390,28 @@ index = indexLow; for (; index <= indexHigh; index++) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); - (*codeVal)(rHome, CON_COMMA el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); + (*codeVal)(rHome, CON_COMMA element); } } else { for (index=indexLow; index <= indexHigh; index++) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); - (*codeVal)(home, CON_COMMA el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); + (*codeVal)(home, CON_COMMA element); } } #endif } else { for (index=indexLow; index <= indexHigh; index++) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); (*val.ilc_func) (aBlock, @symbol(value:), CON_COMMA nil, &val, - el); + element); } } } @@ -431,14 +428,13 @@ Pass both index and element to the block. - reimplemented for speed" - |home| + |home element| %{ REGISTER OBJFUNC codeVal; REGISTER int index; unsigned int nIndex; static struct inlineCache val2 = _ILC2; REGISTER OBJ rHome; - OBJ el; extern OBJ __WEAK_READ__(); index = _intVal(_ClassInstPtr(__qClass(self))->c_ninstvars); @@ -450,9 +446,9 @@ for (; index < nIndex; index++) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); - (*codeVal)(aBlock, CON_COMMA __MKSMALLINT(index+1), el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); + (*codeVal)(aBlock, CON_COMMA __MKSMALLINT(index+1), element); } #else home = _BlockInstPtr(aBlock)->b_home; @@ -464,19 +460,19 @@ while (index < nIndex) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); index++; - (*codeVal)(rHome, CON_COMMA __MKSMALLINT(index), el); + (*codeVal)(rHome, CON_COMMA __MKSMALLINT(index), element); } } else { while (index < nIndex) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); index++; - (*codeVal)(home, CON_COMMA __MKSMALLINT(index), el); + (*codeVal)(home, CON_COMMA __MKSMALLINT(index), element); } } #endif @@ -484,14 +480,14 @@ while (index < nIndex) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); index++; (*val2.ilc_func)(aBlock, @symbol(value:value:), CON_COMMA nil, &val2, __MKSMALLINT(index), - el); + element); } } %}. @@ -501,14 +497,13 @@ nonNilElementsDo:aBlock "evaluate the argument, aBlock for each non-nil element" - |home| + |home element| %{ REGISTER OBJFUNC codeVal; REGISTER int index; int nIndex; static struct inlineCache val = _ILC1; REGISTER OBJ rHome; - REGISTER OBJ element; extern OBJ __WEAK_READ__(); index = _intVal(_ClassInstPtr(__qClass(self))->c_ninstvars); @@ -597,6 +592,6 @@ !WeakArray class methodsFor:'documentation'! version - ^ '$Header: /cvs/stx/stx/libbasic/Attic/WeakArr.st,v 1.24 1996-01-04 01:24:09 cg Exp $' + ^ '$Header: /cvs/stx/stx/libbasic/Attic/WeakArr.st,v 1.25 1996-02-20 23:43:41 cg Exp $' ! ! WeakArray initialize! diff -r 0ab2f56ecfc7 -r 6da206fcc1c4 WeakArray.st --- a/WeakArray.st Tue Feb 20 22:12:52 1996 +0100 +++ b/WeakArray.st Wed Feb 21 00:43:41 1996 +0100 @@ -286,14 +286,13 @@ "evaluate the argument, aBlock for each element in the collection. - reimplemented for IGC readBarrier. You dont have to understand this." - |home| + |home element| %{ REGISTER OBJFUNC codeVal; REGISTER int index; unsigned int nIndex; static struct inlineCache val = _ILC1; REGISTER OBJ rHome; - OBJ el; extern OBJ __WEAK_READ__(); index = _intVal(_ClassInstPtr(__qClass(self))->c_ninstvars); @@ -304,9 +303,9 @@ #ifdef NEW_BLOCK_CALL for (; index < nIndex; index++) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); - (*codeVal)(aBlock, CON_COMMA el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); + (*codeVal)(aBlock, CON_COMMA element); } #else home = _BlockInstPtr(aBlock)->b_home; @@ -318,17 +317,17 @@ for (; index < nIndex; index++) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); - (*codeVal)(rHome, CON_COMMA el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); + (*codeVal)(rHome, CON_COMMA element); } } else { for (; index < nIndex; index++) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); - (*codeVal)(home, CON_COMMA el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); + (*codeVal)(home, CON_COMMA element); } } #endif @@ -336,16 +335,15 @@ for (; index < nIndex; index++) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); (*val.ilc_func)(aBlock, @symbol(value:), CON_COMMA nil, &val, - el); + element); } } -%} -. +%}. ^ self ! @@ -354,7 +352,7 @@ up to (and including) stop in the collection. - reimplemented for IGC readBarrier. You dont have to understand this." - |home| + |home element| %{ REGISTER OBJFUNC codeVal; REGISTER int index; @@ -362,7 +360,6 @@ int nIndex, nInsts; static struct inlineCache val = _ILC1; int indexLow, indexHigh; - OBJ el; extern OBJ __WEAK_READ__(); if (__bothSmallInteger(start, stop)) { @@ -382,9 +379,9 @@ #ifdef NEW_BLOCK_CALL for (index=indexLow; index <= indexHigh; index++) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); - (*codeVal)(aBlock, CON_COMMA el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); + (*codeVal)(aBlock, CON_COMMA element); } #else home = _BlockInstPtr(aBlock)->b_home; @@ -393,28 +390,28 @@ index = indexLow; for (; index <= indexHigh; index++) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); - (*codeVal)(rHome, CON_COMMA el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); + (*codeVal)(rHome, CON_COMMA element); } } else { for (index=indexLow; index <= indexHigh; index++) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); - (*codeVal)(home, CON_COMMA el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); + (*codeVal)(home, CON_COMMA element); } } #endif } else { for (index=indexLow; index <= indexHigh; index++) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); (*val.ilc_func) (aBlock, @symbol(value:), CON_COMMA nil, &val, - el); + element); } } } @@ -431,14 +428,13 @@ Pass both index and element to the block. - reimplemented for speed" - |home| + |home element| %{ REGISTER OBJFUNC codeVal; REGISTER int index; unsigned int nIndex; static struct inlineCache val2 = _ILC2; REGISTER OBJ rHome; - OBJ el; extern OBJ __WEAK_READ__(); index = _intVal(_ClassInstPtr(__qClass(self))->c_ninstvars); @@ -450,9 +446,9 @@ for (; index < nIndex; index++) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); - (*codeVal)(aBlock, CON_COMMA __MKSMALLINT(index+1), el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); + (*codeVal)(aBlock, CON_COMMA __MKSMALLINT(index+1), element); } #else home = _BlockInstPtr(aBlock)->b_home; @@ -464,19 +460,19 @@ while (index < nIndex) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); index++; - (*codeVal)(rHome, CON_COMMA __MKSMALLINT(index), el); + (*codeVal)(rHome, CON_COMMA __MKSMALLINT(index), element); } } else { while (index < nIndex) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); index++; - (*codeVal)(home, CON_COMMA __MKSMALLINT(index), el); + (*codeVal)(home, CON_COMMA __MKSMALLINT(index), element); } } #endif @@ -484,14 +480,14 @@ while (index < nIndex) { if (InterruptPending != nil) __interruptL(@line COMMA_CON); - el = _InstPtr(self)->i_instvars[index]; - if (el != nil) el = __WEAK_READ__(self, el); + element = _InstPtr(self)->i_instvars[index]; + if (element != nil) element = __WEAK_READ__(self, element); index++; (*val2.ilc_func)(aBlock, @symbol(value:value:), CON_COMMA nil, &val2, __MKSMALLINT(index), - el); + element); } } %}. @@ -501,14 +497,13 @@ nonNilElementsDo:aBlock "evaluate the argument, aBlock for each non-nil element" - |home| + |home element| %{ REGISTER OBJFUNC codeVal; REGISTER int index; int nIndex; static struct inlineCache val = _ILC1; REGISTER OBJ rHome; - REGISTER OBJ element; extern OBJ __WEAK_READ__(); index = _intVal(_ClassInstPtr(__qClass(self))->c_ninstvars); @@ -597,6 +592,6 @@ !WeakArray class methodsFor:'documentation'! version - ^ '$Header: /cvs/stx/stx/libbasic/WeakArray.st,v 1.24 1996-01-04 01:24:09 cg Exp $' + ^ '$Header: /cvs/stx/stx/libbasic/WeakArray.st,v 1.25 1996-02-20 23:43:41 cg Exp $' ! ! WeakArray initialize!