[mono-error] Replace mono_metadata_parse_type_full with mono_metadata_parse_type_checked.
[mono.git] / mono / dis / main.c
index 4d4a51cd8e77fedf3e286e921b33e2cb2adb4e17..e8538ea31be80ed83721bfaf8bf0e5fd95bb492c 100644 (file)
@@ -301,7 +301,7 @@ dis_directive_moduleref (MonoImage *m)
 static void
 dis_nt_header (MonoImage *m)
 {
-       MonoCLIImageInfo *image_info = m->image_info;
+       MonoCLIImageInfo *image_info = (MonoCLIImageInfo *)m->image_info;
        if (image_info && image_info->cli_header.nt.pe_stack_reserve != 0x100000)
                fprintf (output, ".stackreserve 0x%x\n", image_info->cli_header.nt.pe_stack_reserve);
 }
@@ -493,7 +493,7 @@ dis_field_list (MonoImage *m, guint32 start, guint32 end, MonoGenericContainer *
                        
                        if ((crow = mono_metadata_get_constant_index (m, MONO_TOKEN_FIELD_DEF | (i+1), 0))) {
                                mono_metadata_decode_row (&m->tables [MONO_TABLE_CONSTANT], crow-1, const_cols, MONO_CONSTANT_SIZE);
-                               lit = get_constant (m, const_cols [MONO_CONSTANT_TYPE], const_cols [MONO_CONSTANT_VALUE]);
+                               lit = get_constant (m, (MonoTypeEnum)const_cols [MONO_CONSTANT_TYPE], const_cols [MONO_CONSTANT_VALUE]);
                        } else {
                                lit = g_strdup ("not found");
                        }
@@ -800,7 +800,7 @@ dump_cattrs_for_method_params (MonoImage *m, guint32 midx, MonoMethodSignature *
                        if ((crow = mono_metadata_get_constant_index(m, MONO_TOKEN_PARAM_DEF | i, 0))) {
                                guint32 const_cols [MONO_CONSTANT_SIZE];
                                mono_metadata_decode_row( &m->tables[MONO_TABLE_CONSTANT], crow-1, const_cols, MONO_CONSTANT_SIZE);
-                               lit = get_constant(m, const_cols [MONO_CONSTANT_TYPE], const_cols [MONO_CONSTANT_VALUE]);
+                               lit = get_constant (m, (MonoTypeEnum)const_cols [MONO_CONSTANT_TYPE], const_cols [MONO_CONSTANT_VALUE]);
                        }
                        else {
                                lit = g_strdup ("not found");
@@ -958,6 +958,7 @@ dis_property_methods (MonoImage *m, guint32 prop, MonoGenericContainer *containe
 static char*
 dis_property_signature (MonoImage *m, guint32 prop_idx, MonoGenericContainer *container)
 {
+       MonoError error;
        MonoTableInfo *propt = &m->tables [MONO_TABLE_PROPERTY];
        const char *ptr;
        guint32 pcount, i;
@@ -980,8 +981,13 @@ dis_property_signature (MonoImage *m, guint32 prop_idx, MonoGenericContainer *co
                g_string_append (res, "instance ");
        ptr++;
        pcount = mono_metadata_decode_value (ptr, &ptr);
-       type = mono_metadata_parse_type_full (m, container, 0, ptr, &ptr);
-       blurb = dis_stringify_type (m, type, TRUE);
+       type = mono_metadata_parse_type_checked (m, container, 0, FALSE, ptr, &ptr, &error);
+       if (type) {
+               blurb = dis_stringify_type (m, type, TRUE);
+       } else {
+               blurb = g_strdup_printf ("Invalid type due to %s", mono_error_get_message (&error));
+               mono_error_cleanup (&error);
+       }
        if (prop_flags & 0x0200)
                g_string_append (res, "specialname ");
        if (prop_flags & 0x0400)
@@ -993,8 +999,14 @@ dis_property_signature (MonoImage *m, guint32 prop_idx, MonoGenericContainer *co
        for (i = 0; i < pcount; i++) {
                if (i)
                        g_string_append (res, ", ");
-               param = mono_metadata_parse_type_full (m, container, 0, ptr, &ptr);
-               blurb = dis_stringify_param (m, param);
+               param = mono_metadata_parse_type_checked (m, container, 0, FALSE, ptr, &ptr, &error);
+               if (type) {
+                       blurb = dis_stringify_param (m, param);
+               } else {
+                       blurb = g_strdup_printf ("Invalid type due to %s", mono_error_get_message (&error));
+                       mono_error_cleanup (&error);
+               }
+
                g_string_append (res, blurb);
                g_free (blurb);
        }
@@ -1664,7 +1676,7 @@ setup_filter (MonoImage *image)
        const char *name = mono_image_get_name (image);
 
        for (item = filter_list; item; item = item->next) {
-               ifilter = item->data;
+               ifilter = (ImageFilter *)item->data;
                if (strcmp (ifilter->name, name) == 0) {
                        cur_filter = ifilter;
                        return;
@@ -1676,8 +1688,8 @@ setup_filter (MonoImage *image)
 static int
 int_cmp (const void *e1, const void *e2)
 {
-       const int *i1 = e1;
-       const int *i2 = e2;
+       const int *i1 = (const int *)e1;
+       const int *i2 = (const int *)e2;
        return *i1 - *i2;
 }
 
@@ -1720,7 +1732,7 @@ add_filter (const char *name)
        GList *item;
 
        for (item = filter_list; item; item = item->next) {
-               ifilter = item->data;
+               ifilter = (ImageFilter *)item->data;
                if (strcmp (ifilter->name, name) == 0)
                        return ifilter;
        }
@@ -1736,10 +1748,10 @@ add_item (TableFilter *tf, int val)
        if (tf->count >= tf->size) {
                if (!tf->size) {
                        tf->size = 8;
-                       tf->elems = g_malloc (sizeof (int) * tf->size);
+                       tf->elems = (int *)g_malloc (sizeof (int) * tf->size);
                } else {
                        tf->size *= 2;
-                       tf->elems = g_realloc (tf->elems, sizeof (int) * tf->size);
+                       tf->elems = (int *)g_realloc (tf->elems, sizeof (int) * tf->size);
                }
        }
        tf->elems [tf->count++] = val;
@@ -1752,7 +1764,7 @@ sort_filter_elems (void)
        GList *item;
 
        for (item = filter_list; item; item = item->next) {
-               ifilter = item->data;
+               ifilter = (ImageFilter *)item->data;
                qsort (ifilter->types.elems, ifilter->types.count, sizeof (int), int_cmp);
                qsort (ifilter->fields.elems, ifilter->fields.count, sizeof (int), int_cmp);
                qsort (ifilter->methods.elems, ifilter->methods.count, sizeof (int), int_cmp);
@@ -1913,7 +1925,7 @@ monodis_assembly_search_hook (MonoAssemblyName *aname, gpointer user_data)
         GList *tmp;
 
        for (tmp = loaded_assemblies; tmp; tmp = tmp->next) {
-               MonoAssembly *ass = tmp->data;
+               MonoAssembly *ass = (MonoAssembly *)tmp->data;
                if (mono_assembly_names_equal (aname, &ass->aname))
                       return ass;
        }
@@ -2000,7 +2012,7 @@ main (int argc, char *argv [])
         * If we just have one file, use the corlib version it requires.
         */
        if (!input_files->next) {
-               char *filename = input_files->data;
+               char *filename = (char *)input_files->data;
 
                mono_init_from_assembly (argv [0], filename);
 
@@ -2011,7 +2023,7 @@ main (int argc, char *argv [])
                mono_init (argv [0]);
 
                for (l = input_files; l; l = l->next)
-                       disassemble_file (l->data);
+                       disassemble_file ((const char *)l->data);
        }
 
        return 0;