Andreas Raab uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-ar.324.mcz==================== Summary ====================
Name: Kernel-ar.324
Author: ar
Time: 4 December 2009, 6:43:05 am
UUID: f04afe5f-4573-5b43-9dc4-0504003e2e34
Ancestors: Kernel-ar.323
Faster #ensure: handling: Instead of having the default path use thisContext>>tempAt:put: (which is very slow for the JIT) use a temp assignment and let only the termination handling actually do #tempAt:put:.
Part 4 updates #ifCurtailed:.
=============== Diff against Kernel-ar.323 ===============
Item was changed:
----- Method: BlockContext>>ifCurtailed: (in category 'exceptions') -----
ifCurtailed: aBlock
+ "Evaluate the receiver with an abnormal termination action.
+ Evaluate aBlock only if execution is unwound during execution
+ of the receiver. If execution of the receiver finishes normally do
+ not evaluate aBlock. N.B. This method is *not* implemented as a
+ primitive. Primitive 198 always fails. The VM uses prim 198 in a
+ context's method as the mark for an ensure:/ifCurtailed: activation."
+ | complete result |
- "Evaluate the receiver with an abnormal termination action."
-
<primitive: 198>
+ result := self value.
+ complete := true.
+ ^result!
- ^ self value!
Item was changed:
----- Method: BlockClosure>>ifCurtailed: (in category 'exceptions') -----
ifCurtailed: aBlock
"Evaluate the receiver with an abnormal termination action.
Evaluate aBlock only if execution is unwound during execution
+ of the receiver. If execution of the receiver finishes normally do
+ not evaluate aBlock. N.B. This method is *not* implemented as a
+ primitive. Primitive 198 always fails. The VM uses prim 198 in a
+ context's method as the mark for an ensure:/ifCurtailed: activation."
+ | complete result |
- of the receiver. If execution of the receiver finishes normally
- do not evaluate aBlock."
-
<primitive: 198>
+ result := self valueNoContextSwitch.
+ complete := true.
+ ^result!
- ^self valueNoContextSwitch!