X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fmonodiet.c;h=931ab9d9afeecf9576d16c3f840fa3cf633bc9d0;hb=63a4c83093f3ca1e85c1a98f380d02c19d95689d;hp=b2df77fbc6b76deeec07bbd3c34bee3c57fc7bc5;hpb=ff228e1c801bda9666b6edab3ee962e05edcf480;p=mono.git diff --git a/mono/metadata/monodiet.c b/mono/metadata/monodiet.c index b2df77fbc6b..931ab9d9afe 100644 --- a/mono/metadata/monodiet.c +++ b/mono/metadata/monodiet.c @@ -86,13 +86,16 @@ static void add_types_from_method (MonoMethod *method) { const MonoOpcode *opcode; MonoMethodHeader *header; - const unsigned char *ip; + const unsigned char *ip, *il_code_end; gpointer val = NULL, oldkey = NULL; int i, n; guint32 token; MonoClass *klass; MonoClassField *field; MonoCustomAttrInfo* cattrs; + MonoType** locals; + gpointer exc_iter; + MonoExceptionClause clause; if (g_hash_table_lookup_extended (method_table, method, &oldkey, &val)) return; @@ -123,19 +126,20 @@ add_types_from_method (MonoMethod *method) { header = mono_method_get_header (method); - for (i = 0; i < header->num_locals; ++i) { - klass = mono_class_from_mono_type (header->locals [i]); + locals = mono_method_header_get_locals (header, &n, NULL); + for (i = 0; i < n; ++i) { + klass = mono_class_from_mono_type (locals); add_type (klass); } - for (i = 0; i < header->num_clauses; ++i) { - MonoExceptionClause *clause = &header->clauses [i]; - if (clause->flags == MONO_EXCEPTION_CLAUSE_NONE) - add_type (clause->data.catch_class); + for (exc_iter = NULL; mono_method_header_get_clauses (header, method, &exc_iter, &clause);) { + if (clause.flags == MONO_EXCEPTION_CLAUSE_NONE) + add_type (clause.data.catch_class); } - ip = header->code; + ip = mono_method_header_get_code (header, &n, NULL); + il_code_end = ip + n; - while (ip < (header->code + header->code_size)) { + while (ip < il_code_end) { if (verbose > 2) g_print ("#%s", mono_disasm_code_one (NULL, method, ip, NULL)); if (*ip == 0xfe) {