Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.1022.mcz==================== Summary ====================
Name: Kernel-eem.1022
Author: eem
Time: 13 May 2016, 12:42:06.679822 pm
UUID: a39b0f45-dcca-4780-aec1-1466aaadd607
Ancestors: Kernel-bf.1021
Revise the fix in Kernel-bf.1019 (Debugger: step over temp vector initializer when entering method). Use the new bytecode scanning mahcinery from Compiler-eem.322 to implement willReallyStore and use it in stepToSendOrReturn to filter-out stores of indirect temp vectors.
=============== Diff against Kernel-bf.1021 ===============
Item was changed:
----- Method: ContextPart>>stepToSendOrReturn (in category 'system simulation') -----
stepToSendOrReturn
"Simulate the execution of bytecodes until either sending a message or
returning a value to the receiver (that is, until switching contexts)."
| ctxt |
+ [self willReallySend or: [self willReturn or: [self willReallyStore]]] whileFalse:
- [self willReallySend or: [self willReturn or: [self willStore]]] whileFalse:
[ctxt := self step.
ctxt == self ifFalse:
[self halt.
"Caused by mustBeBoolean handling"
^ctxt]]!
Item was added:
+ ----- Method: InstructionStream>>willReallyStore (in category 'testing') -----
+ willReallyStore
+ "Answer whether the bytecode at pc is a store or store-pop into an explicit variable.
+ This eliminates stores into indirect temp vectors, which implement mutable closed-over
+ variables in the the closure implementation, and hence stores into temp vectors are not real stores."
+ | method |
+ method := self method.
+ ^method encoderClass isNonSyntheticStoreAt: pc in: method for: self!
Item was removed:
- ----- Method: MethodContext>>stepToSendOrReturn (in category 'system simulation') -----
- stepToSendOrReturn
- ((method at: pc) == 16r8A "push new array" and: [pc = method initialPC]) ifTrue: [
- (method at: pc+2) = 16r68 ifFalse: [self error: 'assumed pop into temp0 bytecode'].
- "init temp vector first"
- self step; step].
- ^super stepToSendOrReturn!