Nicolas Cellier uploaded a new version of Monticello to project The Trunk:
http://source.squeak.org/trunk/Monticello-mt.735.mcz
==================== Summary ====================
Name: Monticello-mt.735
Author: mt
Time: 5 January 2021, 1:23:12.398865 pm
UUID: b2a82046-9f24-4838-896b-6f669aa8a65d
Ancestors: Monticello-mt.734
Consider version infos being working copies "in disguise" :-)
=============== Diff against Monticello-mt.734 ===============
Item was changed:
----- Method: MCAncestry>>isWorkingAncestry (in category 'testing') -----
isWorkingAncestry
+
+ ^ self name = self nameForWorkingCopy!
- ^ false!
Item was added:
+ ----- Method: MCAncestry>>nameForWorkingCopy (in category 'ancestry') -----
+ nameForWorkingCopy
+
+ ^ '<working copy>'!
Item was changed:
----- Method: MCVersionInfo>>name (in category 'accessing') -----
name
+ ^ name ifNil: [self nameForWorkingCopy]!
- ^ name ifNil: ['<working copy>']!
Item was changed:
----- Method: MCWorkingAncestry>>name (in category 'testing') -----
name
+ ^ self nameForWorkingCopy!
- ^ '<working copy>'!
Eliot Miranda uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-ct.1021.mcz
==================== Summary ====================
Name: Tools-ct.1021
Author: ct
Time: 3 January 2021, 8:44:07.705149 pm
UUID: de36bf14-60b2-d745-9ade-df88c56b645c
Ancestors: Tools-mt.1019
Hotfix for fatal error in MVC projects when switching from an explorer to an inspector.
Regression since Tools-mt.998 (elimination of 'Active' variables): [Project current world] now consistently answers a ControlManager instance in an MVC project rather than nil. Unfortunately, ControlManager does not implement the stepping protocol like Morphic does ...
For now, let ObjectExplorer >> #world only answer actually steppable, i.e. morphic worlds, so stepping is disabled safely in MVC. Note that, however, at a later point we might want to talk about stepping support for MVC again ... maybe? The Process Browser already supports it. :-)
=============== Diff against Tools-mt.1019 ===============
Item was changed:
----- Method: ObjectExplorer>>release (in category 'monitoring') -----
release
+ self world ifNotNil: [ :world | world stopStepping: self selector: #step ].
- self world ifNotNil: [ self world stopStepping: self selector: #step ].
super release.!
Item was changed:
----- Method: ObjectExplorer>>stopMonitoring (in category 'monitoring') -----
stopMonitoring
monitorList := nil.
+ self world ifNotNil: [ :world | world stopStepping: self selector: #step].!
- self world stopStepping: self selector: #step!
Item was changed:
----- Method: ObjectExplorer>>world (in category 'monitoring') -----
world
+ | project |
+ project := Project current.
+ project isMorphic ifFalse: [^ nil].
+ ^ project world!
- ^ Project current world!
Eliot Miranda uploaded a new version of KernelTests to project The Trunk:
http://source.squeak.org/trunk/KernelTests-eem.392.mcz
==================== Summary ====================
Name: KernelTests-eem.392
Author: eem
Time: 1 January 2021, 12:17:42.043127 pm
UUID: c803a1d3-a439-4bac-8fc6-de85912285d9
Ancestors: KernelTests-eem.391
Add a FloatTest to compare all literal float contants in methods with those from a fresh compile, failing if any differ. Add a utility method to answer teh set of methods that cause the test to fail (FloatTest>>methodsMaybeContainingBrokenCompiledConstants).
=============== Diff against KernelTests-eem.391 ===============
Item was added:
+ ----- Method: FloatTest>>floatLiteralsIn: (in category 'private') -----
+ floatLiteralsIn: method
+ | floatLiterals |
+ floatLiterals := OrderedCollection new.
+ method allLiteralsDo:
+ [:lit| lit isFloat ifTrue: [floatLiterals addLast: lit]].
+ ^floatLiterals!
Item was added:
+ ----- Method: FloatTest>>methodContainsFloatLiteral: (in category 'private') -----
+ methodContainsFloatLiteral: method
+ method isQuick ifFalse:
+ [method allLiteralsDo:
+ [:lit| lit isFloat ifTrue: [^true]]].
+ ^false!
Item was added:
+ ----- Method: FloatTest>>methodsMaybeContainingBrokenCompiledConstants (in category 'private') -----
+ methodsMaybeContainingBrokenCompiledConstants
+ "Answer a set of all methods in the system which contain float constants that differ from those obtaiuned by
+ recompiling. These may indicate an old compiler issue, or indeed an issue with the current compiler. This is a
+ variant of testCompiledConstants used for collecting the set of methods rather than testing that none exist."
+ | identifiedPatients |
+ identifiedPatients := IdentitySet new.
+ CurrentReadOnlySourceFiles cacheDuring:
+ [self systemNavigation allSelectorsAndMethodsDo:
+ [:class :selector :method|
+ (self methodContainsFloatLiteral: method) ifTrue:
+ [| newMethodAndNode newLiterals oldLiterals |
+ newMethodAndNode := class compile: method getSource asString notifying: nil trailer: CompiledMethodTrailer empty ifFail: nil.
+ newLiterals := self floatLiteralsIn: newMethodAndNode method.
+ oldLiterals := self floatLiteralsIn: method.
+ "Convenience doit for recompiling broken methods:..."
+ "class recompile: selector"
+ newLiterals size = oldLiterals size
+ ifFalse: [identifiedPatients add: method]
+ ifTrue:
+ [newLiterals with: oldLiterals do:
+ [:new :old|
+ (new asIEEE64BitWord = old asIEEE64BitWord
+ or: [new isNaN and: old isNaN]) ifFalse:
+ [identifiedPatients add: method]]]]]].
+ ^identifiedPatients!
Item was added:
+ ----- Method: FloatTest>>testCompiledConstants (in category 'tests') -----
+ testCompiledConstants
+ "Test that any methods containing a floating point literal have been correctly compiled."
+ CurrentReadOnlySourceFiles cacheDuring:
+ [self systemNavigation allSelectorsAndMethodsDo:
+ [:class :selector :method|
+ (self methodContainsFloatLiteral: method) ifTrue:
+ [| newMethodAndNode newLiterals oldLiterals |
+ newMethodAndNode := class compile: method getSource asString notifying: nil trailer: CompiledMethodTrailer empty ifFail: nil.
+ newLiterals := self floatLiteralsIn: newMethodAndNode method.
+ oldLiterals := self floatLiteralsIn: method.
+ "Convenience doit for recompiling broken methods:..."
+ "class recompile: selector"
+ self assert: newLiterals size = oldLiterals size.
+ newLiterals with: oldLiterals do:
+ [:new :old|
+ self assert: (new asIEEE64BitWord = old asIEEE64BitWord
+ or: [new isNaN and: old isNaN])]]]]!