Smalltalk createPackage: 'Trapped-Backend'! (Smalltalk packageAt: 'Trapped-Backend') imports: {'axxord/Axxord'}! Object subclass: #Isolator instanceVariableNames: 'root' package: 'Trapped-Backend'! !Isolator methodsFor: 'accessing'! root ^root ! root: anObject root := anObject ! ! !Isolator methodsFor: 'action'! model: anEavModel modify: aBlock | newValue | newValue := aBlock value: (anEavModel on: self). anEavModel on: self put: newValue deepCopy ! model: anEavModel read: aBlock aBlock value: (anEavModel on: self) deepCopy ! ! !Isolator class methodsFor: 'instance creation'! on: anObject ^self new root: anObject ! ! Object subclass: #TrappedPosition instanceVariableNames: 'path model' package: 'Trapped-Backend'! !TrappedPosition methodsFor: 'accessing'! model ^model ! path ^path ! path: anArray model: aTrappedMW path := anArray. model := aTrappedMW ! ! !TrappedPosition methodsFor: 'action'! modify: aBlock self model axes: self path transform: aBlock ! read: aBlock self model axes: self path consume: aBlock ! watch: aBlock self model registeredAxon addInterest: (self interestOn: self path block: [ self read: aBlock ]) ! ! !TrappedPosition methodsFor: 'private'! interestOn: anAspect block: aBlock (anAspect notEmpty and: [ anAspect last isNil ]) ifTrue: [ ^ InterestedThruAxes new aspect: anAspect allButLast block: aBlock ] ifFalse: [ ^ InterestedUpToAxes new aspect: anAspect block: aBlock ] ! !