2004-12-11 Martin Baulig <martin@ximian.com>
[mono.git] / mono / dis / dis-cil.c
index e8fcc8d01bddec193752b0dd305f09d194d28d3b..dfc250e96f5f157cbdd87a8312d3ba777dfb9330 100644 (file)
@@ -55,7 +55,7 @@ get_encoded_user_string (const char *ptr)
        indent[indent_level*2] = 0;
 
 void
-dissasemble_cil (MonoImage *m, MonoMethodHeader *mh
+dissasemble_cil (MonoImage *m, MonoMethodHeader *mh, MonoGenericContext *context)
 {
        const unsigned char *start = mh->code;
        int size = mh->code_size;
@@ -104,7 +104,8 @@ dissasemble_cil (MonoImage *m, MonoMethodHeader *mh)
                                         fprintf (output, "\t%s} { // %d\n", indent, i);
                                 } else {
                                         char * klass = mh->clauses[i].flags ? g_strdup ("") :
-                                        dis_stringify_token (m, mh->clauses[i].token_or_filter);
+                                               dis_stringify_object_with_class (m, mh->clauses[i].data.catch_class,
+                                                                                FALSE, FALSE);
                                         fprintf (output, "\t%s%s %s { // %d\n", indent,
                                                         clause_names [mh->clauses[i].flags], klass, i);
                                         g_free (klass);
@@ -113,7 +114,7 @@ dissasemble_cil (MonoImage *m, MonoMethodHeader *mh)
                                 if (mh->clauses[i].flags == MONO_EXCEPTION_CLAUSE_FAULT)
                                         in_fault = 1;
                        } 
-                        if (mh->clauses[i].flags == 1 && ptr == start + mh->clauses[i].token_or_filter) {
+                        if (mh->clauses[i].flags == MONO_EXCEPTION_CLAUSE_FILTER && ptr == start + mh->clauses[i].data.filter_offset) {
                                 fprintf (output, "\t%s%s {\n", indent, clause_names[1]);
                                 CODE_INDENT;
                         }
@@ -129,7 +130,7 @@ dissasemble_cil (MonoImage *m, MonoMethodHeader *mh)
                 if (in_fault && entry->opval == 0xDC)
                         fprintf (output, " %s", "endfault");
                 else
-                        fprintf (output, " %s ", mono_opcode_names [i]);
+                        fprintf (output, " %s ", mono_opcode_name (i));
                ptr++;
                switch (entry->argument){
                case MonoInlineBrTarget: {
@@ -143,7 +144,7 @@ dissasemble_cil (MonoImage *m, MonoMethodHeader *mh)
                        guint32 token = read32 (ptr);
                        char *s;
                        
-                       s = get_field (m, token);
+                       s = get_field (m, token, context);
                        fprintf (output, "%s", s);
                        g_free (s);
                        ptr += 4;
@@ -170,7 +171,7 @@ dissasemble_cil (MonoImage *m, MonoMethodHeader *mh)
                        guint32 token = read32 (ptr);
                        char *s;
 
-                       s = get_method (m, token);
+                       s = get_method (m, token, context);
                        fprintf (output, "%s", s);
                        g_free (s);
                        ptr += 4;
@@ -217,7 +218,7 @@ dissasemble_cil (MonoImage *m, MonoMethodHeader *mh)
                        
                        ptr += 4;
                        endswitch = ptr + sizeof (guint32) * count;
-                       fprintf (output, "(\n");
+                       fprintf (output, count > 0 ? "(\n" : "( )");
                        CODE_INDENT;
                        for (n = 0; n < count; n++){
                                fprintf (output, "\t%sIL_%04x%s", indent, 
@@ -233,7 +234,7 @@ dissasemble_cil (MonoImage *m, MonoMethodHeader *mh)
                        guint32 token = read32 (ptr);
                        char *s;
                        
-                       s = get_token (m, token);
+                       s = get_token (m, token, context);
                        fprintf (output, "%s", s);
                        g_free (s);
                        
@@ -243,7 +244,7 @@ dissasemble_cil (MonoImage *m, MonoMethodHeader *mh)
                
                case MonoInlineType: {
                        guint32 token = read32 (ptr);
-                       char *s = get_token_type (m, token);
+                       char *s = get_token_type (m, token, context);
                        fprintf (output, "%s", s);
                        g_free (s);
                        ptr += 4;