[Vm-dev] squeak decompiler

Clément Bera bera.clement at gmail.com
Mon Oct 20 09:31:57 UTC 2014


I don't think there's much documentation available.

Basically it builds a method AST from a compiled method. It is composed of
the Decompiler that walks over the bytecode and the AST constructor that
builds the AST.

Most nodes maps one to one to AST nodes and are easy to decompile. The main
complexity comes from the decompilation of inlined control flow structures,
which is based on heuristics:
- loops are decompiled to while loops and if a certain pattern is met
(there's an iterator incremented at each loop iteration) then the while
loop is replaced by #to:do: or #to:by:do:
- conditions are decompiled to ifTrue:ifFalse:, except if the pattern
matches a #ifNil:ifNotNil: (there's == nil bytecodes), and except if the
conditional jumps jumps to a push true or push false bytecode, in which
case it is decompiled to #and: or #or:
- dup mixed with jumps are decompiled to #caseOf: or #caseOf:otherwise:

There's a little complexity from cascade too. They're detected with dup
bytecode without jumps on the contrary to #caseOf: .

Note that the Decompiler is unreliable, recompiling the whole image from
decompiled sources crashes, and seemingly it has not been possible to do
that in the past decade (it was possible in Smalltalk 80). So you can
consider that the decompiler can decompile 99% of methods but not all of

An interesting work would be to improve the decompiler so that the image
does not crash when all the methods are recompiled from decompiled sources.



2014-10-20 10:51 GMT+02:00 Whiter Walt <whiter.walt at gmail.com>:

> Hi,
> I am interested in the Squeak Decompiler class. Is there any technical
> information in the net, which explains the functionality? Or maybe it
> follows some common "rules", I can find in some paper or book?
> cheers
> Walt
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20141020/69ee411f/attachment.htm

More information about the Vm-dev mailing list