Marcel Taeumel uploaded a new version of MorphicTests to project The Trunk:
http://source.squeak.org/trunk/MorphicTests-mt.48.mcz
==================== Summary ====================
Name: MorphicTests-mt.48
Author: mt
Time: 15 November 2018, 12:16:20.966757 pm
UUID: 92a6d44a-1cd6-974a-be2f-1366099a180f
Ancestors: MorphicTests-mt.47
Adds a test for morph border initialization
=============== Diff against MorphicTests-mt.47 ===============
Item was added:
+ ----- Method: BorderedMorphTests>>test05Convenience (in category 'tests') -----
+ test05Convenience
+ "Check whether a the convenience messages #borderWidth: and #borderColor: work."
+
+ | sut |
+ sut := Morph new.
+ sut
+ borderWidth: 5;
+ borderColor: Color yellow.
+
+ self
+ assert: 5 equals: sut borderWidth;
+ assert: Color yellow equals: sut borderColor.
+
+ sut := Morph new.
+ sut
+ borderColor: Color yellow;
+ borderWidth: 5.
+
+ self
+ assert: Color yellow equals: sut borderColor;
+ assert: 5 equals: sut borderWidth.!
Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.1195.mcz
==================== Summary ====================
Name: Kernel-eem.1195
Author: eem
Time: 11 November 2018, 7:06:29.274108 pm
UUID: 4269620a-8eb7-4581-a65a-33bf2ea1aa10
Ancestors: Kernel-eem.1194
Eliminate a confusing shadowing in Context>>send:super:numArgs:
=============== Diff against Kernel-eem.1194 ===============
Item was changed:
----- Method: Context>>send:super:numArgs: (in category 'instruction decoding') -----
send: selector super: superFlag numArgs: numArgs
"Simulate the action of bytecodes that send a message with selector,
+ selector. The argument, superFlag, tells whether the receiver of the
+ message was specified with 'super' in the source method. The arguments
+ of the message are found in the top numArgs locations on the stack and
+ the receiver just below them."
- selector. The argument, superFlag, tells whether the receiver of the
- message was specified with 'super' in the source method. The arguments
- of the message are found in the top numArgs locations on the stack and
- the receiver just below them."
+ | thisReceiver arguments lookupClass |
- | receiver arguments lookupClass |
arguments := Array new: numArgs.
numArgs to: 1 by: -1 do: [ :i | arguments at: i put: self pop].
+ thisReceiver := self pop.
- receiver := self pop.
lookupClass := superFlag
ifTrue: [method methodClassAssociation value superclass]
+ ifFalse: [self objectClass: thisReceiver].
- ifFalse: [self objectClass: receiver].
QuickStep == self ifTrue:
[QuickStep := nil.
+ ^self quickSend: selector to: thisReceiver with: arguments lookupIn: lookupClass].
+ ^self send: selector to: thisReceiver with: arguments lookupIn: lookupClass!
- ^self quickSend: selector to: receiver with: arguments lookupIn: lookupClass].
- ^self send: selector to: receiver with: arguments lookupIn: lookupClass!
Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.1194.mcz
==================== Summary ====================
Name: Kernel-eem.1194
Author: eem
Time: 11 November 2018, 3:08:37.497128 pm
UUID: 6821fe5c-df17-4033-90f2-6163e6382b81
Ancestors: Kernel-eem.1193
ensureClassPool is /much/ nicer to use if it answers the class pool
=============== Diff against Kernel-eem.1193 ===============
Item was changed:
----- Method: Class>>ensureClassPool (in category 'class variables') -----
ensureClassPool
+ ^classPool ifNil: [classPool := Dictionary new].!
- classPool ifNil: [classPool := Dictionary new].!
Eliot Miranda uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-eem.1046.mcz
==================== Summary ====================
Name: System-eem.1046
Author: eem
Time: 9 November 2018, 8:46:04.222224 pm
UUID: 98d1a376-957e-40fd-ba0f-9e4893defad2
Ancestors: System-eem.1045
Add accessors for the sendMouseWheelEvents flag that instructs the VM to send mouse wheel events as mouse wheel events, not keynboard arrow keys. Needs an up-to-date VM (and on WIndows needs the VM code to be written).
Fix a typo
=============== Diff against System-eem.1045 ===============
Item was changed:
----- Method: SmalltalkImage>>processHasThreadIdInstVar: (in category 'system attributes') -----
processHasThreadIdInstVar: aBoolean
"The threaded VM needs to know if the 4th inst var of Process
is threadId which it uses to control process-to-thread binding.
This flag persists across snapshots, stored in the image header."
+ aBoolean ifTrue: [self assert: (Process instVarNames at: 4) = 'threadId'].
- aBoolean ifTrue: [self assert: (Process instVarNames at: 4) ='threadId'].
self vmParameterAt: 48 put: ((self vmParameterAt: 48) bitClear: 1) + (aBoolean ifTrue: [1] ifFalse: [0])!
Item was added:
+ ----- Method: SmalltalkImage>>sendMouseWheelEvents (in category 'system attributes') -----
+ sendMouseWheelEvents
+ "The Cog VM can be instructed to deliver mouse wheel events as mouse wheel events.
+ By default mouse wheel events are mapped to arrow events.
+ This flag persists across snapshots, stored in the image header."
+
+ ^(self vmParameterAt: 48) anyMask: 32!
Item was added:
+ ----- Method: SmalltalkImage>>sendMouseWheelEvents: (in category 'system attributes') -----
+ sendMouseWheelEvents: aBoolean
+ "The Cog VM can be instructed to deliver mouse wheel events as mouse wheel events.
+ By default mouse wheel events are mapped to arrow events.
+ This flag persists across snapshots, stored in the image header."
+
+ self vmParameterAt: 48 put: ((self vmParameterAt: 48) bitClear: 32) + (aBoolean ifTrue: [32] ifFalse: [0])!
Eliot Miranda uploaded a new version of SystemReporter to project The Trunk:
http://source.squeak.org/trunk/SystemReporter-eem.40.mcz
==================== Summary ====================
Name: SystemReporter-eem.40
Author: eem
Time: 9 November 2018, 8:42:06.189082 pm
UUID: 8ef90e26-589b-4798-af85-490c58c03946
Ancestors: SystemReporter-eem.39
Include description of the flags in VM parameter 65.
=============== Diff against SystemReporter-eem.39 ===============
Item was changed:
----- Method: SystemReporter>>reportVMParameters: (in category 'reporting') -----
reportVMParameters: aStream
| vmParameters isStack isCog isSpur |
self header: 'Virtual Machine Parameters' on: aStream.
vmParameters := Smalltalk vm getVMParameters.
isStack := (vmParameters at: 42 ifAbsent: [0]) ~= 0. "42 = number of stack pages available"
isCog := isStack and: [(vmParameters at: 46) ~= 0]. "46 is machine code zone size"
isSpur := isStack and: [(vmParameters at: 41) anyMask: 2r10000]. "41 is imageFormatVersion for the VM; bit 16 is the Spur bit"
(isSpur
ifFalse:
[#( 1 'size of old space'
2 'size of young+old space'
3 'size of memory'
4 'allocationCount'
5 'allocations between GCs'
6 'survivor count tenuring threshold')]
ifTrue:
[#( 1 'size of old space'
2 'used bytes in new space (used eden + used past space)'
3 'size of heap')]),
#( 7 'full GCs since startup'
8 'total milliseconds in full GCs since startup'),
(isSpur
ifFalse: [#( 9 'incremental GCs since startup'
10 'total milliseconds in incremental GCs since startup'
11 'tenures of surving objects since startup'),
{12 to: 19. 'specific to the translating VM'}]
ifTrue: [#( 9 'scavenging GCs since startup'
10 'total milliseconds in scavenging GCs since startup'
11 'tenures of surving objects since startup'),
{12 to: 15. 'reserved for future use'},
#( 16 'total microseconds in idle since startup'
17 'proportion of code zone available for use (Sista VMs only; read-write)'
18 'total milliseconds in full GC compaction since startup (a portion of parameter 8)'
19 'scavenge threshold; the effective size of eden')]),
#( 20 'utc microseconds at startup (if non-zero)'
21 'root/remembered table size (occupancy)'
22 'root/remembered table overflows since startup'
23 'bytes of extra memory to reserve for VM buffers, plugins, etc.'
24 'free memory threshold above which object memory will be shrunk'
25 'memory headroom when growing object memory'),
(isStack
ifFalse:
[#( 26 'interruptChecksEveryNms - force an ioProcessEvents every N milliseconds, in case the image is not calling getNextEvent often')]
ifTrue:
[#( 26 'heartbeat period (ms; see #58)')]),
(isSpur
ifFalse:
[#( 27 'number of times mark loop iterated for current IGC/FGC includes ALL marking'
28 'number of times sweep loop iterated for current IGC/FGC'
29 'number of times make forward loop iterated for current IGC/FGC'
30 'number of times compact move loop iterated for current IGC/FGC')]
ifTrue: [#()]),
#( 31 'number of grow memory requests'
32 'number of shrink memory requests'),
(isSpur
ifFalse:
[#( 33 'number of root table entries used for current IGC/FGC'
34 'number of allocations done before current IGC/FGC'
35 'number of survivor objects after current IGC/FGC'
36 'millisecond clock when current IGC/FGC completed'
37 'number of marked objects for Roots of the world, not including Root Table entries for current IGC/FGC'
38 'milliseconds taken by current IGC'
39 'Number of finalization signals for Weak Objects pending when current IGC/FGC completed')]
ifTrue:
[#( 33 'number of root table entries at last scavenge'
35 'number of survivor objects at last scavenge (if non-zero)'
36 'millisecond clock when current scavenge completed'
38 'milliseconds taken by current scavenge'
39 'Number of finalization signals for Weak Objects pending when current SGC/FGC completed')]),
#( 40 'VM word size - 4 or 8'),
(isStack
ifTrue:
[#(
41 'imageFormatVersion for the VM'
42 'number of stack pages available'
43 'desired number of stack pages (stored in image file header, max 65535)'
44 'size of eden, in bytes'
45 'desired size of eden, in bytes (stored in image file header)'
46 'machine code zone size, in bytes (0 in Stack VM)'
47 'desired machine code zone size (0 => default 1Mb)'
48 'various persistent image header flags. See getCogVMFlags in the VM source.'
49 'max size the image promises to grow the external semaphore table to'),
(isSpur
ifFalse:
[{ 50 to: 51. 'reserved for VM parameters that persist in the image (such as size of eden above)'.
52 to: 56. 'specific to Spur' }]
ifTrue:
[{ 50 to: 51. 'reserved for VM parameters that persist in the image (such as size of eden above)' },
#( 52 'root/remembered table capacity'
53 'number of old space segments'
54 'total free old space'
55 'ratio of growth and image size at or above which a GC will be performed post scavenge')]),
#( 56 'number of process switches since startup'
57 'number of ioProcessEvents calls since startup'
58 'number of forceInterruptCheck calls since startup'
59 'number of check event calls since startup'
60 'number of stack page overflows since startup'
61 'number of stack page divorces since startup'
62 'compiled code compactions since startup'),
(isCog
ifFalse:
[#()]
ifTrue:
[#( 63 'total milliseconds in compiled code compactions since startup'
64 'the number of methods that currently have jitted machine-code')]),
+ { 65. 'Cog feature flags\ bit 0: set if the VM supports MULTIPLE_BYTECODE_SETS.\ bit 1: set if the VM supports read-only objects.\ bit 2: set if the VM has an ITIMER_HEARTBEAT' withCRs.
+ 66. 'the byte size of a stack page'.},
- #( 65 'whether the VM supports MULTIPLE_BYTECODE_SETS or not.'
- 66 'the byte size of a stack page'),
(isSpur
ifFalse:
[{ 67 to: 69. 'reserved for more Cog-related info' }]
ifTrue:
[#( 67 'the maximum allowed size of old space (if zero there is no limit)'
68 'the average number of live stack pages when scanned by scavenge/gc/become'
69 'the maximum number of live stack pages when scanned by scavenge/gc/become')]),
#( 70 'the vmProxyMajorVersion (the interpreterProxy VM_MAJOR_VERSION)'
71 'the vmProxyMinorVersion (the interpreterProxy VM_MINOR_VERSION)')]
ifFalse:
[#()])
pairsDo: [:idx :desc | | value values |
aStream nextPut: $#.
idx isInteger
ifTrue:
[value := vmParameters at: idx.
aStream print: idx; tab: (idx < 10 ifTrue: [2] ifFalse: [1]); nextPutAll: ((value isInteger and: [idx ~= 41]) ifTrue: [value asStringWithCommas] ifFalse: [value printString])]
ifFalse:
[value := vmParameters at: idx first.
aStream print: idx first; next: 2 put: $.; print: idx last; tab.
values := idx collect: [:i| vmParameters at: i].
values asSet size = 1
ifTrue: [aStream print: value]
ifFalse: [values do: [:v| aStream print: v] separatedBy: [aStream nextPutAll: ', ']]].
aStream tab; nextPutAll: desc; cr]!
David T. Lewis uploaded a new version of MonticelloConfigurations to project The Trunk:
http://source.squeak.org/trunk/MonticelloConfigurations-dtl.154.mcz
==================== Summary ====================
Name: MonticelloConfigurations-dtl.154
Author: dtl
Time: 6 November 2018, 12:48:49.134459 pm
UUID: fa8994d2-a6ef-4d3a-a765-e74a3c1b659d
Ancestors: MonticelloConfigurations-eem.153
Allow an updater to read its update maps from a local directory repository. Previously only HTTP repositories were supported. A local repository may be useful for testing an update stream prior to publishing update maps to a public location.
=============== Diff against MonticelloConfigurations-eem.153 ===============
Item was changed:
----- Method: MCMcmUpdater class>>repository:updateMap: (in category 'instance creation') -----
+ repository: urlOrDirectoryPath updateMap: baseName
- repository: url updateMap: baseName
"Answer a new instance with empty last update map, not yet registered"
+ ^ self repository: urlOrDirectoryPath updateMap: baseName lastUpdateMap: Dictionary new!
- ^ self repository: url updateMap: baseName lastUpdateMap: Dictionary new!
Item was changed:
----- Method: MCMcmUpdater class>>repository:updateMap:lastUpdateMap: (in category 'instance creation') -----
+ repository: urlOrDirectoryPath updateMap: baseName lastUpdateMap: dictionary
- repository: url updateMap: baseName lastUpdateMap: dictionary
"Answer a new instance, not yet registered"
^ self new
+ repository: urlOrDirectoryPath;
- repository: url;
updateMapName: baseName;
lastUpdateMap: dictionary!
Item was changed:
----- Method: MCMcmUpdater class>>updateMapNamed:repository: (in category 'instance creation') -----
+ updateMapNamed: baseName repository: urlOrDirectoryPath
- updateMapNamed: baseName repository: url
"Answer an instance for the given repository URL with a base update name baseName,
Register a new instance if not present in the registry."
" | updater1 updater2 |
updater1 := self updateMapNamed: 'BAR' repository: 'FOO'.
updater2 := self updateMapNamed: 'BAZ' repository: 'FOO'.
updater1 unregister.
updater2 unregister.
Registry"
+ ^(self forRepository: urlOrDirectoryPath updateMap: baseName)
- ^(self forRepository: url updateMap: baseName)
ifNil: [ "register a new updater"
+ (self repository: urlOrDirectoryPath updateMap: baseName) register].
- (self repository: url updateMap: baseName) register].
!
Item was changed:
----- Method: MCMcmUpdater>>getRepositoryFromRepositoryGroup (in category 'private') -----
getRepositoryFromRepositoryGroup
"Answer the repository for this updater, ensuring that it is registered in the default MCRepositoryGroup"
^ MCRepositoryGroup default repositories
detect: [:r | r description = repository]
ifNone: [| r |
+ r := self repositoryAt: repository.
- r := MCHttpRepository
- location: repository
- user: ''
- password: ''.
MCRepositoryGroup default addRepository: r.
r]
!
Item was changed:
----- Method: MCMcmUpdater>>repository: (in category 'accessing') -----
+ repository: urlOrDirectoryPath
- repository: repositoryURLString
+ repository := urlOrDirectoryPath!
- repository := repositoryURLString!
Item was added:
+ ----- Method: MCMcmUpdater>>repositoryAt: (in category 'private') -----
+ repositoryAt: urlOrDirectoryPath
+ "Answer a repository, assuming that urlOrDirectoryPath represents
+ either an HTTP repository or a local directory repository. The common
+ case is an HTTP repository, but a local repository may be useful for
+ testing an update stream prior to posting the update maps to a public
+ location."
+
+ (FileDirectory default directoryExists: urlOrDirectoryPath)
+ ifTrue: [^ MCDirectoryRepository path: urlOrDirectoryPath]
+ ifFalse: [^ MCHttpRepository
+ location: repository
+ user: ''
+ password: '']
+ !
David T. Lewis uploaded a new version of Monticello to project The Trunk:
http://source.squeak.org/trunk/Monticello-dtl.685.mcz
==================== Summary ====================
Name: Monticello-dtl.685
Author: dtl
Time: 5 November 2018, 10:52:58.748205 pm
UUID: b31c1c5b-d61a-4810-8f97-5fdcaf062dc8
Ancestors: Monticello-eem.684
MCVersionInspector has an 'Adopt' button to allow the selected version to be added to the parent or parents of a working version. Provide a 'Reparent' button to allow a selected version to become the sole parent of a working version. Adjust defaultExtent to accomodate the additional button.
Motivated by the exercise of preparing to copy Chronology-Core versions from one repository into equivalent Chronology-Core.UTC versions in another repository (possibly trunk). In this scenario, it is helpful to be able to reparent a newly loaded Chronology-Core version from one repository to be the child of the last saved Chronology-Core.UTC version in another. The '.UTC' suffix in this case is intended to branch those versions from the trunk update stream, allowing later merge to trunk with branch history preserved.
=============== Diff against Monticello-eem.684 ===============
Item was changed:
----- Method: MCRepositoryInspector>>defaultExtent (in category 'morphic ui') -----
defaultExtent
+ ^600@300!
- ^450@300!
Item was added:
+ ----- Method: MCVersion>>reparent (in category 'actions') -----
+ reparent
+ "Let aNode be the sole parent of this version"
+ self workingCopy reparent: self!
Item was changed:
----- Method: MCVersionInspector>>buttonSpecs (in category 'morphic ui') -----
buttonSpecs
+ ^#(
+ ('Refresh' refresh 'refresh the version-list')
- ^ #(('Refresh' refresh 'refresh the version-list')
(Browse browse 'Browse this version' hasVersion)
+ (History history 'Browse the history of this version' hasVersion)
+ (Changes changes 'Browse the changes this version would make to the image' hasVersion)
+ (Load load 'Load this version into the image' hasVersion)
+ (Merge merge 'Merge this version into the image' hasVersion)
+ (Adopt adopt 'Adopt this version as an ancestor of your working copy' hasVersion)
+ (Reparent reparent 'Adopt this version as the sole ancestor of your working copy' hasVersion)
+ (Copy save 'Copy this version to another repository' hasVersion)
+ (Diff diff 'Create an equivalent version based on an earlier release' hasVersion)
+ )!
- (History history 'Browse the history of this version' hasVersion)
- (Changes changes 'Browse the changes this version would make to the
- image' hasVersion)
- (Load load 'Load this version into the image' hasVersion)
- (Merge merge 'Merge this version into the image' hasVersion)
- (Adopt adopt 'Adopt this version as an ancestor of your working copy'
- hasVersion)
- (Copy save 'Copy this version to another repository' hasVersion)
- (Diff diff 'Create an equivalent version based on an earlier release'
- hasVersion))!
Item was added:
+ ----- Method: MCVersionInspector>>reparent (in category 'accessing') -----
+ reparent
+ (self confirm:'Adopt ',self version info name, ' as the sole ancestor of your working copy?')
+ ifTrue: [self version reparent]!
Item was added:
+ ----- Method: MCWorkingAncestry>>reparent: (in category 'as yet unclassified') -----
+ reparent: aNode
+ "Let aNode be the sole parent of this version"
+ ancestors := Array with: aNode
+ !
Item was added:
+ ----- Method: MCWorkingCopy>>reparent: (in category 'operations') -----
+ reparent: aVersion
+ "Let aNode be the sole parent of this version"
+ ancestry reparent: aVersion info.
+ self changed.!