The Trunk: System-fbs.550.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: System-fbs.550.mcz

commits-2
Frank Shearar uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-fbs.550.mcz

==================== Summary ====================

Name: System-fbs.550
Author: fbs
Time: 29 June 2013, 10:14:21.587 pm
UUID: 760ec309-3235-4d44-ab21-6e2cb0290bdb
Ancestors: System-fbs.549

Move things to do with object events to the System-Object Events subpackage.

=============== Diff against System-fbs.549 ===============

Item was added:
+ ----- Method: CompiledMethod>>hasBreakpoint (in category '*System-Tools-debugger support') -----
+ hasBreakpoint
+ ^BreakpointManager methodHasBreakpoint: self!

Item was added:
+ ----- Method: Object>>actionForEvent: (in category '*System-Object Events-accessing') -----
+ actionForEvent: anEventSelector
+     "Answer the action to be evaluated when <anEventSelector> has been triggered."
+
+ ^self actionMap
+ at: anEventSelector asSymbol
+ ifAbsent: [nil]!

Item was added:
+ ----- Method: Object>>actionForEvent:ifAbsent: (in category '*System-Object Events-accessing') -----
+ actionForEvent: anEventSelector
+ ifAbsent: anExceptionBlock
+     "Answer the action to be evaluated when <anEventSelector> has been triggered."
+
+ | actions |
+ actions := self actionMap
+ at: anEventSelector asSymbol
+ ifAbsent: [nil].
+ ^actions ifNil: [anExceptionBlock value]!

Item was added:
+ ----- Method: Object>>actionMap (in category '*System-Object Events-accessing') -----
+ actionMap
+
+ ^EventManager actionMapFor: self!

Item was added:
+ ----- Method: Object>>actionSequenceForEvent: (in category '*System-Object Events-accessing') -----
+ actionSequenceForEvent: anEventSelector
+
+     ^(self actionMap
+         at: anEventSelector asSymbol
+         ifAbsent: [^WeakActionSequence new])
+             asActionSequence!

Item was added:
+ ----- Method: Object>>actionsDo: (in category '*System-Object Events-accessing') -----
+ actionsDo: aBlock
+
+ self actionMap do: aBlock!

Item was added:
+ ----- Method: Object>>actionsWithReceiver:forEvent: (in category '*System-Change Notification-events') -----
+ actionsWithReceiver: anObject forEvent: anEventSelector
+
+ ^(self actionSequenceForEvent: anEventSelector)
+                 select: [:anAction | anAction receiver == anObject ]!

Item was added:
+ ----- Method: Object>>asActionSequence (in category '*System-Change Notification-converting') -----
+ asActionSequence
+
+ ^WeakActionSequence with: self!

Item was added:
+ ----- Method: Object>>asActionSequenceTrappingErrors (in category '*System-Change Notification-converting') -----
+ asActionSequenceTrappingErrors
+
+ ^WeakActionSequenceTrappingErrors with: self!

Item was added:
+ ----- Method: Object>>break (in category '*System-Tools-breakpoint') -----
+ break
+ "This is a simple message to use for inserting breakpoints during debugging.
+ The debugger is opened by sending a signal. This gives a chance to restore
+ invariants related to multiple processes."
+
+ BreakPoint signal.
+
+ "nil break."!

Item was added:
+ ----- Method: Object>>createActionMap (in category '*System-Object Events-accessing') -----
+ createActionMap
+
+ ^IdentityDictionary new!

Item was added:
+ ----- Method: Object>>hasActionForEvent: (in category '*System-Object Events-accessing') -----
+ hasActionForEvent: anEventSelector
+     "Answer true if there is an action associated with anEventSelector"
+
+     ^(self actionForEvent: anEventSelector) notNil!

Item was added:
+ ----- Method: Object>>releaseActionMap (in category '*System-Object Events-accessing-removing') -----
+ releaseActionMap
+
+ EventManager releaseActionMapFor: self!

Item was added:
+ ----- Method: Object>>removeAction:forEvent: (in category '*System-Object Events-accessing-removing') -----
+ removeAction: anAction
+ forEvent: anEventSelector
+
+     self
+         removeActionsSatisfying: [:action | action = anAction]
+         forEvent: anEventSelector!

Item was added:
+ ----- Method: Object>>removeActionsForEvent: (in category '*System-Object Events-accessing-removing') -----
+ removeActionsForEvent: anEventSelector
+
+     | map |
+     map := self actionMap.
+     map removeKey: anEventSelector asSymbol ifAbsent: [].
+     map isEmpty
+         ifTrue: [self releaseActionMap]!

