On Thu, Nov 25, 2010 at 1:14 PM, Igor Stasenko <[email protected]> wrote:
> On 25 November 2010 20:44, Gabriel Hernán Barbuto <[email protected]> > 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. > >
