equal
deleted
inserted
replaced
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 |