Nicolas Cellier uploaded a new version of EToys to project The Trunk:
http://source.squeak.org/trunk/EToys-nice.36.mcz ==================== Summary ==================== Name: EToys-nice.36 Author: nice Time: 19 October 2009, 11:20:31 am UUID: 9f11b689-fee1-2347-a7c5-53ae8326942b Ancestors: EToys-tfel.35 Use #fasterKeys and correct a bug in #includesSelector:forInstance:ofClass:limitClass: Observe the old code: What you see, in the second loop: theKeys collect: [anInstVarNames | Utilities setterSelectorFor: anInstVarName] Is not what you get, because at this stage, keys contains the (Utilities getterSelectorFor: anInstVarName), that is #getFoo for anInstVarName #foo So the second loop did collect #setGetFoo: ... I didn't try it, but that's how I read it. =============== Diff against EToys-tfel.35 =============== Item was changed: ----- Method: PasteUpMorph>>userCustomEventNames (in category '*eToys-customevents-scripting') ----- userCustomEventNames | reg | reg := self valueOfProperty: #userCustomEventsRegistry ifAbsent: [ ^#() ]. + ^reg fasterKeys sort! - ^reg keys asArray sort! Item was changed: ----- Method: KedamaTurtleVectorPlayer>>compileAllAccessors (in category 'player protocol') ----- compileAllAccessors + info fasterKeys do: [:k | - info keys asArray do: [:k | (#(who x y heading color visible) includes: k) ifFalse: [ self compileVectorInstVarAccessorsFor: k. ]. ]. ! Item was changed: ----- Method: KedamaSequenceExecutionStub>>compileAllAccessors (in category 'method management') ----- compileAllAccessors + turtles info fasterKeys do: [:k | - turtles info keys asArray do: [:k | (#(who x y heading color visible normal) includes: k) ifFalse: [ self compileScalarInstVarAccessorsFor: k. ]. ]. ! Item was changed: ----- Method: EToyVocabulary>>includesSelector:forInstance:ofClass:limitClass: (in category 'initialization') ----- includesSelector: aSelector forInstance: anInstance ofClass: aTargetClass limitClass: mostGenericClass "Answer whether the vocabulary includes the given selector for the given class (and instance, if provided), only considering method implementations in mostGenericClass and lower" + | classToUse aClass | - | classToUse aClass theKeys | (aTargetClass isUniClass and: [(aTargetClass namedTileScriptSelectors includes: aSelector) or: + [aTargetClass slotInfo fasterKeys anySatisfy: + [:anInstVarName | (Utilities getterSelectorFor: anInstVarName) = aSelector or: [(Utilities setterSelectorFor: anInstVarName) = aSelector]]]]) + ifTrue: [^ true]. - [(((theKeys := aTargetClass slotInfo keys collect: - [:anInstVarName | Utilities getterSelectorFor: anInstVarName])) includes: aSelector) - or: - [(theKeys collect: [:anInstVarName | Utilities setterSelectorFor: anInstVarName]) includes: aSelector]]]) ifTrue: [^ true]. (methodInterfaces includesKey: aSelector) ifFalse: [^ false]. classToUse := self classToUseFromInstance: anInstance ofClass: aTargetClass. ^ (aClass := classToUse whichClassIncludesSelector: aSelector) ifNil: [false] ifNotNil: [aClass includesBehavior: mostGenericClass] ! Item was changed: ----- Method: StandardScriptingSystem>>globalCustomEventNames (in category '*eToys-customevents-custom events') ----- globalCustomEventNames + ^self customEventsRegistry fasterKeys sort! - ^self customEventsRegistry keys asArray sort! Item was changed: ----- Method: EToyVocabulary>>allMethodsInCategory:forInstance:ofClass: (in category 'method list') ----- allMethodsInCategory: aCategoryName forInstance: anObject ofClass: aClass "Answer a list of all methods in the etoy interface which are in the given category, on behalf of anObject, or if it is nil, aClass" | aCategory unfiltered suitableSelectors isAll | aCategoryName ifNil: [^ OrderedCollection new]. aClass isUniClass ifTrue: [aCategoryName = ScriptingSystem nameForScriptsCategory ifTrue: [^ aClass namedTileScriptSelectors]. aCategoryName = ScriptingSystem nameForInstanceVariablesCategory ifTrue: + [^ aClass slotInfo fasterKeys sort collect: - [^ aClass slotInfo keys asSortedArray collect: [:anInstVarName | Utilities getterSelectorFor: anInstVarName]]]. unfiltered := (isAll := aCategoryName = self allCategoryName) ifTrue: [methodInterfaces collect: [:anInterface | anInterface selector]] ifFalse: [aCategory := categories detect: [:cat | cat categoryName = aCategoryName] ifNone: [^ OrderedCollection new]. aCategory elementsInOrder collect: [:anElement | anElement selector]]. (anObject isKindOf: Player) ifTrue: [suitableSelectors := anObject costume selectorsForViewer. unfiltered := unfiltered select: [:aSelector | suitableSelectors includes: aSelector]]. (isAll and: [aClass isUniClass]) ifTrue: [unfiltered addAll: aClass namedTileScriptSelectors. + unfiltered addAll: (aClass slotInfo fasterKeys sort collect: - unfiltered addAll: (aClass slotInfo keys asSortedArray collect: [:anInstVarName | Utilities getterSelectorFor: anInstVarName])]. ^ (unfiltered copyWithoutAll: #(dummy unused)) asSortedArray! |
Free forum by Nabble | Edit this page |