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 -