* 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
+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
#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;
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)
{
{"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},
{"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 [] = {
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);
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;
}
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);