Please do not reply to this email- if you want to comment on the bug, go to the URL shown below and enter your comments there.
Changed by [EMAIL PROTECTED] http://bugzilla.ximian.com/show_bug.cgi?id=77146 --- shadow/77146 2007-06-12 19:56:31.000000000 -0400 +++ shadow/77146.tmp.5448 2007-06-12 20:21:48.000000000 -0400 @@ -122,6 +122,44 @@ g.Emit (OpCodes.Ldc_I4, value); g.Emit (OpCodes.Ret); return (SimpleMethod) d.CreateDelegate (typeof (SimpleMethod)); } } + +------- Additional Comments From [EMAIL PROTECTED] 2007-06-12 20:21 ------- +I guess I know why: + +The icall CreateDelegate_internal doesn't store the MethodInfo +in delegate's instance. I first thought this is because +mono_delegate_ctor is doing it anyway, but it doesn't it +correctly: + +void +mono_delegate_ctor (...) +{ + +... + + if ((ji = mono_jit_info_table_find (domain, +mono_get_addr_from_ftnptr (addr)))) { + method = ji->method; + +This object is not the original MethodInfo. +It's another one, just cooked by mono_method_get_object: + + MONO_OBJECT_SETREF (delegate, method_info, +mono_method_get_object (domain, method, NULL)); + } + + +This basically means that: + +MethodInfo mi; +Delegate d = Delegate.CreateDelegate (someType, mi); +Object.ReferenceEquals (mi, d.Method) == false; + +but it should be "true", IMO. + +Doesn anyone remember why the MethodInfo that was passed +to CreateDelegate is thrown away? + _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
