tim Rowledge uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-tpr.1049.mcz
==================== Summary ====================
Name: System-tpr.1049
Author: tpr
Time: 6 January 2019, 6:01:46.155189 pm
UUID: 8680d7e1-ee3a-47a3-95fb-eff9ce4505a3
Ancestors: System-tpr.1048
Actually comment FileServices. Goodness me, whatever next?
=============== Diff against System-tpr.1048 ===============
Item was changed:
Object subclass: #FileServices
instanceVariableNames: ''
classVariableNames: 'FileReaderRegistry'
poolDictionaries: ''
category: 'System-FileRegistry'!
+
+ !FileServices commentStamp: 'tpr 1/6/2019 17:58' prior: 0!
+ FileServices is a registry of classes that provide file reading services - defined in the current implementation as classes implementing (directly, not inheriting) #fileReaderServicesForFile:suffix: on their class side.
+ Registered classes can provide services to read a file (specified by file name and suffix) or directory (specified by path name).
+ Mostly these services are used in file browser scenarios but see also ExternalDropHandler class>>#lookupServiceBasedHandler: for a different pattern!
Item was changed:
----- Method: FileServices class>>isReaderNamedRegistered: (in category 'accessing') -----
isReaderNamedRegistered: aSymbol
+ "return if a given reader class has been registered. Note that this is on purpose that the argument is a symbol and not a class"
- "return if a given reader class has been registered. Note that this is on purpose that the argument is
- a symbol and not a class"
^ (self registeredFileReaderClasses collect: [:each | each name]) includes: aSymbol
!
Item was changed:
----- Method: FileServices class>>suffixOf: (in category 'accessing') -----
suffixOf: aName
+ "Answer the file extension of the given file, or an empty string should the file name be nil"
- "Answer the file extension of the given file"
^ aName
ifNil:
['']
ifNotNil:
[(FileDirectory extensionFor: aName) asLowercase]!
tim Rowledge uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-tpr.1048.mcz
==================== Summary ====================
Name: System-tpr.1048
Author: tpr
Time: 6 January 2019, 5:40:30.923283 pm
UUID: bac3c975-3c4b-441c-a8b2-3bb950f50631
Ancestors: System-pre.1047
Start to clean up theFileServices list of registered classes; CornerGripMorph really shouldn't be there.
By initialising the registry and rebuilding it we solve that small issue.
I'll assume that the initialize method will get run when loading this patch.
=============== Diff against System-pre.1047 ===============
Item was changed:
----- Method: FileServices class>>initialize (in category 'accessing') -----
initialize
"FileServices initialize"
+ FileReaderRegistry := nil.
Smalltalk allClassesDo:[:aClass|
(aClass class includesSelector: #fileReaderServicesForFile:suffix:)
ifTrue:[self registerFileReader: aClass]].!
tim Rowledge uploaded a new version of ToolBuilder-Morphic to project The Trunk:
http://source.squeak.org/trunk/ToolBuilder-Morphic-tpr.222.mcz
==================== Summary ====================
Name: ToolBuilder-Morphic-tpr.222
Author: tpr
Time: 6 January 2019, 4:17:48.50377 pm
UUID: fafb40ab-5f4c-4b83-ad8e-69ae5100c047
Ancestors: ToolBuilder-Morphic-pre.221
Add a 'new directory' button to DirectoryChooser and FileSaver dialogues.
The new directory will be a subdirectory of the current directory; the dialogue should update and select the new directory.
The position of the button is probably not ideal but can be moved later if we decide this is a facility to keep.
=============== Diff against ToolBuilder-Morphic-pre.221 ===============
Item was added:
+ ----- Method: DirectoryChooserDialog>>buildButtonsWith: (in category 'toolbuilder') -----
+ buildButtonsWith: builder
+ "add a 'new directory' button to the beginning of the row of buttons"
+ ^{ builder pluggableButtonSpec new
+ model: self;
+ label: 'New Directory' translated;
+ color: (self userInterfaceTheme get: #buttonColor for: #DialogWindow);
+ action: #newDirectoryName}, (super buildButtonsWith: builder)!
Item was added:
+ ----- Method: FileAbstractSelectionDialog>>newDirectoryName (in category 'directory tree') -----
+ newDirectoryName
+ "Create a new directory; will be a subdirectory of the current chosen directory.
+ If the user input is empty, or if the directory creation fails, fail this method.
+ Update the directory tree display afterwards and set the current directory to the newly created directory"
+ |userInput|
+ userInput := UIManager default request: 'New directory name' translated initialAnswer: 'newDir'.
+ userInput isEmptyOrNil ifTrue: [^nil].
+
+ [self directory createDirectory: userInput] ifError:[^nil]. "I hate using ifError: - it's so indiscriminate. Really ought to be a more precise error to catch properly"
+
+ self changed: #rootDirectoryList.
+ self directory: (self directory / userInput).
+ self changed: #selectedPath!
Item was added:
+ ----- Method: FileSaverDialog>>buildButtonsWith: (in category 'toolbuilder') -----
+ buildButtonsWith: builder
+ "add a 'new directory' button to the beginning of the row of buttons"
+ ^{ builder pluggableButtonSpec new
+ model: self;
+ label: 'New Directory' translated;
+ color: (self userInterfaceTheme get: #buttonColor for: #DialogWindow);
+ action: #newDirectoryName}, (super buildButtonsWith: builder)!
David T. Lewis uploaded a new version of MonticelloConfigurations to project The Trunk:
http://source.squeak.org/trunk/MonticelloConfigurations-dtl.155.mcz
==================== Summary ====================
Name: MonticelloConfigurations-dtl.155
Author: dtl
Time: 6 January 2019, 5:49:54.35982 pm
UUID: 2a3d8d3c-2f1e-48f0-818c-09372e553791
Ancestors: MonticelloConfigurations-dtl.154
When editing a MCConfiguration, add the name of the configuration to the browser window label. This helps keep track of the configuration map being edited, which may otherwise be confusing when updating configuration maps across more than one repository or update stream name.
=============== Diff against MonticelloConfigurations-dtl.154 ===============
Item was changed:
----- Method: MCConfiguration>>browse (in category 'actions') -----
browse
+ | browser |
+ browser := MCConfigurationBrowser new configuration: self.
+ name ifNotNil: [:nm | browser label: browser defaultLabel , ' ' , nm].
+ browser show!
- (MCConfigurationBrowser new configuration: self) show!
Item was changed:
----- Method: MCConfigurationBrowser>>defaultExtent (in category 'morphic ui') -----
defaultExtent
+ ^ 360@500!
- ^ 350@500!
David T. Lewis uploaded a new version of Chronology-Tests to project The Trunk:
http://source.squeak.org/trunk/Chronology-Tests-dtl.14.mcz
==================== Summary ====================
Name: Chronology-Tests-dtl.14
Author: dtl
Time: 6 January 2019, 11:42:13.906548 am
UUID: 5f14d4a9-46fc-4d54-926f-6b2a14e10bee
Ancestors: Chronology-Tests-dtl.13
The hash function for DateAndTime changed as of Chronology-Core-dtl.20. Update hash tests to match the new hash values.
=============== Diff against Chronology-Tests-dtl.13 ===============
Item was changed:
----- Method: DateAndTimeEpochTest>>testHash (in category 'tests') -----
testHash
self assert: aDateAndTime hash = DateAndTime new hash.
+ self assert: aDateAndTime hash = -2177452800000000
- self assert: aDateAndTime hash = 112557138
!
Item was changed:
----- Method: DateAndTimeLeapTest>>testHash (in category 'testing') -----
testHash
+ self assert: aDateAndTime hash = 1078054380000000
- self assert: aDateAndTime hash = 16256473
!
Eliot Miranda uploaded a new version of Regex-Core to project The Trunk:
http://source.squeak.org/trunk/Regex-Core-eem.54.mcz
==================== Summary ====================
Name: Regex-Core-eem.54
Author: eem
Time: 4 January 2019, 5:26:00.659106 pm
UUID: 42807ecb-3ae0-469e-8d0a-73e6d0197bda
Ancestors: Regex-Core-ul.53
Remove an unnecessary store into block argument
=============== Diff against Regex-Core-ul.53 ===============
Item was changed:
----- Method: RxsCharSet>>enumerableSetIgnoringCase: (in category 'privileged') -----
enumerableSetIgnoringCase: aBoolean
"Answer a collection of characters that make up the portion of me that can be enumerated, or nil if there are no such characters. The case check is only used to determine the type of set to be used. The returned set won't contain characters of both cases, because this way the senders of this method can create more efficient checks."
| highestCharacterCode set |
highestCharacterCode := elements inject: -1 into: [ :max :each |
+ (each maximumCharacterCodeIgnoringCase: aBoolean) max: max ].
- max := (each maximumCharacterCodeIgnoringCase: aBoolean) max: max ].
highestCharacterCode = -1 ifTrue: [ ^nil ].
set := highestCharacterCode <= 255
ifTrue: [ CharacterSet new ]
ifFalse: [ WideCharacterSet new ].
elements do: [ :each | each enumerateTo: set ].
^set!
Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.1210.mcz
==================== Summary ====================
Name: Kernel-eem.1210
Author: eem
Time: 4 January 2019, 4:38:17.37951 pm
UUID: d4fc9cd7-ac05-442d-bfe6-8b29ee965a98
Ancestors: Kernel-eem.1209
Have printInstructionsOn: (but not printInstructionsOn:do:, which is used by the explorer) print nested full blocks indented inline, for compatibility with the behavior for embedded blocks.
=============== Diff against Kernel-eem.1209 ===============
Item was changed:
InstructionClient subclass: #InstructionPrinter
+ instanceVariableNames: 'method scanner stream oldPC innerIndents indent printPC indentSpanOfFollowingJump fullBlockRecursionSelector'
- instanceVariableNames: 'method scanner stream oldPC innerIndents indent printPC indentSpanOfFollowingJump'
classVariableNames: ''
poolDictionaries: ''
category: 'Kernel-Methods'!
!InstructionPrinter commentStamp: 'md 4/8/2003 12:47' prior: 0!
My instances can print the object code of a CompiledMethod in symbolic format. They print into an instance variable, stream, and uses oldPC to determine how many bytes to print in the listing. The variable method is used to hold the method being printed.!
Item was changed:
----- Method: InstructionPrinter>>printInstructionsOn: (in category 'initialize-release') -----
printInstructionsOn: aStream
"Append to the stream, aStream, a description of each bytecode in the
instruction stream."
| end |
stream := aStream.
scanner := InstructionStream on: method.
end := method endPC.
oldPC := scanner pc.
innerIndents := Array new: end withAll: 0.
+ fullBlockRecursionSelector := #printInstructionsOn:.
[scanner pc <= end] whileTrue:
[scanner interpretNextInstructionFor: self]!
Item was changed:
----- Method: InstructionPrinter>>pushFullClosure:numCopied: (in category 'printing') -----
pushFullClosure: aCompiledBlock numCopied: numCopied
| literalIndex |
literalIndex := method literals identityIndexOf: aCompiledBlock.
literalIndex = 0
ifTrue:
[self print: 'closureNumCopied: ', numCopied printString
, ' numArgs: ', aCompiledBlock numArgs printString]
ifFalse:
[self print: 'pushFullClosure: (self literalAt: ', literalIndex printString,
') numCopied: ', numCopied printString,
+ ' "numArgs: ', aCompiledBlock numArgs printString, '"'].
+
+ fullBlockRecursionSelector ifNotNil:
+ [(self class on: aCompiledBlock)
+ indent: indent + 1;
+ perform: fullBlockRecursionSelector with: stream]!
- ' "numArgs: ', aCompiledBlock numArgs printString, '"']!