Nicolas Cellier uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernelnice.1054.mcz
==================== Summary ====================
Name: Kernelnice.1054
Author: nice
Time: 27 January 2017, 9:44:46.83377 pm
UUID: ef21d74dba8147c69bb792fb4140f494
Ancestors: Kerneleem.1053
Change 0.0 sign to answer 0 instead of 1.
Introduce a new message signBit for recognition of Float negativeZero.
Rationale:
1) The value of Float negativeZero cannot be distinguished from zero.
Thus (Float negativeZero = 0.0)
We can then expect sign to be symmetric for (positive) zero and negativeZero
2) ANSI Smalltalk requires above behavior.
This will reduce unnecessary difference with Gemstone for example.
About NaN:
Note that with old implementation, the sign of "positive" nan was 0, while it was 1 for "negative" nan.
New implementation will allways answer 0 for nans.
We may as well answer Float nan, but currently sign will allways answer an Integer (1,0 or 1). Until it is well specified by a standard, let's not bother.
Otherwise, we could answer a Float if receiver is a Float like:
sign
self > 0.0 ifTrue: [ ^1.0].
self < 0.0 ifTrue: [ ^1.0].
^self
=============== Diff against Kerneleem.1053 ===============
Item was changed:
 Method: Float>>arcTan: (in category 'mathematical functions') 
arcTan: denominator
+ "Answer the angle in radians, taking care of 4 quadrants.
+ Implementation note: use signBit and sign: in order to catch cases of negativeZero"
 "Answer the angle in radians.
 Optional. See Object documentation whatIsAPrimitive.
 Implementation note: use sign in order to catch cases of negativeZero"
+ self = 0.0
+ ifTrue:
+ [denominator signBit = 0 ifTrue: [ ^0.0 ].
+ ^Pi sign: self ].
+ denominator = 0.0 ifTrue: [ ^Halfpi sign: self ].
+ denominator > 0.0 ifTrue: [ ^(self / denominator) arcTan ].
+ ^(self / denominator) arcTan + (Pi sign: self)!
 self = 0.0 ifTrue: [
 denominator sign >= 0 ifTrue: [ ^0.0 ].
 self sign >= 0 ifTrue: [ ^Pi ].
 ^0.0  Pi ].
 denominator = 0.0 ifTrue: [
 self > 0.0 ifTrue: [ ^Halfpi ].
 ^0.0  Halfpi ].
 denominator > 0.0 ifTrue: [ ^(self / denominator) arcTan ].
 self > 0.0 ifTrue: [ ^(self / denominator) arcTan + Pi ].
 ^(self / denominator) arcTan  Pi!
Item was changed:
 Method: Float>>byteEncode:base: (in category 'printing') 
