Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.1181.mcz
==================== Summary ====================
Name: Kernel-eem.1181
Author: eem
Time: 17 June 2018, 4:48:17.581384 pm
UUID: c1e480cd-6fb8-4810-af4b-0ac2298a044a
Ancestors: Kernel-eem.1180
Move Context>>blockCopy: to deprecated (BlockContext is in deprecated). This breaks Kernel's dependency on deprecated.
=============== Diff against Kernel-eem.1180 ===============
Item was removed:
- ----- Method: Context>>blockCopy: (in category 'controlling') -----
- blockCopy: numArgs
- "Primitive. Distinguish a block of code from its enclosing method by
- creating a new BlockContext for that block. The compiler inserts into all
- methods that contain blocks the bytecodes to send the message
- blockCopy:. Do not use blockCopy: in code that you write!! Only the
- compiler can decide to send the message blockCopy:. Fail if numArgs is
- not a SmallInteger. Optional. No Lookup. See Object documentation
- whatIsAPrimitive."
-
- <primitive: 80>
- ^ (BlockContext newForMethod: self method)
- home: self home
- startpc: pc + 2
- nargs: numArgs!
Eliot Miranda uploaded a new version of 60Deprecated to project The Trunk:
http://source.squeak.org/trunk/60Deprecated-eem.22.mcz
==================== Summary ====================
Name: 60Deprecated-eem.22
Author: eem
Time: 17 June 2018, 4:46:55.256723 pm
UUID: 49040366-ae77-47cd-aaea-1574270b7780
Ancestors: 60Deprecated-pre.21
BlockContext is in deprecated. Add the only reference to it in Kernel (now an unsent message) to break the dependency.
=============== Diff against 60Deprecated-pre.21 ===============
Item was added:
+ ----- Method: Context>>blockCopy: (in category '*60Deprecated-controlling') -----
+ blockCopy: numArgs
+ "Primitive. Distinguish a block of code from its enclosing method by
+ creating a new BlockContext for that block. The compiler inserts into all
+ methods that contain blocks the bytecodes to send the message
+ blockCopy:. Do not use blockCopy: in code that you write!! Only the
+ compiler can decide to send the message blockCopy:. Fail if numArgs is
+ not a SmallInteger. Optional. No Lookup. See Object documentation
+ whatIsAPrimitive."
+
+ <primitive: 80>
+ ^ (BlockContext newForMethod: self method)
+ home: self home
+ startpc: pc + 2
+ nargs: numArgs!
Eliot Miranda uploaded a new version of Graphics to project The Trunk:
http://source.squeak.org/trunk/Graphics-eem.399.mcz
==================== Summary ====================
Name: Graphics-eem.399
Author: eem
Time: 17 June 2018, 3:49:31.430583 pm
UUID: 06730754-91ab-4e8b-9461-8911c2feca0b
Ancestors: Graphics-mt.398
Form>>hackBits: must use btyesPerBasicElement:, not bytesPerElement:, to not be confused by classes such as ShortIntegerArray which pack shorts into words.
Note that on Spur this isn't necessary now that 16-bit indexability is supported directly.
=============== Diff against Graphics-mt.398 ===============
Item was changed:
----- Method: Form>>hackBits: (in category 'private') -----
hackBits: bitThing
"This method provides an initialization so that BitBlt may be used, eg, to
copy ByteArrays and other non-pointer objects efficiently.
The resulting form looks 4 wide, 8 deep, and bitThing-size-in-words high."
width := 4.
depth := 8.
bitThing class isBits ifFalse: [self error: 'bitThing must be a non-pointer object'].
+ height := bitThing basicSize * bitThing bytesPerBasicElement // width.
- height := bitThing basicSize * bitThing bytesPerElement // width.
bits := bitThing!
Eliot Miranda uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-eem.822.mcz
==================== Summary ====================
Name: Tools-eem.822
Author: eem
Time: 17 June 2018, 2:22:00.563889 pm
UUID: 22ddf529-3821-4bed-b1cf-e74753d6d8f3
Ancestors: Tools-eem.821
Robustness for when a class is reoved from under the browser's feet.
=============== Diff against Tools-eem.821 ===============
Item was changed:
----- Method: Browser>>hasClassSelected (in category 'class list') -----
hasClassSelected
+ ^ selectedClassName notNil and: [(Smalltalk classNamed: selectedClassName) notNil]!
- ^ selectedClassName notNil.!
Eliot Miranda uploaded a new version of Compiler to project The Trunk:
http://source.squeak.org/trunk/Compiler-eem.385.mcz
==================== Summary ====================
Name: Compiler-eem.385
Author: eem
Time: 16 June 2018, 4:29:33.44317 pm
UUID: 07c5fc8e-5463-4db6-912a-fdc0125ce7df
Ancestors: Compiler-eem.384
The scanner for spotting closure creation bytecodes in methods must identify full block closure creations.
=============== Diff against Compiler-eem.384 ===============
Item was changed:
----- Method: EncoderForSistaV1 class>>createClosureScanBlock (in category 'compiled method support') -----
createClosureScanBlock
"Answer a block argument for InstructionStream>>scanFor: that answers true
+ for block closure creation bytecodes. Note that with this interface we can't answer
- for block closure creation bytecodes. ote that with this interface we can't answer
true for the extension in front of a push closure bytecode and so the interface may
have to change at some point."
+ "* 224 11100000 aaaaaaaa Extend A (Ext A = Ext A prev * 256 + Ext A)
+ * 225 11100001 bbbbbbbb Extend B (Ext B = Ext B prev * 256 + Ext B)
+ ** 249 11111001 xxxxxxxx siyyyyyy push Closure Compiled block literal index xxxxxxxx (+ Extend A * 256) numCopied yyyyyy receiverOnStack: s = 1 ignoreOuterContext: i = 1
+ ** 250 11111010 eeiiikkk jjjjjjjj Push Closure Num Copied iii (+ExtA//16*8) Num Args kkk (+ ExtA\\16*8) BlockSize jjjjjjjj (+ExtB*256). ee = num extensions"
+ ^[:b| b >= 249 and: [b <= 250]]!
- "* 224 11100000 aaaaaaaa Extend A (Ext A = Ext A prev * 256 + Ext A)
- * 225 11100001 bbbbbbbb Extend B (Ext B = Ext B prev * 256 + Ext B)
- ** 250 11111010 eeiiikkk jjjjjjjj Push Closure Num Copied iii (+ExtA//16*8) Num Args kkk (+ ExtA\\16*8) BlockSize jjjjjjjj (+ExtB*256). ee = num extensions"
- ^[:b| b = 250]!
Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.1180.mcz
==================== Summary ====================
Name: Kernel-eem.1180
Author: eem
Time: 16 June 2018, 4:25:25.529049 pm
UUID: 5c0c1399-ebc8-4f60-aa94-a11fe33553d7
Ancestors: Kernel-eem.1179
No need to scan the last two literals when updating in postCopy.
=============== Diff against Kernel-eem.1179 ===============
Item was changed:
----- Method: CompiledMethod>>postCopy (in category 'copying') -----
postCopy
| penultimateLiteral |
(penultimateLiteral := self penultimateLiteral) isMethodProperties ifTrue:
[self penultimateLiteral: penultimateLiteral copy].
self encoderClass supportsFullBlocks ifTrue:
+ [1 to: self numLiterals - 2 do:
- [1 to: self numLiterals do:
[:index| | lit |
(lit := self literalAt: index) isCompiledCode ifTrue:
[lit outerCode: self; postCopy]]]!
Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.1179.mcz
==================== Summary ====================
Name: Kernel-eem.1179
Author: eem
Time: 16 June 2018, 3:48:39.465427 pm
UUID: 6fef2fe4-bb58-4546-a532-eb7da951cc4c
Ancestors: Kernel-eem.1178
Fix copying of methods containing full blocks. After creating the copy, full blocks need to update their outerCode to the copy, otherwise they are left pointing at the original.
Symptom: debugging a doit with full blocks, as soon as one steps into a block temp names disappear because the original gets copied with temp names, but any contained block method doesn't update to refer to the copy holding temp names, remaining referring to the original that has no temp names.
=============== Diff against Kernel-eem.1178 ===============
Item was added:
+ ----- Method: CompiledBlock>>postCopy (in category 'copying') -----
+ postCopy
+ 1 to: self numLiterals - 1 do:
+ [:index| | lit |
+ (lit := self literalAt: index) isCompiledCode ifTrue:
+ [lit outerCode: self; postCopy]]!
Item was changed:
----- Method: CompiledMethod>>postCopy (in category 'copying') -----
postCopy
| penultimateLiteral |
(penultimateLiteral := self penultimateLiteral) isMethodProperties ifTrue:
+ [self penultimateLiteral: penultimateLiteral copy].
+ self encoderClass supportsFullBlocks ifTrue:
+ [1 to: self numLiterals do:
+ [:index| | lit |
+ (lit := self literalAt: index) isCompiledCode ifTrue:
+ [lit outerCode: self; postCopy]]]!
- [self penultimateLiteral: penultimateLiteral copy]!