Item was added:
+ ----- Method: Object>>removeActionsSatisfying: (in category '*System-Object Events-accessing-removing') -----
+ removeActionsSatisfying: aBlock
+
+ self actionMap keys do:
+ [:eachEventSelector |
+ self
+     removeActionsSatisfying: aBlock
+ forEvent: eachEventSelector
+ ]!

Item was added:
+ ----- Method: Object>>removeActionsSatisfying:forEvent: (in category '*System-Object Events-accessing-removing') -----
+ removeActionsSatisfying: aOneArgBlock
+ forEvent: anEventSelector
+
+     self
+         setActionSequence:
+             ((self actionSequenceForEvent: anEventSelector)
+                 reject: aOneArgBlock)
+         forEvent: anEventSelector!

Item was added:
+ ----- Method: Object>>removeActionsWithReceiver: (in category '*System-Object Events-accessing-removing') -----
+ removeActionsWithReceiver: anObject
+
+ self actionMap copy keysDo:
+ [:eachEventSelector |
+ self
+     removeActionsSatisfying: [:anAction | anAction receiver == anObject]
+ forEvent: eachEventSelector
+ ]!

Item was added:
+ ----- Method: Object>>removeActionsWithReceiver:forEvent: (in category '*System-Object Events-accessing-removing') -----
+ removeActionsWithReceiver: anObject
+ forEvent: anEventSelector
+
+     self
+         removeActionsSatisfying:
+             [:anAction |
+             anAction receiver == anObject]
+         forEvent: anEventSelector!

Item was added:
+ ----- Method: Object>>renameActionsWithReceiver:forEvent:toEvent: (in category '*System-Change Notification-events') -----
+ renameActionsWithReceiver: anObject forEvent: anEventSelector toEvent: newEvent
+
+ | oldActions newActions |
+ oldActions := Set new.
+ newActions := Set new.
+ (self actionSequenceForEvent: anEventSelector) do: [ :action |
+ action receiver == anObject
+ ifTrue: [ oldActions add: anObject ]
+ ifFalse: [ newActions add: anObject ]].
+ self setActionSequence: (ActionSequence withAll: newActions) forEvent: anEventSelector.
+ oldActions do: [ :act | self when: newEvent evaluate: act ].!

Item was added:
+ ----- Method: Object>>setActionSequence:forEvent: (in category '*System-Object Events-accessing') -----
+ setActionSequence: actionSequence
+ forEvent: anEventSelector
+
+ | action |
+ "This is a good time to compact the action sequence of old, garbage collected stuff."
+ action := actionSequence asMinimalRepresentation.
+ action
+ ifNil: [ self removeActionsForEvent: anEventSelector]
+ ifNotNil: [
+ self updateableActionMap
+ at: anEventSelector asSymbol
+ put: action]!

Item was added:
+ ----- Method: Object>>triggerEvent: (in category '*System-Object Events-accessing-triggering') -----
+ triggerEvent: anEventSelector
+ "Evaluate all actions registered for <anEventSelector>. Return the value of the last registered action."
+
+     ^(self actionForEvent: anEventSelector) value!

Item was added:
+ ----- Method: Object>>triggerEvent:ifNotHandled: (in category '*System-Object Events-accessing-triggering') -----
+ triggerEvent: anEventSelector
+ ifNotHandled: anExceptionBlock
+ "Evaluate all actions registered for <anEventSelector>. Return the value of the last registered action."
+
+     ^(self
+ actionForEvent: anEventSelector
+ ifAbsent: [^anExceptionBlock value]) value
+ !

Item was added:
+ ----- Method: Object>>triggerEvent:with: (in category '*System-Object Events-accessing-triggering') -----
+ triggerEvent: anEventSelector
+ with: anObject
+
+     ^self
+ triggerEvent: anEventSelector
+ withArguments: (Array with: anObject)!

Item was added:
+ ----- Method: Object>>triggerEvent:with:ifNotHandled: (in category '*System-Object Events-accessing-triggering') -----
+ triggerEvent: anEventSelector
+ with: anObject
+ ifNotHandled: anExceptionBlock
+
+     ^self
+ triggerEvent: anEventSelector
+ withArguments: (Array with: anObject)
+ ifNotHandled: anExceptionBlock!

