Levente Uzonyi uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-ul.932.mcz ==================== Summary ==================== Name: System-ul.932 Author: ul Time: 13 March 2017, 3:10:17.453603 pm UUID: 7a305614-9a4b-47f8-a68f-79fcf6f90a80 Ancestors: System-eem.931 - SortedCollection Whack-a-mole - introduced #classVarNames and #classInstVarNames in PseudoClass, because they had senders - removed #startTimerInterruptWatcher from messages to keep lists =============== Diff against System-eem.931 =============== Item was changed: ----- Method: ChangeSet class>>traitsOrder: (in category 'fileIn/Out') ----- traitsOrder: aCollection "Answer an OrderedCollection. The traits are ordered so they can be filed in." + ^aCollection sorted: [:t1 :t2 | - | traits | - traits := aCollection asSortedCollection: [:t1 :t2 | (t1 isBaseTrait and: [t1 classTrait == t2]) or: [ (t2 traitComposition allTraits includes: t1) or: [ + (t1 traitComposition allTraits includes: t2) not]]]! - (t1 traitComposition allTraits includes: t2) not]]]. - ^traits asArray! Item was changed: ----- Method: ChangeSet>>changedMessageList (in category 'method changes') ----- changedMessageList "Used by a message set browser to access the list view information." | messageList | messageList := OrderedCollection new. changeRecords associationsDo: [:clAssoc | | classNameInParts classNameInFull | classNameInFull := clAssoc key asString. classNameInParts := classNameInFull findTokens: ' '. (clAssoc value allChangeTypes includes: #comment) ifTrue: [messageList add: (MethodReference new setClassSymbol: classNameInParts first asSymbol classIsMeta: false methodSymbol: #Comment stringVersion: classNameInFull, ' Comment')]. clAssoc value methodChangeTypes associationsDo: [:mAssoc | (#(remove addedThenRemoved) includes: mAssoc value) ifFalse: [messageList add: (MethodReference new setClassSymbol: classNameInParts first asSymbol classIsMeta: classNameInParts size > 1 methodSymbol: mAssoc key stringVersion: classNameInFull, ' ' , mAssoc key)]]]. + ^ messageList sort! - ^ messageList asSortedArray! Item was changed: ----- Method: ChangeSet>>checkForUncommentedClasses (in category 'fileIn/Out') ----- checkForUncommentedClasses "Check to see if any classes involved in this change set do not have class comments. Open up a browser showing all such classes." | aList | aList := self changedClasses select: [:aClass | aClass theNonMetaClass organization classComment isEmptyOrNil] thenCollect: [:aClass | aClass theNonMetaClass name]. aList size > 0 ifFalse: [^ self inform: 'All classes involved in this change set have class comments'] ifTrue: + [ToolSet openClassListBrowser: aList asSet sorted title: 'Classes in Change Set ', self name, ': classes that lack class comments']! - [ToolSet openClassListBrowser: aList asSet asSortedArray title: 'Classes in Change Set ', self name, ': classes that lack class comments']! Item was changed: ----- Method: ChangeSet>>fileOutOn: (in category 'fileIn/Out') ----- fileOutOn: stream "Write out all the changes the receiver knows about" | classList traits classes traitList list | (self isEmpty and: [stream isKindOf: FileStream]) ifTrue: [self inform: 'Warning: no changes to file out']. traits := self changedClasses reject: [:each | each isBehavior]. classes := self changedClasses select: [:each | each isBehavior]. traitList := self class traitsOrder: traits asOrderedCollection. classList := self class superclassOrder: classes asOrderedCollection. list := OrderedCollection new addAll: traitList; addAll: classList; yourself. "First put out rename, max classDef and comment changes." list do: [:aClass | self fileOutClassDefinition: aClass on: stream]. "Then put out all the method changes" list do: [:aClass | self fileOutChangesFor: aClass on: stream]. "Finally put out removals, final class defs and reorganization if any" list reverseDo: [:aClass | self fileOutPSFor: aClass on: stream]. + self classRemoves sort do: - self classRemoves asSortedCollection do: [:aClassName | stream nextChunkPut: 'Smalltalk removeClassNamed: #', aClassName; cr].! Item was changed: ----- Method: InternalTranslator>>fileOutOn:keys:withBOM: (in category 'fileIn/fileOut') ----- fileOutOn: aStream keys: keys withBOM: bomFlag "self current fileOutOn: Transcript. Transcript endEntry" self fileOutHeaderOn: aStream withBOM: bomFlag. (keys + ifNil: [generics keys sort]) - ifNil: [generics keys asSortedCollection]) do: [:key | self nextChunkPut: (generics associationAt: key) on: aStream]. keys ifNil: [self untranslated do: [:each | self nextChunkPut: each -> '' on: aStream]]. aStream nextPut: $!!; cr! Item was changed: ----- Method: MczInstaller>>install (in category 'installation') ----- install + - | sources | zip := ZipArchive new. zip readFrom: stream. self checkDependencies ifFalse: [^false]. self recordVersionInfo. + (zip membersMatching: 'snapshot/*') + sort: [:a :b | a fileName < b fileName]; + do: [:src | self installMember: src].! - sources := (zip membersMatching: 'snapshot/*') - asSortedCollection: [:a :b | a fileName < b fileName]. - sources do: [:src | self installMember: src].! Item was changed: ----- Method: Preferences class>>giveHelpWithPreferences (in category 'support') ----- giveHelpWithPreferences "Open up a workspace with explanatory info in it about Preferences" | aString | aString := String streamContents: [:aStream | aStream nextPutAll: 'Many aspects of the system are governed by the settings of various "Preferences". Click on any of brown tabs at the top of the panel to see all the preferences in that category. Or type in to the box above the Search button, then hit Search, and all Preferences matching whatever you typed in will appear in the "search results" category. A preference is considered to match your search if either its name matches the characters *or* if anything in the balloon help provided for the preferences matches the search text. To find out more about any particular Preference, hold the mouse over it for a moment and balloon help will appear. Also, a complete list of all the Preferences, with documentation for each, is included below. Preferences whose names are in shown in bold in the Preferences Panel are designated as being allowed to vary from project to project; those whose name are not in bold are "global", which is to say, they apply equally whatever project you are in. Click on the name of any preference to get a menu which allows you to *change* whether the preference should vary from project to project or should be global, and also allows you to browse all the senders of the preference, and to discover all the categories under which the preference has been classified, and to be handed a button that you can drop wherever you please that will control the preference. If you like all your current Preferences settings, you may wish to hit the "Save Current Settings as my Personal Preferences" button. Once you have done that, you can at any point in the future hit "Restore my Personal Preferences" and all your saved settings will get restored immediately. Also, you can use "themes" to set multiple preferences all at once; click on the "change theme..." button in the Squeak flap or in the Preferences panel, or seek out the themes item in the Appearance menu.' translated. aStream cr; cr; nextPutAll: '-----------------------------------------------------------------'; cr; cr; nextPutAll: 'Alphabetical listing of all Preferences' translated; cr; cr. + (Preferences allPreferences sort: [:a :b | a name < b name]) do: - (Preferences allPreferences asSortedCollection: [:a :b | a name < b name]) do: [:pref | | aHelpString | aStream nextPutAll: pref name; cr. aHelpString := pref helpString translated. (aHelpString beginsWith: pref name) ifTrue: [aHelpString := aHelpString copyFrom: (pref name size ) to: aHelpString size]. aHelpString := (aHelpString copyReplaceAll: String cr with: ' ') copyWithout: Character tab. aStream nextPutAll: aHelpString capitalized. (aHelpString isEmpty or: [aHelpString last == $.]) ifFalse: [aStream nextPut: $.]. aStream cr; cr]]. UIManager default edit: aString label: 'About Preferences' translated "Preferences giveHelpWithPreferences"! Item was changed: ----- Method: Project class>>allNames (in category 'utilities') ----- allNames + + ^(self allProjects collect: [:p | p name]) sort: [:n1 :n2 | n1 caseInsensitiveLessOrEqual: n2]! - ^ (self allProjects collect: [:p | p name]) asSortedCollection: [:n1 :n2 | n1 asLowercase < n2 asLowercase]! Item was changed: ----- Method: Project class>>allNamesAndProjects (in category 'utilities') ----- allNamesAndProjects + + ^(self allProjects + sorted: [ :p1 :p2 | p1 name caseInsensitiveLessOrEqual: p2 name ]) + replace: [ :aProject | Array with: aProject name with: aProject ]! - ^ (self allProjects asSortedCollection: [:p1 :p2 | p1 name asLowercase < p2 name asLowercase]) collect: - [:aProject | Array with: aProject name with: aProject]! Item was changed: ----- Method: Project class>>sweep: (in category 'squeaklet on server') ----- sweep: aServerDirectory | repository list parts ind entry projectName versions | "On the server, move all but the three most recent versions of each Squeaklet to a folder called 'older'" "Project sweep: ((ServerDirectory serverNamed: 'DaniOnJumbo') clone directory: '/vol0/people/dani/Squeaklets/2.7')" "Ensure the 'older' directory" (aServerDirectory includesKey: 'older') ifFalse: [aServerDirectory createDirectory: 'older']. repository := aServerDirectory clone directory: aServerDirectory directory, '/older'. "Collect each name, and decide on versions" list := aServerDirectory fileNames. list isString ifTrue: [^ self inform: 'server is unavailable' translated]. + list sort. - list := list asSortedCollection asOrderedCollection. parts := list collect: [:en | Project parseProjectFileName: en]. parts := parts select: [:en | en third = 'pr']. ind := 1. [entry := list at: ind. projectName := entry first asLowercase. versions := OrderedCollection new. versions add: entry. [(ind := ind + 1) > list size ifFalse: [(parts at: ind) first asLowercase = projectName ifTrue: [versions add: (parts at: ind). true] ifFalse: [false]] ifTrue: [false]] whileTrue. aServerDirectory moveYoungest: 3 in: versions to: repository. ind > list size] whileFalse. ! Item was added: + ----- Method: PseudoClass>>classInstVarNames (in category 'accessing') ----- + classInstVarNames + + self realClass ifNotNil: [ :realClass | ^realClass instVarNames ]. + ^#()! Item was added: + ----- Method: PseudoClass>>classVarNames (in category 'accessing') ----- + classVarNames + + self realClass ifNotNil: [ :realClass | ^realClass classVarNames ]. + ^#()! Item was changed: ----- Method: SmalltalkImage>>presumedSentMessages (in category 'shrinking') ----- presumedSentMessages | sent | "Smalltalk presumedSentMessages" "The following should be preserved for doIts, etc" sent := IdentitySet new. #(compactSymbolTable rebuildAllProjects browseAllSelect: lastRemoval scrollBarValue: vScrollBarValue: scrollBarMenuButtonPressed: withSelectionFrom: to: removeClassNamed: dragon: hilberts: mandala: web test3 factorial tinyBenchmarks benchFib newDepth: restoreAfter: zapAllMethods obsoleteClasses removeAllUnSentMessages abandonSources removeUnreferencedKeys reclaimDependents zapOrganization condenseChanges browseObsoleteReferences subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: methodsFor:stamp: methodsFor:stamp:prior: instanceVariableNames: + unusedClasses) do: - startTimerInterruptWatcher unusedClasses) do: [:sel | sent add: sel]. "The following may be sent by perform: in dispatchOnChar..." Smalltalk at: #ParagraphEditor ifPresent: [:paragraphEditor | (paragraphEditor classPool at: #CmdActions) asSet do: [:sel | sent add: sel]. (paragraphEditor classPool at: #ShiftCmdActions) asSet do: [:sel | sent add: sel]]. ^ sent! Item was changed: ----- Method: SmalltalkImage>>removeAllUnSentMessages (in category 'shrinking') ----- removeAllUnSentMessages "Smalltalk removeAllUnSentMessages" "[Smalltalk unusedClasses do: [:c | (Smalltalk at: c) removeFromSystem]. Smalltalk removeAllUnSentMessages > 0] whileTrue." "Remove all implementations of unsent messages." | sels n | sels := self systemNavigation allUnSentMessages. "The following should be preserved for doIts, etc" "needed even after #majorShrink is pulled" + #(#compactSymbolTable #rebuildAllProjects #browseAllSelect: #lastRemoval #scrollBarValue: vScrollBarValue: #scrollBarMenuButtonPressed: #withSelectionFrom: #to: #removeClassNamed: #dragon: #hilberts: #mandala: #web #test3 #factorial #tinyBenchmarks #benchFib #newDepth: #restoreAfter: #zapAllMethods #obsoleteClasses #removeAllUnSentMessages #abandonSources #removeUnreferencedKeys #reclaimDependents #zapOrganization #condenseChanges #browseObsoleteReferences #subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: #methodsFor:stamp: #methodsFor:stamp:prior: #instanceVariableNames: #unusedClasses ) - #(#compactSymbolTable #rebuildAllProjects #browseAllSelect: #lastRemoval #scrollBarValue: vScrollBarValue: #scrollBarMenuButtonPressed: #withSelectionFrom: #to: #removeClassNamed: #dragon: #hilberts: #mandala: #web #test3 #factorial #tinyBenchmarks #benchFib #newDepth: #restoreAfter: #zapAllMethods #obsoleteClasses #removeAllUnSentMessages #abandonSources #removeUnreferencedKeys #reclaimDependents #zapOrganization #condenseChanges #browseObsoleteReferences #subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: #methodsFor:stamp: #methodsFor:stamp:prior: #instanceVariableNames: #startTimerInterruptWatcher #unusedClasses ) do: [:sel | sels remove: sel ifAbsent: []]. "The following may be sent by perform: in dispatchOnChar..." (Smalltalk at: #ParagraphEditor) ifNotNilDo: [:paragraphEditor | (paragraphEditor classPool at: #CmdActions) asSet do: [:sel | sels remove: sel ifAbsent: []]. (paragraphEditor classPool at: #ShiftCmdActions) asSet do: [:sel | sels remove: sel ifAbsent: []]]. sels size = 0 ifTrue: [^ 0]. n := 0. self systemNavigation allBehaviorsDo: [:x | n := n + 1]. 'Removing ' , sels size printString , ' messages . . .' displayProgressFrom: 0 to: n during: [:bar | n := 0. self systemNavigation allBehaviorsDo: [:class | bar value: (n := n + 1). sels do: [:sel | class basicRemoveSelector: sel]]]. ^ sels size! Item was changed: ----- Method: SpaceTally>>compareTallyIn:to: (in category 'fileOut') ----- compareTallyIn: beforeFileName to: afterFileName "SpaceTally new compareTallyIn: 'tally' to: 'tally2'" | answer s beforeDict a afterDict allKeys | beforeDict := Dictionary new. s := FileDirectory default fileNamed: beforeFileName. [s atEnd] whileFalse: [ a := Array readFrom: s nextLine. beforeDict at: a first put: a allButFirst. ]. s close. afterDict := Dictionary new. s := FileDirectory default fileNamed: afterFileName. [s atEnd] whileFalse: [ a := Array readFrom: s nextLine. afterDict at: a first put: a allButFirst. ]. s close. answer := WriteStream on: String new. + allKeys := (Set new addAll: beforeDict keys; addAll: afterDict keys; yourself) sorted. - allKeys := (Set new addAll: beforeDict keys; addAll: afterDict keys; yourself) asSortedCollection. allKeys do: [ :each | | before after diff | before := beforeDict at: each ifAbsent: [#(0 0 0)]. after := afterDict at: each ifAbsent: [#(0 0 0)]. diff := before with: after collect: [ :vBefore :vAfter | vAfter - vBefore]. diff = #(0 0 0) ifFalse: [ answer nextPutAll: each,' ',diff printString; cr. ]. ]. StringHolder new contents: answer contents; openLabel: 'space diffs'. ! Item was changed: ----- Method: SystemNavigation>>allMethodsInCategory: (in category 'browse') ----- allMethodsInCategory: category | aCollection | + aCollection := OrderedCollection new. - aCollection := SortedCollection new. Cursor wait showWhile: [self allBehaviorsDo: [:x | (x allMethodsInCategory: category) do: [:sel | aCollection add: x name , ' ' , sel]]]. + ^aCollection sort. - ^aCollection. ! Item was changed: ----- Method: SystemNavigation>>allSelectorsWithAnyImplementorsIn: (in category 'query') ----- allSelectorsWithAnyImplementorsIn: selectorList "Answer the subset of the given list which represent method selectors which have at least one implementor in the system." | good | + good := Set new. - good := OrderedCollection new. self allBehaviorsDo: [:class | selectorList do: [:aSelector | (class includesSelector: aSelector) ifTrue: [good add: aSelector]]]. + ^good sorted + + " - ^ good asSet asSortedArray" SystemNavigation new selectorsWithAnyImplementorsIn: #( contents contents: nuts) "! Item was changed: ----- Method: SystemNavigation>>browseAllImplementorsOf:localToPackage: (in category 'browse') ----- browseAllImplementorsOf: selector localToPackage: packageNameOrInfo "Create and schedule a message browser on each method in the given package that implements the message whose selector is the argument, selector. For example, SystemNavigation new browseAllImplementorsOf: #at:put: localToPackage: 'Collections'." self browseMessageList: (self allImplementorsOf: selector + localToPackage: packageNameOrInfo) - localToPackage: packageNameOrInfo) asSortedCollection name: 'Implementors of ' , selector, ' local to package ', (self packageInfoFor: packageNameOrInfo) name! Item was changed: ----- Method: SystemNavigation>>browseAllSelect:localTo: (in category 'browse') ----- browseAllSelect: aBlock localTo: aClass "Create and schedule a message browser on each method in or below the given class that, when used as the block argument to aBlock gives a true result. For example, SystemNavigation default browseAllSelect: [:m | m numLiterals > 10] localTo: Morph." aClass ifNil: [^self inform: 'no class selected']. ^self + browseMessageList: (self allMethodsSelect: aBlock localTo: aClass) sorted - browseMessageList: (self allMethodsSelect: aBlock localTo: aClass) asSortedCollection name: 'selected messages local to ', aClass name! Item was changed: ----- Method: SystemNavigation>>browseClassCommentsWithString: (in category 'browse') ----- browseClassCommentsWithString: aString "Smalltalk browseClassCommentsWithString: 'my instances' " "Launch a message list browser on all class comments containing aString as a substring." | caseSensitive suffix list | suffix := (caseSensitive := Sensor shiftPressed) ifTrue: [' (case-sensitive)'] ifFalse: [' (use shift for case-sensitive)']. list := Set new. Cursor wait showWhile: [ Smalltalk allClassesDo: [:class | (class organization classComment asString findString: aString startingAt: 1 caseSensitive: caseSensitive) > 0 ifTrue: [ list add: ( MethodReference class: class selector: #Comment ) ] ] ]. ^ self + browseMessageList: list sorted - browseMessageList: list asSortedCollection name: 'Class comments containing ' , aString printString , suffix autoSelect: aString! Item was changed: ----- Method: SystemNavigation>>browseClassesWithNamesContaining:caseSensitive: (in category 'browse') ----- browseClassesWithNamesContaining: aString caseSensitive: caseSensitive "Smalltalk browseClassesWithNamesContaining: 'eMorph' caseSensitive: true " "Launch a class-list list browser on all classes whose names containg aString as a substring." | suffix aList | suffix := caseSensitive ifTrue: [' (case-sensitive)'] ifFalse: [' (use shift for case-sensitive)']. aList := OrderedCollection new. Cursor wait showWhile: [Smalltalk allClassesDo: [:class | (class name includesSubstring: aString caseSensitive: caseSensitive) ifTrue: [aList add: class name]]]. aList size > 0 + ifTrue: [ToolSet openClassListBrowser: aList asSet sorted title: 'Classes whose names contain ' , aString , suffix]! - ifTrue: [ToolSet openClassListBrowser: aList asSet asSortedArray title: 'Classes whose names contain ' , aString , suffix]! Item was changed: ----- Method: SystemNavigation>>showMenuOf:withFirstItem:ifChosenDo:withCaption: (in category 'ui') ----- showMenuOf: selectorCollection withFirstItem: firstItem ifChosenDo: choiceBlock withCaption: aCaption "Show a sorted menu of the given selectors, preceded by firstItem, and all abbreviated to 40 characters. Use aCaption as the menu title, if it is not nil. Evaluate choiceBlock if a message is chosen." | index menuLabels sortedList | + sortedList := selectorCollection sorted. - sortedList := selectorCollection asSortedCollection. menuLabels := Array streamContents: [:strm | strm nextPut: (firstItem contractTo: 40). sortedList do: [:sel | strm nextPut: (sel contractTo: 40)]]. index := UIManager default chooseFrom: menuLabels lines: #(1). index = 1 ifTrue: [choiceBlock value: firstItem]. index > 1 ifTrue: [choiceBlock value: (sortedList at: index - 1)]! Item was changed: ----- Method: SystemVersion>>highestUpdate (in category 'accessing') ----- highestUpdate + + ^highestUpdate ifNil: [ + highestUpdate := self updates isEmpty + ifTrue: [ 0 ] + ifFalse: [ self updates max ] ]! - | sortedUpdates | - highestUpdate ifNil: [ - sortedUpdates := self updates asSortedCollection. - highestUpdate := (sortedUpdates isEmpty - ifTrue: [0] - ifFalse: [sortedUpdates last])]. - ^highestUpdate! Item was changed: ----- Method: TranslatedReceiverFinder class>>browseNonLiteralReceivers (in category 'utilities') ----- browseNonLiteralReceivers "TranslatedReceiverFinder browseNonLiteralReceivers" SystemNavigation default + browseMessageList: self new nonLiteralReceivers - browseMessageList: self new nonLiteralReceivers asSortedCollection name: 'Non literal receivers of #translated' autoSelect: 'translated'! |
Hi Levente, the SortedCollection whack-a-mole [ :-) :-) ] update appears to have caused a significant uptick in Squeak trunk test suite errors, from about 26 to over 80. Are you aware of this? Are you addressing the errors? I was a little bit inconvenienced by this because I was testing Slang changes to the VM and mistook these errors as evidence of bugs in my Slang changes. That's life and I'm happy to accept the situation. But I would like to see the errors come back down to around 26 or less :-) Cheers Eliot On Mon, Mar 13, 2017 at 8:00 AM, <[hidden email]> wrote: Levente Uzonyi uploaded a new version of System to project The Trunk: _,,,^..^,,,_ best, Eliot |
Hi Eliot,
I ran the tests 3 times and haven't seen any new test failures or errors. However there are some other changes in the pack unrelated to SortedCollection, which I couldn't test on platforms other than Linux, but may behave differently on other platforms (e.g. changes in Files). Can you send me the list of failures and errors you see? Levente On Mon, 13 Mar 2017, Eliot Miranda wrote: > Hi Levente, > the SortedCollection whack-a-mole [ :-) :-) ] update appears to have caused a significant uptick in Squeak trunk test suite errors, from about 26 to over 80. Are you aware of this? Are you addressing > the errors? > > I was a little bit inconvenienced by this because I was testing Slang changes to the VM and mistook these errors as evidence of bugs in my Slang changes. That's life and I'm happy to accept the situation. > But I would like to see the errors come back down to around 26 or less :-) > > Cheers > Eliot > > On Mon, Mar 13, 2017 at 8:00 AM, <[hidden email]> wrote: > Levente Uzonyi uploaded a new version of System to project The Trunk: > http://source.squeak.org/trunk/System-ul.932.mcz > > ==================== Summary ==================== > > Name: System-ul.932 > Author: ul > Time: 13 March 2017, 3:10:17.453603 pm > UUID: 7a305614-9a4b-47f8-a68f-79fcf6f90a80 > Ancestors: System-eem.931 > > - SortedCollection Whack-a-mole > - introduced #classVarNames and #classInstVarNames in PseudoClass, because they had senders > - removed #startTimerInterruptWatcher from messages to keep lists > > =============== Diff against System-eem.931 =============== > > Item was changed: > ----- Method: ChangeSet class>>traitsOrder: (in category 'fileIn/Out') ----- > traitsOrder: aCollection > "Answer an OrderedCollection. The traits > are ordered so they can be filed in." > > + ^aCollection sorted: [:t1 :t2 | > - | traits | > - traits := aCollection asSortedCollection: [:t1 :t2 | > (t1 isBaseTrait and: [t1 classTrait == t2]) or: [ > (t2 traitComposition allTraits includes: t1) or: [ > + (t1 traitComposition allTraits includes: t2) not]]]! > - (t1 traitComposition allTraits includes: t2) not]]]. > - ^traits asArray! > > Item was changed: > ----- Method: ChangeSet>>changedMessageList (in category 'method changes') ----- > changedMessageList > "Used by a message set browser to access the list view information." > > | messageList | > messageList := OrderedCollection new. > changeRecords associationsDo: [:clAssoc | | classNameInParts classNameInFull | > classNameInFull := clAssoc key asString. > classNameInParts := classNameInFull findTokens: ' '. > > (clAssoc value allChangeTypes includes: #comment) ifTrue: > [messageList add: > (MethodReference new > setClassSymbol: classNameInParts first asSymbol > classIsMeta: false > methodSymbol: #Comment > stringVersion: classNameInFull, ' Comment')]. > > clAssoc value methodChangeTypes associationsDo: [:mAssoc | > (#(remove addedThenRemoved) includes: mAssoc value) ifFalse: > [messageList add: > (MethodReference new > setClassSymbol: classNameInParts first asSymbol > classIsMeta: classNameInParts size > 1 > methodSymbol: mAssoc key > stringVersion: classNameInFull, ' ' , mAssoc key)]]]. > + ^ messageList sort! > - ^ messageList asSortedArray! > > Item was changed: > ----- Method: ChangeSet>>checkForUncommentedClasses (in category 'fileIn/Out') ----- > checkForUncommentedClasses > "Check to see if any classes involved in this change set do not have class comments. Open up a browser showing all such classes." > > | aList | > aList := self changedClasses > select: > [:aClass | aClass theNonMetaClass organization classComment isEmptyOrNil] > thenCollect: > [:aClass | aClass theNonMetaClass name]. > > aList size > 0 > ifFalse: > [^ self inform: 'All classes involved in this change set have class comments'] > ifTrue: > + [ToolSet openClassListBrowser: aList asSet sorted title: 'Classes in Change Set ', self name, ': classes that lack class comments']! > - [ToolSet openClassListBrowser: aList asSet asSortedArray title: 'Classes in Change Set ', self name, ': classes that lack class comments']! > > Item was changed: > ----- Method: ChangeSet>>fileOutOn: (in category 'fileIn/Out') ----- > fileOutOn: stream > "Write out all the changes the receiver knows about" > > | classList traits classes traitList list | > (self isEmpty and: [stream isKindOf: FileStream]) > ifTrue: [self inform: 'Warning: no changes to file out']. > > traits := self changedClasses reject: [:each | each isBehavior]. > classes := self changedClasses select: [:each | each isBehavior]. > traitList := self class traitsOrder: traits asOrderedCollection. > classList := self class superclassOrder: classes asOrderedCollection. > list := OrderedCollection new > addAll: traitList; > addAll: classList; > yourself. > > "First put out rename, max classDef and comment changes." > list do: [:aClass | self fileOutClassDefinition: aClass on: stream]. > > "Then put out all the method changes" > list do: [:aClass | self fileOutChangesFor: aClass on: stream]. > > "Finally put out removals, final class defs and reorganization if any" > list reverseDo: [:aClass | self fileOutPSFor: aClass on: stream]. > > + self classRemoves sort do: > - self classRemoves asSortedCollection do: > [:aClassName | stream nextChunkPut: 'Smalltalk removeClassNamed: #', aClassName; cr].! > > Item was changed: > ----- Method: InternalTranslator>>fileOutOn:keys:withBOM: (in category 'fileIn/fileOut') ----- > fileOutOn: aStream keys: keys withBOM: bomFlag > "self current fileOutOn: Transcript. Transcript endEntry" > self fileOutHeaderOn: aStream withBOM: bomFlag. > (keys > + ifNil: [generics keys sort]) > - ifNil: [generics keys asSortedCollection]) > do: [:key | self > nextChunkPut: (generics associationAt: key) > on: aStream]. > keys > ifNil: [self untranslated > do: [:each | self nextChunkPut: each -> '' on: aStream]]. > aStream nextPut: $!!; > cr! > > Item was changed: > ----- Method: MczInstaller>>install (in category 'installation') ----- > install > + > - | sources | > zip := ZipArchive new. > zip readFrom: stream. > self checkDependencies ifFalse: [^false]. > self recordVersionInfo. > + (zip membersMatching: 'snapshot/*') > + sort: [:a :b | a fileName < b fileName]; > + do: [:src | self installMember: src].! > - sources := (zip membersMatching: 'snapshot/*') > - asSortedCollection: [:a :b | a fileName < b fileName]. > - sources do: [:src | self installMember: src].! > > Item was changed: > ----- Method: Preferences class>>giveHelpWithPreferences (in category 'support') ----- > giveHelpWithPreferences > "Open up a workspace with explanatory info in it about Preferences" > > | aString | > aString := String streamContents: [:aStream | > aStream nextPutAll: > > 'Many aspects of the system are governed by the settings of various "Preferences". > > Click on any of brown tabs at the top of the panel to see all the preferences in that category. > Or type in to the box above the Search button, then hit Search, and all Preferences matching whatever you typed in will appear in the "search results" category. A preference is considered to > match your search if either its name matches the characters *or* if anything in the balloon help provided for the preferences matches the search text. > > To find out more about any particular Preference, hold the mouse over it for a moment and balloon help will appear. Also, a complete list of all the Preferences, with documentation for each, is > included below. > > Preferences whose names are in shown in bold in the Preferences Panel are designated as being allowed to vary from project to project; those whose name are not in bold are "global", which is to > say, they apply equally whatever project you are in. > > Click on the name of any preference to get a menu which allows you to *change* whether the preference should vary from project to project or should be global, and also allows you to browse all > the senders of the preference, and to discover all the categories under which the preference has been classified, and to be handed a button that you can drop wherever you please that will control > the preference. > > If you like all your current Preferences settings, you may wish to hit the "Save Current Settings as my Personal Preferences" button. Once you have done that, you can at any point in the future > hit "Restore my Personal Preferences" and all your saved settings will get restored immediately. > > Also, you can use "themes" to set multiple preferences all at once; click on the "change theme..." button in the Squeak flap or in the Preferences panel, or seek out the themes item in the > Appearance menu.' translated. > > aStream cr; cr; nextPutAll: '-----------------------------------------------------------------'; > cr; cr; nextPutAll: 'Alphabetical listing of all Preferences' translated; cr; cr. > + (Preferences allPreferences sort: [:a :b | a name < b name]) do: > - (Preferences allPreferences asSortedCollection: [:a :b | a name < b name]) do: > [:pref | | aHelpString | > aStream nextPutAll: pref name; cr. > aHelpString := pref helpString translated. > (aHelpString beginsWith: pref name) ifTrue: > [aHelpString := aHelpString copyFrom: (pref name size ) to: aHelpString size]. > aHelpString := (aHelpString copyReplaceAll: String cr with: ' ') copyWithout: Character tab. > aStream nextPutAll: aHelpString capitalized. > (aHelpString isEmpty or: [aHelpString last == $.]) ifFalse: [aStream nextPut: $.]. > aStream cr; cr]]. > > UIManager default edit: aString label: 'About Preferences' translated > > "Preferences giveHelpWithPreferences"! > > Item was changed: > ----- Method: Project class>>allNames (in category 'utilities') ----- > allNames > + > + ^(self allProjects collect: [:p | p name]) sort: [:n1 :n2 | n1 caseInsensitiveLessOrEqual: n2]! > - ^ (self allProjects collect: [:p | p name]) asSortedCollection: [:n1 :n2 | n1 asLowercase < n2 asLowercase]! > > Item was changed: > ----- Method: Project class>>allNamesAndProjects (in category 'utilities') ----- > allNamesAndProjects > + > + ^(self allProjects > + sorted: [ :p1 :p2 | p1 name caseInsensitiveLessOrEqual: p2 name ]) > + replace: [ :aProject | Array with: aProject name with: aProject ]! > - ^ (self allProjects asSortedCollection: [:p1 :p2 | p1 name asLowercase < p2 name asLowercase]) collect: > - [:aProject | Array with: aProject name with: aProject]! > > Item was changed: > ----- Method: Project class>>sweep: (in category 'squeaklet on server') ----- > sweep: aServerDirectory > | repository list parts ind entry projectName versions | > "On the server, move all but the three most recent versions of each Squeaklet to a folder called 'older'" > "Project sweep: ((ServerDirectory serverNamed: 'DaniOnJumbo') clone > directory: '/vol0/people/dani/Squeaklets/2.7')" > > "Ensure the 'older' directory" > (aServerDirectory includesKey: 'older') > ifFalse: [aServerDirectory createDirectory: 'older']. > repository := aServerDirectory clone directory: aServerDirectory directory, '/older'. > > "Collect each name, and decide on versions" > list := aServerDirectory fileNames. > list isString ifTrue: [^ self inform: 'server is unavailable' translated]. > + list sort. > - list := list asSortedCollection asOrderedCollection. > parts := list collect: [:en | Project parseProjectFileName: en]. > parts := parts select: [:en | en third = 'pr']. > ind := 1. > [entry := list at: ind. > projectName := entry first asLowercase. > versions := OrderedCollection new. versions add: entry. > [(ind := ind + 1) > list size > ifFalse: [(parts at: ind) first asLowercase = projectName > ifTrue: [versions add: (parts at: ind). true] > ifFalse: [false]] > ifTrue: [false]] whileTrue. > aServerDirectory moveYoungest: 3 in: versions to: repository. > ind > list size] whileFalse. > ! > > Item was added: > + ----- Method: PseudoClass>>classInstVarNames (in category 'accessing') ----- > + classInstVarNames > + > + self realClass ifNotNil: [ :realClass | ^realClass instVarNames ]. > + ^#()! > > Item was added: > + ----- Method: PseudoClass>>classVarNames (in category 'accessing') ----- > + classVarNames > + > + self realClass ifNotNil: [ :realClass | ^realClass classVarNames ]. > + ^#()! > > Item was changed: > ----- Method: SmalltalkImage>>presumedSentMessages (in category 'shrinking') ----- > presumedSentMessages | sent | > "Smalltalk presumedSentMessages" > > "The following should be preserved for doIts, etc" > sent := IdentitySet new. > #(compactSymbolTable rebuildAllProjects > browseAllSelect: lastRemoval > scrollBarValue: vScrollBarValue: scrollBarMenuButtonPressed: > withSelectionFrom: to: removeClassNamed: > dragon: hilberts: mandala: web test3 factorial tinyBenchmarks benchFib > newDepth: restoreAfter: zapAllMethods obsoleteClasses > removeAllUnSentMessages abandonSources removeUnreferencedKeys > reclaimDependents zapOrganization condenseChanges browseObsoleteReferences > subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: > methodsFor:stamp: methodsFor:stamp:prior: instanceVariableNames: > + unusedClasses) do: > - startTimerInterruptWatcher unusedClasses) do: > [:sel | sent add: sel]. > "The following may be sent by perform: in dispatchOnChar..." > Smalltalk at: #ParagraphEditor ifPresent: [:paragraphEditor | > (paragraphEditor classPool at: #CmdActions) asSet do: > [:sel | sent add: sel]. > (paragraphEditor classPool at: #ShiftCmdActions) asSet do: > [:sel | sent add: sel]]. > ^ sent! > > Item was changed: > ----- Method: SmalltalkImage>>removeAllUnSentMessages (in category 'shrinking') ----- > removeAllUnSentMessages > "Smalltalk removeAllUnSentMessages" > "[Smalltalk unusedClasses do: [:c | (Smalltalk at: c) removeFromSystem]. > Smalltalk removeAllUnSentMessages > 0] whileTrue." > "Remove all implementations of unsent messages." > | sels n | > sels := self systemNavigation allUnSentMessages. > "The following should be preserved for doIts, etc" > "needed even after #majorShrink is pulled" > + #(#compactSymbolTable #rebuildAllProjects #browseAllSelect: #lastRemoval #scrollBarValue: vScrollBarValue: #scrollBarMenuButtonPressed: #withSelectionFrom: #to: #removeClassNamed: > #dragon: #hilberts: #mandala: #web #test3 #factorial #tinyBenchmarks #benchFib #newDepth: #restoreAfter: #zapAllMethods #obsoleteClasses #removeAllUnSentMessages #abandonSources > #removeUnreferencedKeys #reclaimDependents #zapOrganization #condenseChanges #browseObsoleteReferences #subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: > #methodsFor:stamp: #methodsFor:stamp:prior: #instanceVariableNames: #unusedClasses ) > - #(#compactSymbolTable #rebuildAllProjects #browseAllSelect: #lastRemoval #scrollBarValue: vScrollBarValue: #scrollBarMenuButtonPressed: #withSelectionFrom: #to: #removeClassNamed: > #dragon: #hilberts: #mandala: #web #test3 #factorial #tinyBenchmarks #benchFib #newDepth: #restoreAfter: #zapAllMethods #obsoleteClasses #removeAllUnSentMessages #abandonSources > #removeUnreferencedKeys #reclaimDependents #zapOrganization #condenseChanges #browseObsoleteReferences #subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: > #methodsFor:stamp: #methodsFor:stamp:prior: #instanceVariableNames: #startTimerInterruptWatcher #unusedClasses ) > do: [:sel | sels > remove: sel > ifAbsent: []]. > "The following may be sent by perform: in dispatchOnChar..." > (Smalltalk at: #ParagraphEditor) ifNotNilDo: [:paragraphEditor | > (paragraphEditor classPool at: #CmdActions) asSet > do: [:sel | sels > remove: sel > ifAbsent: []]. > (paragraphEditor classPool at: #ShiftCmdActions) asSet > do: [:sel | sels > remove: sel > ifAbsent: []]]. > sels size = 0 > ifTrue: [^ 0]. > n := 0. > self systemNavigation > allBehaviorsDo: [:x | n := n + 1]. > 'Removing ' , sels size printString , ' messages . . .' > displayProgressFrom: 0 > to: n > during: [:bar | > n := 0. > self systemNavigation > allBehaviorsDo: [:class | > bar value: (n := n + 1). > sels > do: [:sel | class basicRemoveSelector: sel]]]. > ^ sels size! > > Item was changed: > ----- Method: SpaceTally>>compareTallyIn:to: (in category 'fileOut') ----- > compareTallyIn: beforeFileName to: afterFileName > "SpaceTally new compareTallyIn: 'tally' to: 'tally2'" > > | answer s beforeDict a afterDict allKeys | > beforeDict := Dictionary new. > s := FileDirectory default fileNamed: beforeFileName. > [s atEnd] whileFalse: [ > a := Array readFrom: s nextLine. > beforeDict at: a first put: a allButFirst. > ]. > s close. > afterDict := Dictionary new. > s := FileDirectory default fileNamed: afterFileName. > [s atEnd] whileFalse: [ > a := Array readFrom: s nextLine. > afterDict at: a first put: a allButFirst. > ]. > s close. > answer := WriteStream on: String new. > + allKeys := (Set new addAll: beforeDict keys; addAll: afterDict keys; yourself) sorted. > - allKeys := (Set new addAll: beforeDict keys; addAll: afterDict keys; yourself) asSortedCollection. > allKeys do: [ :each | > | before after diff | > before := beforeDict at: each ifAbsent: [#(0 0 0)]. > after := afterDict at: each ifAbsent: [#(0 0 0)]. > diff := before with: after collect: [ :vBefore :vAfter | vAfter - vBefore]. > diff = #(0 0 0) ifFalse: [ > answer nextPutAll: each,' ',diff printString; cr. > ]. > ]. > StringHolder new contents: answer contents; openLabel: 'space diffs'. > > > > ! > > Item was changed: > ----- Method: SystemNavigation>>allMethodsInCategory: (in category 'browse') ----- > allMethodsInCategory: category > | aCollection | > + aCollection := OrderedCollection new. > - aCollection := SortedCollection new. > Cursor wait showWhile: > [self allBehaviorsDo: > [:x | (x allMethodsInCategory: category) do: > [:sel | aCollection add: x name , ' ' , sel]]]. > + ^aCollection sort. > - ^aCollection. > ! > > Item was changed: > ----- Method: SystemNavigation>>allSelectorsWithAnyImplementorsIn: (in category 'query') ----- > allSelectorsWithAnyImplementorsIn: selectorList > "Answer the subset of the given list which represent method selectors > which have at least one implementor in the system." > | good | > + good := Set new. > - good := OrderedCollection new. > self allBehaviorsDo: [:class | selectorList > do: [:aSelector | (class includesSelector: aSelector) > ifTrue: [good add: aSelector]]]. > + ^good sorted > + > + " > - ^ good asSet asSortedArray" > SystemNavigation new selectorsWithAnyImplementorsIn: #( contents > contents: nuts) > "! > > Item was changed: > ----- Method: SystemNavigation>>browseAllImplementorsOf:localToPackage: (in category 'browse') ----- > browseAllImplementorsOf: selector localToPackage: packageNameOrInfo > "Create and schedule a message browser on each method in the given package > that implements the message whose selector is the argument, selector. For example, > SystemNavigation new browseAllImplementorsOf: #at:put: localToPackage: 'Collections'." > > self browseMessageList: (self > allImplementorsOf: selector > + localToPackage: packageNameOrInfo) > - localToPackage: packageNameOrInfo) asSortedCollection > name: 'Implementors of ' , selector, > ' local to package ', (self packageInfoFor: packageNameOrInfo) name! > > Item was changed: > ----- Method: SystemNavigation>>browseAllSelect:localTo: (in category 'browse') ----- > browseAllSelect: aBlock localTo: aClass > "Create and schedule a message browser on each method in or below the given class > that, when used as the block argument to aBlock gives a true result. For example, > SystemNavigation default browseAllSelect: [:m | m numLiterals > 10] localTo: Morph." > aClass ifNil: [^self inform: 'no class selected']. > ^self > + browseMessageList: (self allMethodsSelect: aBlock localTo: aClass) sorted > - browseMessageList: (self allMethodsSelect: aBlock localTo: aClass) asSortedCollection > name: 'selected messages local to ', aClass name! > > Item was changed: > ----- Method: SystemNavigation>>browseClassCommentsWithString: (in category 'browse') ----- > browseClassCommentsWithString: aString > "Smalltalk browseClassCommentsWithString: 'my instances' " > "Launch a message list browser on all class comments containing aString as a substring." > > | caseSensitive suffix list | > > suffix := (caseSensitive := Sensor shiftPressed) > ifTrue: [' (case-sensitive)'] > ifFalse: [' (use shift for case-sensitive)']. > list := Set new. > Cursor wait showWhile: [ > Smalltalk allClassesDo: [:class | > (class organization classComment asString findString: aString > startingAt: 1 caseSensitive: caseSensitive) > 0 ifTrue: [ > list add: ( > MethodReference > class: class > selector: #Comment > ) > ] > ] > ]. > ^ self > + browseMessageList: list sorted > - browseMessageList: list asSortedCollection > name: 'Class comments containing ' , aString printString , suffix > autoSelect: aString! > > Item was changed: > ----- Method: SystemNavigation>>browseClassesWithNamesContaining:caseSensitive: (in category 'browse') ----- > browseClassesWithNamesContaining: aString caseSensitive: caseSensitive > "Smalltalk browseClassesWithNamesContaining: 'eMorph' caseSensitive: true " > "Launch a class-list list browser on all classes whose names containg aString as a substring." > > | suffix aList | > suffix := caseSensitive > ifTrue: [' (case-sensitive)'] > ifFalse: [' (use shift for case-sensitive)']. > aList := OrderedCollection new. > Cursor wait > showWhile: [Smalltalk > allClassesDo: [:class | (class name includesSubstring: aString caseSensitive: caseSensitive) > ifTrue: [aList add: class name]]]. > aList size > 0 > + ifTrue: [ToolSet openClassListBrowser: aList asSet sorted title: 'Classes whose names contain ' , aString , suffix]! > - ifTrue: [ToolSet openClassListBrowser: aList asSet asSortedArray title: 'Classes whose names contain ' , aString , suffix]! > > Item was changed: > ----- Method: SystemNavigation>>showMenuOf:withFirstItem:ifChosenDo:withCaption: (in category 'ui') ----- > showMenuOf: selectorCollection withFirstItem: firstItem ifChosenDo: choiceBlock withCaption: aCaption > "Show a sorted menu of the given selectors, preceded by firstItem, and all abbreviated to 40 characters. Use aCaption as the menu title, if it is not nil. Evaluate choiceBlock if a > message is chosen." > > | index menuLabels sortedList | > + sortedList := selectorCollection sorted. > - sortedList := selectorCollection asSortedCollection. > menuLabels := Array streamContents: > [:strm | strm nextPut: (firstItem contractTo: 40). > sortedList do: [:sel | strm nextPut: (sel contractTo: 40)]]. > index := UIManager default chooseFrom: menuLabels lines: #(1). > index = 1 ifTrue: [choiceBlock value: firstItem]. > index > 1 ifTrue: [choiceBlock value: (sortedList at: index - 1)]! > > Item was changed: > ----- Method: SystemVersion>>highestUpdate (in category 'accessing') ----- > highestUpdate > + > + ^highestUpdate ifNil: [ > + highestUpdate := self updates isEmpty > + ifTrue: [ 0 ] > + ifFalse: [ self updates max ] ]! > - | sortedUpdates | > - highestUpdate ifNil: [ > - sortedUpdates := self updates asSortedCollection. > - highestUpdate := (sortedUpdates isEmpty > - ifTrue: [0] > - ifFalse: [sortedUpdates last])]. > - ^highestUpdate! > > Item was changed: > ----- Method: TranslatedReceiverFinder class>>browseNonLiteralReceivers (in category 'utilities') ----- > browseNonLiteralReceivers > "TranslatedReceiverFinder browseNonLiteralReceivers" > SystemNavigation default > + browseMessageList: self new nonLiteralReceivers > - browseMessageList: self new nonLiteralReceivers asSortedCollection > name: 'Non literal receivers of #translated' > autoSelect: 'translated'! > > > > > > -- > _,,,^..^,,,_ > best, Eliot > > |
Hi Levente,
On Mon, Mar 13, 2017 at 4:44 PM, Levente Uzonyi <[hidden email]> wrote: Hi Eliot, First of all let me apologise; my stats were wrong. I see 4527 run, 4383 passes, 106 expected failures, 26 failures, 12 errors, 0 unexpected passes before whack-a-mole and 4575 run, 4308 passes, 108 expected failures, 26 failures, 133 errors, 0 unexpected passes after. And this is on Mac OS X using the 64-bit VM and image. Here's the pre-whack-a-mole full report
Pre whack-a-mole failures: {AllocationTest>>#testOutOfMemorySignal . ClassVarScopeTest>>#testDefinedClassMethodInGrandchild . ClassVarScopeTest>>#testDefinedInstanceMethodInChild . ClassVarScopeTest>>#testDefinedInstanceMethodInGrandchild . ClassVarScopeTest>>#testInheritedClassMethodInGrandchild . ClassVarScopeTest>>#testInheritedInstanceMethodInGrandchild . DateAndTimeLeapTest>>#testAsSeconds . DecompilerTests>>#testDecompilerInClassesENtoEZ . DecompilerTests>>#testDecompilerInClassesPAtoPM . IslandVMTweaksTestCase>>#testForgivingPrims . MorphicUIManagerTest>>#testShowAllBinParts . MultiByteFileStreamTest>>#testLineEndConversion . PackageDependencyTest>>#testEtoys . PackageDependencyTest>>#testMorphic . PackageDependencyTest>>#testSound . PackageDependencyTest>>#testSystem . ReleaseTest>>#testClassesSystemCategory . ReleaseTest>>#testMethodsWithUnboundGlobals . ReleaseTest>>#testNoObsoleteClasses . ReleaseTest>>#testUndeclared . SocketTest>>#testSocketReuse . SocketTest>>#testUDP . UnixProcessAccessorTestCase>>#testRedirectStdOutTo . UnixProcessTestCase>>#testCatAFile . UnixProcessTestCase>>#testRunCommand . WebClientServerTest>>#testListenOnInterface} errors: {BitmapStreamTests>>#testMatrixTransform2x3WithImageSegment . BitmapStreamTests>>#testShortIntegerArrayWithImageSegment . BitmapStreamTests>>#testShortPointArrayWithImageSegment . BitmapStreamTests>>#testShortRunArrayWithImageSegment . BitmapStreamTests>>#testWordArrayWithImageSegment . DecompilerTests>>#testDecompilerInClassesSAtoSM . LangEnvBugs>>#testIsFontAvailable . LangEnvBugs>>#testIsFontAvailable . LocaleTest>>#testIsFontAvailable . SqueakSSLTest>>#testSSLSockets . SqueakSSLTest>>#testSocketAccept . SqueakSSLTest>>#testSocketConnect} Post whack-a-mole failures: {AllocationTest>>#testOutOfMemorySignal . ClassVarScopeTest>>#testDefinedInstanceMethodInChild . ClassVarScopeTest>>#testDefinedInstanceMethodInGrandchild . ClassVarScopeTest>>#testInheritedClassMethodInGrandchild . ClassVarScopeTest>>#testInheritedInstanceMethodInGrandchild . DateAndTimeLeapTest>>#testAsSeconds . DecompilerTests>>#testDecompilerInClassesENtoEZ . DecompilerTests>>#testDecompilerInClassesPAtoPM . DecompilerTests>>#testDecompilerInClassesTAtoTM . MorphicUIManagerTest>>#testShowAllBinParts . MultiByteFileStreamTest>>#testLineEndConversion . PackageDependencyTest>>#testEtoys . PackageDependencyTest>>#testMorphic . PackageDependencyTest>>#testSUnitGUI . PackageDependencyTest>>#testSound . PackageDependencyTest>>#testSystem . PackageDependencyTest>>#testTools . ReleaseTest>>#testClassesSystemCategory . ReleaseTest>>#testMethodsWithUnboundGlobals . ReleaseTest>>#testNoObsoleteClasses . ReleaseTest>>#testSuperSubclassReferences . ReleaseTest>>#testUndeclared . SocketTest>>#testSocketReuse . SocketTest>>#testUDP . UnixProcessTestCase>>#testCatAFile . WebClientServerTest>>#testListenOnInterface} errors: {BitmapStreamTests>>#testMatrixTransform2x3WithImageSegment . BitmapStreamTests>>#testShortIntegerArrayWithImageSegment . BitmapStreamTests>>#testShortPointArrayWithImageSegment . BitmapStreamTests>>#testShortRunArrayWithImageSegment . BitmapStreamTests>>#testWordArrayWithImageSegment . BrowserTest>>#testFileOutMessageCategories . DecompilerTests>>#testDecompilerInClassesSAtoSM . FileDirectoryTest>>#testAttemptExistenceCheckWhenFile . FileDirectoryTest>>#testDirectoryExists . FileDirectoryTest>>#testDirectoryExistsWhenLikeNamedFileExists . FileDirectoryTest>>#testNonExistentDirectory . FileDirectoryTest>>#testOldFileOrNoneNamed . FileListTest>>#testServicesForFileEnding . FileStreamTest>>#testCachingNextChunkPut . FileStreamTest>>#testCachingNextChunkPut . FileStreamTest>>#testDetectFileDo . FileStreamTest>>#testFileTruncation . FileStreamTest>>#testFileTruncation . FileStreamTest>>#testNextChunkOutOfBounds . FileStreamTest>>#testNextChunkOutOfBounds . FileStreamTest>>#testNextLine . FileStreamTest>>#testPositionPastEndIsAtEnd . FileStreamTest>>#testReadIntoStartingAtCount . LangEnvBugs>>#testIsFontAvailable . LangEnvBugs>>#testIsFontAvailable . LocaleTest>>#testIsFontAvailable . MCDictionaryRepositoryTest>>#testAddAndLoad . MCDictionaryRepositoryTest>>#testIncludesName . MCDictionaryRepositoryTest>>#testStoreAndLoad . MCDirectoryRepositoryTest>>#testAddAndLoad . MCDirectoryRepositoryTest>>#testIncludesName . MCDirectoryRepositoryTest>>#testStoreAndLoad . MCMczInstallerTest>>#testInstallFromFile . MCMczInstallerTest>>#testInstallFromFile . MCMczInstallerTest>>#testInstallFromStream . MCWorkingCopyTest>>#testAncestorMerge . MCWorkingCopyTest>>#testBackport . MCWorkingCopyTest>>#testDoubleRepeatedMerge . MCWorkingCopyTest>>#testMergeIntoImageWithNoChanges . MCWorkingCopyTest>>#testMergeIntoUnmodifiedImage . MCWorkingCopyTest>>#testOptimizedLoad . MCWorkingCopyTest>>#testRedundantMerge . MCWorkingCopyTest>>#testRepeatedMerge . MCWorkingCopyTest>>#testSelectiveBackport . MCWorkingCopyTest>>#testSimpleMerge . MCWorkingCopyTest>>#testSnapshotAndLoad . MultiByteFileStreamTest>>#testAsciiBackChunk . MultiByteFileStreamTest>>#testBinaryUpTo . MultiByteFileStreamTest>>#testLineEnding . MultiByteFileStreamTest>>#testLineEndingChunk . MultiByteFileStreamTest>>#testLineEndingWithWideStrings . MultiByteFileStreamTest>>#testNextLine . MultiByteFileStreamTest>>#testNextPutAllStartingAt . MultiByteFileStreamTest>>#testNonAsciiBackChunk . PNGReadWriterTest>>#test16Bit . PNGReadWriterTest>>#test16BitDisplay . PNGReadWriterTest>>#test16BitReversed . PNGReadWriterTest>>#test1Bit . PNGReadWriterTest>>#test1BitDisplay . PNGReadWriterTest>>#test1BitReversed . PNGReadWriterTest>>#test2Bit . PNGReadWriterTest>>#test2BitDisplay . PNGReadWriterTest>>#test2BitReversed . PNGReadWriterTest>>#test32Bit . PNGReadWriterTest>>#test32BitDisplay . PNGReadWriterTest>>#test32BitReversed . PNGReadWriterTest>>#test4Bit . PNGReadWriterTest>>#test4BitDisplay . PNGReadWriterTest>>#test4BitReversed . PNGReadWriterTest>>#test8Bit . PNGReadWriterTest>>#test8BitDisplay . PNGReadWriterTest>>#test8BitReversed . PNGReadWriterTest>>#testAlphaCoding . PNGReadWriterTest>>#testBlack16 . PNGReadWriterTest>>#testBlack32 . PNGReadWriterTest>>#testBlack8 . PNGReadWriterTest>>#testBlue16 . PNGReadWriterTest>>#testBlue32 . PNGReadWriterTest>>#testBlue8 . PNGReadWriterTest>>#testGreen16 . PNGReadWriterTest>>#testGreen32 . PNGReadWriterTest>>#testGreen8 . PNGReadWriterTest>>#testRed16 . PNGReadWriterTest>>#testRed32 . PNGReadWriterTest>>#testRed8 . SqueakSSLTest>>#testSSLSockets . SqueakSSLTest>>#testSocketAccept . SqueakSSLTest>>#testSocketConnect . SystemChangeFileTest>>#testCategoryAdded . SystemChangeFileTest>>#testCategoryAdded . SystemChangeFileTest>>#testCategoryAddedBefore . SystemChangeFileTest>>#testCategoryAddedBefore . SystemChangeFileTest>>#testCategoryRemoved . SystemChangeFileTest>>#testCategoryRemoved . SystemChangeFileTest>>#testCategoryRenamed . SystemChangeFileTest>>#testCategoryRenamed . SystemChangeFileTest>>#testClassAdded . SystemChangeFileTest>>#testClassAdded . SystemChangeFileTest>>#testClassCommented . SystemChangeFileTest>>#testClassCommented . SystemChangeFileTest>>#testClassModified . SystemChangeFileTest>>#testClassModified . SystemChangeFileTest>>#testClassRecategorized . SystemChangeFileTest>>#testClassRecategorized . SystemChangeFileTest>>#testClassRemoved . SystemChangeFileTest>>#testClassRemoved . SystemChangeFileTest>>#testClassRenamed . SystemChangeFileTest>>#testClassRenamed . SystemChangeFileTest>>#testExpressionDoIt . SystemChangeFileTest>>#testExpressionDoIt . SystemChangeFileTest>>#testMethodAdded . SystemChangeFileTest>>#testMethodAdded . SystemChangeFileTest>>#testMethodModified . SystemChangeFileTest>>#testMethodModified . SystemChangeFileTest>>#testMethodRecategorized . SystemChangeFileTest>>#testMethodRecategorized . SystemChangeFileTest>>#testMethodRemoved . SystemChangeFileTest>>#testMethodRemoved . SystemChangeFileTest>>#testProtocolAdded . SystemChangeFileTest>>#testProtocolAdded . SystemChangeFileTest>>#testProtocolDefault . SystemChangeFileTest>>#testProtocolDefault . SystemChangeFileTest>>#testProtocolRemoved . SystemChangeFileTest>>#testProtocolRemoved . SystemChangeFileTest>>#testProtocolRenamed . SystemChangeFileTest>>#testProtocolRenamed . TraitFileOutTest>>#testCondenseChanges . TraitFileOutTest>>#testFileOutCategory . TraitFileOutTest>>#testFileOutTrait . UnixProcessAccessorTestCase>>#testDupTo . UnixProcessAccessorTestCase>>#testRedirectStdOutTo . UnixProcessTestCase>>#testCatFromFileToFiles . UnixProcessTestCase>>#testRunCommand} And all those duplications confuse me. And the sources seem to have been killed by running the tests. HTH
_,,,^..^,,,_ best, Eliot |
Hi Eliot,
all of those new errors seem to be related to files, so I presume they are related to the changes of the Files package: " FileDirectory changes: - implemented #directoryContentsFor:do: in all subclasses of FileDirectory, where #directoryContentsFor: was implemented - introduced #entriesDo: based on the method above - rewrote methods sending #entries to use #entriesDo: instead - simplified DirectoryEntryDirectory >> #asFileDirectory - introduced #hasEntries - #directoryEntryForName: signals InvalidDirectoryError as suggested by a comment from 2007 - other minor optimizations " I suspect that either the DirectoryEntryDirectory >> #asFileDirectory or FileDirectory >> #directoryEntryForName: is responsible for the errors, but it should be easy to find the cause by debugging any of those new errors. Levente On Mon, 13 Mar 2017, Eliot Miranda wrote: > Hi Levente, > > On Mon, Mar 13, 2017 at 4:44 PM, Levente Uzonyi <[hidden email]> wrote: > Hi Eliot, > > I ran the tests 3 times and haven't seen any new test failures or errors. > However there are some other changes in the pack unrelated to SortedCollection, which I couldn't test on platforms other than Linux, but may behave differently on other platforms (e.g. changes in > Files). > > > First of all let me apologise; my stats were wrong. I see > 4527 run, 4383 passes, 106 expected failures, 26 failures, 12 errors, 0 unexpected passes > before whack-a-mole and > 4575 run, 4308 passes, 108 expected failures, 26 failures, 133 errors, 0 unexpected passes > after. And this is on Mac OS X using the 64-bit VM and image. Here's the pre-whack-a-mole full report > > > > Can you send me the list of failures and errors you see? > > > Pre whack-a-mole > failures: {AllocationTest>>#testOutOfMemorySignal . ClassVarScopeTest>>#testDefinedClassMethodInGrandchild . ClassVarScopeTest>>#testDefinedInstanceMethodInChild . > ClassVarScopeTest>>#testDefinedInstanceMethodInGrandchild . ClassVarScopeTest>>#testInheritedClassMethodInGrandchild . ClassVarScopeTest>>#testInheritedInstanceMethodInGrandchild . > DateAndTimeLeapTest>>#testAsSeconds . DecompilerTests>>#testDecompilerInClassesENtoEZ . DecompilerTests>>#testDecompilerInClassesPAtoPM . IslandVMTweaksTestCase>>#testForgivingPrims . > MorphicUIManagerTest>>#testShowAllBinParts . MultiByteFileStreamTest>>#testLineEndConversion . PackageDependencyTest>>#testEtoys . PackageDependencyTest>>#testMorphic . PackageDependencyTest>>#testSound . > PackageDependencyTest>>#testSystem . ReleaseTest>>#testClassesSystemCategory . ReleaseTest>>#testMethodsWithUnboundGlobals . ReleaseTest>>#testNoObsoleteClasses . ReleaseTest>>#testUndeclared . > SocketTest>>#testSocketReuse . SocketTest>>#testUDP . UnixProcessAccessorTestCase>>#testRedirectStdOutTo . UnixProcessTestCase>>#testCatAFile . UnixProcessTestCase>>#testRunCommand . > WebClientServerTest>>#testListenOnInterface} > > errors: {BitmapStreamTests>>#testMatrixTransform2x3WithImageSegment . BitmapStreamTests>>#testShortIntegerArrayWithImageSegment . BitmapStreamTests>>#testShortPointArrayWithImageSegment . > BitmapStreamTests>>#testShortRunArrayWithImageSegment . BitmapStreamTests>>#testWordArrayWithImageSegment . DecompilerTests>>#testDecompilerInClassesSAtoSM . LangEnvBugs>>#testIsFontAvailable . > LangEnvBugs>>#testIsFontAvailable . LocaleTest>>#testIsFontAvailable . SqueakSSLTest>>#testSSLSockets . SqueakSSLTest>>#testSocketAccept . SqueakSSLTest>>#testSocketConnect} > > Post whack-a-mole > failures: {AllocationTest>>#testOutOfMemorySignal . ClassVarScopeTest>>#testDefinedInstanceMethodInChild . ClassVarScopeTest>>#testDefinedInstanceMethodInGrandchild . > ClassVarScopeTest>>#testInheritedClassMethodInGrandchild . ClassVarScopeTest>>#testInheritedInstanceMethodInGrandchild . DateAndTimeLeapTest>>#testAsSeconds . DecompilerTests>>#testDecompilerInClassesENtoEZ . > DecompilerTests>>#testDecompilerInClassesPAtoPM . DecompilerTests>>#testDecompilerInClassesTAtoTM . MorphicUIManagerTest>>#testShowAllBinParts . MultiByteFileStreamTest>>#testLineEndConversion . > PackageDependencyTest>>#testEtoys . PackageDependencyTest>>#testMorphic . PackageDependencyTest>>#testSUnitGUI . PackageDependencyTest>>#testSound . PackageDependencyTest>>#testSystem . > PackageDependencyTest>>#testTools . ReleaseTest>>#testClassesSystemCategory . ReleaseTest>>#testMethodsWithUnboundGlobals . ReleaseTest>>#testNoObsoleteClasses . ReleaseTest>>#testSuperSubclassReferences . > ReleaseTest>>#testUndeclared . SocketTest>>#testSocketReuse . SocketTest>>#testUDP . UnixProcessTestCase>>#testCatAFile . WebClientServerTest>>#testListenOnInterface} > > errors: {BitmapStreamTests>>#testMatrixTransform2x3WithImageSegment . BitmapStreamTests>>#testShortIntegerArrayWithImageSegment . BitmapStreamTests>>#testShortPointArrayWithImageSegment . > BitmapStreamTests>>#testShortRunArrayWithImageSegment . BitmapStreamTests>>#testWordArrayWithImageSegment . BrowserTest>>#testFileOutMessageCategories . DecompilerTests>>#testDecompilerInClassesSAtoSM . > FileDirectoryTest>>#testAttemptExistenceCheckWhenFile . FileDirectoryTest>>#testDirectoryExists . FileDirectoryTest>>#testDirectoryExistsWhenLikeNamedFileExists . FileDirectoryTest>>#testNonExistentDirectory > . FileDirectoryTest>>#testOldFileOrNoneNamed . FileListTest>>#testServicesForFileEnding . FileStreamTest>>#testCachingNextChunkPut . FileStreamTest>>#testCachingNextChunkPut . > FileStreamTest>>#testDetectFileDo . FileStreamTest>>#testFileTruncation . FileStreamTest>>#testFileTruncation . FileStreamTest>>#testNextChunkOutOfBounds . FileStreamTest>>#testNextChunkOutOfBounds . > FileStreamTest>>#testNextLine . FileStreamTest>>#testPositionPastEndIsAtEnd . FileStreamTest>>#testReadIntoStartingAtCount . LangEnvBugs>>#testIsFontAvailable . LangEnvBugs>>#testIsFontAvailable . > LocaleTest>>#testIsFontAvailable . MCDictionaryRepositoryTest>>#testAddAndLoad . MCDictionaryRepositoryTest>>#testIncludesName . MCDictionaryRepositoryTest>>#testStoreAndLoad . > MCDirectoryRepositoryTest>>#testAddAndLoad . MCDirectoryRepositoryTest>>#testIncludesName . MCDirectoryRepositoryTest>>#testStoreAndLoad . MCMczInstallerTest>>#testInstallFromFile . > MCMczInstallerTest>>#testInstallFromFile . MCMczInstallerTest>>#testInstallFromStream . MCWorkingCopyTest>>#testAncestorMerge . MCWorkingCopyTest>>#testBackport . MCWorkingCopyTest>>#testDoubleRepeatedMerge . > MCWorkingCopyTest>>#testMergeIntoImageWithNoChanges . MCWorkingCopyTest>>#testMergeIntoUnmodifiedImage . MCWorkingCopyTest>>#testOptimizedLoad . MCWorkingCopyTest>>#testRedundantMerge . > MCWorkingCopyTest>>#testRepeatedMerge . MCWorkingCopyTest>>#testSelectiveBackport . MCWorkingCopyTest>>#testSimpleMerge . MCWorkingCopyTest>>#testSnapshotAndLoad . MultiByteFileStreamTest>>#testAsciiBackChunk > . MultiByteFileStreamTest>>#testBinaryUpTo . MultiByteFileStreamTest>>#testLineEnding . MultiByteFileStreamTest>>#testLineEndingChunk . MultiByteFileStreamTest>>#testLineEndingWithWideStrings . > MultiByteFileStreamTest>>#testNextLine . MultiByteFileStreamTest>>#testNextPutAllStartingAt . MultiByteFileStreamTest>>#testNonAsciiBackChunk . PNGReadWriterTest>>#test16Bit . > PNGReadWriterTest>>#test16BitDisplay . PNGReadWriterTest>>#test16BitReversed . PNGReadWriterTest>>#test1Bit . PNGReadWriterTest>>#test1BitDisplay . PNGReadWriterTest>>#test1BitReversed . > PNGReadWriterTest>>#test2Bit . PNGReadWriterTest>>#test2BitDisplay . PNGReadWriterTest>>#test2BitReversed . PNGReadWriterTest>>#test32Bit . PNGReadWriterTest>>#test32BitDisplay . > PNGReadWriterTest>>#test32BitReversed . PNGReadWriterTest>>#test4Bit . PNGReadWriterTest>>#test4BitDisplay . PNGReadWriterTest>>#test4BitReversed . PNGReadWriterTest>>#test8Bit . > PNGReadWriterTest>>#test8BitDisplay . PNGReadWriterTest>>#test8BitReversed . PNGReadWriterTest>>#testAlphaCoding . PNGReadWriterTest>>#testBlack16 . PNGReadWriterTest>>#testBlack32 . > PNGReadWriterTest>>#testBlack8 . PNGReadWriterTest>>#testBlue16 . PNGReadWriterTest>>#testBlue32 . PNGReadWriterTest>>#testBlue8 . PNGReadWriterTest>>#testGreen16 . PNGReadWriterTest>>#testGreen32 . > PNGReadWriterTest>>#testGreen8 . PNGReadWriterTest>>#testRed16 . PNGReadWriterTest>>#testRed32 . PNGReadWriterTest>>#testRed8 . SqueakSSLTest>>#testSSLSockets . SqueakSSLTest>>#testSocketAccept . > SqueakSSLTest>>#testSocketConnect . SystemChangeFileTest>>#testCategoryAdded . SystemChangeFileTest>>#testCategoryAdded . SystemChangeFileTest>>#testCategoryAddedBefore . > SystemChangeFileTest>>#testCategoryAddedBefore . SystemChangeFileTest>>#testCategoryRemoved . SystemChangeFileTest>>#testCategoryRemoved . SystemChangeFileTest>>#testCategoryRenamed . > SystemChangeFileTest>>#testCategoryRenamed . SystemChangeFileTest>>#testClassAdded . SystemChangeFileTest>>#testClassAdded . SystemChangeFileTest>>#testClassCommented . > SystemChangeFileTest>>#testClassCommented . SystemChangeFileTest>>#testClassModified . SystemChangeFileTest>>#testClassModified . SystemChangeFileTest>>#testClassRecategorized . > SystemChangeFileTest>>#testClassRecategorized . SystemChangeFileTest>>#testClassRemoved . SystemChangeFileTest>>#testClassRemoved . SystemChangeFileTest>>#testClassRenamed . > SystemChangeFileTest>>#testClassRenamed . SystemChangeFileTest>>#testExpressionDoIt . SystemChangeFileTest>>#testExpressionDoIt . SystemChangeFileTest>>#testMethodAdded . > SystemChangeFileTest>>#testMethodAdded . SystemChangeFileTest>>#testMethodModified . SystemChangeFileTest>>#testMethodModified . SystemChangeFileTest>>#testMethodRecategorized . > SystemChangeFileTest>>#testMethodRecategorized . SystemChangeFileTest>>#testMethodRemoved . SystemChangeFileTest>>#testMethodRemoved . SystemChangeFileTest>>#testProtocolAdded . > SystemChangeFileTest>>#testProtocolAdded . SystemChangeFileTest>>#testProtocolDefault . SystemChangeFileTest>>#testProtocolDefault . SystemChangeFileTest>>#testProtocolRemoved . > SystemChangeFileTest>>#testProtocolRemoved . SystemChangeFileTest>>#testProtocolRenamed . SystemChangeFileTest>>#testProtocolRenamed . TraitFileOutTest>>#testCondenseChanges . > TraitFileOutTest>>#testFileOutCategory . TraitFileOutTest>>#testFileOutTrait . UnixProcessAccessorTestCase>>#testDupTo . UnixProcessAccessorTestCase>>#testRedirectStdOutTo . > UnixProcessTestCase>>#testCatFromFileToFiles . UnixProcessTestCase>>#testRunCommand} > > And all those duplications confuse me. And the sources seem to have been killed by running the tests. > > HTH > > > > > Levente > > On Mon, 13 Mar 2017, Eliot Miranda wrote: > > Hi Levente, > the SortedCollection whack-a-mole [ :-) :-) ] update appears to have caused a significant uptick in Squeak trunk test suite errors, from about 26 to over 80. Are you aware of > this? Are you addressing > the errors? > > I was a little bit inconvenienced by this because I was testing Slang changes to the VM and mistook these errors as evidence of bugs in my Slang changes. That's life and I'm happy to > accept the situation. > But I would like to see the errors come back down to around 26 or less :-) > > Cheers > Eliot > > On Mon, Mar 13, 2017 at 8:00 AM, <[hidden email]> wrote: > Levente Uzonyi uploaded a new version of System to project The Trunk: > http://source.squeak.org/trunk/System-ul.932.mcz > > ==================== Summary ==================== > > Name: System-ul.932 > Author: ul > Time: 13 March 2017, 3:10:17.453603 pm > UUID: 7a305614-9a4b-47f8-a68f-79fcf6f90a80 > Ancestors: System-eem.931 > > - SortedCollection Whack-a-mole > - introduced #classVarNames and #classInstVarNames in PseudoClass, because they had senders > - removed #startTimerInterruptWatcher from messages to keep lists > > =============== Diff against System-eem.931 =============== > > Item was changed: > ----- Method: ChangeSet class>>traitsOrder: (in category 'fileIn/Out') ----- > traitsOrder: aCollection > "Answer an OrderedCollection. The traits > are ordered so they can be filed in." > > + ^aCollection sorted: [:t1 :t2 | > - | traits | > - traits := aCollection asSortedCollection: [:t1 :t2 | > (t1 isBaseTrait and: [t1 classTrait == t2]) or: [ > (t2 traitComposition allTraits includes: t1) or: [ > + (t1 traitComposition allTraits includes: t2) not]]]! > - (t1 traitComposition allTraits includes: t2) not]]]. > - ^traits asArray! > > Item was changed: > ----- Method: ChangeSet>>changedMessageList (in category 'method changes') ----- > changedMessageList > "Used by a message set browser to access the list view information." > > | messageList | > messageList := OrderedCollection new. > changeRecords associationsDo: [:clAssoc | | classNameInParts classNameInFull | > classNameInFull := clAssoc key asString. > classNameInParts := classNameInFull findTokens: ' '. > > (clAssoc value allChangeTypes includes: #comment) ifTrue: > [messageList add: > (MethodReference new > setClassSymbol: classNameInParts first asSymbol > classIsMeta: false > methodSymbol: #Comment > stringVersion: classNameInFull, ' Comment')]. > > clAssoc value methodChangeTypes associationsDo: [:mAssoc | > (#(remove addedThenRemoved) includes: mAssoc value) ifFalse: > [messageList add: > (MethodReference new > setClassSymbol: classNameInParts first asSymbol > classIsMeta: classNameInParts size > 1 > methodSymbol: mAssoc key > stringVersion: classNameInFull, ' ' , mAssoc key)]]]. > + ^ messageList sort! > - ^ messageList asSortedArray! > > Item was changed: > ----- Method: ChangeSet>>checkForUncommentedClasses (in category 'fileIn/Out') ----- > checkForUncommentedClasses > "Check to see if any classes involved in this change set do not have class comments. Open up a browser showing all such classes." > > | aList | > aList := self changedClasses > select: > [:aClass | aClass theNonMetaClass organization classComment isEmptyOrNil] > thenCollect: > [:aClass | aClass theNonMetaClass name]. > > aList size > 0 > ifFalse: > [^ self inform: 'All classes involved in this change set have class comments'] > ifTrue: > + [ToolSet openClassListBrowser: aList asSet sorted title: 'Classes in Change Set ', self name, ': classes that lack class comments']! > - [ToolSet openClassListBrowser: aList asSet asSortedArray title: 'Classes in Change Set ', self name, ': classes that lack class comments']! > > Item was changed: > ----- Method: ChangeSet>>fileOutOn: (in category 'fileIn/Out') ----- > fileOutOn: stream > "Write out all the changes the receiver knows about" > > | classList traits classes traitList list | > (self isEmpty and: [stream isKindOf: FileStream]) > ifTrue: [self inform: 'Warning: no changes to file out']. > > traits := self changedClasses reject: [:each | each isBehavior]. > classes := self changedClasses select: [:each | each isBehavior]. > traitList := self class traitsOrder: traits asOrderedCollection. > classList := self class superclassOrder: classes asOrderedCollection. > list := OrderedCollection new > addAll: traitList; > addAll: classList; > yourself. > > "First put out rename, max classDef and comment changes." > list do: [:aClass | self fileOutClassDefinition: aClass on: stream]. > > "Then put out all the method changes" > list do: [:aClass | self fileOutChangesFor: aClass on: stream]. > > "Finally put out removals, final class defs and reorganization if any" > list reverseDo: [:aClass | self fileOutPSFor: aClass on: stream]. > > + self classRemoves sort do: > - self classRemoves asSortedCollection do: > [:aClassName | stream nextChunkPut: 'Smalltalk removeClassNamed: #', aClassName; cr].! > > Item was changed: > ----- Method: InternalTranslator>>fileOutOn:keys:withBOM: (in category 'fileIn/fileOut') ----- > fileOutOn: aStream keys: keys withBOM: bomFlag > "self current fileOutOn: Transcript. Transcript endEntry" > self fileOutHeaderOn: aStream withBOM: bomFlag. > (keys > + ifNil: [generics keys sort]) > - ifNil: [generics keys asSortedCollection]) > do: [:key | self > nextChunkPut: (generics associationAt: key) > on: aStream]. > keys > ifNil: [self untranslated > do: [:each | self nextChunkPut: each -> '' on: aStream]]. > aStream nextPut: $!!; > cr! > > Item was changed: > ----- Method: MczInstaller>>install (in category 'installation') ----- > install > + > - | sources | > zip := ZipArchive new. > zip readFrom: stream. > self checkDependencies ifFalse: [^false]. > self recordVersionInfo. > + (zip membersMatching: 'snapshot/*') > + sort: [:a :b | a fileName < b fileName]; > + do: [:src | self installMember: src].! > - sources := (zip membersMatching: 'snapshot/*') > - asSortedCollection: [:a :b | a fileName < b fileName]. > - sources do: [:src | self installMember: src].! > > Item was changed: > ----- Method: Preferences class>>giveHelpWithPreferences (in category 'support') ----- > giveHelpWithPreferences > "Open up a workspace with explanatory info in it about Preferences" > > | aString | > aString := String streamContents: [:aStream | > aStream nextPutAll: > > 'Many aspects of the system are governed by the settings of various "Preferences". > > Click on any of brown tabs at the top of the panel to see all the preferences in that category. > Or type in to the box above the Search button, then hit Search, and all Preferences matching whatever you typed in will appear in the "search results" category. A preference > is considered to > match your search if either its name matches the characters *or* if anything in the balloon help provided for the preferences matches the search text. > > To find out more about any particular Preference, hold the mouse over it for a moment and balloon help will appear. Also, a complete list of all the Preferences, with > documentation for each, is > included below. > > Preferences whose names are in shown in bold in the Preferences Panel are designated as being allowed to vary from project to project; those whose name are not in bold are > "global", which is to > say, they apply equally whatever project you are in. > > Click on the name of any preference to get a menu which allows you to *change* whether the preference should vary from project to project or should be global, and also allows > you to browse all > the senders of the preference, and to discover all the categories under which the preference has been classified, and to be handed a button that you can drop wherever you please > that will control > the preference. > > If you like all your current Preferences settings, you may wish to hit the "Save Current Settings as my Personal Preferences" button. Once you have done that, you can at any > point in the future > hit "Restore my Personal Preferences" and all your saved settings will get restored immediately. > > Also, you can use "themes" to set multiple preferences all at once; click on the "change theme..." button in the Squeak flap or in the Preferences panel, or seek out the themes > item in the > Appearance menu.' translated. > > aStream cr; cr; nextPutAll: '-----------------------------------------------------------------'; > cr; cr; nextPutAll: 'Alphabetical listing of all Preferences' translated; cr; cr. > + (Preferences allPreferences sort: [:a :b | a name < b name]) do: > - (Preferences allPreferences asSortedCollection: [:a :b | a name < b name]) do: > [:pref | | aHelpString | > aStream nextPutAll: pref name; cr. > aHelpString := pref helpString translated. > (aHelpString beginsWith: pref name) ifTrue: > [aHelpString := aHelpString copyFrom: (pref name size ) to: aHelpString size]. > aHelpString := (aHelpString copyReplaceAll: String cr with: ' ') copyWithout: Character tab. > aStream nextPutAll: aHelpString capitalized. > (aHelpString isEmpty or: [aHelpString last == $.]) ifFalse: [aStream nextPut: $.]. > aStream cr; cr]]. > > UIManager default edit: aString label: 'About Preferences' translated > > "Preferences giveHelpWithPreferences"! > > Item was changed: > ----- Method: Project class>>allNames (in category 'utilities') ----- > allNames > + > + ^(self allProjects collect: [:p | p name]) sort: [:n1 :n2 | n1 caseInsensitiveLessOrEqual: n2]! > - ^ (self allProjects collect: [:p | p name]) asSortedCollection: [:n1 :n2 | n1 asLowercase < n2 asLowercase]! > > Item was changed: > ----- Method: Project class>>allNamesAndProjects (in category 'utilities') ----- > allNamesAndProjects > + > + ^(self allProjects > + sorted: [ :p1 :p2 | p1 name caseInsensitiveLessOrEqual: p2 name ]) > + replace: [ :aProject | Array with: aProject name with: aProject ]! > - ^ (self allProjects asSortedCollection: [:p1 :p2 | p1 name asLowercase < p2 name asLowercase]) collect: > - [:aProject | Array with: aProject name with: aProject]! > > Item was changed: > ----- Method: Project class>>sweep: (in category 'squeaklet on server') ----- > sweep: aServerDirectory > | repository list parts ind entry projectName versions | > "On the server, move all but the three most recent versions of each Squeaklet to a folder called 'older'" > "Project sweep: ((ServerDirectory serverNamed: 'DaniOnJumbo') clone > directory: '/vol0/people/dani/Squeaklets/2.7')" > > "Ensure the 'older' directory" > (aServerDirectory includesKey: 'older') > ifFalse: [aServerDirectory createDirectory: 'older']. > repository := aServerDirectory clone directory: aServerDirectory directory, '/older'. > > "Collect each name, and decide on versions" > list := aServerDirectory fileNames. > list isString ifTrue: [^ self inform: 'server is unavailable' translated]. > + list sort. > - list := list asSortedCollection asOrderedCollection. > parts := list collect: [:en | Project parseProjectFileName: en]. > parts := parts select: [:en | en third = 'pr']. > ind := 1. > [entry := list at: ind. > projectName := entry first asLowercase. > versions := OrderedCollection new. versions add: entry. > [(ind := ind + 1) > list size > ifFalse: [(parts at: ind) first asLowercase = projectName > ifTrue: [versions add: (parts at: ind). true] > ifFalse: [false]] > ifTrue: [false]] whileTrue. > aServerDirectory moveYoungest: 3 in: versions to: repository. > ind > list size] whileFalse. > ! > > Item was added: > + ----- Method: PseudoClass>>classInstVarNames (in category 'accessing') ----- > + classInstVarNames > + > + self realClass ifNotNil: [ :realClass | ^realClass instVarNames ]. > + ^#()! > > Item was added: > + ----- Method: PseudoClass>>classVarNames (in category 'accessing') ----- > + classVarNames > + > + self realClass ifNotNil: [ :realClass | ^realClass classVarNames ]. > + ^#()! > > Item was changed: > ----- Method: SmalltalkImage>>presumedSentMessages (in category 'shrinking') ----- > presumedSentMessages | sent | > "Smalltalk presumedSentMessages" > > "The following should be preserved for doIts, etc" > sent := IdentitySet new. > #(compactSymbolTable rebuildAllProjects > browseAllSelect: lastRemoval > scrollBarValue: vScrollBarValue: scrollBarMenuButtonPressed: > withSelectionFrom: to: removeClassNamed: > dragon: hilberts: mandala: web test3 factorial tinyBenchmarks benchFib > newDepth: restoreAfter: zapAllMethods obsoleteClasses > removeAllUnSentMessages abandonSources removeUnreferencedKeys > reclaimDependents zapOrganization condenseChanges browseObsoleteReferences > subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: > methodsFor:stamp: methodsFor:stamp:prior: instanceVariableNames: > + unusedClasses) do: > - startTimerInterruptWatcher unusedClasses) do: > [:sel | sent add: sel]. > "The following may be sent by perform: in dispatchOnChar..." > Smalltalk at: #ParagraphEditor ifPresent: [:paragraphEditor | > (paragraphEditor classPool at: #CmdActions) asSet do: > [:sel | sent add: sel]. > (paragraphEditor classPool at: #ShiftCmdActions) asSet do: > [:sel | sent add: sel]]. > ^ sent! > > Item was changed: > ----- Method: SmalltalkImage>>removeAllUnSentMessages (in category 'shrinking') ----- > removeAllUnSentMessages > "Smalltalk removeAllUnSentMessages" > "[Smalltalk unusedClasses do: [:c | (Smalltalk at: c) removeFromSystem]. > Smalltalk removeAllUnSentMessages > 0] whileTrue." > "Remove all implementations of unsent messages." > | sels n | > sels := self systemNavigation allUnSentMessages. > "The following should be preserved for doIts, etc" > "needed even after #majorShrink is pulled" > + #(#compactSymbolTable #rebuildAllProjects #browseAllSelect: #lastRemoval #scrollBarValue: vScrollBarValue: #scrollBarMenuButtonPressed: #withSelectionFrom: #to: > #removeClassNamed: > #dragon: #hilberts: #mandala: #web #test3 #factorial #tinyBenchmarks #benchFib #newDepth: #restoreAfter: #zapAllMethods #obsoleteClasses #removeAllUnSentMessages #abandonSources > #removeUnreferencedKeys #reclaimDependents #zapOrganization #condenseChanges #browseObsoleteReferences > #subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: > #methodsFor:stamp: #methodsFor:stamp:prior: #instanceVariableNames: #unusedClasses ) > - #(#compactSymbolTable #rebuildAllProjects #browseAllSelect: #lastRemoval #scrollBarValue: vScrollBarValue: #scrollBarMenuButtonPressed: #withSelectionFrom: #to: > #removeClassNamed: > #dragon: #hilberts: #mandala: #web #test3 #factorial #tinyBenchmarks #benchFib #newDepth: #restoreAfter: #zapAllMethods #obsoleteClasses #removeAllUnSentMessages #abandonSources > #removeUnreferencedKeys #reclaimDependents #zapOrganization #condenseChanges #browseObsoleteReferences > #subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: > #methodsFor:stamp: #methodsFor:stamp:prior: #instanceVariableNames: #startTimerInterruptWatcher #unusedClasses ) > do: [:sel | sels > remove: sel > ifAbsent: []]. > "The following may be sent by perform: in dispatchOnChar..." > (Smalltalk at: #ParagraphEditor) ifNotNilDo: [:paragraphEditor | > (paragraphEditor classPool at: #CmdActions) asSet > do: [:sel | sels > remove: sel > ifAbsent: []]. > (paragraphEditor classPool at: #ShiftCmdActions) asSet > do: [:sel | sels > remove: sel > ifAbsent: []]]. > sels size = 0 > ifTrue: [^ 0]. > n := 0. > self systemNavigation > allBehaviorsDo: [:x | n := n + 1]. > 'Removing ' , sels size printString , ' messages . . .' > displayProgressFrom: 0 > to: n > during: [:bar | > n := 0. > self systemNavigation > allBehaviorsDo: [:class | > bar value: (n := n + 1). > sels > do: [:sel | class basicRemoveSelector: sel]]]. > ^ sels size! > > Item was changed: > ----- Method: SpaceTally>>compareTallyIn:to: (in category 'fileOut') ----- > compareTallyIn: beforeFileName to: afterFileName > "SpaceTally new compareTallyIn: 'tally' to: 'tally2'" > > | answer s beforeDict a afterDict allKeys | > beforeDict := Dictionary new. > s := FileDirectory default fileNamed: beforeFileName. > [s atEnd] whileFalse: [ > a := Array readFrom: s nextLine. > beforeDict at: a first put: a allButFirst. > ]. > s close. > afterDict := Dictionary new. > s := FileDirectory default fileNamed: afterFileName. > [s atEnd] whileFalse: [ > a := Array readFrom: s nextLine. > afterDict at: a first put: a allButFirst. > ]. > s close. > answer := WriteStream on: String new. > + allKeys := (Set new addAll: beforeDict keys; addAll: afterDict keys; yourself) sorted. > - allKeys := (Set new addAll: beforeDict keys; addAll: afterDict keys; yourself) asSortedCollection. > allKeys do: [ :each | > | before after diff | > before := beforeDict at: each ifAbsent: [#(0 0 0)]. > after := afterDict at: each ifAbsent: [#(0 0 0)]. > diff := before with: after collect: [ :vBefore :vAfter | vAfter - vBefore]. > diff = #(0 0 0) ifFalse: [ > answer nextPutAll: each,' ',diff printString; cr. > ]. > ]. > StringHolder new contents: answer contents; openLabel: 'space diffs'. > > > > ! > > Item was changed: > ----- Method: SystemNavigation>>allMethodsInCategory: (in category 'browse') ----- > allMethodsInCategory: category > | aCollection | > + aCollection := OrderedCollection new. > - aCollection := SortedCollection new. > Cursor wait showWhile: > [self allBehaviorsDo: > [:x | (x allMethodsInCategory: category) do: > [:sel | aCollection add: x name , ' ' , sel]]]. > + ^aCollection sort. > - ^aCollection. > ! > > Item was changed: > ----- Method: SystemNavigation>>allSelectorsWithAnyImplementorsIn: (in category 'query') ----- > allSelectorsWithAnyImplementorsIn: selectorList > "Answer the subset of the given list which represent method selectors > which have at least one implementor in the system." > | good | > + good := Set new. > - good := OrderedCollection new. > self allBehaviorsDo: [:class | selectorList > do: [:aSelector | (class includesSelector: aSelector) > ifTrue: [good add: aSelector]]]. > + ^good sorted > + > + " > - ^ good asSet asSortedArray" > SystemNavigation new selectorsWithAnyImplementorsIn: #( contents > contents: nuts) > "! > > Item was changed: > ----- Method: SystemNavigation>>browseAllImplementorsOf:localToPackage: (in category 'browse') ----- > browseAllImplementorsOf: selector localToPackage: packageNameOrInfo > "Create and schedule a message browser on each method in the given package > that implements the message whose selector is the argument, selector. For example, > SystemNavigation new browseAllImplementorsOf: #at:put: localToPackage: 'Collections'." > > self browseMessageList: (self > allImplementorsOf: selector > + localToPackage: packageNameOrInfo) > - localToPackage: packageNameOrInfo) asSortedCollection > name: 'Implementors of ' , selector, > ' local to package ', (self packageInfoFor: packageNameOrInfo) name! > > Item was changed: > ----- Method: SystemNavigation>>browseAllSelect:localTo: (in category 'browse') ----- > browseAllSelect: aBlock localTo: aClass > "Create and schedule a message browser on each method in or below the given class > that, when used as the block argument to aBlock gives a true result. For example, > SystemNavigation default browseAllSelect: [:m | m numLiterals > 10] localTo: Morph." > aClass ifNil: [^self inform: 'no class selected']. > ^self > + browseMessageList: (self allMethodsSelect: aBlock localTo: aClass) sorted > - browseMessageList: (self allMethodsSelect: aBlock localTo: aClass) asSortedCollection > name: 'selected messages local to ', aClass name! > > Item was changed: > ----- Method: SystemNavigation>>browseClassCommentsWithString: (in category 'browse') ----- > browseClassCommentsWithString: aString > "Smalltalk browseClassCommentsWithString: 'my instances' " > "Launch a message list browser on all class comments containing aString as a substring." > > | caseSensitive suffix list | > > suffix := (caseSensitive := Sensor shiftPressed) > ifTrue: [' (case-sensitive)'] > ifFalse: [' (use shift for case-sensitive)']. > list := Set new. > Cursor wait showWhile: [ > Smalltalk allClassesDo: [:class | > (class organization classComment asString findString: aString > startingAt: 1 caseSensitive: caseSensitive) > 0 ifTrue: [ > list add: ( > MethodReference > class: class > selector: #Comment > ) > ] > ] > ]. > ^ self > + browseMessageList: list sorted > - browseMessageList: list asSortedCollection > name: 'Class comments containing ' , aString printString , suffix > autoSelect: aString! > > Item was changed: > ----- Method: SystemNavigation>>browseClassesWithNamesContaining:caseSensitive: (in category 'browse') ----- > browseClassesWithNamesContaining: aString caseSensitive: caseSensitive > "Smalltalk browseClassesWithNamesContaining: 'eMorph' caseSensitive: true " > "Launch a class-list list browser on all classes whose names containg aString as a substring." > > | suffix aList | > suffix := caseSensitive > ifTrue: [' (case-sensitive)'] > ifFalse: [' (use shift for case-sensitive)']. > aList := OrderedCollection new. > Cursor wait > showWhile: [Smalltalk > allClassesDo: [:class | (class name includesSubstring: aString caseSensitive: caseSensitive) > ifTrue: [aList add: class name]]]. > aList size > 0 > + ifTrue: [ToolSet openClassListBrowser: aList asSet sorted title: 'Classes whose names contain ' , aString , suffix]! > - ifTrue: [ToolSet openClassListBrowser: aList asSet asSortedArray title: 'Classes whose names contain ' , aString , suffix]! > > Item was changed: > ----- Method: SystemNavigation>>showMenuOf:withFirstItem:ifChosenDo:withCaption: (in category 'ui') ----- > showMenuOf: selectorCollection withFirstItem: firstItem ifChosenDo: choiceBlock withCaption: aCaption > "Show a sorted menu of the given selectors, preceded by firstItem, and all abbreviated to 40 characters. Use aCaption as the menu title, if it is not nil. Evaluate > choiceBlock if a > message is chosen." > > | index menuLabels sortedList | > + sortedList := selectorCollection sorted. > - sortedList := selectorCollection asSortedCollection. > menuLabels := Array streamContents: > [:strm | strm nextPut: (firstItem contractTo: 40). > sortedList do: [:sel | strm nextPut: (sel contractTo: 40)]]. > index := UIManager default chooseFrom: menuLabels lines: #(1). > index = 1 ifTrue: [choiceBlock value: firstItem]. > index > 1 ifTrue: [choiceBlock value: (sortedList at: index - 1)]! > > Item was changed: > ----- Method: SystemVersion>>highestUpdate (in category 'accessing') ----- > highestUpdate > + > + ^highestUpdate ifNil: [ > + highestUpdate := self updates isEmpty > + ifTrue: [ 0 ] > + ifFalse: [ self updates max ] ]! > - | sortedUpdates | > - highestUpdate ifNil: [ > - sortedUpdates := self updates asSortedCollection. > - highestUpdate := (sortedUpdates isEmpty > - ifTrue: [0] > - ifFalse: [sortedUpdates last])]. > - ^highestUpdate! > > Item was changed: > ----- Method: TranslatedReceiverFinder class>>browseNonLiteralReceivers (in category 'utilities') ----- > browseNonLiteralReceivers > "TranslatedReceiverFinder browseNonLiteralReceivers" > SystemNavigation default > + browseMessageList: self new nonLiteralReceivers > - browseMessageList: self new nonLiteralReceivers asSortedCollection > name: 'Non literal receivers of #translated' > autoSelect: 'translated'! > > > > > > -- > _,,,^..^,,,_ > best, Eliot > > > > > > > > -- > _,,,^..^,,,_ > best, Eliot > > |
I have updated Files-ul.168 to the Inbox with those methods reverted
along with a third one. Levente On Tue, 14 Mar 2017, Levente Uzonyi wrote: > Hi Eliot, > > all of those new errors seem to be related to files, so I presume they are > related to the changes of the Files package: > > " > FileDirectory changes: > > - implemented #directoryContentsFor:do: in all subclasses of FileDirectory, > where #directoryContentsFor: was implemented > - introduced #entriesDo: based on the method above > - rewrote methods sending #entries to use #entriesDo: instead > - simplified DirectoryEntryDirectory >> #asFileDirectory > - introduced #hasEntries > - #directoryEntryForName: signals InvalidDirectoryError as suggested by a > comment from 2007 > - other minor optimizations > " > > I suspect that either the DirectoryEntryDirectory >> #asFileDirectory or > FileDirectory >> #directoryEntryForName: is responsible for the errors, but > it should be easy to find the cause by debugging any of those new errors. > > Levente > > On Mon, 13 Mar 2017, Eliot Miranda wrote: > >> Hi Levente, >> >> On Mon, Mar 13, 2017 at 4:44 PM, Levente Uzonyi <[hidden email]> >> wrote: >> Hi Eliot, >> >> I ran the tests 3 times and haven't seen any new test failures or >> errors. >> However there are some other changes in the pack unrelated to >> SortedCollection, which I couldn't test on platforms other than Linux, but >> may behave differently on other platforms (e.g. changes in >> Files). >> >> >> First of all let me apologise; my stats were wrong. I see >> 4527 run, 4383 passes, 106 expected failures, 26 failures, 12 errors, 0 >> unexpected passes >> before whack-a-mole and >> 4575 run, 4308 passes, 108 expected failures, 26 failures, 133 errors, >> 0 unexpected passes >> after. And this is on Mac OS X using the 64-bit VM and image. Here's the >> pre-whack-a-mole full report >> >> >> >> Can you send me the list of failures and errors you see? >> >> >> Pre whack-a-mole >> failures: {AllocationTest>>#testOutOfMemorySignal . >> ClassVarScopeTest>>#testDefinedClassMethodInGrandchild . >> ClassVarScopeTest>>#testDefinedInstanceMethodInChild . >> ClassVarScopeTest>>#testDefinedInstanceMethodInGrandchild . >> ClassVarScopeTest>>#testInheritedClassMethodInGrandchild . >> ClassVarScopeTest>>#testInheritedInstanceMethodInGrandchild . >> DateAndTimeLeapTest>>#testAsSeconds . >> DecompilerTests>>#testDecompilerInClassesENtoEZ . >> DecompilerTests>>#testDecompilerInClassesPAtoPM . >> IslandVMTweaksTestCase>>#testForgivingPrims . >> MorphicUIManagerTest>>#testShowAllBinParts . >> MultiByteFileStreamTest>>#testLineEndConversion . >> PackageDependencyTest>>#testEtoys . PackageDependencyTest>>#testMorphic . >> PackageDependencyTest>>#testSound . >> PackageDependencyTest>>#testSystem . >> ReleaseTest>>#testClassesSystemCategory . >> ReleaseTest>>#testMethodsWithUnboundGlobals . >> ReleaseTest>>#testNoObsoleteClasses . ReleaseTest>>#testUndeclared . >> SocketTest>>#testSocketReuse . SocketTest>>#testUDP . >> UnixProcessAccessorTestCase>>#testRedirectStdOutTo . >> UnixProcessTestCase>>#testCatAFile . UnixProcessTestCase>>#testRunCommand . >> WebClientServerTest>>#testListenOnInterface} >> >> errors: {BitmapStreamTests>>#testMatrixTransform2x3WithImageSegment . >> BitmapStreamTests>>#testShortIntegerArrayWithImageSegment . >> BitmapStreamTests>>#testShortPointArrayWithImageSegment . >> BitmapStreamTests>>#testShortRunArrayWithImageSegment . >> BitmapStreamTests>>#testWordArrayWithImageSegment . >> DecompilerTests>>#testDecompilerInClassesSAtoSM . >> LangEnvBugs>>#testIsFontAvailable . >> LangEnvBugs>>#testIsFontAvailable . LocaleTest>>#testIsFontAvailable . >> SqueakSSLTest>>#testSSLSockets . SqueakSSLTest>>#testSocketAccept . >> SqueakSSLTest>>#testSocketConnect} >> >> Post whack-a-mole >> failures: {AllocationTest>>#testOutOfMemorySignal . >> ClassVarScopeTest>>#testDefinedInstanceMethodInChild . >> ClassVarScopeTest>>#testDefinedInstanceMethodInGrandchild . >> ClassVarScopeTest>>#testInheritedClassMethodInGrandchild . >> ClassVarScopeTest>>#testInheritedInstanceMethodInGrandchild . >> DateAndTimeLeapTest>>#testAsSeconds . >> DecompilerTests>>#testDecompilerInClassesENtoEZ . >> DecompilerTests>>#testDecompilerInClassesPAtoPM . >> DecompilerTests>>#testDecompilerInClassesTAtoTM . >> MorphicUIManagerTest>>#testShowAllBinParts . >> MultiByteFileStreamTest>>#testLineEndConversion . >> PackageDependencyTest>>#testEtoys . PackageDependencyTest>>#testMorphic . >> PackageDependencyTest>>#testSUnitGUI . PackageDependencyTest>>#testSound . >> PackageDependencyTest>>#testSystem . >> PackageDependencyTest>>#testTools . ReleaseTest>>#testClassesSystemCategory >> . ReleaseTest>>#testMethodsWithUnboundGlobals . >> ReleaseTest>>#testNoObsoleteClasses . >> ReleaseTest>>#testSuperSubclassReferences . >> ReleaseTest>>#testUndeclared . SocketTest>>#testSocketReuse . >> SocketTest>>#testUDP . UnixProcessTestCase>>#testCatAFile . >> WebClientServerTest>>#testListenOnInterface} >> >> errors: {BitmapStreamTests>>#testMatrixTransform2x3WithImageSegment . >> BitmapStreamTests>>#testShortIntegerArrayWithImageSegment . >> BitmapStreamTests>>#testShortPointArrayWithImageSegment . >> BitmapStreamTests>>#testShortRunArrayWithImageSegment . >> BitmapStreamTests>>#testWordArrayWithImageSegment . >> BrowserTest>>#testFileOutMessageCategories . >> DecompilerTests>>#testDecompilerInClassesSAtoSM . >> FileDirectoryTest>>#testAttemptExistenceCheckWhenFile . >> FileDirectoryTest>>#testDirectoryExists . >> FileDirectoryTest>>#testDirectoryExistsWhenLikeNamedFileExists . >> FileDirectoryTest>>#testNonExistentDirectory >> . FileDirectoryTest>>#testOldFileOrNoneNamed . >> FileListTest>>#testServicesForFileEnding . >> FileStreamTest>>#testCachingNextChunkPut . >> FileStreamTest>>#testCachingNextChunkPut . >> FileStreamTest>>#testDetectFileDo . FileStreamTest>>#testFileTruncation . >> FileStreamTest>>#testFileTruncation . >> FileStreamTest>>#testNextChunkOutOfBounds . >> FileStreamTest>>#testNextChunkOutOfBounds . >> FileStreamTest>>#testNextLine . FileStreamTest>>#testPositionPastEndIsAtEnd >> . FileStreamTest>>#testReadIntoStartingAtCount . >> LangEnvBugs>>#testIsFontAvailable . LangEnvBugs>>#testIsFontAvailable . >> LocaleTest>>#testIsFontAvailable . >> MCDictionaryRepositoryTest>>#testAddAndLoad . >> MCDictionaryRepositoryTest>>#testIncludesName . >> MCDictionaryRepositoryTest>>#testStoreAndLoad . >> MCDirectoryRepositoryTest>>#testAddAndLoad . >> MCDirectoryRepositoryTest>>#testIncludesName . >> MCDirectoryRepositoryTest>>#testStoreAndLoad . >> MCMczInstallerTest>>#testInstallFromFile . >> MCMczInstallerTest>>#testInstallFromFile . >> MCMczInstallerTest>>#testInstallFromStream . >> MCWorkingCopyTest>>#testAncestorMerge . MCWorkingCopyTest>>#testBackport . >> MCWorkingCopyTest>>#testDoubleRepeatedMerge . >> MCWorkingCopyTest>>#testMergeIntoImageWithNoChanges . >> MCWorkingCopyTest>>#testMergeIntoUnmodifiedImage . >> MCWorkingCopyTest>>#testOptimizedLoad . >> MCWorkingCopyTest>>#testRedundantMerge . >> MCWorkingCopyTest>>#testRepeatedMerge . >> MCWorkingCopyTest>>#testSelectiveBackport . >> MCWorkingCopyTest>>#testSimpleMerge . >> MCWorkingCopyTest>>#testSnapshotAndLoad . >> MultiByteFileStreamTest>>#testAsciiBackChunk >> . MultiByteFileStreamTest>>#testBinaryUpTo . >> MultiByteFileStreamTest>>#testLineEnding . >> MultiByteFileStreamTest>>#testLineEndingChunk . >> MultiByteFileStreamTest>>#testLineEndingWithWideStrings . >> MultiByteFileStreamTest>>#testNextLine . >> MultiByteFileStreamTest>>#testNextPutAllStartingAt . >> MultiByteFileStreamTest>>#testNonAsciiBackChunk . >> PNGReadWriterTest>>#test16Bit . >> PNGReadWriterTest>>#test16BitDisplay . >> PNGReadWriterTest>>#test16BitReversed . PNGReadWriterTest>>#test1Bit . >> PNGReadWriterTest>>#test1BitDisplay . PNGReadWriterTest>>#test1BitReversed >> . >> PNGReadWriterTest>>#test2Bit . PNGReadWriterTest>>#test2BitDisplay . >> PNGReadWriterTest>>#test2BitReversed . PNGReadWriterTest>>#test32Bit . >> PNGReadWriterTest>>#test32BitDisplay . >> PNGReadWriterTest>>#test32BitReversed . PNGReadWriterTest>>#test4Bit . >> PNGReadWriterTest>>#test4BitDisplay . PNGReadWriterTest>>#test4BitReversed >> . PNGReadWriterTest>>#test8Bit . >> PNGReadWriterTest>>#test8BitDisplay . PNGReadWriterTest>>#test8BitReversed >> . PNGReadWriterTest>>#testAlphaCoding . PNGReadWriterTest>>#testBlack16 . >> PNGReadWriterTest>>#testBlack32 . >> PNGReadWriterTest>>#testBlack8 . PNGReadWriterTest>>#testBlue16 . >> PNGReadWriterTest>>#testBlue32 . PNGReadWriterTest>>#testBlue8 . >> PNGReadWriterTest>>#testGreen16 . PNGReadWriterTest>>#testGreen32 . >> PNGReadWriterTest>>#testGreen8 . PNGReadWriterTest>>#testRed16 . >> PNGReadWriterTest>>#testRed32 . PNGReadWriterTest>>#testRed8 . >> SqueakSSLTest>>#testSSLSockets . SqueakSSLTest>>#testSocketAccept . >> SqueakSSLTest>>#testSocketConnect . >> SystemChangeFileTest>>#testCategoryAdded . >> SystemChangeFileTest>>#testCategoryAdded . >> SystemChangeFileTest>>#testCategoryAddedBefore . >> SystemChangeFileTest>>#testCategoryAddedBefore . >> SystemChangeFileTest>>#testCategoryRemoved . >> SystemChangeFileTest>>#testCategoryRemoved . >> SystemChangeFileTest>>#testCategoryRenamed . >> SystemChangeFileTest>>#testCategoryRenamed . >> SystemChangeFileTest>>#testClassAdded . >> SystemChangeFileTest>>#testClassAdded . >> SystemChangeFileTest>>#testClassCommented . >> SystemChangeFileTest>>#testClassCommented . >> SystemChangeFileTest>>#testClassModified . >> SystemChangeFileTest>>#testClassModified . >> SystemChangeFileTest>>#testClassRecategorized . >> SystemChangeFileTest>>#testClassRecategorized . >> SystemChangeFileTest>>#testClassRemoved . >> SystemChangeFileTest>>#testClassRemoved . >> SystemChangeFileTest>>#testClassRenamed . >> SystemChangeFileTest>>#testClassRenamed . >> SystemChangeFileTest>>#testExpressionDoIt . >> SystemChangeFileTest>>#testExpressionDoIt . >> SystemChangeFileTest>>#testMethodAdded . >> SystemChangeFileTest>>#testMethodAdded . >> SystemChangeFileTest>>#testMethodModified . >> SystemChangeFileTest>>#testMethodModified . >> SystemChangeFileTest>>#testMethodRecategorized . >> SystemChangeFileTest>>#testMethodRecategorized . >> SystemChangeFileTest>>#testMethodRemoved . >> SystemChangeFileTest>>#testMethodRemoved . >> SystemChangeFileTest>>#testProtocolAdded . >> SystemChangeFileTest>>#testProtocolAdded . >> SystemChangeFileTest>>#testProtocolDefault . >> SystemChangeFileTest>>#testProtocolDefault . >> SystemChangeFileTest>>#testProtocolRemoved . >> SystemChangeFileTest>>#testProtocolRemoved . >> SystemChangeFileTest>>#testProtocolRenamed . >> SystemChangeFileTest>>#testProtocolRenamed . >> TraitFileOutTest>>#testCondenseChanges . >> TraitFileOutTest>>#testFileOutCategory . >> TraitFileOutTest>>#testFileOutTrait . >> UnixProcessAccessorTestCase>>#testDupTo . >> UnixProcessAccessorTestCase>>#testRedirectStdOutTo . >> UnixProcessTestCase>>#testCatFromFileToFiles . >> UnixProcessTestCase>>#testRunCommand} >> >> And all those duplications confuse me. And the sources seem to have been >> killed by running the tests. >> >> HTH >> >> >> >> >> Levente >> >> On Mon, 13 Mar 2017, Eliot Miranda wrote: >> >> Hi Levente, >> the SortedCollection whack-a-mole [ :-) :-) ] update >> appears to have caused a significant uptick in Squeak trunk test suite >> errors, from about 26 to over 80. Are you aware of >> this? Are you addressing >> the errors? >> >> I was a little bit inconvenienced by this because I was testing >> Slang changes to the VM and mistook these errors as evidence of bugs in my >> Slang changes. That's life and I'm happy to >> accept the situation. >> But I would like to see the errors come back down to around 26 >> or less :-) >> >> Cheers >> Eliot >> >> On Mon, Mar 13, 2017 at 8:00 AM, <[hidden email]> >> wrote: >> Levente Uzonyi uploaded a new version of System to >> project The Trunk: >> http://source.squeak.org/trunk/System-ul.932.mcz >> >> ==================== Summary ==================== >> >> Name: System-ul.932 >> Author: ul >> Time: 13 March 2017, 3:10:17.453603 pm >> UUID: 7a305614-9a4b-47f8-a68f-79fcf6f90a80 >> Ancestors: System-eem.931 >> >> - SortedCollection Whack-a-mole >> - introduced #classVarNames and #classInstVarNames in >> PseudoClass, because they had senders >> - removed #startTimerInterruptWatcher from messages to >> keep lists >> >> =============== Diff against System-eem.931 >> =============== >> >> Item was changed: >> ----- Method: ChangeSet class>>traitsOrder: (in >> category 'fileIn/Out') ----- >> traitsOrder: aCollection >> "Answer an OrderedCollection. The traits >> are ordered so they can be filed in." >> >> + ^aCollection sorted: [:t1 :t2 | >> - | traits | >> - traits := aCollection asSortedCollection: [:t1 >> :t2 | >> (t1 isBaseTrait and: [t1 classTrait == >> t2]) or: [ >> (t2 traitComposition allTraits >> includes: t1) or: [ >> + (t1 traitComposition >> allTraits includes: t2) not]]]! >> - (t1 traitComposition >> allTraits includes: t2) not]]]. >> - ^traits asArray! >> >> Item was changed: >> ----- Method: ChangeSet>>changedMessageList (in >> category 'method changes') ----- >> changedMessageList >> "Used by a message set browser to access the list >> view information." >> >> | messageList | >> messageList := OrderedCollection new. >> changeRecords associationsDo: [:clAssoc | | >> classNameInParts classNameInFull | >> classNameInFull := clAssoc key asString. >> classNameInParts := classNameInFull >> findTokens: ' '. >> >> (clAssoc value allChangeTypes includes: >> #comment) ifTrue: >> [messageList add: >> (MethodReference new >> setClassSymbol: >> classNameInParts first asSymbol >> classIsMeta: >> false >> methodSymbol: >> #Comment >> stringVersion: >> classNameInFull, ' Comment')]. >> >> clAssoc value methodChangeTypes >> associationsDo: [:mAssoc | >> (#(remove addedThenRemoved) >> includes: mAssoc value) ifFalse: >> [messageList add: >> (MethodReference >> new >> >> setClassSymbol: classNameInParts first asSymbol >> >> classIsMeta: classNameInParts size > 1 >> >> methodSymbol: mAssoc key >> >> stringVersion: classNameInFull, ' ' , mAssoc key)]]]. >> + ^ messageList sort! >> - ^ messageList asSortedArray! >> >> Item was changed: >> ----- Method: ChangeSet>>checkForUncommentedClasses (in >> category 'fileIn/Out') ----- >> checkForUncommentedClasses >> "Check to see if any classes involved in this >> change set do not have class comments. Open up a browser showing all such >> classes." >> >> | aList | >> aList := self changedClasses >> select: >> [:aClass | aClass theNonMetaClass >> organization classComment isEmptyOrNil] >> thenCollect: >> [:aClass | aClass >> theNonMetaClass name]. >> >> aList size > 0 >> ifFalse: >> [^ self inform: 'All classes >> involved in this change set have class comments'] >> ifTrue: >> + [ToolSet openClassListBrowser: >> aList asSet sorted title: 'Classes in Change Set ', self name, ': classes >> that lack class comments']! >> - [ToolSet openClassListBrowser: >> aList asSet asSortedArray title: 'Classes in Change Set ', self name, ': >> classes that lack class comments']! >> >> Item was changed: >> ----- Method: ChangeSet>>fileOutOn: (in category >> 'fileIn/Out') ----- >> fileOutOn: stream >> "Write out all the changes the receiver knows >> about" >> >> | classList traits classes traitList list | >> (self isEmpty and: [stream isKindOf: FileStream]) >> ifTrue: [self inform: 'Warning: no >> changes to file out']. >> >> traits := self changedClasses reject: [:each | >> each isBehavior]. >> classes := self changedClasses select: [:each | >> each isBehavior]. >> traitList := self class traitsOrder: traits >> asOrderedCollection. >> classList := self class superclassOrder: classes >> asOrderedCollection. >> list := OrderedCollection new >> addAll: traitList; >> addAll: classList; >> yourself. >> >> "First put out rename, max classDef and comment >> changes." >> list do: [:aClass | self fileOutClassDefinition: >> aClass on: stream]. >> >> "Then put out all the method changes" >> list do: [:aClass | self fileOutChangesFor: >> aClass on: stream]. >> >> "Finally put out removals, final class defs and >> reorganization if any" >> list reverseDo: [:aClass | self fileOutPSFor: >> aClass on: stream]. >> >> + self classRemoves sort do: >> - self classRemoves asSortedCollection do: >> [:aClassName | stream nextChunkPut: >> 'Smalltalk removeClassNamed: #', aClassName; cr].! >> >> Item was changed: >> ----- Method: >> InternalTranslator>>fileOutOn:keys:withBOM: (in category 'fileIn/fileOut') >> ----- >> fileOutOn: aStream keys: keys withBOM: bomFlag >> "self current fileOutOn: Transcript. Transcript >> endEntry" >> self fileOutHeaderOn: aStream withBOM: bomFlag. >> (keys >> + ifNil: [generics keys sort]) >> - ifNil: [generics keys >> asSortedCollection]) >> do: [:key | self >> nextChunkPut: (generics >> associationAt: key) >> on: aStream]. >> keys >> ifNil: [self untranslated >> do: [:each | self >> nextChunkPut: each -> '' on: aStream]]. >> aStream nextPut: $!!; >> cr! >> >> Item was changed: >> ----- Method: MczInstaller>>install (in category >> 'installation') ----- >> install >> + >> - | sources | >> zip := ZipArchive new. >> zip readFrom: stream. >> self checkDependencies ifFalse: [^false]. >> self recordVersionInfo. >> + (zip membersMatching: 'snapshot/*') >> + sort: [:a :b | a fileName < b fileName]; >> + do: [:src | self installMember: src].! >> - sources := (zip membersMatching: 'snapshot/*') >> - asSortedCollection: [:a >> :b | a fileName < b fileName]. >> - sources do: [:src | self installMember: src].! >> >> Item was changed: >> ----- Method: Preferences >> class>>giveHelpWithPreferences (in category 'support') ----- >> giveHelpWithPreferences >> "Open up a workspace with explanatory info in it >> about Preferences" >> >> | aString | >> aString := String streamContents: [:aStream | >> aStream nextPutAll: >> >> 'Many aspects of the system are governed by the >> settings of various "Preferences". >> >> Click on any of brown tabs at the top of the panel to >> see all the preferences in that category. >> Or type in to the box above the Search button, then hit >> Search, and all Preferences matching whatever you typed in will appear in >> the "search results" category. A preference >> is considered to >> match your search if either its name matches the >> characters *or* if anything in the balloon help provided for the >> preferences matches the search text. >> >> To find out more about any particular Preference, hold >> the mouse over it for a moment and balloon help will appear. Also, a >> complete list of all the Preferences, with >> documentation for each, is >> included below. >> >> Preferences whose names are in shown in bold in the >> Preferences Panel are designated as being allowed to vary from project to >> project; those whose name are not in bold are >> "global", which is to >> say, they apply equally whatever project you are in. >> >> Click on the name of any preference to get a menu which >> allows you to *change* whether the preference should vary from project to >> project or should be global, and also allows >> you to browse all >> the senders of the preference, and to discover all the >> categories under which the preference has been classified, and to be handed >> a button that you can drop wherever you please >> that will control >> the preference. >> >> If you like all your current Preferences settings, you >> may wish to hit the "Save Current Settings as my Personal Preferences" >> button. Once you have done that, you can at any >> point in the future >> hit "Restore my Personal Preferences" and all your saved >> settings will get restored immediately. >> >> Also, you can use "themes" to set multiple preferences >> all at once; click on the "change theme..." button in the Squeak flap or in >> the Preferences panel, or seek out the themes >> item in the >> Appearance menu.' translated. >> >> aStream cr; cr; nextPutAll: >> '-----------------------------------------------------------------'; >> cr; cr; nextPutAll: 'Alphabetical >> listing of all Preferences' translated; cr; cr. >> + (Preferences allPreferences sort: [:a :b | a name < >> b name]) do: >> - (Preferences allPreferences asSortedCollection: [:a >> :b | a name < b name]) do: >> [:pref | | aHelpString | >> aStream nextPutAll: pref name; cr. >> aHelpString := pref helpString >> translated. >> (aHelpString beginsWith: pref name) >> ifTrue: >> [aHelpString := aHelpString >> copyFrom: (pref name size ) to: aHelpString size]. >> aHelpString := (aHelpString >> copyReplaceAll: String cr with: ' ') copyWithout: Character tab. >> aStream nextPutAll: aHelpString >> capitalized. >> (aHelpString isEmpty or: [aHelpString >> last == $.]) ifFalse: [aStream nextPut: $.]. >> aStream cr; cr]]. >> >> UIManager default edit: aString label: 'About >> Preferences' translated >> >> "Preferences giveHelpWithPreferences"! >> >> Item was changed: >> ----- Method: Project class>>allNames (in category >> 'utilities') ----- >> allNames >> + >> + ^(self allProjects collect: [:p | p name]) sort: >> [:n1 :n2 | n1 caseInsensitiveLessOrEqual: n2]! >> - ^ (self allProjects collect: [:p | p name]) >> asSortedCollection: [:n1 :n2 | n1 asLowercase < n2 asLowercase]! >> >> Item was changed: >> ----- Method: Project class>>allNamesAndProjects (in >> category 'utilities') ----- >> allNamesAndProjects >> + >> + ^(self allProjects >> + sorted: [ :p1 :p2 | p1 name >> caseInsensitiveLessOrEqual: p2 name ]) >> + replace: [ :aProject | Array with: >> aProject name with: aProject ]! >> - ^ (self allProjects asSortedCollection: [:p1 :p2 >> | p1 name asLowercase < p2 name asLowercase]) collect: >> - [:aProject | Array with: aProject name >> with: aProject]! >> >> Item was changed: >> ----- Method: Project class>>sweep: (in category >> 'squeaklet on server') ----- >> sweep: aServerDirectory >> | repository list parts ind entry projectName >> versions | >> "On the server, move all but the three most >> recent versions of each Squeaklet to a folder called 'older'" >> "Project sweep: ((ServerDirectory serverNamed: >> 'DaniOnJumbo') clone >> directory: >> '/vol0/people/dani/Squeaklets/2.7')" >> >> "Ensure the 'older' directory" >> (aServerDirectory includesKey: 'older') >> ifFalse: [aServerDirectory >> createDirectory: 'older']. >> repository := aServerDirectory clone directory: >> aServerDirectory directory, '/older'. >> >> "Collect each name, and decide on versions" >> list := aServerDirectory fileNames. >> list isString ifTrue: [^ self inform: 'server is >> unavailable' translated]. >> + list sort. >> - list := list asSortedCollection >> asOrderedCollection. >> parts := list collect: [:en | Project >> parseProjectFileName: en]. >> parts := parts select: [:en | en third = 'pr']. >> ind := 1. >> [entry := list at: ind. >> projectName := entry first asLowercase. >> versions := OrderedCollection new. >> versions add: entry. >> [(ind := ind + 1) > list size >> ifFalse: [(parts at: ind) first >> asLowercase = projectName >> ifTrue: [versions add: >> (parts at: ind). true] >> ifFalse: [false]] >> ifTrue: [false]] whileTrue. >> aServerDirectory moveYoungest: 3 in: >> versions to: repository. >> ind > list size] whileFalse. >> ! >> >> Item was added: >> + ----- Method: PseudoClass>>classInstVarNames (in >> category 'accessing') ----- >> + classInstVarNames >> + >> + self realClass ifNotNil: [ :realClass | >> ^realClass instVarNames ]. >> + ^#()! >> >> Item was added: >> + ----- Method: PseudoClass>>classVarNames (in category >> 'accessing') ----- >> + classVarNames >> + >> + self realClass ifNotNil: [ :realClass | >> ^realClass classVarNames ]. >> + ^#()! >> >> Item was changed: >> ----- Method: SmalltalkImage>>presumedSentMessages (in >> category 'shrinking') ----- >> presumedSentMessages | sent | >> "Smalltalk presumedSentMessages" >> >> "The following should be preserved for doIts, >> etc" >> sent := IdentitySet new. >> #(compactSymbolTable rebuildAllProjects >> browseAllSelect: lastRemoval >> scrollBarValue: vScrollBarValue: >> scrollBarMenuButtonPressed: >> withSelectionFrom: to: removeClassNamed: >> dragon: hilberts: mandala: web test3 >> factorial tinyBenchmarks benchFib >> newDepth: restoreAfter: zapAllMethods >> obsoleteClasses >> removeAllUnSentMessages abandonSources >> removeUnreferencedKeys >> reclaimDependents zapOrganization >> condenseChanges browseObsoleteReferences >> >> subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: >> methodsFor:stamp: methodsFor:stamp:prior: >> instanceVariableNames: >> + unusedClasses) do: >> - startTimerInterruptWatcher unusedClasses) >> do: >> [:sel | sent add: sel]. >> "The following may be sent by perform: in >> dispatchOnChar..." >> Smalltalk at: #ParagraphEditor ifPresent: >> [:paragraphEditor | >> (paragraphEditor classPool at: >> #CmdActions) asSet do: >> [:sel | sent add: sel]. >> (paragraphEditor classPool at: >> #ShiftCmdActions) asSet do: >> [:sel | sent add: sel]]. >> ^ sent! >> >> Item was changed: >> ----- Method: SmalltalkImage>>removeAllUnSentMessages >> (in category 'shrinking') ----- >> removeAllUnSentMessages >> "Smalltalk removeAllUnSentMessages" >> "[Smalltalk unusedClasses do: [:c | (Smalltalk >> at: c) removeFromSystem]. >> Smalltalk removeAllUnSentMessages > 0] >> whileTrue." >> "Remove all implementations of unsent messages." >> | sels n | >> sels := self systemNavigation allUnSentMessages. >> "The following should be preserved for doIts, >> etc" >> "needed even after #majorShrink is pulled" >> + #(#compactSymbolTable #rebuildAllProjects >> #browseAllSelect: #lastRemoval #scrollBarValue: vScrollBarValue: >> #scrollBarMenuButtonPressed: #withSelectionFrom: #to: >> #removeClassNamed: >> #dragon: #hilberts: #mandala: #web #test3 #factorial >> #tinyBenchmarks #benchFib #newDepth: #restoreAfter: #zapAllMethods >> #obsoleteClasses #removeAllUnSentMessages #abandonSources >> #removeUnreferencedKeys #reclaimDependents >> #zapOrganization #condenseChanges #browseObsoleteReferences >> #subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: >> #methodsFor:stamp: #methodsFor:stamp:prior: >> #instanceVariableNames: #unusedClasses ) >> - #(#compactSymbolTable #rebuildAllProjects >> #browseAllSelect: #lastRemoval #scrollBarValue: vScrollBarValue: >> #scrollBarMenuButtonPressed: #withSelectionFrom: #to: >> #removeClassNamed: >> #dragon: #hilberts: #mandala: #web #test3 #factorial >> #tinyBenchmarks #benchFib #newDepth: #restoreAfter: #zapAllMethods >> #obsoleteClasses #removeAllUnSentMessages #abandonSources >> #removeUnreferencedKeys #reclaimDependents >> #zapOrganization #condenseChanges #browseObsoleteReferences >> #subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: >> #methodsFor:stamp: #methodsFor:stamp:prior: >> #instanceVariableNames: #startTimerInterruptWatcher #unusedClasses ) >> do: [:sel | sels >> remove: sel >> ifAbsent: []]. >> "The following may be sent by perform: in >> dispatchOnChar..." >> (Smalltalk at: #ParagraphEditor) ifNotNilDo: >> [:paragraphEditor | >> (paragraphEditor classPool at: >> #CmdActions) asSet >> do: [:sel | sels >> remove: sel >> ifAbsent: []]. >> (paragraphEditor classPool at: >> #ShiftCmdActions) asSet >> do: [:sel | sels >> remove: sel >> ifAbsent: []]]. >> sels size = 0 >> ifTrue: [^ 0]. >> n := 0. >> self systemNavigation >> allBehaviorsDo: [:x | n := n + 1]. >> 'Removing ' , sels size printString , ' messages >> . . .' >> displayProgressFrom: 0 >> to: n >> during: [:bar | >> n := 0. >> self systemNavigation >> allBehaviorsDo: [:class | >> bar value: (n := >> n + 1). >> sels >> do: [:sel >> | class basicRemoveSelector: sel]]]. >> ^ sels size! >> >> Item was changed: >> ----- Method: SpaceTally>>compareTallyIn:to: (in >> category 'fileOut') ----- >> compareTallyIn: beforeFileName to: afterFileName >> "SpaceTally new compareTallyIn: 'tally' to: >> 'tally2'" >> >> | answer s beforeDict a afterDict allKeys | >> beforeDict := Dictionary new. >> s := FileDirectory default fileNamed: >> beforeFileName. >> [s atEnd] whileFalse: [ >> a := Array readFrom: s nextLine. >> beforeDict at: a first put: a >> allButFirst. >> ]. >> s close. >> afterDict := Dictionary new. >> s := FileDirectory default fileNamed: >> afterFileName. >> [s atEnd] whileFalse: [ >> a := Array readFrom: s nextLine. >> afterDict at: a first put: a allButFirst. >> ]. >> s close. >> answer := WriteStream on: String new. >> + allKeys := (Set new addAll: beforeDict keys; >> addAll: afterDict keys; yourself) sorted. >> - allKeys := (Set new addAll: beforeDict keys; >> addAll: afterDict keys; yourself) asSortedCollection. >> allKeys do: [ :each | >> | before after diff | >> before := beforeDict at: each ifAbsent: >> [#(0 0 0)]. >> after := afterDict at: each ifAbsent: >> [#(0 0 0)]. >> diff := before with: after collect: [ >> :vBefore :vAfter | vAfter - vBefore]. >> diff = #(0 0 0) ifFalse: [ >> answer nextPutAll: each,' ',diff >> printString; cr. >> ]. >> ]. >> StringHolder new contents: answer contents; >> openLabel: 'space diffs'. >> >> >> >> ! >> >> Item was changed: >> ----- Method: SystemNavigation>>allMethodsInCategory: >> (in category 'browse') ----- >> allMethodsInCategory: category >> | aCollection | >> + aCollection := OrderedCollection new. >> - aCollection := SortedCollection new. >> Cursor wait showWhile: >> [self allBehaviorsDo: >> [:x | (x allMethodsInCategory: >> category) do: >> [:sel | aCollection add: >> x name , ' ' , sel]]]. >> + ^aCollection sort. >> - ^aCollection. >> ! >> >> Item was changed: >> ----- Method: >> SystemNavigation>>allSelectorsWithAnyImplementorsIn: (in category 'query') >> ----- >> allSelectorsWithAnyImplementorsIn: selectorList >> "Answer the subset of the given list which >> represent method selectors >> which have at least one implementor in the >> system." >> | good | >> + good := Set new. >> - good := OrderedCollection new. >> self allBehaviorsDo: [:class | selectorList >> do: [:aSelector | (class >> includesSelector: aSelector) >> ifTrue: >> [good add: aSelector]]]. >> + ^good sorted >> + >> + " >> - ^ good asSet asSortedArray" >> SystemNavigation new >> selectorsWithAnyImplementorsIn: #( contents >> contents: nuts) >> "! >> >> Item was changed: >> ----- Method: >> SystemNavigation>>browseAllImplementorsOf:localToPackage: (in category >> 'browse') ----- >> browseAllImplementorsOf: selector localToPackage: >> packageNameOrInfo >> "Create and schedule a message browser on each >> method in the given package >> that implements the message whose selector is the >> argument, selector. For example, >> SystemNavigation new browseAllImplementorsOf: >> #at:put: localToPackage: 'Collections'." >> >> self browseMessageList: (self >> >> allImplementorsOf: selector >> + >> localToPackage: packageNameOrInfo) >> - >> localToPackage: packageNameOrInfo) asSortedCollection >> name: 'Implementors of ' , selector, >> ' local to package ', >> (self packageInfoFor: packageNameOrInfo) name! >> >> Item was changed: >> ----- Method: >> SystemNavigation>>browseAllSelect:localTo: (in category 'browse') ----- >> browseAllSelect: aBlock localTo: aClass >> "Create and schedule a message browser on each >> method in or below the given class >> that, when used as the block argument to aBlock >> gives a true result. For example, >> SystemNavigation default browseAllSelect: [:m | >> m numLiterals > 10] localTo: Morph." >> aClass ifNil: [^self inform: 'no class >> selected']. >> ^self >> + browseMessageList: (self >> allMethodsSelect: aBlock localTo: aClass) sorted >> - browseMessageList: (self >> allMethodsSelect: aBlock localTo: aClass) asSortedCollection >> name: 'selected messages local to ', >> aClass name! >> >> Item was changed: >> ----- Method: >> SystemNavigation>>browseClassCommentsWithString: (in category 'browse') >> ----- >> browseClassCommentsWithString: aString >> "Smalltalk browseClassCommentsWithString: 'my >> instances' " >> "Launch a message list browser on all class >> comments containing aString as a substring." >> >> | caseSensitive suffix list | >> >> suffix := (caseSensitive := Sensor shiftPressed) >> ifTrue: [' (case-sensitive)'] >> ifFalse: [' (use shift for >> case-sensitive)']. >> list := Set new. >> Cursor wait showWhile: [ >> Smalltalk allClassesDo: [:class | >> (class organization classComment >> asString findString: aString >> >> startingAt: 1 caseSensitive: caseSensitive) > 0 ifTrue: [ >> >> list add: ( >> >> MethodReference >> >> class: class >> >> selector: #Comment >> >> ) >> ] >> ] >> ]. >> ^ self >> + browseMessageList: list sorted >> - browseMessageList: list >> asSortedCollection >> name: 'Class comments containing ' , >> aString printString , suffix >> autoSelect: aString! >> >> Item was changed: >> ----- Method: >> SystemNavigation>>browseClassesWithNamesContaining:caseSensitive: (in >> category 'browse') ----- >> browseClassesWithNamesContaining: aString >> caseSensitive: caseSensitive >> "Smalltalk browseClassesWithNamesContaining: >> 'eMorph' caseSensitive: true " >> "Launch a class-list list browser on all classes >> whose names containg aString as a substring." >> >> | suffix aList | >> suffix := caseSensitive >> ifTrue: [' >> (case-sensitive)'] >> ifFalse: [' (use shift >> for case-sensitive)']. >> aList := OrderedCollection new. >> Cursor wait >> showWhile: [Smalltalk >> allClassesDo: [:class | >> (class name includesSubstring: aString caseSensitive: caseSensitive) >> ifTrue: >> [aList add: class name]]]. >> aList size > 0 >> + ifTrue: [ToolSet openClassListBrowser: >> aList asSet sorted title: 'Classes whose names contain ' , aString , >> suffix]! >> - ifTrue: [ToolSet openClassListBrowser: >> aList asSet asSortedArray title: 'Classes whose names contain ' , aString , >> suffix]! >> >> Item was changed: >> ----- Method: >> SystemNavigation>>showMenuOf:withFirstItem:ifChosenDo:withCaption: (in >> category 'ui') ----- >> showMenuOf: selectorCollection withFirstItem: firstItem >> ifChosenDo: choiceBlock withCaption: aCaption >> "Show a sorted menu of the given selectors, >> preceded by firstItem, and all abbreviated to 40 characters. Use aCaption >> as the menu title, if it is not nil. Evaluate >> choiceBlock if a >> message is chosen." >> >> | index menuLabels sortedList | >> + sortedList := selectorCollection sorted. >> - sortedList := selectorCollection >> asSortedCollection. >> menuLabels := Array streamContents: >> [:strm | strm nextPut: (firstItem >> contractTo: 40). >> sortedList do: [:sel | strm nextPut: (sel >> contractTo: 40)]]. >> index := UIManager default chooseFrom: menuLabels >> lines: #(1). >> index = 1 ifTrue: [choiceBlock value: firstItem]. >> index > 1 ifTrue: [choiceBlock value: (sortedList >> at: index - 1)]! >> >> Item was changed: >> ----- Method: SystemVersion>>highestUpdate (in category >> 'accessing') ----- >> highestUpdate >> + >> + ^highestUpdate ifNil: [ >> + highestUpdate := self updates isEmpty >> + ifTrue: [ 0 ] >> + ifFalse: [ self updates max ] ]! >> - | sortedUpdates | >> - highestUpdate ifNil: [ >> - sortedUpdates := self updates >> asSortedCollection. >> - highestUpdate := (sortedUpdates isEmpty >> - ifTrue: [0] >> - ifFalse: [sortedUpdates last])]. >> - ^highestUpdate! >> >> Item was changed: >> ----- Method: TranslatedReceiverFinder >> class>>browseNonLiteralReceivers (in category 'utilities') ----- >> browseNonLiteralReceivers >> "TranslatedReceiverFinder >> browseNonLiteralReceivers" >> SystemNavigation default >> + browseMessageList: self new >> nonLiteralReceivers >> - browseMessageList: self new >> nonLiteralReceivers asSortedCollection >> name: 'Non literal receivers of >> #translated' >> autoSelect: 'translated'! >> >> >> >> >> >> -- >> _,,,^..^,,,_ >> best, Eliot >> >> >> >> >> >> >> >> -- >> _,,,^..^,,,_ >> best, Eliot >> > |
On Mon, Mar 13, 2017 at 5:30 PM, Levente Uzonyi <[hidden email]> wrote: I have updated Files-ul.168 to the Inbox with those methods reverted Thanks man!
_,,,^..^,,,_ best, Eliot |
Did it help?
Levente On Mon, 13 Mar 2017, Eliot Miranda wrote: > > > On Mon, Mar 13, 2017 at 5:30 PM, Levente Uzonyi <[hidden email]> wrote: > I have updated Files-ul.168 to the Inbox with those methods reverted > along with a third one. > > > Thanks man! > > > > Levente > > On Tue, 14 Mar 2017, Levente Uzonyi wrote: > > Hi Eliot, > > all of those new errors seem to be related to files, so I presume they are related to the changes of the Files package: > > " > FileDirectory changes: > > - implemented #directoryContentsFor:do: in all subclasses of FileDirectory, where #directoryContentsFor: was implemented > - introduced #entriesDo: based on the method above > - rewrote methods sending #entries to use #entriesDo: instead > - simplified DirectoryEntryDirectory >> #asFileDirectory > - introduced #hasEntries > - #directoryEntryForName: signals InvalidDirectoryError as suggested by a comment from 2007 > - other minor optimizations > " > > I suspect that either the DirectoryEntryDirectory >> #asFileDirectory or FileDirectory >> #directoryEntryForName: is responsible for the errors, but it should be easy to find the cause > by debugging any of those new errors. > > Levente > > On Mon, 13 Mar 2017, Eliot Miranda wrote: > > Hi Levente, > > On Mon, Mar 13, 2017 at 4:44 PM, Levente Uzonyi <[hidden email]> wrote: > Hi Eliot, > > I ran the tests 3 times and haven't seen any new test failures or errors. > However there are some other changes in the pack unrelated to SortedCollection, which I couldn't test on platforms other than Linux, but may behave differently on > other platforms (e.g. changes in > Files). > > > First of all let me apologise; my stats were wrong. I see > 4527 run, 4383 passes, 106 expected failures, 26 failures, 12 errors, 0 unexpected passes > before whack-a-mole and > 4575 run, 4308 passes, 108 expected failures, 26 failures, 133 errors, 0 unexpected passes > after. And this is on Mac OS X using the 64-bit VM and image. Here's the pre-whack-a-mole full report > > > > Can you send me the list of failures and errors you see? > > > Pre whack-a-mole > failures: {AllocationTest>>#testOutOfMemorySignal . ClassVarScopeTest>>#testDefinedClassMethodInGrandchild . ClassVarScopeTest>>#testDefinedInstanceMethodInChild . > ClassVarScopeTest>>#testDefinedInstanceMethodInGrandchild . ClassVarScopeTest>>#testInheritedClassMethodInGrandchild . > ClassVarScopeTest>>#testInheritedInstanceMethodInGrandchild . > DateAndTimeLeapTest>>#testAsSeconds . DecompilerTests>>#testDecompilerInClassesENtoEZ . DecompilerTests>>#testDecompilerInClassesPAtoPM . > IslandVMTweaksTestCase>>#testForgivingPrims . > MorphicUIManagerTest>>#testShowAllBinParts . MultiByteFileStreamTest>>#testLineEndConversion . PackageDependencyTest>>#testEtoys . PackageDependencyTest>>#testMorphic . > PackageDependencyTest>>#testSound . > PackageDependencyTest>>#testSystem . ReleaseTest>>#testClassesSystemCategory . ReleaseTest>>#testMethodsWithUnboundGlobals . ReleaseTest>>#testNoObsoleteClasses . > ReleaseTest>>#testUndeclared . > SocketTest>>#testSocketReuse . SocketTest>>#testUDP . UnixProcessAccessorTestCase>>#testRedirectStdOutTo . UnixProcessTestCase>>#testCatAFile . > UnixProcessTestCase>>#testRunCommand . > WebClientServerTest>>#testListenOnInterface} > > errors: {BitmapStreamTests>>#testMatrixTransform2x3WithImageSegment . BitmapStreamTests>>#testShortIntegerArrayWithImageSegment . > BitmapStreamTests>>#testShortPointArrayWithImageSegment . > BitmapStreamTests>>#testShortRunArrayWithImageSegment . BitmapStreamTests>>#testWordArrayWithImageSegment . DecompilerTests>>#testDecompilerInClassesSAtoSM . > LangEnvBugs>>#testIsFontAvailable . > LangEnvBugs>>#testIsFontAvailable . LocaleTest>>#testIsFontAvailable . SqueakSSLTest>>#testSSLSockets . SqueakSSLTest>>#testSocketAccept . > SqueakSSLTest>>#testSocketConnect} > > Post whack-a-mole > failures: {AllocationTest>>#testOutOfMemorySignal . ClassVarScopeTest>>#testDefinedInstanceMethodInChild . ClassVarScopeTest>>#testDefinedInstanceMethodInGrandchild . > ClassVarScopeTest>>#testInheritedClassMethodInGrandchild . ClassVarScopeTest>>#testInheritedInstanceMethodInGrandchild . DateAndTimeLeapTest>>#testAsSeconds . > DecompilerTests>>#testDecompilerInClassesENtoEZ . > DecompilerTests>>#testDecompilerInClassesPAtoPM . DecompilerTests>>#testDecompilerInClassesTAtoTM . MorphicUIManagerTest>>#testShowAllBinParts . > MultiByteFileStreamTest>>#testLineEndConversion . > PackageDependencyTest>>#testEtoys . PackageDependencyTest>>#testMorphic . PackageDependencyTest>>#testSUnitGUI . PackageDependencyTest>>#testSound . > PackageDependencyTest>>#testSystem . > PackageDependencyTest>>#testTools . ReleaseTest>>#testClassesSystemCategory . ReleaseTest>>#testMethodsWithUnboundGlobals . ReleaseTest>>#testNoObsoleteClasses . > ReleaseTest>>#testSuperSubclassReferences . > ReleaseTest>>#testUndeclared . SocketTest>>#testSocketReuse . SocketTest>>#testUDP . UnixProcessTestCase>>#testCatAFile . WebClientServerTest>>#testListenOnInterface} > > errors: {BitmapStreamTests>>#testMatrixTransform2x3WithImageSegment . BitmapStreamTests>>#testShortIntegerArrayWithImageSegment . > BitmapStreamTests>>#testShortPointArrayWithImageSegment . > BitmapStreamTests>>#testShortRunArrayWithImageSegment . BitmapStreamTests>>#testWordArrayWithImageSegment . BrowserTest>>#testFileOutMessageCategories . > DecompilerTests>>#testDecompilerInClassesSAtoSM . > FileDirectoryTest>>#testAttemptExistenceCheckWhenFile . FileDirectoryTest>>#testDirectoryExists . FileDirectoryTest>>#testDirectoryExistsWhenLikeNamedFileExists . > FileDirectoryTest>>#testNonExistentDirectory > . FileDirectoryTest>>#testOldFileOrNoneNamed . FileListTest>>#testServicesForFileEnding . FileStreamTest>>#testCachingNextChunkPut . > FileStreamTest>>#testCachingNextChunkPut . > FileStreamTest>>#testDetectFileDo . FileStreamTest>>#testFileTruncation . FileStreamTest>>#testFileTruncation . FileStreamTest>>#testNextChunkOutOfBounds . > FileStreamTest>>#testNextChunkOutOfBounds . > FileStreamTest>>#testNextLine . FileStreamTest>>#testPositionPastEndIsAtEnd . FileStreamTest>>#testReadIntoStartingAtCount . LangEnvBugs>>#testIsFontAvailable . > LangEnvBugs>>#testIsFontAvailable . > LocaleTest>>#testIsFontAvailable . MCDictionaryRepositoryTest>>#testAddAndLoad . MCDictionaryRepositoryTest>>#testIncludesName . > MCDictionaryRepositoryTest>>#testStoreAndLoad . > MCDirectoryRepositoryTest>>#testAddAndLoad . MCDirectoryRepositoryTest>>#testIncludesName . MCDirectoryRepositoryTest>>#testStoreAndLoad . > MCMczInstallerTest>>#testInstallFromFile . > MCMczInstallerTest>>#testInstallFromFile . MCMczInstallerTest>>#testInstallFromStream . MCWorkingCopyTest>>#testAncestorMerge . MCWorkingCopyTest>>#testBackport . > MCWorkingCopyTest>>#testDoubleRepeatedMerge . > MCWorkingCopyTest>>#testMergeIntoImageWithNoChanges . MCWorkingCopyTest>>#testMergeIntoUnmodifiedImage . MCWorkingCopyTest>>#testOptimizedLoad . > MCWorkingCopyTest>>#testRedundantMerge . > MCWorkingCopyTest>>#testRepeatedMerge . MCWorkingCopyTest>>#testSelectiveBackport . MCWorkingCopyTest>>#testSimpleMerge . MCWorkingCopyTest>>#testSnapshotAndLoad . > MultiByteFileStreamTest>>#testAsciiBackChunk > . MultiByteFileStreamTest>>#testBinaryUpTo . MultiByteFileStreamTest>>#testLineEnding . MultiByteFileStreamTest>>#testLineEndingChunk . > MultiByteFileStreamTest>>#testLineEndingWithWideStrings . > MultiByteFileStreamTest>>#testNextLine . MultiByteFileStreamTest>>#testNextPutAllStartingAt . MultiByteFileStreamTest>>#testNonAsciiBackChunk . > PNGReadWriterTest>>#test16Bit . > PNGReadWriterTest>>#test16BitDisplay . PNGReadWriterTest>>#test16BitReversed . PNGReadWriterTest>>#test1Bit . PNGReadWriterTest>>#test1BitDisplay . > PNGReadWriterTest>>#test1BitReversed . > PNGReadWriterTest>>#test2Bit . PNGReadWriterTest>>#test2BitDisplay . PNGReadWriterTest>>#test2BitReversed . PNGReadWriterTest>>#test32Bit . > PNGReadWriterTest>>#test32BitDisplay . > PNGReadWriterTest>>#test32BitReversed . PNGReadWriterTest>>#test4Bit . PNGReadWriterTest>>#test4BitDisplay . PNGReadWriterTest>>#test4BitReversed . > PNGReadWriterTest>>#test8Bit . > PNGReadWriterTest>>#test8BitDisplay . PNGReadWriterTest>>#test8BitReversed . PNGReadWriterTest>>#testAlphaCoding . PNGReadWriterTest>>#testBlack16 . > PNGReadWriterTest>>#testBlack32 . > PNGReadWriterTest>>#testBlack8 . PNGReadWriterTest>>#testBlue16 . PNGReadWriterTest>>#testBlue32 . PNGReadWriterTest>>#testBlue8 . PNGReadWriterTest>>#testGreen16 . > PNGReadWriterTest>>#testGreen32 . > PNGReadWriterTest>>#testGreen8 . PNGReadWriterTest>>#testRed16 . PNGReadWriterTest>>#testRed32 . PNGReadWriterTest>>#testRed8 . SqueakSSLTest>>#testSSLSockets . > SqueakSSLTest>>#testSocketAccept . > SqueakSSLTest>>#testSocketConnect . SystemChangeFileTest>>#testCategoryAdded . SystemChangeFileTest>>#testCategoryAdded . SystemChangeFileTest>>#testCategoryAddedBefore . > SystemChangeFileTest>>#testCategoryAddedBefore . SystemChangeFileTest>>#testCategoryRemoved . SystemChangeFileTest>>#testCategoryRemoved . > SystemChangeFileTest>>#testCategoryRenamed . > SystemChangeFileTest>>#testCategoryRenamed . SystemChangeFileTest>>#testClassAdded . SystemChangeFileTest>>#testClassAdded . SystemChangeFileTest>>#testClassCommented . > SystemChangeFileTest>>#testClassCommented . SystemChangeFileTest>>#testClassModified . SystemChangeFileTest>>#testClassModified . > SystemChangeFileTest>>#testClassRecategorized . > SystemChangeFileTest>>#testClassRecategorized . SystemChangeFileTest>>#testClassRemoved . SystemChangeFileTest>>#testClassRemoved . SystemChangeFileTest>>#testClassRenamed > . > SystemChangeFileTest>>#testClassRenamed . SystemChangeFileTest>>#testExpressionDoIt . SystemChangeFileTest>>#testExpressionDoIt . SystemChangeFileTest>>#testMethodAdded . > SystemChangeFileTest>>#testMethodAdded . SystemChangeFileTest>>#testMethodModified . SystemChangeFileTest>>#testMethodModified . > SystemChangeFileTest>>#testMethodRecategorized . > SystemChangeFileTest>>#testMethodRecategorized . SystemChangeFileTest>>#testMethodRemoved . SystemChangeFileTest>>#testMethodRemoved . > SystemChangeFileTest>>#testProtocolAdded . > SystemChangeFileTest>>#testProtocolAdded . SystemChangeFileTest>>#testProtocolDefault . SystemChangeFileTest>>#testProtocolDefault . > SystemChangeFileTest>>#testProtocolRemoved . > SystemChangeFileTest>>#testProtocolRemoved . SystemChangeFileTest>>#testProtocolRenamed . SystemChangeFileTest>>#testProtocolRenamed . > TraitFileOutTest>>#testCondenseChanges . > TraitFileOutTest>>#testFileOutCategory . TraitFileOutTest>>#testFileOutTrait . UnixProcessAccessorTestCase>>#testDupTo . UnixProcessAccessorTestCase>>#testRedirectStdOutTo > . > UnixProcessTestCase>>#testCatFromFileToFiles . UnixProcessTestCase>>#testRunCommand} > > And all those duplications confuse me. And the sources seem to have been killed by running the tests. > > HTH > > > > > Levente > > On Mon, 13 Mar 2017, Eliot Miranda wrote: > > Hi Levente, > the SortedCollection whack-a-mole [ :-) :-) ] update appears to have caused a significant uptick in Squeak trunk test suite errors, from about 26 to over > 80. Are you aware of > this? Are you addressing > the errors? > > I was a little bit inconvenienced by this because I was testing Slang changes to the VM and mistook these errors as evidence of bugs in my Slang changes. > That's life and I'm happy to > accept the situation. > But I would like to see the errors come back down to around 26 or less :-) > > Cheers > Eliot > > On Mon, Mar 13, 2017 at 8:00 AM, <[hidden email]> wrote: > Levente Uzonyi uploaded a new version of System to project The Trunk: > http://source.squeak.org/trunk/System-ul.932.mcz > > ==================== Summary ==================== > > Name: System-ul.932 > Author: ul > Time: 13 March 2017, 3:10:17.453603 pm > UUID: 7a305614-9a4b-47f8-a68f-79fcf6f90a80 > Ancestors: System-eem.931 > > - SortedCollection Whack-a-mole > - introduced #classVarNames and #classInstVarNames in PseudoClass, because they had senders > - removed #startTimerInterruptWatcher from messages to keep lists > > =============== Diff against System-eem.931 =============== > > Item was changed: > ----- Method: ChangeSet class>>traitsOrder: (in category 'fileIn/Out') ----- > traitsOrder: aCollection > "Answer an OrderedCollection. The traits > are ordered so they can be filed in." > > + ^aCollection sorted: [:t1 :t2 | > - | traits | > - traits := aCollection asSortedCollection: [:t1 :t2 | > (t1 isBaseTrait and: [t1 classTrait == t2]) or: [ > (t2 traitComposition allTraits includes: t1) or: [ > + (t1 traitComposition allTraits includes: t2) not]]]! > - (t1 traitComposition allTraits includes: t2) not]]]. > - ^traits asArray! > > Item was changed: > ----- Method: ChangeSet>>changedMessageList (in category 'method changes') ----- > changedMessageList > "Used by a message set browser to access the list view information." > > | messageList | > messageList := OrderedCollection new. > changeRecords associationsDo: [:clAssoc | | classNameInParts classNameInFull | > classNameInFull := clAssoc key asString. > classNameInParts := classNameInFull findTokens: ' '. > > (clAssoc value allChangeTypes includes: #comment) ifTrue: > [messageList add: > (MethodReference new > setClassSymbol: classNameInParts first asSymbol > classIsMeta: false > methodSymbol: #Comment > stringVersion: classNameInFull, ' Comment')]. > > clAssoc value methodChangeTypes associationsDo: [:mAssoc | > (#(remove addedThenRemoved) includes: mAssoc value) ifFalse: > [messageList add: > (MethodReference new > setClassSymbol: classNameInParts first asSymbol > classIsMeta: classNameInParts size > 1 > methodSymbol: mAssoc key > stringVersion: classNameInFull, ' ' , mAssoc key)]]]. > + ^ messageList sort! > - ^ messageList asSortedArray! > > Item was changed: > ----- Method: ChangeSet>>checkForUncommentedClasses (in category 'fileIn/Out') ----- > checkForUncommentedClasses > "Check to see if any classes involved in this change set do not have class comments. Open up a browser showing all such classes." > > | aList | > aList := self changedClasses > select: > [:aClass | aClass theNonMetaClass organization classComment isEmptyOrNil] > thenCollect: > [:aClass | aClass theNonMetaClass name]. > > aList size > 0 > ifFalse: > [^ self inform: 'All classes involved in this change set have class comments'] > ifTrue: > + [ToolSet openClassListBrowser: aList asSet sorted title: 'Classes in Change Set ', self name, ': classes that lack class > comments']! > - [ToolSet openClassListBrowser: aList asSet asSortedArray title: 'Classes in Change Set ', self name, ': classes that lack class > comments']! > > Item was changed: > ----- Method: ChangeSet>>fileOutOn: (in category 'fileIn/Out') ----- > fileOutOn: stream > "Write out all the changes the receiver knows about" > > | classList traits classes traitList list | > (self isEmpty and: [stream isKindOf: FileStream]) > ifTrue: [self inform: 'Warning: no changes to file out']. > > traits := self changedClasses reject: [:each | each isBehavior]. > classes := self changedClasses select: [:each | each isBehavior]. > traitList := self class traitsOrder: traits asOrderedCollection. > classList := self class superclassOrder: classes asOrderedCollection. > list := OrderedCollection new > addAll: traitList; > addAll: classList; > yourself. > > "First put out rename, max classDef and comment changes." > list do: [:aClass | self fileOutClassDefinition: aClass on: stream]. > > "Then put out all the method changes" > list do: [:aClass | self fileOutChangesFor: aClass on: stream]. > > "Finally put out removals, final class defs and reorganization if any" > list reverseDo: [:aClass | self fileOutPSFor: aClass on: stream]. > > + self classRemoves sort do: > - self classRemoves asSortedCollection do: > [:aClassName | stream nextChunkPut: 'Smalltalk removeClassNamed: #', aClassName; cr].! > > Item was changed: > ----- Method: InternalTranslator>>fileOutOn:keys:withBOM: (in category 'fileIn/fileOut') ----- > fileOutOn: aStream keys: keys withBOM: bomFlag > "self current fileOutOn: Transcript. Transcript endEntry" > self fileOutHeaderOn: aStream withBOM: bomFlag. > (keys > + ifNil: [generics keys sort]) > - ifNil: [generics keys asSortedCollection]) > do: [:key | self > nextChunkPut: (generics associationAt: key) > on: aStream]. > keys > ifNil: [self untranslated > do: [:each | self nextChunkPut: each -> '' on: aStream]]. > aStream nextPut: $!!; > cr! > > Item was changed: > ----- Method: MczInstaller>>install (in category 'installation') ----- > install > + > - | sources | > zip := ZipArchive new. > zip readFrom: stream. > self checkDependencies ifFalse: [^false]. > self recordVersionInfo. > + (zip membersMatching: 'snapshot/*') > + sort: [:a :b | a fileName < b fileName]; > + do: [:src | self installMember: src].! > - sources := (zip membersMatching: 'snapshot/*') > - asSortedCollection: [:a :b | a fileName < b fileName]. > - sources do: [:src | self installMember: src].! > > Item was changed: > ----- Method: Preferences class>>giveHelpWithPreferences (in category 'support') ----- > giveHelpWithPreferences > "Open up a workspace with explanatory info in it about Preferences" > > | aString | > aString := String streamContents: [:aStream | > aStream nextPutAll: > > 'Many aspects of the system are governed by the settings of various "Preferences". > > Click on any of brown tabs at the top of the panel to see all the preferences in that category. > Or type in to the box above the Search button, then hit Search, and all Preferences matching whatever you typed in will appear in the "search results" > category. A preference > is considered to > match your search if either its name matches the characters *or* if anything in the balloon help provided for the preferences matches the search text. > > To find out more about any particular Preference, hold the mouse over it for a moment and balloon help will appear. Also, a complete list of all the > Preferences, with > documentation for each, is > included below. > > Preferences whose names are in shown in bold in the Preferences Panel are designated as being allowed to vary from project to project; those whose name > are not in bold are > "global", which is to > say, they apply equally whatever project you are in. > > Click on the name of any preference to get a menu which allows you to *change* whether the preference should vary from project to project or should be > global, and also allows > you to browse all > the senders of the preference, and to discover all the categories under which the preference has been classified, and to be handed a button that you can > drop wherever you please > that will control > the preference. > > If you like all your current Preferences settings, you may wish to hit the "Save Current Settings as my Personal Preferences" button. Once you have > done that, you can at any > point in the future > hit "Restore my Personal Preferences" and all your saved settings will get restored immediately. > > Also, you can use "themes" to set multiple preferences all at once; click on the "change theme..." button in the Squeak flap or in the Preferences > panel, or seek out the themes > item in the > Appearance menu.' translated. > > aStream cr; cr; nextPutAll: '-----------------------------------------------------------------'; > cr; cr; nextPutAll: 'Alphabetical listing of all Preferences' translated; cr; cr. > + (Preferences allPreferences sort: [:a :b | a name < b name]) do: > - (Preferences allPreferences asSortedCollection: [:a :b | a name < b name]) do: > [:pref | | aHelpString | > aStream nextPutAll: pref name; cr. > aHelpString := pref helpString translated. > (aHelpString beginsWith: pref name) ifTrue: > [aHelpString := aHelpString copyFrom: (pref name size ) to: aHelpString size]. > aHelpString := (aHelpString copyReplaceAll: String cr with: ' ') copyWithout: Character tab. > aStream nextPutAll: aHelpString capitalized. > (aHelpString isEmpty or: [aHelpString last == $.]) ifFalse: [aStream nextPut: $.]. > aStream cr; cr]]. > > UIManager default edit: aString label: 'About Preferences' translated > > "Preferences giveHelpWithPreferences"! > > Item was changed: > ----- Method: Project class>>allNames (in category 'utilities') ----- > allNames > + > + ^(self allProjects collect: [:p | p name]) sort: [:n1 :n2 | n1 caseInsensitiveLessOrEqual: n2]! > - ^ (self allProjects collect: [:p | p name]) asSortedCollection: [:n1 :n2 | n1 asLowercase < n2 asLowercase]! > > Item was changed: > ----- Method: Project class>>allNamesAndProjects (in category 'utilities') ----- > allNamesAndProjects > + > + ^(self allProjects > + sorted: [ :p1 :p2 | p1 name caseInsensitiveLessOrEqual: p2 name ]) > + replace: [ :aProject | Array with: aProject name with: aProject ]! > - ^ (self allProjects asSortedCollection: [:p1 :p2 | p1 name asLowercase < p2 name asLowercase]) collect: > - [:aProject | Array with: aProject name with: aProject]! > > Item was changed: > ----- Method: Project class>>sweep: (in category 'squeaklet on server') ----- > sweep: aServerDirectory > | repository list parts ind entry projectName versions | > "On the server, move all but the three most recent versions of each Squeaklet to a folder called 'older'" > "Project sweep: ((ServerDirectory serverNamed: 'DaniOnJumbo') clone > directory: '/vol0/people/dani/Squeaklets/2.7')" > > "Ensure the 'older' directory" > (aServerDirectory includesKey: 'older') > ifFalse: [aServerDirectory createDirectory: 'older']. > repository := aServerDirectory clone directory: aServerDirectory directory, '/older'. > > "Collect each name, and decide on versions" > list := aServerDirectory fileNames. > list isString ifTrue: [^ self inform: 'server is unavailable' translated]. > + list sort. > - list := list asSortedCollection asOrderedCollection. > parts := list collect: [:en | Project parseProjectFileName: en]. > parts := parts select: [:en | en third = 'pr']. > ind := 1. > [entry := list at: ind. > projectName := entry first asLowercase. > versions := OrderedCollection new. versions add: entry. > [(ind := ind + 1) > list size > ifFalse: [(parts at: ind) first asLowercase = projectName > ifTrue: [versions add: (parts at: ind). true] > ifFalse: [false]] > ifTrue: [false]] whileTrue. > aServerDirectory moveYoungest: 3 in: versions to: repository. > ind > list size] whileFalse. > ! > > Item was added: > + ----- Method: PseudoClass>>classInstVarNames (in category 'accessing') ----- > + classInstVarNames > + > + self realClass ifNotNil: [ :realClass | ^realClass instVarNames ]. > + ^#()! > > Item was added: > + ----- Method: PseudoClass>>classVarNames (in category 'accessing') ----- > + classVarNames > + > + self realClass ifNotNil: [ :realClass | ^realClass classVarNames ]. > + ^#()! > > Item was changed: > ----- Method: SmalltalkImage>>presumedSentMessages (in category 'shrinking') ----- > presumedSentMessages | sent | > "Smalltalk presumedSentMessages" > > "The following should be preserved for doIts, etc" > sent := IdentitySet new. > #(compactSymbolTable rebuildAllProjects > browseAllSelect: lastRemoval > scrollBarValue: vScrollBarValue: scrollBarMenuButtonPressed: > withSelectionFrom: to: removeClassNamed: > dragon: hilberts: mandala: web test3 factorial tinyBenchmarks benchFib > newDepth: restoreAfter: zapAllMethods obsoleteClasses > removeAllUnSentMessages abandonSources removeUnreferencedKeys > reclaimDependents zapOrganization condenseChanges browseObsoleteReferences > subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: > methodsFor:stamp: methodsFor:stamp:prior: instanceVariableNames: > + unusedClasses) do: > - startTimerInterruptWatcher unusedClasses) do: > [:sel | sent add: sel]. > "The following may be sent by perform: in dispatchOnChar..." > Smalltalk at: #ParagraphEditor ifPresent: [:paragraphEditor | > (paragraphEditor classPool at: #CmdActions) asSet do: > [:sel | sent add: sel]. > (paragraphEditor classPool at: #ShiftCmdActions) asSet do: > [:sel | sent add: sel]]. > ^ sent! > > Item was changed: > ----- Method: SmalltalkImage>>removeAllUnSentMessages (in category 'shrinking') ----- > removeAllUnSentMessages > "Smalltalk removeAllUnSentMessages" > "[Smalltalk unusedClasses do: [:c | (Smalltalk at: c) removeFromSystem]. > Smalltalk removeAllUnSentMessages > 0] whileTrue." > "Remove all implementations of unsent messages." > | sels n | > sels := self systemNavigation allUnSentMessages. > "The following should be preserved for doIts, etc" > "needed even after #majorShrink is pulled" > + #(#compactSymbolTable #rebuildAllProjects #browseAllSelect: #lastRemoval #scrollBarValue: vScrollBarValue: #scrollBarMenuButtonPressed: > #withSelectionFrom: #to: > #removeClassNamed: > #dragon: #hilberts: #mandala: #web #test3 #factorial #tinyBenchmarks #benchFib #newDepth: #restoreAfter: #zapAllMethods #obsoleteClasses > #removeAllUnSentMessages #abandonSources > #removeUnreferencedKeys #reclaimDependents #zapOrganization #condenseChanges #browseObsoleteReferences > #subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: > #methodsFor:stamp: #methodsFor:stamp:prior: #instanceVariableNames: #unusedClasses ) > - #(#compactSymbolTable #rebuildAllProjects #browseAllSelect: #lastRemoval #scrollBarValue: vScrollBarValue: #scrollBarMenuButtonPressed: > #withSelectionFrom: #to: > #removeClassNamed: > #dragon: #hilberts: #mandala: #web #test3 #factorial #tinyBenchmarks #benchFib #newDepth: #restoreAfter: #zapAllMethods #obsoleteClasses > #removeAllUnSentMessages #abandonSources > #removeUnreferencedKeys #reclaimDependents #zapOrganization #condenseChanges #browseObsoleteReferences > #subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: > #methodsFor:stamp: #methodsFor:stamp:prior: #instanceVariableNames: #startTimerInterruptWatcher #unusedClasses ) > do: [:sel | sels > remove: sel > ifAbsent: []]. > "The following may be sent by perform: in dispatchOnChar..." > (Smalltalk at: #ParagraphEditor) ifNotNilDo: [:paragraphEditor | > (paragraphEditor classPool at: #CmdActions) asSet > do: [:sel | sels > remove: sel > ifAbsent: []]. > (paragraphEditor classPool at: #ShiftCmdActions) asSet > do: [:sel | sels > remove: sel > ifAbsent: []]]. > sels size = 0 > ifTrue: [^ 0]. > n := 0. > self systemNavigation > allBehaviorsDo: [:x | n := n + 1]. > 'Removing ' , sels size printString , ' messages . . .' > displayProgressFrom: 0 > to: n > during: [:bar | > n := 0. > self systemNavigation > allBehaviorsDo: [:class | > bar value: (n := n + 1). > sels > do: [:sel | class basicRemoveSelector: sel]]]. > ^ sels size! > > Item was changed: > ----- Method: SpaceTally>>compareTallyIn:to: (in category 'fileOut') ----- > compareTallyIn: beforeFileName to: afterFileName > "SpaceTally new compareTallyIn: 'tally' to: 'tally2'" > > | answer s beforeDict a afterDict allKeys | > beforeDict := Dictionary new. > s := FileDirectory default fileNamed: beforeFileName. > [s atEnd] whileFalse: [ > a := Array readFrom: s nextLine. > beforeDict at: a first put: a allButFirst. > ]. > s close. > afterDict := Dictionary new. > s := FileDirectory default fileNamed: afterFileName. > [s atEnd] whileFalse: [ > a := Array readFrom: s nextLine. > afterDict at: a first put: a allButFirst. > ]. > s close. > answer := WriteStream on: String new. > + allKeys := (Set new addAll: beforeDict keys; addAll: afterDict keys; yourself) sorted. > - allKeys := (Set new addAll: beforeDict keys; addAll: afterDict keys; yourself) asSortedCollection. > allKeys do: [ :each | > | before after diff | > before := beforeDict at: each ifAbsent: [#(0 0 0)]. > after := afterDict at: each ifAbsent: [#(0 0 0)]. > diff := before with: after collect: [ :vBefore :vAfter | vAfter - vBefore]. > diff = #(0 0 0) ifFalse: [ > answer nextPutAll: each,' ',diff printString; cr. > ]. > ]. > StringHolder new contents: answer contents; openLabel: 'space diffs'. > > > > ! > > Item was changed: > ----- Method: SystemNavigation>>allMethodsInCategory: (in category 'browse') ----- > allMethodsInCategory: category > | aCollection | > + aCollection := OrderedCollection new. > - aCollection := SortedCollection new. > Cursor wait showWhile: > [self allBehaviorsDo: > [:x | (x allMethodsInCategory: category) do: > [:sel | aCollection add: x name , ' ' , sel]]]. > + ^aCollection sort. > - ^aCollection. > ! > > Item was changed: > ----- Method: SystemNavigation>>allSelectorsWithAnyImplementorsIn: (in category 'query') ----- > allSelectorsWithAnyImplementorsIn: selectorList > "Answer the subset of the given list which represent method selectors > which have at least one implementor in the system." > | good | > + good := Set new. > - good := OrderedCollection new. > self allBehaviorsDo: [:class | selectorList > do: [:aSelector | (class includesSelector: aSelector) > ifTrue: [good add: aSelector]]]. > + ^good sorted > + > + " > - ^ good asSet asSortedArray" > SystemNavigation new selectorsWithAnyImplementorsIn: #( contents > contents: nuts) > "! > > Item was changed: > ----- Method: SystemNavigation>>browseAllImplementorsOf:localToPackage: (in category 'browse') ----- > browseAllImplementorsOf: selector localToPackage: packageNameOrInfo > "Create and schedule a message browser on each method in the given package > that implements the message whose selector is the argument, selector. For example, > SystemNavigation new browseAllImplementorsOf: #at:put: localToPackage: 'Collections'." > > self browseMessageList: (self > allImplementorsOf: selector > + localToPackage: packageNameOrInfo) > - localToPackage: packageNameOrInfo) asSortedCollection > name: 'Implementors of ' , selector, > ' local to package ', (self packageInfoFor: packageNameOrInfo) name! > > Item was changed: > ----- Method: SystemNavigation>>browseAllSelect:localTo: (in category 'browse') ----- > browseAllSelect: aBlock localTo: aClass > "Create and schedule a message browser on each method in or below the given class > that, when used as the block argument to aBlock gives a true result. For example, > SystemNavigation default browseAllSelect: [:m | m numLiterals > 10] localTo: Morph." > aClass ifNil: [^self inform: 'no class selected']. > ^self > + browseMessageList: (self allMethodsSelect: aBlock localTo: aClass) sorted > - browseMessageList: (self allMethodsSelect: aBlock localTo: aClass) asSortedCollection > name: 'selected messages local to ', aClass name! > > Item was changed: > ----- Method: SystemNavigation>>browseClassCommentsWithString: (in category 'browse') ----- > browseClassCommentsWithString: aString > "Smalltalk browseClassCommentsWithString: 'my instances' " > "Launch a message list browser on all class comments containing aString as a substring." > > | caseSensitive suffix list | > > suffix := (caseSensitive := Sensor shiftPressed) > ifTrue: [' (case-sensitive)'] > ifFalse: [' (use shift for case-sensitive)']. > list := Set new. > Cursor wait showWhile: [ > Smalltalk allClassesDo: [:class | > (class organization classComment asString findString: aString > startingAt: 1 caseSensitive: caseSensitive) > 0 ifTrue: [ > list add: ( > MethodReference > class: class > selector: #Comment > ) > ] > ] > ]. > ^ self > + browseMessageList: list sorted > - browseMessageList: list asSortedCollection > name: 'Class comments containing ' , aString printString , suffix > autoSelect: aString! > > Item was changed: > ----- Method: SystemNavigation>>browseClassesWithNamesContaining:caseSensitive: (in category 'browse') ----- > browseClassesWithNamesContaining: aString caseSensitive: caseSensitive > "Smalltalk browseClassesWithNamesContaining: 'eMorph' caseSensitive: true " > "Launch a class-list list browser on all classes whose names containg aString as a substring." > > | suffix aList | > suffix := caseSensitive > ifTrue: [' (case-sensitive)'] > ifFalse: [' (use shift for case-sensitive)']. > aList := OrderedCollection new. > Cursor wait > showWhile: [Smalltalk > allClassesDo: [:class | (class name includesSubstring: aString caseSensitive: caseSensitive) > ifTrue: [aList add: class name]]]. > aList size > 0 > + ifTrue: [ToolSet openClassListBrowser: aList asSet sorted title: 'Classes whose names contain ' , aString , suffix]! > - ifTrue: [ToolSet openClassListBrowser: aList asSet asSortedArray title: 'Classes whose names contain ' , aString , suffix]! > > Item was changed: > ----- Method: SystemNavigation>>showMenuOf:withFirstItem:ifChosenDo:withCaption: (in category 'ui') ----- > showMenuOf: selectorCollection withFirstItem: firstItem ifChosenDo: choiceBlock withCaption: aCaption > "Show a sorted menu of the given selectors, preceded by firstItem, and all abbreviated to 40 characters. Use aCaption as the menu title, if it is > not nil. Evaluate > choiceBlock if a > message is chosen." > > | index menuLabels sortedList | > + sortedList := selectorCollection sorted. > - sortedList := selectorCollection asSortedCollection. > menuLabels := Array streamContents: > [:strm | strm nextPut: (firstItem contractTo: 40). > sortedList do: [:sel | strm nextPut: (sel contractTo: 40)]]. > index := UIManager default chooseFrom: menuLabels lines: #(1). > index = 1 ifTrue: [choiceBlock value: firstItem]. > index > 1 ifTrue: [choiceBlock value: (sortedList at: index - 1)]! > > Item was changed: > ----- Method: SystemVersion>>highestUpdate (in category 'accessing') ----- > highestUpdate > + > + ^highestUpdate ifNil: [ > + highestUpdate := self updates isEmpty > + ifTrue: [ 0 ] > + ifFalse: [ self updates max ] ]! > - | sortedUpdates | > - highestUpdate ifNil: [ > - sortedUpdates := self updates asSortedCollection. > - highestUpdate := (sortedUpdates isEmpty > - ifTrue: [0] > - ifFalse: [sortedUpdates last])]. > - ^highestUpdate! > > Item was changed: > ----- Method: TranslatedReceiverFinder class>>browseNonLiteralReceivers (in category 'utilities') ----- > browseNonLiteralReceivers > "TranslatedReceiverFinder browseNonLiteralReceivers" > SystemNavigation default > + browseMessageList: self new nonLiteralReceivers > - browseMessageList: self new nonLiteralReceivers asSortedCollection > name: 'Non literal receivers of #translated' > autoSelect: 'translated'! > > > > > > -- > _,,,^..^,,,_ > best, Eliot > > > > > > > > -- > _,,,^..^,,,_ > best, Eliot > > > > > > > > -- > _,,,^..^,,,_ > best, Eliot > > |
On Mon, Mar 13, 2017 at 5:59 PM, Levente Uzonyi <[hidden email]> wrote: Did it help? Post 17033: 4575 run, 4304 passes, 108 expected failures, 30 failures, 133 errors, 0 unexpected passes Post 17033 plus inbox Files-ul.168 4549 run, 4405 passes, 105 expected failures, 27 failures, 12 errors, 0 unexpected passes Looks like you should move Files-ul.168 to trunk asap.
_,,,^..^,,,_ best, Eliot |
Done. It would be nice to know which change caused the problem.
Levente On Mon, 13 Mar 2017, Eliot Miranda wrote: > > > On Mon, Mar 13, 2017 at 5:59 PM, Levente Uzonyi <[hidden email]> wrote: > Did it help? > > > Post 17033: > 4575 run, 4304 passes, 108 expected failures, 30 failures, 133 errors, 0 unexpected passes > Post 17033 plus inbox Files-ul.168 > 4549 run, 4405 passes, 105 expected failures, 27 failures, 12 errors, 0 unexpected passes > > Looks like you should move Files-ul.168 to trunk asap. > > > Levente > > On Mon, 13 Mar 2017, Eliot Miranda wrote: > > > > On Mon, Mar 13, 2017 at 5:30 PM, Levente Uzonyi <[hidden email]> wrote: > I have updated Files-ul.168 to the Inbox with those methods reverted > along with a third one. > > > Thanks man! > > > > Levente > > On Tue, 14 Mar 2017, Levente Uzonyi wrote: > > Hi Eliot, > > all of those new errors seem to be related to files, so I presume they are related to the changes of the Files package: > > " > FileDirectory changes: > > - implemented #directoryContentsFor:do: in all subclasses of FileDirectory, where #directoryContentsFor: was implemented > - introduced #entriesDo: based on the method above > - rewrote methods sending #entries to use #entriesDo: instead > - simplified DirectoryEntryDirectory >> #asFileDirectory > - introduced #hasEntries > - #directoryEntryForName: signals InvalidDirectoryError as suggested by a comment from 2007 > - other minor optimizations > " > > I suspect that either the DirectoryEntryDirectory >> #asFileDirectory or FileDirectory >> #directoryEntryForName: is responsible for the errors, but it should be easy to > find the cause > by debugging any of those new errors. > > Levente > > On Mon, 13 Mar 2017, Eliot Miranda wrote: > > Hi Levente, > > On Mon, Mar 13, 2017 at 4:44 PM, Levente Uzonyi <[hidden email]> wrote: > Hi Eliot, > > I ran the tests 3 times and haven't seen any new test failures or errors. > However there are some other changes in the pack unrelated to SortedCollection, which I couldn't test on platforms other than Linux, but may behave differently > on > other platforms (e.g. changes in > Files). > > > First of all let me apologise; my stats were wrong. I see > 4527 run, 4383 passes, 106 expected failures, 26 failures, 12 errors, 0 unexpected passes > before whack-a-mole and > 4575 run, 4308 passes, 108 expected failures, 26 failures, 133 errors, 0 unexpected passes > after. And this is on Mac OS X using the 64-bit VM and image. Here's the pre-whack-a-mole full report > > > > Can you send me the list of failures and errors you see? > > > Pre whack-a-mole > failures: {AllocationTest>>#testOutOfMemorySignal . ClassVarScopeTest>>#testDefinedClassMethodInGrandchild . ClassVarScopeTest>>#testDefinedInstanceMethodInChild . > ClassVarScopeTest>>#testDefinedInstanceMethodInGrandchild . ClassVarScopeTest>>#testInheritedClassMethodInGrandchild . > ClassVarScopeTest>>#testInheritedInstanceMethodInGrandchild . > DateAndTimeLeapTest>>#testAsSeconds . DecompilerTests>>#testDecompilerInClassesENtoEZ . DecompilerTests>>#testDecompilerInClassesPAtoPM . > IslandVMTweaksTestCase>>#testForgivingPrims . > MorphicUIManagerTest>>#testShowAllBinParts . MultiByteFileStreamTest>>#testLineEndConversion . PackageDependencyTest>>#testEtoys . PackageDependencyTest>>#testMorphic > . > PackageDependencyTest>>#testSound . > PackageDependencyTest>>#testSystem . ReleaseTest>>#testClassesSystemCategory . ReleaseTest>>#testMethodsWithUnboundGlobals . ReleaseTest>>#testNoObsoleteClasses . > ReleaseTest>>#testUndeclared . > SocketTest>>#testSocketReuse . SocketTest>>#testUDP . UnixProcessAccessorTestCase>>#testRedirectStdOutTo . UnixProcessTestCase>>#testCatAFile . > UnixProcessTestCase>>#testRunCommand . > WebClientServerTest>>#testListenOnInterface} > > errors: {BitmapStreamTests>>#testMatrixTransform2x3WithImageSegment . BitmapStreamTests>>#testShortIntegerArrayWithImageSegment . > BitmapStreamTests>>#testShortPointArrayWithImageSegment . > BitmapStreamTests>>#testShortRunArrayWithImageSegment . BitmapStreamTests>>#testWordArrayWithImageSegment . DecompilerTests>>#testDecompilerInClassesSAtoSM . > LangEnvBugs>>#testIsFontAvailable . > LangEnvBugs>>#testIsFontAvailable . LocaleTest>>#testIsFontAvailable . SqueakSSLTest>>#testSSLSockets . SqueakSSLTest>>#testSocketAccept . > SqueakSSLTest>>#testSocketConnect} > > Post whack-a-mole > failures: {AllocationTest>>#testOutOfMemorySignal . ClassVarScopeTest>>#testDefinedInstanceMethodInChild . ClassVarScopeTest>>#testDefinedInstanceMethodInGrandchild . > ClassVarScopeTest>>#testInheritedClassMethodInGrandchild . ClassVarScopeTest>>#testInheritedInstanceMethodInGrandchild . DateAndTimeLeapTest>>#testAsSeconds . > DecompilerTests>>#testDecompilerInClassesENtoEZ . > DecompilerTests>>#testDecompilerInClassesPAtoPM . DecompilerTests>>#testDecompilerInClassesTAtoTM . MorphicUIManagerTest>>#testShowAllBinParts . > MultiByteFileStreamTest>>#testLineEndConversion . > PackageDependencyTest>>#testEtoys . PackageDependencyTest>>#testMorphic . PackageDependencyTest>>#testSUnitGUI . PackageDependencyTest>>#testSound . > PackageDependencyTest>>#testSystem . > PackageDependencyTest>>#testTools . ReleaseTest>>#testClassesSystemCategory . ReleaseTest>>#testMethodsWithUnboundGlobals . ReleaseTest>>#testNoObsoleteClasses . > ReleaseTest>>#testSuperSubclassReferences . > ReleaseTest>>#testUndeclared . SocketTest>>#testSocketReuse . SocketTest>>#testUDP . UnixProcessTestCase>>#testCatAFile . WebClientServerTest>>#testListenOnInterface} > > errors: {BitmapStreamTests>>#testMatrixTransform2x3WithImageSegment . BitmapStreamTests>>#testShortIntegerArrayWithImageSegment . > BitmapStreamTests>>#testShortPointArrayWithImageSegment . > BitmapStreamTests>>#testShortRunArrayWithImageSegment . BitmapStreamTests>>#testWordArrayWithImageSegment . BrowserTest>>#testFileOutMessageCategories . > DecompilerTests>>#testDecompilerInClassesSAtoSM . > FileDirectoryTest>>#testAttemptExistenceCheckWhenFile . FileDirectoryTest>>#testDirectoryExists . FileDirectoryTest>>#testDirectoryExistsWhenLikeNamedFileExists . > FileDirectoryTest>>#testNonExistentDirectory > . FileDirectoryTest>>#testOldFileOrNoneNamed . FileListTest>>#testServicesForFileEnding . FileStreamTest>>#testCachingNextChunkPut . > FileStreamTest>>#testCachingNextChunkPut . > FileStreamTest>>#testDetectFileDo . FileStreamTest>>#testFileTruncation . FileStreamTest>>#testFileTruncation . FileStreamTest>>#testNextChunkOutOfBounds . > FileStreamTest>>#testNextChunkOutOfBounds . > FileStreamTest>>#testNextLine . FileStreamTest>>#testPositionPastEndIsAtEnd . FileStreamTest>>#testReadIntoStartingAtCount . LangEnvBugs>>#testIsFontAvailable . > LangEnvBugs>>#testIsFontAvailable . > LocaleTest>>#testIsFontAvailable . MCDictionaryRepositoryTest>>#testAddAndLoad . MCDictionaryRepositoryTest>>#testIncludesName . > MCDictionaryRepositoryTest>>#testStoreAndLoad . > MCDirectoryRepositoryTest>>#testAddAndLoad . MCDirectoryRepositoryTest>>#testIncludesName . MCDirectoryRepositoryTest>>#testStoreAndLoad . > MCMczInstallerTest>>#testInstallFromFile . > MCMczInstallerTest>>#testInstallFromFile . MCMczInstallerTest>>#testInstallFromStream . MCWorkingCopyTest>>#testAncestorMerge . MCWorkingCopyTest>>#testBackport . > MCWorkingCopyTest>>#testDoubleRepeatedMerge . > MCWorkingCopyTest>>#testMergeIntoImageWithNoChanges . MCWorkingCopyTest>>#testMergeIntoUnmodifiedImage . MCWorkingCopyTest>>#testOptimizedLoad . > MCWorkingCopyTest>>#testRedundantMerge . > MCWorkingCopyTest>>#testRepeatedMerge . MCWorkingCopyTest>>#testSelectiveBackport . MCWorkingCopyTest>>#testSimpleMerge . MCWorkingCopyTest>>#testSnapshotAndLoad . > MultiByteFileStreamTest>>#testAsciiBackChunk > . MultiByteFileStreamTest>>#testBinaryUpTo . MultiByteFileStreamTest>>#testLineEnding . MultiByteFileStreamTest>>#testLineEndingChunk . > MultiByteFileStreamTest>>#testLineEndingWithWideStrings . > MultiByteFileStreamTest>>#testNextLine . MultiByteFileStreamTest>>#testNextPutAllStartingAt . MultiByteFileStreamTest>>#testNonAsciiBackChunk . > PNGReadWriterTest>>#test16Bit . > PNGReadWriterTest>>#test16BitDisplay . PNGReadWriterTest>>#test16BitReversed . PNGReadWriterTest>>#test1Bit . PNGReadWriterTest>>#test1BitDisplay . > PNGReadWriterTest>>#test1BitReversed . > PNGReadWriterTest>>#test2Bit . PNGReadWriterTest>>#test2BitDisplay . PNGReadWriterTest>>#test2BitReversed . PNGReadWriterTest>>#test32Bit . > PNGReadWriterTest>>#test32BitDisplay . > PNGReadWriterTest>>#test32BitReversed . PNGReadWriterTest>>#test4Bit . PNGReadWriterTest>>#test4BitDisplay . PNGReadWriterTest>>#test4BitReversed . > PNGReadWriterTest>>#test8Bit . > PNGReadWriterTest>>#test8BitDisplay . PNGReadWriterTest>>#test8BitReversed . PNGReadWriterTest>>#testAlphaCoding . PNGReadWriterTest>>#testBlack16 . > PNGReadWriterTest>>#testBlack32 . > PNGReadWriterTest>>#testBlack8 . PNGReadWriterTest>>#testBlue16 . PNGReadWriterTest>>#testBlue32 . PNGReadWriterTest>>#testBlue8 . PNGReadWriterTest>>#testGreen16 . > PNGReadWriterTest>>#testGreen32 . > PNGReadWriterTest>>#testGreen8 . PNGReadWriterTest>>#testRed16 . PNGReadWriterTest>>#testRed32 . PNGReadWriterTest>>#testRed8 . SqueakSSLTest>>#testSSLSockets . > SqueakSSLTest>>#testSocketAccept . > SqueakSSLTest>>#testSocketConnect . SystemChangeFileTest>>#testCategoryAdded . SystemChangeFileTest>>#testCategoryAdded . > SystemChangeFileTest>>#testCategoryAddedBefore . > SystemChangeFileTest>>#testCategoryAddedBefore . SystemChangeFileTest>>#testCategoryRemoved . SystemChangeFileTest>>#testCategoryRemoved . > SystemChangeFileTest>>#testCategoryRenamed . > SystemChangeFileTest>>#testCategoryRenamed . SystemChangeFileTest>>#testClassAdded . SystemChangeFileTest>>#testClassAdded . SystemChangeFileTest>>#testClassCommented > . > SystemChangeFileTest>>#testClassCommented . SystemChangeFileTest>>#testClassModified . SystemChangeFileTest>>#testClassModified . > SystemChangeFileTest>>#testClassRecategorized . > SystemChangeFileTest>>#testClassRecategorized . SystemChangeFileTest>>#testClassRemoved . SystemChangeFileTest>>#testClassRemoved . > SystemChangeFileTest>>#testClassRenamed > . > SystemChangeFileTest>>#testClassRenamed . SystemChangeFileTest>>#testExpressionDoIt . SystemChangeFileTest>>#testExpressionDoIt . > SystemChangeFileTest>>#testMethodAdded . > SystemChangeFileTest>>#testMethodAdded . SystemChangeFileTest>>#testMethodModified . SystemChangeFileTest>>#testMethodModified . > SystemChangeFileTest>>#testMethodRecategorized . > SystemChangeFileTest>>#testMethodRecategorized . SystemChangeFileTest>>#testMethodRemoved . SystemChangeFileTest>>#testMethodRemoved . > SystemChangeFileTest>>#testProtocolAdded . > SystemChangeFileTest>>#testProtocolAdded . SystemChangeFileTest>>#testProtocolDefault . SystemChangeFileTest>>#testProtocolDefault . > SystemChangeFileTest>>#testProtocolRemoved . > SystemChangeFileTest>>#testProtocolRemoved . SystemChangeFileTest>>#testProtocolRenamed . SystemChangeFileTest>>#testProtocolRenamed . > TraitFileOutTest>>#testCondenseChanges . > TraitFileOutTest>>#testFileOutCategory . TraitFileOutTest>>#testFileOutTrait . UnixProcessAccessorTestCase>>#testDupTo . > UnixProcessAccessorTestCase>>#testRedirectStdOutTo > . > UnixProcessTestCase>>#testCatFromFileToFiles . UnixProcessTestCase>>#testRunCommand} > > And all those duplications confuse me. And the sources seem to have been killed by running the tests. > > HTH > > > > > Levente > > On Mon, 13 Mar 2017, Eliot Miranda wrote: > > Hi Levente, > the SortedCollection whack-a-mole [ :-) :-) ] update appears to have caused a significant uptick in Squeak trunk test suite errors, from about 26 to > over > 80. Are you aware of > this? Are you addressing > the errors? > > I was a little bit inconvenienced by this because I was testing Slang changes to the VM and mistook these errors as evidence of bugs in my Slang changes. > That's life and I'm happy to > accept the situation. > But I would like to see the errors come back down to around 26 or less :-) > > Cheers > Eliot > > On Mon, Mar 13, 2017 at 8:00 AM, <[hidden email]> wrote: > Levente Uzonyi uploaded a new version of System to project The Trunk: > http://source.squeak.org/trunk/System-ul.932.mcz > > ==================== Summary ==================== > > Name: System-ul.932 > Author: ul > Time: 13 March 2017, 3:10:17.453603 pm > UUID: 7a305614-9a4b-47f8-a68f-79fcf6f90a80 > Ancestors: System-eem.931 > > - SortedCollection Whack-a-mole > - introduced #classVarNames and #classInstVarNames in PseudoClass, because they had senders > - removed #startTimerInterruptWatcher from messages to keep lists > > =============== Diff against System-eem.931 =============== > > Item was changed: > ----- Method: ChangeSet class>>traitsOrder: (in category 'fileIn/Out') ----- > traitsOrder: aCollection > "Answer an OrderedCollection. The traits > are ordered so they can be filed in." > > + ^aCollection sorted: [:t1 :t2 | > - | traits | > - traits := aCollection asSortedCollection: [:t1 :t2 | > (t1 isBaseTrait and: [t1 classTrait == t2]) or: [ > (t2 traitComposition allTraits includes: t1) or: [ > + (t1 traitComposition allTraits includes: t2) not]]]! > - (t1 traitComposition allTraits includes: t2) not]]]. > - ^traits asArray! > > Item was changed: > ----- Method: ChangeSet>>changedMessageList (in category 'method changes') ----- > changedMessageList > "Used by a message set browser to access the list view information." > > | messageList | > messageList := OrderedCollection new. > changeRecords associationsDo: [:clAssoc | | classNameInParts classNameInFull | > classNameInFull := clAssoc key asString. > classNameInParts := classNameInFull findTokens: ' '. > > (clAssoc value allChangeTypes includes: #comment) ifTrue: > [messageList add: > (MethodReference new > setClassSymbol: classNameInParts first asSymbol > classIsMeta: false > methodSymbol: #Comment > stringVersion: classNameInFull, ' Comment')]. > > clAssoc value methodChangeTypes associationsDo: [:mAssoc | > (#(remove addedThenRemoved) includes: mAssoc value) ifFalse: > [messageList add: > (MethodReference new > setClassSymbol: classNameInParts first asSymbol > classIsMeta: classNameInParts size > 1 > methodSymbol: mAssoc key > stringVersion: classNameInFull, ' ' , mAssoc key)]]]. > + ^ messageList sort! > - ^ messageList asSortedArray! > > Item was changed: > ----- Method: ChangeSet>>checkForUncommentedClasses (in category 'fileIn/Out') ----- > checkForUncommentedClasses > "Check to see if any classes involved in this change set do not have class comments. Open up a browser showing all such classes." > > | aList | > aList := self changedClasses > select: > [:aClass | aClass theNonMetaClass organization classComment isEmptyOrNil] > thenCollect: > [:aClass | aClass theNonMetaClass name]. > > aList size > 0 > ifFalse: > [^ self inform: 'All classes involved in this change set have class comments'] > ifTrue: > + [ToolSet openClassListBrowser: aList asSet sorted title: 'Classes in Change Set ', self name, ': classes that lack class > comments']! > - [ToolSet openClassListBrowser: aList asSet asSortedArray title: 'Classes in Change Set ', self name, ': classes that lack > class > comments']! > > Item was changed: > ----- Method: ChangeSet>>fileOutOn: (in category 'fileIn/Out') ----- > fileOutOn: stream > "Write out all the changes the receiver knows about" > > | classList traits classes traitList list | > (self isEmpty and: [stream isKindOf: FileStream]) > ifTrue: [self inform: 'Warning: no changes to file out']. > > traits := self changedClasses reject: [:each | each isBehavior]. > classes := self changedClasses select: [:each | each isBehavior]. > traitList := self class traitsOrder: traits asOrderedCollection. > classList := self class superclassOrder: classes asOrderedCollection. > list := OrderedCollection new > addAll: traitList; > addAll: classList; > yourself. > > "First put out rename, max classDef and comment changes." > list do: [:aClass | self fileOutClassDefinition: aClass on: stream]. > > "Then put out all the method changes" > list do: [:aClass | self fileOutChangesFor: aClass on: stream]. > > "Finally put out removals, final class defs and reorganization if any" > list reverseDo: [:aClass | self fileOutPSFor: aClass on: stream]. > > + self classRemoves sort do: > - self classRemoves asSortedCollection do: > [:aClassName | stream nextChunkPut: 'Smalltalk removeClassNamed: #', aClassName; cr].! > > Item was changed: > ----- Method: InternalTranslator>>fileOutOn:keys:withBOM: (in category 'fileIn/fileOut') ----- > fileOutOn: aStream keys: keys withBOM: bomFlag > "self current fileOutOn: Transcript. Transcript endEntry" > self fileOutHeaderOn: aStream withBOM: bomFlag. > (keys > + ifNil: [generics keys sort]) > - ifNil: [generics keys asSortedCollection]) > do: [:key | self > nextChunkPut: (generics associationAt: key) > on: aStream]. > keys > ifNil: [self untranslated > do: [:each | self nextChunkPut: each -> '' on: aStream]]. > aStream nextPut: $!!; > cr! > > Item was changed: > ----- Method: MczInstaller>>install (in category 'installation') ----- > install > + > - | sources | > zip := ZipArchive new. > zip readFrom: stream. > self checkDependencies ifFalse: [^false]. > self recordVersionInfo. > + (zip membersMatching: 'snapshot/*') > + sort: [:a :b | a fileName < b fileName]; > + do: [:src | self installMember: src].! > - sources := (zip membersMatching: 'snapshot/*') > - asSortedCollection: [:a :b | a fileName < b fileName]. > - sources do: [:src | self installMember: src].! > > Item was changed: > ----- Method: Preferences class>>giveHelpWithPreferences (in category 'support') ----- > giveHelpWithPreferences > "Open up a workspace with explanatory info in it about Preferences" > > | aString | > aString := String streamContents: [:aStream | > aStream nextPutAll: > > 'Many aspects of the system are governed by the settings of various "Preferences". > > Click on any of brown tabs at the top of the panel to see all the preferences in that category. > Or type in to the box above the Search button, then hit Search, and all Preferences matching whatever you typed in will appear in the "search > results" > category. A preference > is considered to > match your search if either its name matches the characters *or* if anything in the balloon help provided for the preferences matches the search > text. > > To find out more about any particular Preference, hold the mouse over it for a moment and balloon help will appear. Also, a complete list of all > the > Preferences, with > documentation for each, is > included below. > > Preferences whose names are in shown in bold in the Preferences Panel are designated as being allowed to vary from project to project; those whose > name > are not in bold are > "global", which is to > say, they apply equally whatever project you are in. > > Click on the name of any preference to get a menu which allows you to *change* whether the preference should vary from project to project or > should be > global, and also allows > you to browse all > the senders of the preference, and to discover all the categories under which the preference has been classified, and to be handed a button that you > can > drop wherever you please > that will control > the preference. > > If you like all your current Preferences settings, you may wish to hit the "Save Current Settings as my Personal Preferences" button. Once you > have > done that, you can at any > point in the future > hit "Restore my Personal Preferences" and all your saved settings will get restored immediately. > > Also, you can use "themes" to set multiple preferences all at once; click on the "change theme..." button in the Squeak flap or in the Preferences > panel, or seek out the themes > item in the > Appearance menu.' translated. > > aStream cr; cr; nextPutAll: '-----------------------------------------------------------------'; > cr; cr; nextPutAll: 'Alphabetical listing of all Preferences' translated; cr; cr. > + (Preferences allPreferences sort: [:a :b | a name < b name]) do: > - (Preferences allPreferences asSortedCollection: [:a :b | a name < b name]) do: > [:pref | | aHelpString | > aStream nextPutAll: pref name; cr. > aHelpString := pref helpString translated. > (aHelpString beginsWith: pref name) ifTrue: > [aHelpString := aHelpString copyFrom: (pref name size ) to: aHelpString size]. > aHelpString := (aHelpString copyReplaceAll: String cr with: ' ') copyWithout: Character tab. > aStream nextPutAll: aHelpString capitalized. > (aHelpString isEmpty or: [aHelpString last == $.]) ifFalse: [aStream nextPut: $.]. > aStream cr; cr]]. > > UIManager default edit: aString label: 'About Preferences' translated > > "Preferences giveHelpWithPreferences"! > > Item was changed: > ----- Method: Project class>>allNames (in category 'utilities') ----- > allNames > + > + ^(self allProjects collect: [:p | p name]) sort: [:n1 :n2 | n1 caseInsensitiveLessOrEqual: n2]! > - ^ (self allProjects collect: [:p | p name]) asSortedCollection: [:n1 :n2 | n1 asLowercase < n2 asLowercase]! > > Item was changed: > ----- Method: Project class>>allNamesAndProjects (in category 'utilities') ----- > allNamesAndProjects > + > + ^(self allProjects > + sorted: [ :p1 :p2 | p1 name caseInsensitiveLessOrEqual: p2 name ]) > + replace: [ :aProject | Array with: aProject name with: aProject ]! > - ^ (self allProjects asSortedCollection: [:p1 :p2 | p1 name asLowercase < p2 name asLowercase]) collect: > - [:aProject | Array with: aProject name with: aProject]! > > Item was changed: > ----- Method: Project class>>sweep: (in category 'squeaklet on server') ----- > sweep: aServerDirectory > | repository list parts ind entry projectName versions | > "On the server, move all but the three most recent versions of each Squeaklet to a folder called 'older'" > "Project sweep: ((ServerDirectory serverNamed: 'DaniOnJumbo') clone > directory: '/vol0/people/dani/Squeaklets/2.7')" > > "Ensure the 'older' directory" > (aServerDirectory includesKey: 'older') > ifFalse: [aServerDirectory createDirectory: 'older']. > repository := aServerDirectory clone directory: aServerDirectory directory, '/older'. > > "Collect each name, and decide on versions" > list := aServerDirectory fileNames. > list isString ifTrue: [^ self inform: 'server is unavailable' translated]. > + list sort. > - list := list asSortedCollection asOrderedCollection. > parts := list collect: [:en | Project parseProjectFileName: en]. > parts := parts select: [:en | en third = 'pr']. > ind := 1. > [entry := list at: ind. > projectName := entry first asLowercase. > versions := OrderedCollection new. versions add: entry. > [(ind := ind + 1) > list size > ifFalse: [(parts at: ind) first asLowercase = projectName > ifTrue: [versions add: (parts at: ind). true] > ifFalse: [false]] > ifTrue: [false]] whileTrue. > aServerDirectory moveYoungest: 3 in: versions to: repository. > ind > list size] whileFalse. > ! > > Item was added: > + ----- Method: PseudoClass>>classInstVarNames (in category 'accessing') ----- > + classInstVarNames > + > + self realClass ifNotNil: [ :realClass | ^realClass instVarNames ]. > + ^#()! > > Item was added: > + ----- Method: PseudoClass>>classVarNames (in category 'accessing') ----- > + classVarNames > + > + self realClass ifNotNil: [ :realClass | ^realClass classVarNames ]. > + ^#()! > > Item was changed: > ----- Method: SmalltalkImage>>presumedSentMessages (in category 'shrinking') ----- > presumedSentMessages | sent | > "Smalltalk presumedSentMessages" > > "The following should be preserved for doIts, etc" > sent := IdentitySet new. > #(compactSymbolTable rebuildAllProjects > browseAllSelect: lastRemoval > scrollBarValue: vScrollBarValue: scrollBarMenuButtonPressed: > withSelectionFrom: to: removeClassNamed: > dragon: hilberts: mandala: web test3 factorial tinyBenchmarks benchFib > newDepth: restoreAfter: zapAllMethods obsoleteClasses > removeAllUnSentMessages abandonSources removeUnreferencedKeys > reclaimDependents zapOrganization condenseChanges browseObsoleteReferences > subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: > methodsFor:stamp: methodsFor:stamp:prior: instanceVariableNames: > + unusedClasses) do: > - startTimerInterruptWatcher unusedClasses) do: > [:sel | sent add: sel]. > "The following may be sent by perform: in dispatchOnChar..." > Smalltalk at: #ParagraphEditor ifPresent: [:paragraphEditor | > (paragraphEditor classPool at: #CmdActions) asSet do: > [:sel | sent add: sel]. > (paragraphEditor classPool at: #ShiftCmdActions) asSet do: > [:sel | sent add: sel]]. > ^ sent! > > Item was changed: > ----- Method: SmalltalkImage>>removeAllUnSentMessages (in category 'shrinking') ----- > removeAllUnSentMessages > "Smalltalk removeAllUnSentMessages" > "[Smalltalk unusedClasses do: [:c | (Smalltalk at: c) removeFromSystem]. > Smalltalk removeAllUnSentMessages > 0] whileTrue." > "Remove all implementations of unsent messages." > | sels n | > sels := self systemNavigation allUnSentMessages. > "The following should be preserved for doIts, etc" > "needed even after #majorShrink is pulled" > + #(#compactSymbolTable #rebuildAllProjects #browseAllSelect: #lastRemoval #scrollBarValue: vScrollBarValue: #scrollBarMenuButtonPressed: > #withSelectionFrom: #to: > #removeClassNamed: > #dragon: #hilberts: #mandala: #web #test3 #factorial #tinyBenchmarks #benchFib #newDepth: #restoreAfter: #zapAllMethods #obsoleteClasses > #removeAllUnSentMessages #abandonSources > #removeUnreferencedKeys #reclaimDependents #zapOrganization #condenseChanges #browseObsoleteReferences > #subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: > #methodsFor:stamp: #methodsFor:stamp:prior: #instanceVariableNames: #unusedClasses ) > - #(#compactSymbolTable #rebuildAllProjects #browseAllSelect: #lastRemoval #scrollBarValue: vScrollBarValue: #scrollBarMenuButtonPressed: > #withSelectionFrom: #to: > #removeClassNamed: > #dragon: #hilberts: #mandala: #web #test3 #factorial #tinyBenchmarks #benchFib #newDepth: #restoreAfter: #zapAllMethods #obsoleteClasses > #removeAllUnSentMessages #abandonSources > #removeUnreferencedKeys #reclaimDependents #zapOrganization #condenseChanges #browseObsoleteReferences > #subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: > #methodsFor:stamp: #methodsFor:stamp:prior: #instanceVariableNames: #startTimerInterruptWatcher #unusedClasses ) > do: [:sel | sels > remove: sel > ifAbsent: []]. > "The following may be sent by perform: in dispatchOnChar..." > (Smalltalk at: #ParagraphEditor) ifNotNilDo: [:paragraphEditor | > (paragraphEditor classPool at: #CmdActions) asSet > do: [:sel | sels > remove: sel > ifAbsent: []]. > (paragraphEditor classPool at: #ShiftCmdActions) asSet > do: [:sel | sels > remove: sel > ifAbsent: []]]. > sels size = 0 > ifTrue: [^ 0]. > n := 0. > self systemNavigation > allBehaviorsDo: [:x | n := n + 1]. > 'Removing ' , sels size printString , ' messages . . .' > displayProgressFrom: 0 > to: n > during: [:bar | > n := 0. > self systemNavigation > allBehaviorsDo: [:class | > bar value: (n := n + 1). > sels > do: [:sel | class basicRemoveSelector: sel]]]. > ^ sels size! > > Item was changed: > ----- Method: SpaceTally>>compareTallyIn:to: (in category 'fileOut') ----- > compareTallyIn: beforeFileName to: afterFileName > "SpaceTally new compareTallyIn: 'tally' to: 'tally2'" > > | answer s beforeDict a afterDict allKeys | > beforeDict := Dictionary new. > s := FileDirectory default fileNamed: beforeFileName. > [s atEnd] whileFalse: [ > a := Array readFrom: s nextLine. > beforeDict at: a first put: a allButFirst. > ]. > s close. > afterDict := Dictionary new. > s := FileDirectory default fileNamed: afterFileName. > [s atEnd] whileFalse: [ > a := Array readFrom: s nextLine. > afterDict at: a first put: a allButFirst. > ]. > s close. > answer := WriteStream on: String new. > + allKeys := (Set new addAll: beforeDict keys; addAll: afterDict keys; yourself) sorted. > - allKeys := (Set new addAll: beforeDict keys; addAll: afterDict keys; yourself) asSortedCollection. > allKeys do: [ :each | > | before after diff | > before := beforeDict at: each ifAbsent: [#(0 0 0)]. > after := afterDict at: each ifAbsent: [#(0 0 0)]. > diff := before with: after collect: [ :vBefore :vAfter | vAfter - vBefore]. > diff = #(0 0 0) ifFalse: [ > answer nextPutAll: each,' ',diff printString; cr. > ]. > ]. > StringHolder new contents: answer contents; openLabel: 'space diffs'. > > > > ! > > Item was changed: > ----- Method: SystemNavigation>>allMethodsInCategory: (in category 'browse') ----- > allMethodsInCategory: category > | aCollection | > + aCollection := OrderedCollection new. > - aCollection := SortedCollection new. > Cursor wait showWhile: > [self allBehaviorsDo: > [:x | (x allMethodsInCategory: category) do: > [:sel | aCollection add: x name , ' ' , sel]]]. > + ^aCollection sort. > - ^aCollection. > ! > > Item was changed: > ----- Method: SystemNavigation>>allSelectorsWithAnyImplementorsIn: (in category 'query') ----- > allSelectorsWithAnyImplementorsIn: selectorList > "Answer the subset of the given list which represent method selectors > which have at least one implementor in the system." > | good | > + good := Set new. > - good := OrderedCollection new. > self allBehaviorsDo: [:class | selectorList > do: [:aSelector | (class includesSelector: aSelector) > ifTrue: [good add: aSelector]]]. > + ^good sorted > + > + " > > > > > > > > -- > _,,,^..^,,,_ > best, Eliot > > |
On Mon, Mar 13, 2017 at 6:01 PM, Levente Uzonyi <[hidden email]> wrote: Done. It would be nice to know which change caused the problem. Will try and take a look. Right now v v busy with callbacks, and Clément is here in SF for his annual visit for us to work on Sista. So time is of the essence :-)
_,,,^..^,,,_ best, Eliot |
Free forum by Nabble | Edit this page |