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 ]]! |
Free forum by Nabble | Edit this page |