Hi guys. I noticed stef did this issue:
http://code.google.com/p/pharo/issues/detail?id=5642
However, now I have the following test that fails in Pharo 2.0 but works
fine in 1.4:
| string context |
string := 'test'.
context := [self class. string asUppercase] asContext.
self assert: (context tempNamed: 'string') = 'test'
the current implementation of #tempNamed: is:
tempNamed: aName
"Returns the value of the temporaries, aName."
"Implementation notes: temporary initialization in blocks simply uses
pushNil to allocate and initialize each temp. So if one inspects [|a|a:=2]
and sends it self method symbolic you get:
13 <8F 00 00 05> closureNumCopied: 0 numArgs: 0 bytes 17 to 21
17 <73> pushConstant: nil
18 <77> pushConstant: 2
19 <81 40> storeIntoTemp: 0
21 <7D> blockReturn
22 <7C> returnTop
And when we check self asContext pc we get 17, which is *before* the
nil is pushed. Therefore we should pay attention when querying a temporary
if the temporary allocation was executed."
| index |
index := (self tempNames indexOf: aName).
^ index >= stackp
ifTrue: [ nil]
ifFalse: [self tempAt: (self tempNames indexOf: aName)]
and previously it was:
tempNamed: aName
^self tempAt: (self tempNames indexOf: aName)
ideas?
--
Mariano
http://marianopeck.wordpress.com