Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.1032.mcz==================== Summary ====================
Name: Kernel-eem.1032
Author: eem
Time: 7 July 2016, 11:36:43.185017 am
UUID: 0e4a81f4-1688-419a-b951-f0bc7a0b33fd
Ancestors: Kernel-eem.1031
Faster method creation in CompiledMethodTrailer.
Provide CompiledMethod>>voidCogVMState with a fail-over to flushCache, for safe modification of methods.
Provide BlockClosure>>isNestedeWithin: for testing block nesting.
=============== Diff against Kernel-eem.1031 ===============
Item was added:
+ ----- Method: BlockClosure>>isNestedWithin: (in category 'testing') -----
+ isNestedWithin: aContextOrBlock
+ "Answer if the receiver is nested within aContextOrBlock, which may be ither a Context, or a BlockClosure."
+ aContextOrBlock ifNotNil:
+ [self outerContextsDo:
+ [:ctxt|
+ (ctxt == aContextOrBlock
+ or: [ctxt closureOrNil = aContextOrBlock]) ifTrue: [^true]]].
+ ^false!
Item was added:
+ ----- Method: CompiledMethod>>voidCogVMState (in category 'cleaning') -----
+ voidCogVMState
+ "Tell the VM to remove all references to any machine code form of the method.
+ This primitive must be called whenever a method is in use and modified. This is
+ more aggressive (and *much* more costly) than flushCache since it must search
+ through all context objects, making sure that none have a (hidden) machine code pc
+ in the receiver. Since modifying a method will likely change the generated machine code,
+ modifying a method (rather than redefining it) requires this more aggressive flush."
+
+ <primitive: 215>
+ ^self flushCache!
Item was changed:
----- Method: CompiledMethodTrailer>>createMethod:class:header: (in category 'creating a method') -----
createMethod: numberOfBytesForAllButTrailer class: aCompiledMethodClass header: headerWord
+ | meth delta |
- | meth |
encodedData ifNil: [self encode].
+
-
meth := aCompiledMethodClass newMethod: numberOfBytesForAllButTrailer + size header: headerWord.
"copy the encoded trailer data"
+ delta := meth size - size.
1 to: size do:
+ [:i | meth at: delta + i put: (encodedData at: i)].
- [:i | meth at: meth size - size + i put: (encodedData at: i)].
^meth!