Item was added:
+ ----- Method: Object>>triggerEvent:withArguments: (in category '*System-Object Events-accessing-triggering') -----
+ triggerEvent: anEventSelector
+ withArguments: anArgumentList
+
+     ^(self actionForEvent: anEventSelector)
+         valueWithArguments: anArgumentList!

Item was added:
+ ----- Method: Object>>triggerEvent:withArguments:ifNotHandled: (in category '*System-Object Events-accessing-triggering') -----
+ triggerEvent: anEventSelector
+ withArguments: anArgumentList
+ ifNotHandled: anExceptionBlock
+
+     ^(self
+ actionForEvent: anEventSelector
+ ifAbsent: [^anExceptionBlock value])
+         valueWithArguments: anArgumentList!

Item was added:
+ ----- Method: Object>>updateableActionMap (in category '*System-Object Events-accessing') -----
+ updateableActionMap
+
+ ^EventManager updateableActionMapFor: self!

Item was added:
+ ----- Method: Object>>when:evaluate: (in category '*System-Object Events-accessing-registering') -----
+ when: anEventSelector evaluate: anAction
+
+ | actions |
+ actions := self actionSequenceForEvent: anEventSelector.
+ (actions includes: anAction)
+ ifTrue: [^ self].
+ self
+ setActionSequence: (actions copyWith: anAction)
+ forEvent: anEventSelector!

Item was added:
+ ----- Method: Object>>when:send:to: (in category '*System-Object Events-accessing-registering') -----
+ when: anEventSelector
+ send: aMessageSelector
+ to: anObject
+  
+     self
+         when: anEventSelector
+         evaluate: (WeakMessageSend
+             receiver: anObject
+             selector: aMessageSelector)!

Item was added:
+ ----- Method: Object>>when:send:to:with: (in category '*System-Object Events-accessing-registering') -----
+ when: anEventSelector
+ send: aMessageSelector
+ to: anObject
+ with: anArg
+  
+     self
+         when: anEventSelector
+         evaluate: (WeakMessageSend
+             receiver: anObject
+             selector: aMessageSelector
+ arguments: (Array with: anArg))!

Item was added:
+ ----- Method: Object>>when:send:to:withArguments: (in category '*System-Object Events-accessing-registering') -----
+ when: anEventSelector
+ send: aMessageSelector
+ to: anObject
+ withArguments: anArgArray
+  
+     self
+         when: anEventSelector
+         evaluate: (WeakMessageSend
+             receiver: anObject
+             selector: aMessageSelector
+ arguments: anArgArray)!

Item was added:
+ Array variableSubclass: #WeakActionSequence
+ instanceVariableNames: ''
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'System-Change Notification'!

Item was added:
+ ----- Method: WeakActionSequence>>asActionSequence (in category 'converting') -----
+ asActionSequence
+
+ ^self!

Item was added:
+ ----- Method: WeakActionSequence>>asActionSequenceTrappingErrors (in category 'converting') -----
+ asActionSequenceTrappingErrors
+
+ ^WeakActionSequenceTrappingErrors withAll: self!

Item was added:
+ ----- Method: WeakActionSequence>>asMinimalRepresentation (in category 'converting') -----
+ asMinimalRepresentation
+
+ | valid |
+ valid := self reject: [:e | e isReceiverOrAnyArgumentGarbage ].
+ valid size = 0
+ ifTrue: [ ^nil ].
+ valid size = 1
+ ifTrue: [ ^valid first ].
+ ^valid!

Item was added:
+ ----- Method: WeakActionSequence>>printOn: (in category 'printing') -----
+ printOn: aStream
+
+ self size < 2 ifTrue: [^super printOn: aStream].
+ aStream nextPutAll: '#('.
+ self
+ do: [:each | each printOn: aStream]
+ separatedBy: [aStream cr].
+ aStream nextPut: $)!

Item was added:
+ ----- Method: WeakActionSequence>>value (in category 'evaluating') -----
+ value
+ "Answer the result of evaluating the elements of the receiver.
+ Actually, return just the last result."
+
+ ^self inject: nil into: [ :previousAnswer :each |
+ each valueOtherwise: [ previousAnswer ]].!

Item was added:
+ ----- Method: WeakActionSequence>>valueWithArguments: (in category 'evaluating') -----
+ valueWithArguments: anArray
+ "Return the last result"
+
+ ^self inject: nil into: [ :previousAnswer :each |
+ each valueWithArguments: anArray otherwise: [ previousAnswer ]]!