2004-09-20 Zoltan Varga <vargaz@freemail.hu>
authorZoltan Varga <vargaz@gmail.com>
Mon, 20 Sep 2004 11:14:13 +0000 (11:14 -0000)
committerZoltan Varga <vargaz@gmail.com>
Mon, 20 Sep 2004 11:14:13 +0000 (11:14 -0000)
* object-internals.h (MonoReflectionModule): Add 'token' field.

* reflection.c (mono_reflection_get_token): Add support for Module
and Assembly.
(mono_module_get_object): Set 'token' field.
(mono_module_file_get_object): Set 'token' field.

* icall.c: Add new Assembly and Module icalls.

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

mono/metadata/ChangeLog
mono/metadata/appdomain.c
mono/metadata/icall.c
mono/metadata/reflection.c

index 1dd372db66db2d1ff8d170c23e725b33190faaab..9c250e7b8be040e77f588f8a1ffc023f1b48fc10 100644 (file)
@@ -1,3 +1,16 @@
+2004-09-20  Zoltan Varga  <vargaz@freemail.hu>
+
+       * object-internals.h (MonoReflectionModule): Add 'token' field.
+       
+       * reflection.c (mono_reflection_get_token): Add support for Module
+       and Assembly.
+       (mono_module_get_object): Set 'token' field.
+       (mono_module_file_get_object): Set 'token' field.
+
+       * icall.c: Add new Assembly and Module icalls.
+
+       * appdomain.c: Bump corlib version.
+
 2004-09-19  Zoltan Varga  <vargaz@freemail.hu>
 
        * loader.h loader.c class.h class.c: Add helper functions for obtaining
index 3dd7b32121014288dbfa819d1361810911675785..0f31316af6359c0923d33b595dea23d50a2d6b87 100644 (file)
@@ -27,7 +27,7 @@
 #include <mono/metadata/marshal.h>
 #include <mono/utils/mono-uri.h>
 
-#define MONO_CORLIB_VERSION 25
+#define MONO_CORLIB_VERSION 26
 
 CRITICAL_SECTION mono_delegate_section;
 
index be215316bc0bd2f74853f835a4d40b1c8908089e..f054d3e678da405e6b32a38a36904ba78e189650 100644 (file)
@@ -3191,6 +3191,12 @@ ves_icall_System_Reflection_Assembly_get_EntryPoint (MonoReflectionAssembly *ass
        return mono_method_get_object (mono_object_domain (assembly), mono_get_method (assembly->assembly->image, token, NULL), NULL);
 }
 
+static MonoReflectionModule*
+ves_icall_System_Reflection_Assembly_get_ManifestModule (MonoReflectionAssembly *assembly) 
+{
+       return mono_module_get_object (mono_object_domain (assembly), assembly->assembly->image);
+}
+
 static MonoArray*
 ves_icall_System_Reflection_Assembly_GetManifestResourceNames (MonoReflectionAssembly *assembly) 
 {
@@ -5591,6 +5597,8 @@ static const IcallEntry assembly_icalls [] = {
        {"MonoDebugger_GetType", ves_icall_MonoDebugger_GetType},
        /* normal icalls again */
        {"get_EntryPoint", ves_icall_System_Reflection_Assembly_get_EntryPoint},
+       {"get_ManifestModule", ves_icall_System_Reflection_Assembly_get_ManifestModule},
+       {"get_MetadataToken", mono_reflection_get_token},
        {"get_code_base", ves_icall_System_Reflection_Assembly_get_code_base},
        {"get_global_assembly_cache", ves_icall_System_Reflection_Assembly_get_global_assembly_cache},
        {"get_location", ves_icall_System_Reflection_Assembly_get_location},
@@ -5610,7 +5618,8 @@ static const IcallEntry module_icalls [] = {
        {"InternalGetTypes", ves_icall_System_Reflection_Module_InternalGetTypes},
        {"ResolveFieldToken", ves_icall_System_Reflection_Module_ResolveFieldToken},
        {"ResolveMethodToken", ves_icall_System_Reflection_Module_ResolveMethodToken},
-       {"ResolveTypeToken", ves_icall_System_Reflection_Module_ResolveTypeToken}
+       {"ResolveTypeToken", ves_icall_System_Reflection_Module_ResolveTypeToken},
+       {"get_MetadataToken", mono_reflection_get_token}
 };
 
 static const IcallEntry monocmethod_icalls [] = {
index fd33e597523c478b1f4cc9f79b13583f7f35edc1..fd418e52af9000ed948f14867b5e6ebaccc08d2f 100644 (file)
@@ -5016,6 +5016,18 @@ mono_module_get_object   (MonoDomain *domain, MonoImage *image)
        res->name      = mono_string_new (domain, g_path_get_basename (image->name));
        res->scopename = mono_string_new (domain, image->module_name);
 
+       if (image->assembly->image == image)
+               res->token = mono_metadata_make_token (MONO_TABLE_MODULE, 1);
+       else {
+               int i;
+               g_assert (image->assembly->image->modules);
+               res->token = 0;
+               while (image->assembly->image->modules [i])
+                       if (image->assembly->image->modules [i] == image)
+                               res->token = mono_metadata_make_token (MONO_TABLE_MODULEREF, i + 1);
+               g_assert (res->token);
+       }
+
        mono_image_addref (image);
 
        CACHE_OBJECT (image, res, NULL);
@@ -5059,6 +5071,7 @@ mono_module_file_get_object (MonoDomain *domain, MonoImage *image, int table_ind
        res->name      = mono_string_new (domain, name);
        res->scopename = mono_string_new (domain, name);
        res->is_resource = cols [MONO_FILE_FLAGS] && FILE_CONTAINS_NO_METADATA;
+       res->token = mono_metadata_make_token (MONO_TABLE_FILE, table_index + 1);
 
        return res;
 }
@@ -6000,6 +6013,14 @@ mono_reflection_get_token (MonoObject *obj)
 
                token = mono_method_get_param_token (((MonoReflectionMethod*)p->MemberImpl)->method, p->PositionImpl);
        }
+       else if (strcmp (klass->name, "Module") == 0) {
+               MonoReflectionModule *m = (MonoReflectionModule*)obj;
+
+               token = m->token;
+       }
+       else if (strcmp (klass->name, "Assembly") == 0) {
+               token = mono_metadata_make_token (MONO_TABLE_ASSEMBLY, 1);
+       }
        else {
                gchar *msg = g_strdup_printf ("MetadataToken is not supported for type '%s.%s'", klass->name_space, klass->name);
                MonoException *ex = mono_get_exception_not_implemented (msg);