X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fsre.c;h=3bcba2bf0cf75267ab34d01c3f47a62cd6bf50cc;hb=24e97e5c52d88408b1e323fe0b2d3a4b99f35302;hp=649791e7beafcb4104a181e0c720a2509ea53d4b;hpb=9d0b1967c0566f18faa9993d33e61f66ccb95783;p=mono.git diff --git a/mono/metadata/sre.c b/mono/metadata/sre.c index 649791e7bea..3bcba2bf0cf 100644 --- a/mono/metadata/sre.c +++ b/mono/metadata/sre.c @@ -374,6 +374,12 @@ mono_save_custom_attrs (MonoImage *image, void *obj, MonoArray *cattrs) mono_image_property_insert (image, obj, MONO_PROP_DYNAMIC_CATTR, ainfo); mono_loader_unlock (); +} +#else +//FIXME some code compiled under DISABLE_REFLECTION_EMIT depends on this function, we should be more aggressively disabling things +static void +mono_save_custom_attrs (MonoImage *image, void *obj, MonoArray *cattrs) +{ } #endif @@ -2777,7 +2783,7 @@ reflection_methodbuilder_to_mono_method (MonoClass *klass, (rmb->iattrs & METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL)) m = (MonoMethod *)image_g_new0 (image, MonoMethodPInvoke, 1); else - m = (MonoMethod *)image_g_new0 (image, MonoMethodWrapper, 1); + m = (MonoMethod *)image_g_new0 (image, MonoDynamicMethod, 1); wrapperm = (MonoMethodWrapper*)m; @@ -2872,6 +2878,8 @@ reflection_methodbuilder_to_mono_method (MonoClass *klass, } wrapperm->header = header; + MonoDynamicMethod *dm = (MonoDynamicMethod*)wrapperm; + dm->assembly = klass->image->assembly; } if (rmb->generic_params) { @@ -3908,6 +3916,7 @@ reflection_create_dynamic_method (MonoReflectionDynamicMethodHandle ref_mb, Mono rmb.refs [i + 1] = handle_class; } + MonoAssembly *ass = NULL; if (mb->owner) { MonoType *owner_type = mono_reflection_type_get_handle ((MonoReflectionType*)mb->owner, error); if (!is_ok (error)) { @@ -3915,11 +3924,14 @@ reflection_create_dynamic_method (MonoReflectionDynamicMethodHandle ref_mb, Mono return FALSE; } klass = mono_class_from_mono_type (owner_type); + ass = klass->image->assembly; } else { klass = mono_defaults.object_class; + ass = (mb->module && mb->module->image) ? mb->module->image->assembly : NULL; } mb->mhandle = handle = reflection_methodbuilder_to_mono_method (klass, &rmb, sig, error); + ((MonoDynamicMethod*)handle)->assembly = ass; g_free (rmb.refs); return_val_if_nok (error, FALSE); @@ -4371,6 +4383,18 @@ ves_icall_AssemblyBuilder_basic_init (MonoReflectionAssemblyBuilder *assemblyb) mono_reflection_dynimage_basic_init (assemblyb); } +void +ves_icall_AssemblyBuilder_UpdateNativeCustomAttributes (MonoReflectionAssemblyBuilderHandle assemblyb, MonoError *error) +{ + MonoArrayHandle cattrs = MONO_HANDLE_NEW_GET (MonoArray, assemblyb, cattrs); + + MonoReflectionAssemblyHandle assembly_handle = MONO_HANDLE_CAST (MonoReflectionAssembly, assemblyb); + MonoAssembly *assembly = MONO_HANDLE_GETVAL (assembly_handle, assembly); + g_assert (assembly); + + mono_save_custom_attrs (assembly->image, assembly, MONO_HANDLE_RAW (cattrs)); +} + void ves_icall_EnumBuilder_setup_enum_type (MonoReflectionTypeHandle enumtype, MonoReflectionTypeHandle t,