[Pharo-project] How to copy a CompiledMethod?

Mariano Martinez Peck marianopeck at gmail.com
Fri Nov 26 22:20:30 CET 2010


Gabriel, I am also interested  in being able to completly copy a
CompiledMethod. Do you have in mind to open a ticket and integrate it to
Pharo?

thanks

mariano

On Fri, Nov 26, 2010 at 6:14 PM, Gabriel Hernán Barbuto
<gbarbuto at gmail.com>wrote:

> Eliot
>
> Thanks for your response.
>
> On Fri, Nov 26, 2010 at 5:49 PM, Eliot Miranda <eliot.miranda at gmail.com>
> wrote:
> >
> >
> > 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.
>
> Yes that was exactly what I did. I handle both Association and
> AdditionalMethodState in a special way and just send copy to all the
> other literals. I was not sure what I could encounter in the literals
> so I opted to send copy to them. Maybe they will just return
> themselves or make an unnecessary duplicate.
>
> I have also taken care of copying the Pragmas referenced from any
> AdditionalMethodState. Igor mentioned that there could be Pragmas
> directly on the literals but I am not sure about that. I will have to
> get all the CompiledMethods and check if anyone has a Pragma among its
> literals, but that is not enough, maybe my image doesn't have any.
>
> I understand that all the literals are conceptually read only, and
> that copying anything besides the Associations, AdditionalMethodStates
> and Pragmas can waste memory and CPU cycles, but I am not interested
> in speed nor memory consumption right now. But I will take a note, in
> case some day I need to improve the copy.
>
> After copying all the Associations, AdditionalMethodStates and Pragmas
> that I've found I fix the references of both AdditionalMethodStates
> and Pragmas to the new method in order to break all references to
> objects in the current image that I don't want to show up in the new
> image.
>
> Thanks again.
>
> Best
> Gabriel
>
> > 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/bb35c1af/attachment.htm>


More information about the Pharo-project mailing list