On 12.04.2012, at 16:40, Eliot Miranda wrote:
Hi Yoshiki,
On Thu, Apr 12, 2012 at 4:27 PM, Yoshiki Ohshima Yoshiki.Ohshima@acm.org wrote: At Thu, 12 Apr 2012 16:08:53 -0700, Eliot Miranda wrote:
Hi Yoshiki,
what's the image you're using, or at least what is it derived from? Also, what's the result of (OMeta2 >> #token) symbolic ?
The image is one started from "Squeak4.3alpha-11481" and updated by pressing the "update code from server" button. The result of #symbolic is like this:
37 <71> pushConstant: true 38 <AC 0F> jumpFalse: 55 40 <70> self 41 <21> pushConstant: #anything 42 <E0> send: apply: 43 <68> popIntoTemp: 0 44 <70> self 45 <22> pushConstant: #spaces 46 <E0> send: apply: 47 <87> pop 48 <70> self 49 <24> pushConstant: #seq 50 <10> pushTemp: 0 51 <8A 81> pop 1 into (Array new: 1) 53 <F3> send: apply:withArgs: 54 <90> jumpTo: 56 55 <73> pushConstant: nil 56 <7C> returnTop
-- Yoshiki
I can't reproduce this. When I debug the following doit (which mimics your code) and inspect the context I get a valid decompilation:
| t | ^ true ifTrue: [t := self apply: #anything. self apply: #spaces. self apply: #seq withArgs: {t}]
the same code:
method symbolic '37 <71> pushConstant: true 38 <AC 0F> jumpFalse: 55 40 <70> self 41 <21> pushConstant: #anything 42 <E0> send: apply: 43 <68> popIntoTemp: 0 44 <70> self 45 <22> pushConstant: #spaces 46 <E0> send: apply: 47 <87> pop 48 <70> self 49 <24> pushConstant: #seq 50 <10> pushTemp: 0 51 <8A 81> pop 1 into (Array new: 1) 53 <F3> send: apply:withArgs: 54 <90> jumpTo: 56 55 <73> pushConstant: nil 56 <7C> returnTop '
and decompileWithTemps returns something correct:
method decompileWithTemps DoIt | t | ^ true ifTrue: [t := self apply: #anything. self apply: #spaces. self apply: #seq withArgs: {t}]
So has OMeta patched some old bug in the decompiler which is now obsoleted by some other fix?
The difference appears to be that the OMeta compiler answers '(t)[(t)[(t)]]' for the schematicTempNamesString. The regular compiler answers 't'. This trips the Decompiler over.
- Bert -