2003-11-24 Zoltan Varga <vargaz@freemail.hu>
authorZoltan Varga <vargaz@gmail.com>
Mon, 24 Nov 2003 19:35:36 +0000 (19:35 -0000)
committerZoltan Varga <vargaz@gmail.com>
Mon, 24 Nov 2003 19:35:36 +0000 (19:35 -0000)
icall.c (ves_icall_System_Reflection_Assembly_InternalGetType):
Enumerate all modules inside a dynamic assembly. Fixes #51293.

svn path=/trunk/mono/; revision=20398

mono/metadata/ChangeLog
mono/metadata/icall.c

index 163aa634edde94215485666390692dc1e5a11724..89a261cd8df8c012b84ad82a0bb4e50fe585e2a0 100644 (file)
@@ -1,5 +1,8 @@
 2003-11-24  Zoltan Varga  <vargaz@freemail.hu>
 
+       icall.c (ves_icall_System_Reflection_Assembly_InternalGetType): 
+       Enumerate all modules inside a dynamic assembly. Fixes #51293.
+       
        * icall.c: Add new icall for creating dynamic methods.
 
        * loader.h debug-helpers.c: Add new wrapper type for dynamic methods.
index 2e18526088e6ba37e979989dfaa80f1af6b4e515..41acc8c15963670cd00c5ae8ba7885cd7bb037d1 100644 (file)
@@ -2532,7 +2532,24 @@ ves_icall_System_Reflection_Assembly_InternalGetType (MonoReflectionAssembly *as
                        type = NULL;
        }
        else
-               type = mono_reflection_get_type (assembly->assembly->image, &info, ignoreCase);
+               if (assembly->assembly->dynamic) {
+                       /* Enumerate all modules */
+                       MonoReflectionAssemblyBuilder *abuilder = (MonoReflectionAssemblyBuilder*)assembly;
+                       int i;
+
+                       if (!abuilder->modules)
+                               type = NULL;
+                       else {
+                               for (i = 0; i < mono_array_length (abuilder->modules); ++i) {
+                                       MonoReflectionModuleBuilder *mb = mono_array_get (abuilder->modules, MonoReflectionModuleBuilder*, i);
+                                       type = mono_reflection_get_type (&mb->dynamic_image->image, &info, ignoreCase);
+                                       if (type)
+                                               break;
+                               }
+                       }
+               }
+               else
+                       type = mono_reflection_get_type (assembly->assembly->image, &info, ignoreCase);
        g_free (str);
        g_list_free (info.modifiers);
        g_list_free (info.nested);