Marcel Taeumel uploaded a new version of HelpSystem-Core to project The Trunk:
http://source.squeak.org/trunk/HelpSystem-Core-mt.121.mcz
==================== Summary ====================
Name: HelpSystem-Core-mt.121
Author: mt
Time: 4 November 2020, 3:53:08.89062 pm
UUID: 7d6ada3e-f323-2142-aae9-dba673c642de
Ancestors: HelpSystem-Core-mt.120
Adds a blurb to custom help books. Thanks to Karl (kfr) for the idea!
(HelpSystem-Core-kfr.74 will be moved to treated)
=============== Diff against HelpSystem-Core-mt.120 ===============
Item was changed:
----- Method: ClassBasedHelpTopic>>contents (in category 'accessing') -----
contents
- "A book has no contents. Only its pages do."
+ ^ helpClass bookBlurb!
- ^ ''!
Item was added:
+ ----- Method: CustomHelp class>>bookBlurb (in category 'accessing') -----
+ bookBlurb
+ "Returns a short summary of the custom help book"
+
+ ^ self organization classComment!
Item was changed:
----- Method: CustomHelp class>>bookName (in category 'accessing') -----
bookName
"Returns the name of the custom help book"
+ ^ self name!
- ^'Help'!
Marcel Taeumel uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-nice.1295.mcz
==================== Summary ====================
Name: Kernel-nice.1295
Author: nice
Time: 17 February 2020, 6:59:12.589583 pm
UUID: 7b8c61b2-fd1d-473e-9536-57f78a6ec152
Ancestors: Kernel-tonyg.1293
Fast-up isAnExactFloat.
Correct a typo in a comment.
=============== Diff against Kernel-tonyg.1293 ===============
Item was changed:
----- Method: Integer>>isAnExactFloat (in category 'testing') -----
isAnExactFloat
"Answer true if this Integer can be converted exactly to a Float"
| h |
(h := self highBitOfMagnitude) <= Float precision
ifTrue: [^ true].
^ h - 1 <= Float emax
+ and: [(self anyBitOfMagnitudeFrom: 1 to: h - Float precision) not]!
- and: [h - self abs lowBit < Float precision]!
Item was changed:
----- Method: NumberParser>>makeFloatFromMantissa:exponent:base: (in category 'parsing-private') -----
makeFloatFromMantissa: m exponent: k base: aRadix
+ "Convert infinite precision arithmetic into limited precision Floating point.
+ This algorithm rely on correct IEEE rounding mode
- "Convert infinite precision arithmetic into Floating point.
- This alogrithm rely on correct IEEE rounding mode
being implemented in Integer>>asFloat and Fraction>>asFloat"
k = 0 ifTrue: [ ^m asFloat ].
k > 0 ifTrue: [ ^(m * (aRadix raisedToInteger: k)) asFloat ].
^(Fraction numerator: m denominator: (aRadix raisedToInteger: k negated)) asFloat!
Marcel Taeumel uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-dtl.1310.mcz
==================== Summary ====================
Name: Kernel-dtl.1310
Author: dtl
Time: 6 March 2020, 7:29:11.316779 pm
UUID: 683e4e14-fc18-4d55-a776-eece91f579f5
Ancestors: Kernel-mt.1309
Change the Squeak default bytecode set to Sista in trunk.
Add CompiledCode>>multipleBytecodeSetsActive: to optionally inform the VM that Sista is in use, see VMMaker.oscog-dtl.2711 and http://lists.squeakfoundation.org/pipermail/vm-dev/2020-January/032441.html.
Add CompiledCode>>useSista: convenience method for switching to and from Sista bytecodes.
Package postscript activates the change to Sista bytecodes, which can be reversed by evaluating CompiledCode useSista: false.
=============== Diff against Kernel-mt.1309 ===============
Item was added:
+ ----- Method: CompiledCode class>>multipleBytecodeSetsActive: (in category 'method encoding') -----
+ multipleBytecodeSetsActive: aBoolean
+ "Inform the VM when multiple bytecode sets, typically the Sista bytecodes
+ in addition to the traditional V3 bytecode set, are now in use is this image.
+ The VM may use this information to update the image format number when
+ saving the image to the file system."
+
+ <primitive: 'primitiveMultipleBytecodeSetsActive'>
+ !
Item was added:
+ ----- Method: CompiledCode class>>useSista: (in category 'method encoding') -----
+ useSista: useSistaEncoder
+ "Switch to or from the Sista bytecode encoder, and recompile the system
+ using that encoder. Assumes that Compiler recompileAll is working for the
+ existing system. Assumes that the currently available primary and secondary
+ bytecode encoders are EncoderForV3PlusClosures and EncoderForSistaV1.
+ This is a convenience method that must be updated as the available encoders
+ are changed."
+
+ "CompiledCode useSista: true"
+ "CompiledCode useSista: false"
+
+ | standardEncoder sistaEncoder activeEncoder |
+ standardEncoder := Smalltalk classNamed: #EncoderForV3PlusClosures.
+ sistaEncoder := Smalltalk classNamed: #EncoderForSistaV1.
+ activeEncoder := self preferredBytecodeSetEncoderClass.
+ useSistaEncoder
+ ifTrue: [sistaEncoder ifNil: [self error: 'EncoderForSistaV1 not present in this image'].
+ self preferredBytecodeSetEncoderClass: sistaEncoder.
+ activeEncoder ~= sistaEncoder
+ ifTrue: [(Smalltalk classNamed: #Compiler) recompileAll.
+ self multipleBytecodeSetsActive: true "VM should support Sista plus V3" ]]
+ ifFalse: [standardEncoder ifNil: [self error: 'EncoderForV3PlusClosures not present in this image'].
+ self preferredBytecodeSetEncoderClass: standardEncoder.
+ activeEncoder ~= standardEncoder
+ ifTrue: [(Smalltalk classNamed: #Compiler) recompileAll.
+ self multipleBytecodeSetsActive: false "VM needs to support V3 only" ]].
+
+ !
Item was changed:
+ (PackageInfo named: 'Kernel') postscript: '"Activate Sista bytecodes in the image"
+
+ CompiledCode useSista: true.
+ '!
- (PackageInfo named: 'Kernel') postscript: '"below, add code to be run after the loading of this package"
- "Since Kernel-eem.1198 redefines LargePositiveInteger hash,
- rehash all hashed collections that contain hashed large integers."
- HashedCollection allSubclassesDo:
- [:c| | f |
- f := (c includesBehavior: Set)
- ifTrue: [[:i| i]]
- ifFalse: [[:i| i keys]].
- c allInstancesDo:
- [:h|
- ((f value: h) detect: [:e| e isInteger and: [e class ~~ SmallInteger]] ifNone: nil) ifNotNil:
- [h rehash]]]'!
Marcel Taeumel uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-ct.1300.mcz
==================== Summary ====================
Name: Kernel-ct.1300
Author: ct
Time: 16 February 2020, 4:53:53.7 pm
UUID: f7fb9fc4-63e9-2c41-b97a-6928d5d0d08b
Ancestors: Kernel-tonyg.1293
Fix multiple typos in BlockClosure and FullBlockClosure documentation
=============== Diff against Kernel-tonyg.1293 ===============
Item was changed:
----- Method: BlockClosure>>reentrant (in category 'private') -----
reentrant
"Answer a version of the recever that can be reentered.
+ Closures are reentrant (unlike BlockContext), so simply answer self."
- Closures are reentrant (unlike BlockContect) so simply answer self."
^self!
Item was changed:
BlockClosure variableSubclass: #FullBlockClosure
instanceVariableNames: 'receiver'
classVariableNames: ''
poolDictionaries: ''
category: 'Kernel-Methods'!
+ !FullBlockClosure commentStamp: 'ct 2/14/2020 15:56' prior: 0!
+ Instances of FullBlockClosure represent blocks, a sequence of statements inside square brackets that can be evaluated at any time via one of the value messages (value, value:, value:value:, ..., valueWithArguments:), which answer their last statement. Blocks therefore allow deferred evaluation and so are used to build control structures where a sequence of statements are evaluated or not depending on other values in the program.
- !FullBlockClosure commentStamp: 'eem 4/10/2017 11:18' prior: 0!
- Instances of FullBlockClosure represent blocks, a sequence of statements inside square brackets that can be evaluated at any time via one of the value messages (value, value:, value:value:, ... valueWithArguments:), which answer their last statement. Blocks therefore allow deferred evaluation and so are used to buikld control structures where a sequence of statements are evaluated or not depending on other values in the program.
FullBlockClosure is a refinement of BlockClosure that allows the block to use its own method to hold its code instead of embedding that code within its home method.
+ Implementation notes:
- Implementation:
A FullBlockClosure is a closure that can be independent of any outerContext if desired. It has its own method (currently reusing the startpc inst var) and its own receiver. outerContext can be either a Context or nil.
+ This closure design, implemented by Eliot Miranda and Clement Bera along with the sista work, aims to simplify the block closure model while enhacing its capabilities. It allows lazy decompilation of closures and fast machine code dispatch in Cog's JIT, while allowing inlining of methods and blocks to be independent from their enclosing blocks.
- This closure design, implemented by Eliot Miranda and Clement Bera along with the sista work aims to simplify the block closure model while enhacing its capabilities. It allows lazy decompilation of closures and fast machine code dispatch in Cog's JIT, while allowing inlining of methods and blocks to be independent from their enclosing blocks.
At closure creation time, the bytecode specifies:
- the compiledBlock to execute when executing this block's code (in the literal frame)
- if the receiver is the current receiver or a receiver passed on stack before the copied values.
- if the closure needs an outerContext. outerContexts are used for non local returns and debugging. Blocks with non local returns have to set their outerContext. For other blocks (97% of blocks), it's a trade-off between performance and debuggability.
Instance Variables (inherited)
numArgs <SmallInteger>
outerContext: <Context|nil>
compiledBlock(startpc) <CompiledBlock>
Instance Variables
receiver: <Object>
numArgs
- the number of arguments the block expects. This is superfluous; the number of arguments can be obtained from the receiver's compiledBlock.
outerContext
- the Context of the method or block activation in which the receiver is created.
compiledBlock(startpc)
- reused to refer to the CompiledBlock that implements the receiver's code.
receiver
- the receiver of the message that created the block's home method activation.!
Marcel Taeumel uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-ct.1338.mcz
==================== Summary ====================
Name: Kernel-ct.1338
Author: ct
Time: 22 August 2020, 8:18:22.970378 pm
UUID: 2ab1921f-016a-7044-9b35-75f940130863
Ancestors: Kernel-dtl.1336
Break dependents when copying a model
For the full discussion, see this thread: http://forum.world.st/Bug-in-copy-td5120761.html
=============== Diff against Kernel-dtl.1336 ===============
Item was added:
+ ----- Method: Model>>postCopy (in category 'copying') -----
+ postCopy
+
+ super postCopy.
+ self breakDependents.!