[squeak-dev] Decompilation problem
Eliot Miranda
eliot.miranda at gmail.com
Thu Apr 12 23:40:27 UTC 2012
Hi Yoshiki,
On Thu, Apr 12, 2012 at 4:27 PM, Yoshiki Ohshima <Yoshiki.Ohshima at 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?
>
> >
> > On Thu, Apr 12, 2012 at 3:09 PM, Yoshiki Ohshima <
> Yoshiki.Ohshima at acm.org> wrote:
> >
> > I noticed that when I debug grammar written in OMeta2/Squeak, there
> is
> > a problem with some particular methods. For example, I load
> > OMeta2-preload and -postload, and do:
> >
> > (OMeta2 compiledMethodAt: #token) decompileWithTemps
> >
> > I get something like:
> > ------------------------------------
> > token
> > | t |
> > ^ true
> > ifTrue: [_r1 := self apply: #anything.
> > self apply: #spaces.
> > self apply: #seq withArgs: {_r1}]
> > ------------------------------------
> > Debugger uses this to obtain the source code and then it trys to
> parse
> > it to get the source map. But "_r1" is not a valid variable name so
> > this process fails.
> >
> > It appears that the underscore is originated from the method:
> > ------------------------------------
> > codeRemoteTemp: index remoteTemps: tempVector
> >
> > ^(RemoteTempVectorNode new
> > name: '_r', index printString
> > index: index
> > type: LdTempType
> > scope: 0)
> > remoteTemps: tempVector;
> > yourself
> > ------------------------------------
> > But I cannot tell why it is "leaking out" to the final result. Does
> > anybody know what is going on?
> >
> > -- Yoshiki
> >
> > --
> > best,
> > Eliot
> >
> >
> > [2 <text/plain; us-ascii (7bit)>]
> >
>
>
--
best,
Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20120412/e520e329/attachment.htm
More information about the Squeak-dev
mailing list
|