[Vm-dev] squeak decompiler
whiter.walt at gmail.com
Mon Oct 20 12:57:42 UTC 2014
thanks for your reply!
it is a pity, there is no documentation about decompiling. Anyway,
thanks for your summary/introduction about decompiling squeak bytecode...
Am 20.10.2014 11:31, schrieb Clément Bera:
> 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 them.
> 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
> <mailto:whiter.walt at gmail.com>>:
> 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?
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Vm-dev