WeakArray.st
changeset 20955 fc48f6ef7556
parent 20813 153e2c2da4cf
child 21024 8734987eb5c7
child 21440 f4962d3c833a
equal deleted inserted replaced
20954:549984fc6991 20955:fc48f6ef7556
   472     "/ Used to use #valueUninterruptably here; inlined that code for slightly
   472     "/ Used to use #valueUninterruptably here; inlined that code for slightly
   473     "/ faster execution.
   473     "/ faster execution.
   474 
   474 
   475     wasBlocked := OperatingSystem blockInterrupts.
   475     wasBlocked := OperatingSystem blockInterrupts.
   476     [
   476     [
   477 	|deps sz dep|
   477         |deps sz dep|
   478 
   478 
   479 	deps := dependents.
   479         deps := dependents.
   480 	deps notNil ifTrue:[
   480         deps notNil ifTrue:[
   481 	    deps isCollection ifTrue:[
   481             deps isCollection ifTrue:[
   482 		deps remove:anObject ifAbsent:[].
   482                 dep := deps remove:anObject ifAbsent:[].
   483 		(sz := deps size) == 0 ifTrue:[
   483                 "if dep is nil, nothing has changed"
   484 		    dependents := nil
   484                 dep notNil ifTrue:[
   485 		] ifFalse:[
   485                     (sz := deps size) == 0 ifTrue:[
   486 		    sz == 1 ifTrue:[
   486                         dependents := nil
   487 			(dep := deps first) isCollection ifFalse:[
   487                     ] ifFalse:[
   488 			    dependents := dep
   488                         sz == 1 ifTrue:[
   489 			]
   489                             (dep := deps first) isCollection ifFalse:[
   490 		    ]
   490                                 dependents := dep
   491 		]
   491                             ]
   492 	    ] ifFalse:[
   492                         ]
   493 		deps == anObject ifTrue:[
   493                     ].
   494 		    dependents := nil
   494                 ].
   495 		]
   495             ] ifFalse:[
   496 	    ]
   496                 deps == anObject ifTrue:[
   497 	]
   497                     dependents := nil
       
   498                 ]
       
   499             ]
       
   500         ]
   498     ] ensure:[
   501     ] ensure:[
   499 	wasBlocked ifFalse:[
   502         wasBlocked ifFalse:[
   500 	    OperatingSystem unblockInterrupts
   503             OperatingSystem unblockInterrupts
   501 	]
   504         ]
   502     ]
   505     ]
   503 ! !
   506 ! !
   504 
   507 
   505 !WeakArray methodsFor:'enumerating'!
   508 !WeakArray methodsFor:'enumerating'!
   506 
   509