* debug-helpers.c (mono_type_full_name): New helper function.
* image.h (MonoAssembly): Change 'dynamic' to a boolean.
* image.c (mono_image_load_file_for_image): New public function which
is a replacement for the load_file_for_image in class.c.
* assembly.c (mono_assembly_load_module): A wrapper for the function
above which does assembly association and reference loading too.
* class.c (mono_class_from_name): Call mono_assembly_load_module.
svn path=/trunk/mono/; revision=19817
+2003-11-11 Zoltan Varga <vargaz@freemail.hu>
+
+ * debug-helpers.c (mono_type_full_name): New helper function.
+
+ * image.h (MonoAssembly): Change 'dynamic' to a boolean.
+
+ * image.c (mono_image_load_file_for_image): New public function which
+ is a replacement for the load_file_for_image in class.c.
+
+ * assembly.c (mono_assembly_load_module): A wrapper for the function
+ above which does assembly association and reference loading too.
+
+ * class.c (mono_class_from_name): Call mono_assembly_load_module.
+
2003-11-11 Gonzalo Paniagua Javier <gonzalo@ximian.com>
* appdomain.c: not all of the attributes for the full assembly name
g_free (assembly);
}
+MonoImage*
+mono_assembly_load_module (MonoAssembly *assembly, guint32 idx)
+{
+ MonoImageOpenStatus status;
+ MonoImage *module;
+
+ module = mono_image_load_file_for_image (assembly->image, idx);
+ if (module)
+ mono_assembly_load_references (module, &status);
+
+ return module;
+}
+
void
mono_assembly_foreach (GFunc func, gpointer user_data)
{
MonoAssembly* mono_assembly_load (MonoAssemblyName *aname,
const char *basedir,
MonoImageOpenStatus *status);
+MonoImage* mono_assembly_load_module (MonoAssembly *assembly, guint32 idx);
void mono_assembly_close (MonoAssembly *assembly);
void mono_assembly_setrootdir (const char *root_dir);
void mono_assembly_foreach (GFunc func, gpointer user_data);
#include <stdlib.h>
#include <signal.h>
#include <mono/metadata/image.h>
+#include <mono/metadata/assembly.h>
#include <mono/metadata/cil-coff.h>
#include <mono/metadata/metadata.h>
#include <mono/metadata/tabledefs.h>
return NULL;
}
-static MonoImage*
-load_file_for_image (MonoImage *image, int fileidx)
-{
- char *base_dir, *name;
- MonoImage *res;
- MonoTableInfo *t = &image->tables [MONO_TABLE_FILE];
- const char *fname;
- guint32 fname_id;
-
- if (fileidx < 1 || fileidx > t->rows)
- return NULL;
- fname_id = mono_metadata_decode_row_col (t, fileidx - 1, MONO_FILE_NAME);
- fname = mono_metadata_string_heap (image, fname_id);
- base_dir = g_path_get_dirname (image->name);
- name = g_build_filename (base_dir, fname, NULL);
- res = mono_image_open (name, NULL);
- if (res) {
- int i;
- t = &res->tables [MONO_TABLE_MODULEREF];
- //g_print ("loaded file %s from %s (%p)\n", name, image->name, image->assembly);
- res->assembly = image->assembly;
- for (i = 0; i < t->rows; ++i) {
- if (res->modules [i] && !res->modules [i]->assembly)
- res->modules [i]->assembly = image->assembly;
- }
- }
- g_free (name);
- g_free (base_dir);
- return res;
-}
-
static MonoClass*
return_nested_in (MonoClass *class, char *nested) {
MonoClass *found;
if (strcmp (name, ename) == 0 && strcmp (name_space, enspace) == 0) {
guint32 impl = cols [MONO_EXP_TYPE_IMPLEMENTATION];
if ((impl & IMPLEMENTATION_MASK) == IMPLEMENTATION_FILE) {
- loaded_image = load_file_for_image (image, impl >> IMPLEMENTATION_BITS);
+ loaded_image = mono_assembly_load_module (image->assembly, impl >> IMPLEMENTATION_BITS);
if (!loaded_image)
return NULL;
class = mono_class_from_name (loaded_image, name_space, name);
g_string_append_c (res, '&');
}
+char*
+mono_type_full_name (MonoType *type)
+{
+ GString *str;
+ char *res;
+
+ str = g_string_new ("");
+ mono_type_get_desc (str, type, TRUE);
+
+ res = g_strdup (str->str);
+ g_string_free (str, TRUE);
+ return res;
+}
+
char*
mono_signature_get_desc (MonoMethodSignature *sig, gboolean include_namespace)
{
if (method->wrapper_type != MONO_WRAPPER_NONE)
sprintf (wrapper, "(wrapper %s) ", wrapper_type_to_str (method->wrapper_type));
else
- sprintf (wrapper, "");
+ strcpy (wrapper, "");
res = g_strdup_printf ("%s%s.%s:%s (%s)", wrapper, method->klass->name_space,
method->klass->name, method->name, tmpsig);
g_free (tmpsig);
typedef struct MonoMethodDesc MonoMethodDesc;
void mono_type_get_desc (GString *res, MonoType *type, gboolean include_namespace);
+char* mono_type_full_name (MonoType *type);
+
char* mono_signature_get_desc (MonoMethodSignature *sig, gboolean include_namespace);
MonoMethodDesc* mono_method_desc_new (const char *name, gboolean include_namespace);
return data;
}
+MonoImage*
+mono_image_load_file_for_image (MonoImage *image, int fileidx)
+{
+ char *base_dir, *name;
+ MonoImage *res;
+ MonoTableInfo *t = &image->tables [MONO_TABLE_FILE];
+ const char *fname;
+ guint32 fname_id;
+
+ if (fileidx < 1 || fileidx > t->rows)
+ return NULL;
+ fname_id = mono_metadata_decode_row_col (t, fileidx - 1, MONO_FILE_NAME);
+ fname = mono_metadata_string_heap (image, fname_id);
+ base_dir = g_path_get_dirname (image->name);
+ name = g_build_filename (base_dir, fname, NULL);
+ res = mono_image_open (name, NULL);
+ if (res) {
+ int i;
+ t = &res->tables [MONO_TABLE_MODULEREF];
+ //g_print ("loaded file %s from %s (%p)\n", name, image->name, image->assembly);
+ res->assembly = image->assembly;
+ for (i = 0; i < t->rows; ++i) {
+ if (res->modules [i] && !res->modules [i]->assembly)
+ res->modules [i]->assembly = image->assembly;
+ }
+ }
+ g_free (name);
+ g_free (base_dir);
+ return res;
+}
+
const char*
mono_image_get_strong_name (MonoImage *image, guint32 *size)
{
GModule *aot_module;
MonoImage *image;
/* Load files here */
- void *dynamic;
+ gboolean dynamic;
} MonoAssembly;
typedef struct {
guint32 mono_image_get_entry_point (MonoImage *image);
const char *mono_image_get_resource (MonoImage *image, guint32 offset, guint32 *size);
+MonoImage* mono_image_load_file_for_image (MonoImage *image, int fileidx);
/* This actually returns a MonoPEResourceDataEntry *, but declaring it
* causes an include file loop.