[Mono-devel-list] IKVM show stopper
Jeroen Frijters
jeroen at sumatra.nl
Fri Jun 11 02:41:24 EDT 2004
Paolo Molaro wrote:
> On 06/10/04 Jeroen Frijters wrote:
> > To fix an IKVM bug, I had to make a change to how MethodBuilder
> > instances are converted into their baked MethodInfo
> equivalents. This
> > exposed a bug in Mono's (0.95) ModuleBuilder.GetMethodToken().
> >
> > The attached program demonstrates that
> ModuleBuilder.GetMethodToken()
> > allocates a new token, instead of returning the existing
> one, when it is
> > called with a MethodInfo (instead of a MethodBuilder).
> >
> > I think the bug is in mono_image_create_token
> (reflection.c), as that
> > just blindly assigns a new token value when the passed in
> object is a
> > MonoMethod.
>
> I fixed this for methods and ctors in cvs. Do you need it for
> fields as well as all the other tokens?
Thanks! At the moment methods and ctors are all I need, but I think I'll
need fields as well in the future (once I fix my field reflection code),
but this isn't as critical because field names are rarely overloaded. I
don't need any other tokens though.
> > Also, if you look at the generated test.dll, you'll see
> that the actual
> > method token is also one off from the one reported by
> > MethodBuilder.GetToken().
>
> Yes. Do you rely on that behaviour?
No. It was just something I noticed. My understanding is that they are
supposed to match, but I certainly don't need it.
> (it's easier since we keep separate arrays for ctors and
> normal methods).
> In the general case the tokens won't match, because the methods of a
> type need to be contiguous in the PE file, but with reflection you can
> create a few mthods for a type, then for another, then for the old one
> again and the tokesn are assigned sequentially.
I don't know anything about the PE format, so this might be a lame
suggestion, but can't you simply write them out in token order when the
assembly is saved?
Regards,
Jeroen
More information about the Mono-devel-list
mailing list