[Pharo-project] How to copy a CompiledMethod?

Eliot Miranda eliot.miranda at gmail.com
Fri Nov 26 17:49:15 CET 2010


On Thu, Nov 25, 2010 at 1:14 PM, Igor Stasenko <siguctua at gmail.com> wrote:

> On 25 November 2010 20:44, Gabriel Hernán Barbuto <gbarbuto at gmail.com>
> wrote:
> > Hi
> >
> > I am trying to make a complete duplicate of a CompiledMethod. I
> > started with CompiledMethod>>#copyWithTrailerBytes: but I think that
> > this way still leaves some things to copy. It duplicates all the
> > literals, but I think that it doesn't duplicate a Pragma if for
> > example, the method has one.
> >
> AFAIR, pragmas are stored as one of literals.
> So, it actually should also make a copy of pragmas.
>

Yes. pragmas are effectively referenced from literals.  If a method needs ti
the penultimate literal (which otherwise is the method;s selector) holds an
AdditionalMethodState which refers back to its method.  This needs to be
copied if one is copying a method, since the backpointer needs to refer to
the owning method, not the method form which the copy was made.


> > Is there a proper way to completely make deep copy of a
> > CompiledMethod? I mean, without writing my own. If there is a way to
> > do it, I don't want to duplicate it.
> >
> if you tell more, why #copy is not enough for you.
>

If literals are read-only (and Array/ByteArray/String/Float literals are
conceptually read-only but not actually) you don't need to make a deep copy.
 You only need to copy the AdditionalMethodState, if present, and the class
association, if you want to install the method somewhere else.

best
Eliot

>
> > Thanks in advance.
> > Gabriel
> >
> >
>
>
>
> --
> Best regards,
> Igor Stasenko AKA sig.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gforge.inria.fr/pipermail/pharo-project/attachments/20101126/cd87d83e/attachment.htm>


More information about the Pharo-project mailing list