On 17 January 2012 19:22, Mariano Martinez Peck <marianopeck@gmail.com> wrote:
On Tue, Jan 17, 2012 at 6:31 PM, Mariano Martinez Peck <marianopeck@gmail.com> wrote:
If you don't bother about being slow, you can also make it much easier:
|trailer source m | m := (Gofer>>#load). trailer := m trailer. source := m getSource. trailer sourceCode: source. m becomeForward: (m copyWithTrailerBytes: trailer)
and if you want to do it for the whole image you can use one bulk become and it will be fast.
I will experiment and see if it is working.
Well, with the following script it seems I am able to embed all source code in trailers:
| trailer source key dict classes | Â dict := IdentityDictionary new. CompiledMethod allInstances do: [:aMethod | Â Â Â trailer := aMethod trailer. Â Â Â source := aMethod getSource. Â Â Â trailer sourceCode: source. Â Â Â dict at: aMethod put:Â (aMethod copyWithTrailerBytes: trailer). ]. dict keys asArray elementsExchangeIdentityWith: dict values asArray.
you doing it a little bit wrong CompiledMethod allInstances do: [:aMethod | source := aMethod getSource. trailer := CompiledMethodTrailer new sourceCode: source. dict at: aMethod put: (aMethod copyWithTrailerBytes: trailer). ]. As for what we should encode in method trailer and what we shouldn't, i think we should put an id there, and then have a source code manager which will work as key-value storage to retrieve stuff at given key. And stuff can be not just a source code, but more compound object which will also carry things like, author, timestamp, link to previous version etc etc etc. Now, if we could have such abstraction at first place, then it is no longer relevant where the actual data is stored, in files, in image, or in networked database, because you can have any of them. I would really like to invest some time to that, or find someone who could do that, so i can help with it :) -- Best regards, Igor Stasenko.