[squeak-dev] The Trunk: System-fbs.550.mcz

commits at source.squeak.org commits at source.squeak.org
Sat Jun 29 21:15:15 UTC 2013


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 ]]!



More information about the Squeak-dev mailing list