Tobias Pape uploaded a new version of WebClient-Core to project The Trunk:
http://source.squeak.org/trunk/WebClient-Core-topa.118.mcz
==================== Summary ====================
Name: WebClient-Core-topa.118
Author: topa
Time: 29 August 2019, 7:32:57.767498 pm
UUID: 4a038521-5fb9-4b3f-8a46-b66d41afd028
Ancestors: WebClient-Core-pre.117
Fix ssl hostname pass-through in Proxy settings
(see https://github.com/squeak-smalltalk/squeakssl/issues/5)
=============== Diff against WebClient-Core-pre.117 ===============
Item was changed:
----- Method: WebClient>>sslConnect (in category 'initialize') -----
sslConnect
"Do the SSL handshake"
"Connect the client to a web server"
| sqSSL |
proxyServer ifNotNil:[ | resp |
"If we have a proxy server, do the proxy connect"
resp := self proxyConnect.
resp isSuccess ifFalse:[^resp].
].
sqSSL := Smalltalk at: #SqueakSSL ifAbsent:[self error: 'SqueakSSL is missing'].
"Convert the stream to a secure stream"
stream := sqSSL secureSocketStream on: stream socket.
stream timeout: timeout.
+ self sslConnect: stream to: self serverName.
- self sslConnect: stream to: lastServer.
"And cert verification"
self canVerify
ifTrue: [stream verifyCert: self serverName].
^ nil"indicating success"
!
Levente Uzonyi uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-ul.1263.mcz
==================== Summary ====================
Name: Kernel-ul.1263
Author: ul
Time: 29 August 2019, 2:23:08.696311 pm
UUID: 06ff84ab-3ba9-40f8-90f7-9fcdcca39692
Ancestors: Kernel-nice.1262
- restore Object >> #perform:with:with:with:with:with: , which was accidentally removed by Kernel-nice.1261
=============== Diff against Kernel-nice.1262 ===============
Item was added:
+ ----- Method: Object>>perform:with:with:with:with:with: (in category 'message handling') -----
+ perform: aSymbol with: firstObject with: secondObject with: thirdObject with: fourthObject with: fifthObject
+ "Send the selector, aSymbol, to the receiver with the given arguments.
+ Fail if the number of arguments expected by the selector is not four.
+ Primitive. Optional. See Object documentation whatIsAPrimitive."
+
+ <primitive: 83>
+ ^ self perform: aSymbol withArguments: { firstObject. secondObject. thirdObject. fourthObject. fifthObject }!
Nicolas Cellier uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-nice.1262.mcz
==================== Summary ====================
Name: Kernel-nice.1262
Author: nice
Time: 29 August 2019, 12:28:31.665288 pm
UUID: 3e167d35-e96e-7649-8324-28d9cb255a65
Ancestors: Kernel-nice.1261
Accelerate LargeInteger asFloat in 64bits images.
=============== Diff against Kernel-nice.1261 ===============
Item was added:
+ ----- Method: Integer>>digitsAsFloat (in category 'private') -----
+ digitsAsFloat
+ "private - naive conversion method.
+ This method should be used if and only if
+ Float precision + 8 >= self highBit.
+ This way, all floating point operations will be exact, but eventually the
+ last one, giving a guaranty that result will be the nearest Float."
+ | result n |
+ result := (self digitAt: (n := self digitLength)) asFloat.
+ [(n := n - 1) > 0]
+ whileTrue: [result := 256.0 * result + (self digitAt: n) asFloat].
+ ^ result!
Item was changed:
----- Method: LargePositiveInteger>>asFloat (in category 'converting') -----
asFloat
"Answer a Float that best approximates the value of the receiver.
This algorithm is optimized to process only the significant digits of a LargeInteger.
And it does honour IEEE 754 round to nearest even mode in case of excess precision (see details below)."
"How numbers are rounded in IEEE 754 default rounding mode:
A shift is applied so that the highest 53 bits are placed before the floating point to form a mantissa.
The trailing bits form the fraction part placed after the floating point.
This fractional number must be rounded to the nearest integer.
If fraction part is 2r0.1, exactly between two consecutive integers, there is a tie.
The nearest even integer is chosen in this case.
Examples (First 52bits of mantissa are omitted for brevity):
2r0.00001 is rounded downward to 2r0
2r1.00001 is rounded downward to 2r1
2r0.1 is a tie and rounded to 2r0 (nearest even)
2r1.1 is a tie and rounded to 2r10 (nearest even)
2r0.10001 is rounded upward to 2r1
2r1.10001 is rounded upward to 2r10
Thus, if the next bit after floating point is 0, the mantissa is left unchanged.
If next bit after floating point is 1, an odd mantissa is always rounded upper.
An even mantissa is rounded upper only if the fraction part is not a tie."
"Algorihm details:
The floating point hardware can perform the rounding correctly with several excess bits as long as there is a single inexact operation.
- This can be obtained by splitting the mantissa plus excess bits in two part with less bits than Float precision.
Note 1: the inexact flag in floating point hardware must not be trusted because in some cases the operations would be exact but would not take into account some bits that were truncated before the Floating point operations.
Note 2: the floating point hardware is presumed configured in default rounding mode."
+ | mantissa shift excess |
- | mantissa shift excess result n |
"Check how many bits excess the maximum precision of a Float mantissa."
excess := self highBitOfMagnitude - Float precision.
excess > 7
ifTrue:
["Remove the excess bits but seven."
mantissa := self bitShiftMagnitude: 7 - excess.
shift := excess - 7.
"An even mantissa with a single excess bit immediately following would be truncated.
But this would not be correct if above shift has truncated some extra bits.
Check this case, and round excess bits upper manually."
((mantissa digitAt: 1) = 2r01000000 and: [self anyBitOfMagnitudeFrom: 1 to: shift])
ifTrue: [mantissa := mantissa + 1]]
ifFalse:
[mantissa := self.
shift := 0].
+ "We can use naive digit by digit conversion because there will be a single inexact round off at last iteration.
+ But the nice thing is that Float precision + 7 excess bits = 60 which fit in a SmallInteger in Spur64.
+ So the best to do is to delegate this final operation"
+ ^mantissa digitsAsFloat timesTwoPower: shift.!
- "There will be a single inexact round off at last iteration"
- result := (mantissa digitAt: (n := mantissa digitLength)) asFloat.
- [(n := n - 1) > 0] whileTrue: [
- result := 256.0 * result + (mantissa digitAt: n) asFloat].
- ^result timesTwoPower: shift.!
Item was added:
+ ----- Method: SmallInteger>>digitsAsFloat (in category 'private') -----
+ digitsAsFloat
+ "private - let the primitive take care to answer the nearest float"
+ <primitive: 40>
+ ^super digitsAsFloat!
Nicolas Cellier uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-nice.1261.mcz
==================== Summary ====================
Name: Kernel-nice.1261
Author: nice
Time: 28 August 2019, 11:00:52.985296 pm
UUID: b8758656-d1f0-49cd-976c-cbd7d772b1f3
Ancestors: Kernel-nice.1260
Oups, I forgot to fix Float negativeInfinity < 0 when arithmetic primitives are configured to refuse to convert a SmallInteger asFloat...
=============== Diff against Kernel-nice.1260 ===============
Item was changed:
----- Method: Number>>adaptToFloat:andCompare: (in category 'converting') -----
adaptToFloat: rcvr andCompare: selector
"If I am involved in comparison with a Float, convert rcvr to a
Fraction. This way, no bit is lost and comparison is exact."
rcvr isFinite
ifFalse: [
selector == #= ifTrue: [^false].
selector == #~= ifTrue: [^true].
rcvr isNaN ifTrue: [^ false].
(selector = #< or: [selector = #'<='])
+ ifTrue: [^ rcvr < 0.0].
- ifTrue: [^ rcvr positive not].
(selector = #> or: [selector = #'>='])
+ ifTrue: [^ rcvr > 0.0].
- ifTrue: [^ rcvr >= 0.0].
^self error: 'unknow comparison selector'].
"Try to avoid asTrueFraction because it can cost"
self isAnExactFloat ifTrue: [^rcvr perform: selector with: self asExactFloat].
selector == #= ifTrue: [^false].
selector == #~= ifTrue: [^true].
^ rcvr asTrueFraction perform: selector with: self!
Item was removed:
- ----- Method: Object>>perform:with:with:with:with:with: (in category 'message handling') -----
- perform: aSymbol with: firstObject with: secondObject with: thirdObject with: fourthObject with: fifthObject
- "Send the selector, aSymbol, to the receiver with the given arguments.
- Fail if the number of arguments expected by the selector is not four.
- Primitive. Optional. See Object documentation whatIsAPrimitive."
-
- <primitive: 83>
- ^ self perform: aSymbol withArguments: { firstObject. secondObject. thirdObject. fourthObject. fifthObject }!
Nicolas Cellier uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-nice.1260.mcz
==================== Summary ====================
Name: Kernel-nice.1260
Author: nice
Time: 28 August 2019, 6:50:57.499373 pm
UUID: f05b8d6f-4211-c84b-89b5-fec01139f4f8
Ancestors: Kernel-nice.1259
Provision for the case when we disallow mixed SmallInteger/Float arithmetic/comparison in primitives.
Since (rcvr positive) is implemented as self >= 0 (in Number), it would trigger another Float>=SmallInteger comparison, that will primitiveFail, trigger another adaptToFloat:andCompare: etc... (infinite loop)
There are other possible solutions like defining Float>>positive, but it sounds more reasonable to be very careful in this method which specifically handle primitive failure, rather than delegating such care.
=============== Diff against Kernel-nice.1259 ===============
Item was changed:
----- Method: Number>>adaptToFloat:andCompare: (in category 'converting') -----
adaptToFloat: rcvr andCompare: selector
"If I am involved in comparison with a Float, convert rcvr to a
Fraction. This way, no bit is lost and comparison is exact."
rcvr isFinite
ifFalse: [
selector == #= ifTrue: [^false].
selector == #~= ifTrue: [^true].
rcvr isNaN ifTrue: [^ false].
(selector = #< or: [selector = #'<='])
ifTrue: [^ rcvr positive not].
(selector = #> or: [selector = #'>='])
+ ifTrue: [^ rcvr >= 0.0].
- ifTrue: [^ rcvr positive].
^self error: 'unknow comparison selector'].
"Try to avoid asTrueFraction because it can cost"
self isAnExactFloat ifTrue: [^rcvr perform: selector with: self asExactFloat].
selector == #= ifTrue: [^false].
selector == #~= ifTrue: [^true].
^ rcvr asTrueFraction perform: selector with: self!
Marcel Taeumel uploaded a new version of 60Deprecated to project The Trunk:
http://source.squeak.org/trunk/60Deprecated-mt.44.mcz
==================== Summary ====================
Name: 60Deprecated-mt.44
Author: mt
Time: 26 August 2019, 4:00:46.305394 pm
UUID: 9c5b3920-8e56-314d-8354-088b67c48791
Ancestors: 60Deprecated-mt.43
Deprecation from Morphic-mt.1510.
=============== Diff against 60Deprecated-mt.43 ===============
Item was added:
+ ----- Method: DockingBarItemMorph>>updateLayoutInDockingBar (in category '*60Deprecated-private') -----
+ updateLayoutInDockingBar
+
+ self deprecated: 'Owner will update its items if required. See DockingBarMorph >> #updateLayoutProperties.'.
+
+ owner addedMorph: self.!
Karl Ramberg uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-kfr.1509.mcz
==================== Summary ====================
Name: Morphic-kfr.1509
Author: kfr
Time: 22 August 2019, 6:46:21.434151 pm
UUID: 8468fa35-928c-3849-8ee1-f86a3c72527a
Ancestors: Morphic-mt.1508
#removeModalWindow is deprecated, but many old projects still references to it. Remove reference upon loading project.
=============== Diff against Morphic-mt.1508 ===============
Item was changed:
----- Method: PasteUpMorph>>fixUponLoad:seg: (in category 'objects from disk') -----
+ fixUponLoad: aProject seg: anImageSegment
- fixUponLoad: aProject seg: anImageSegment
"We are in an old project that is being loaded from disk.
+ Fix up conventions that have changed."
+ | weakMessage |
+ self isWorldMorph
+ ifTrue: [(self valueOfProperty: #soundAdditions)
+ ifNotNil: [:additions | SampledSound assimilateSoundsFrom: additions]].
+ self actionMap
+ ifNotNil: [:aDictionary |
+ weakMessage := aDictionary
+ at: #aboutToLeaveWorld
+ ifAbsent: [].
+ weakMessage
+ ifNotNil: [weakMessage selector = #removeModalWindow
+ ifTrue: [weakMessage receiver: nil]]].
- Fix up conventions that have changed."
-
- self isWorldMorph ifTrue: [
- (self valueOfProperty: #soundAdditions) ifNotNil:
- [:additions | SampledSound
- assimilateSoundsFrom: additions]].
-
^ super fixUponLoad: aProject seg: anImageSegment!
Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-cmfcmf.1496.mcz
==================== Summary ====================
Name: Morphic-cmfcmf.1496
Author: cmfcmf
Time: 1 August 2019, 6:57:12.047202 pm
UUID: 34f7313a-f70a-3542-bd4d-9657b63cd95e
Ancestors: Morphic-mt.1495
Use MenuMorph>>popUpEvent:in: instead of not existing MenuMorph>>openAt: when yellow button clicking on a TextAttribute with >>menu defined.
=============== Diff against Morphic-mt.1495 ===============
Item was changed:
----- Method: TextEditor>>yellowButtonDown: (in category 'events') -----
yellowButtonDown: event
"Process a yellow button event. Answer true if the event was handled, false otherwise."
(paragraph attributesAt: event cursorPoint) do:[:attr|
attr menu ifNotNil:[
+ attr menu
+ setInvokingView: self morph editView;
+ popUpEvent: event in: self morph world.
- attr menu openAt: event cursorPoint.
^true]].
^false!