byteEncode: aStream base: base
"Handle sign, zero, and NaNs; all other values passed to absPrintOn:base:"
self isNaN ifTrue: [aStream print: 'NaN'. ^ self]. "check for NaN before sign"
self > 0.0
ifTrue: [self absByteEncode: aStream base: base]
ifFalse:
+ [self signBit = 1
 [self sign = 1
ifTrue: [aStream print: ''].
self = 0.0
ifTrue: [aStream print: '0.0'. ^ self]
ifFalse: [aStream writeNumber:self negated base: base]]!
Item was removed:
  Method: Float>>copySignTo: (in category 'mathematical functions') 
 copySignTo: aNumber
 "Return a number with same magnitude as aNumber and same sign as self.
 Implementation note: take care of Float negativeZero, which is considered as having a negative sign."

 (self > 0.0 or: [(self at: 1) = 0]) ifTrue: [^ aNumber abs].
 ^aNumber withNegativeSign!
Item was changed:
 Method: Float>>printOn:base: (in category 'printing') 
printOn: aStream base: base
"Print the receiver with the minimal number of digits that describes it unambiguously.
This way, every two different Float will have a different printed representation.
More over, every Float can be reconstructed from its printed representation with #readFrom:."
self isNaN ifTrue: [aStream nextPutAll: 'NaN'. ^ self]. "check for NaN before sign"
self > 0.0
ifTrue: [self absPrintExactlyOn: aStream base: base]
ifFalse:
+ [self signBit = 1
 [self sign = 1
ifTrue: [aStream nextPutAll: ''].
self = 0.0
ifTrue: [aStream nextPutAll: '0.0']
ifFalse: [self negated absPrintExactlyOn: aStream base: base]]!
Item was changed:
 Method: Float>>printOn:maxDecimalPlaces: (in category 'printing') 
printOn: aStream maxDecimalPlaces: placesDesired
"Refine super implementation in order to avoid any rounding error caused by rounded or roundTo:"
self isFinite ifFalse: [^self printOn: aStream].
self > 0.0
ifTrue: [self absPrintExactlyOn: aStream base: 10 decimalPlaces: placesDesired showTrailingFractionalZeros: false]
ifFalse:
+ [self signBit = 1
 [self sign = 1
ifTrue: [aStream nextPutAll: ''].
self = 0.0
ifTrue: [aStream nextPutAll: '0.0']
ifFalse: [self absPrintExactlyOn: aStream base: 10 decimalPlaces: placesDesired showTrailingFractionalZeros: false]]!
Item was changed:
 Method: Float>>printOn:showingDecimalPlaces: (in category 'printing') 
printOn: aStream showingDecimalPlaces: placesDesired
"Refine super implementation in order to avoid any rounding error caused by rounded or roundTo:"
self isFinite ifFalse: [^self printOn: aStream].
self > 0.0
ifTrue: [self absPrintExactlyOn: aStream base: 10 decimalPlaces: placesDesired showTrailingFractionalZeros: true]
ifFalse:
+ [self signBit = 1
 [self sign = 1
ifTrue: [aStream nextPutAll: ''].
self = 0.0
ifTrue:
[aStream nextPut: $0.
placesDesired > 0 ifTrue: [aStream nextPut: $.; next: placesDesired put: $0]]
ifFalse: [self absPrintExactlyOn: aStream base: 10 decimalPlaces: placesDesired showTrailingFractionalZeros: true]]!
Item was removed:
  Method: Float>>sign (in category 'mathematical functions') 
 sign
 "Answer 1 if the receiver is greater than 0, 1 if less than 0, else 0.
 Handle IEEE754 negativezero by reporting a sign of 1"

 self > 0.0 ifTrue: [ ^1 ].
 self < 0.0 ifTrue: [ ^1 ].
 ^0  ((self at: 1) bitShift: 31) "1 for negative zero, 0 otherwise"!
Item was removed:
  Method: Float>>sign: (in category 'mathematical functions') 
 sign: aNumber
 "Return a Number with the same sign as aNumber and same magnitude as self.
 Implementation is different from super to handle the special case of Float negativeZero."

 (self = 0.0 and: [aNumber sign negative]) ifTrue: [^Float negativeZero].
 ^aNumber copySignTo: self!
Item was added:
+  Method: Float>>signBit (in category 'mathematical functions') 
+ signBit
+ "Answer 1 if the receiver has sign bit set (including case of IEEE754 negativezero).
+ Answer 0 otherwise"
+
+ ^((self at: 1) bitShift: 31)!
Item was changed:
 Method: Float>>storeOn:base: (in category 'printing') 
storeOn: aStream base: base
"Print the Number exactly so it can be interpreted back unchanged"
self isFinite
+ ifTrue: [self signBit = 1 ifTrue: [aStream nextPutAll: ''].
 ifTrue: [self sign = 1 ifTrue: [aStream nextPutAll: ''].
base = 10 ifFalse: [aStream print: base; nextPut: $r].
self = 0.0
ifTrue: [aStream nextPutAll: '0.0']
ifFalse: [self abs absPrintExactlyOn: aStream base: base]]
ifFalse: [self isNaN
ifTrue: [aStream nextPutAll: 'Float nan']
ifFalse: [self > 0.0
ifTrue: [aStream nextPutAll: 'Float infinity']
ifFalse: [aStream nextPutAll: 'Float infinity negated']]]!
Item was removed:
  Method: Float>>withNegativeSign (in category 'converting') 
 withNegativeSign
 "Same as super, but handle the subtle case of Float negativeZero"

 self = 0.0 ifTrue: [^self class negativeZero].
 ^super withNegativeSign!
Item was added:
+  Method: LargeNegativeInteger>>signBit (in category 'testing') 
+ signBit
+ "Optimization."
+
+ ^1
+ !
Item was added:
+  Method: LargePositiveInteger>>signBit (in category 'testing') 
+ signBit
+ "Optimization."
+
+ ^0!
Item was changed:
 Method: Number>>copySignTo: (in category 'mathematical functions') 
copySignTo: aNumber
"Return a number with same magnitude as aNumber and same sign as self."
+ ^ self signBit = 0
 ^ self positive
ifTrue: [aNumber abs]
+ ifFalse: [aNumber abs negated].!
 ifFalse: [aNumber withNegativeSign].!
Item was added:
+  Method: Number>>signBit (in category 'mathematical functions') 
+ signBit
+ "Answer 1 if the receiver is negative, zero otherwise."
+
+ self < 0 ifTrue: [^1].
+ ^0!
Item was removed:
  Method: Number>>withNegativeSign (in category 'converting') 
 withNegativeSign
 "Answer a number with same magnitude than receiver and negative sign."
 ^self abs negated!
Chris Muller uploaded a new version of Files to project The Trunk:
http://source.squeak.org/trunk/Filescmm.166.mcz
==================== Summary ====================
Name: Filescmm.166
Author: cmm
Time: 24 January 2017, 3:47:38.072033 pm
UUID: 1591ae9617e34d5c9e96f5cb0a4e26e7
Ancestors: Filestfel.165
 FileDirectory>>#assureExistence must not silently fail to assure the existence.
=============== Diff against Filestfel.165 ===============
Item was changed:
 Method: FileDirectory>>assureExistence (in category 'file directory') 
assureExistence
"Make sure the current directory exists. If necessary, create all parts in between"
+ self exists ifFalse:
+ [ self containingDirectory
+ assureExistence ;
+ createDirectory: self localName.
+ self exists ifFalse: [ Error signal: self fullName, ' could not be created. Permissions?' ] ]!

 self exists ifFalse: [
 self containingDirectory
 assureExistence;
 createDirectory: self localName]!
Patrick Rein uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphicmdlh.1319.mcz
==================== Summary ====================
Name: Morphicmdlh.1319
Author: mdlh
Time: 23 January 2017, 5:10:01.812757 pm
UUID: 32f7ff9454f46641a42688ea9ca86a4e
Ancestors: Morphictfel.1318
corrected typo in description text of preference visualWrapBorder
=============== Diff against Morphictfel.1318 ===============
Item was changed:
 Method: PluggableTextMorph class>>visualWrapBorder (in category 'preferences') 
visualWrapBorder
<preference: 'Show wrap border in code panes.'
categoryList: #(editing visuals performance)
+ description: 'Show a visual border after a specific amount of characters. Makes sense for monospaced fonts.'
 description: 'Show a visual border after a specific amout of characters. Makes sense for monospaced fonts.'
type: #Boolean>
^ VisualWrapBorder ifNil: [false]!
Tim Felgentreff uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/Systemtfel.924.mcz
==================== Summary ====================
Name: Systemtfel.924
Author: tfel
Time: 23 January 2017, 9:31:46.987369 am
UUID: bd501831ebe7de418860123b9fafdbc3
Ancestors: Systemtfel.923
Update the hack around scaling in UserInterfaceTheme, so the label areas of Windows is resized correctly.
=============== Diff against Systemtfel.923 ===============
Item was changed:
 Method: UserInterfaceTheme>>fixFontsAndScaleAround: (in category 'private') 
fixFontsAndScaleAround: block
"Due to the current situation with fonts and the realestate manager, this is a small workaround to support theme switching with largely different font sizes."
lastScaleFactor ifNil: [lastScaleFactor := RealEstateAgent scaleFactor].
"Due to the current font situation, update TextConstants."
[ ignoreApply := true.
(self get: #standardSystemFont) ifNotNil: [:font  Preferences setSystemFontTo: font].
(self get: #standardFixedFont) ifNotNil: [:font  Preferences setFixedFontTo: font].
] ensure: [ignoreApply := false].
"Apply theme etc."
block value.
+

"Due to the current realestate manager situation, resize all windows. Works only for Morphic projects."
+ (RealEstateAgent scaleFactor  lastScaleFactor) abs > 0.1 ifTrue: [
 (RealEstateAgent scaleFactor  lastScaleFactor) abs > 0.5 ifTrue: [
Project current isMorphic ifTrue: [
 scale 
scale := RealEstateAgent scaleFactor / lastScaleFactor.
Project current world submorphs
select: [:ea  ea isSystemWindow]
+ thenDo: [:ea 
+ ea extent: (ea extent * scale).
+ ea layoutChanged.
+ ea setFramesForLabelArea]]].
+
 thenDo: [:ea  ea extent: (ea extent * scale)]]].

lastScaleFactor := nil.!