Tue Jun 11 14:11:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / dis / dis-cil.c
index 2d97d007f9ac1bc5cf7143d8bc352bb5e8700fc6..a250356a0d7927369e3cfe888c8797fc754fd4ef 100644 (file)
@@ -59,10 +59,18 @@ dissasemble_cil (MonoImage *m, MonoMethodHeader *mh)
        const MonoOpcode *entry;
        char indent[1024];
        int i, indent_level = 0;
-       char *clause_names[] = {"catch", "filter", "finally", "fault"};
+       const char *clause_names[] = {"catch", "filter", "finally", "fault"};
 
        indent [0] = 0;
 
+#ifdef DEBUG
+       for (i = 0; i < mh->num_clauses; ++i) {
+#define clause mh->clauses [i]
+               g_print ("out clause %d: from %d len=%d, handler at %d, %d\n", 
+                       clause.flags, clause.try_offset, clause.try_len, clause.handler_offset, clause.handler_len);
+#undef clause
+       }
+#endif
        while (ptr < end){
                for (i = mh->num_clauses - 1; i >= 0 ; --i) {
                        if ((mh->clauses[i].flags == 0 || mh->clauses[i].flags == 2) && ptr == start + mh->clauses[i].try_offset) {
@@ -136,7 +144,8 @@ dissasemble_cil (MonoImage *m, MonoMethodHeader *mh)
                        break;
                        
                case MonoInlineR: {
-                       double r = *(double *) ptr;
+                       double r;
+                       readr8 (ptr, &r);
                        fprintf (output, "%g", r);
                        ptr += 8;
                        break;
@@ -167,16 +176,16 @@ dissasemble_cil (MonoImage *m, MonoMethodHeader *mh)
                case MonoInlineSwitch: {
                        guint32 count = read32 (ptr);
                        const unsigned char *endswitch;
-                       guint32 i;
+                       guint32 n;
                        
                        ptr += 4;
                        endswitch = ptr + sizeof (guint32) * count;
                        fprintf (output, "(\n");
                        CODE_INDENT;
-                       for (i = 0; i < count; i++){
+                       for (n = 0; n < count; n++){
                                fprintf (output, "\t%sIL_%04x%s", indent, 
                                        endswitch-start+read32 (ptr), 
-                                       i == count - 1 ? ")" : ",\n");
+                                       n == count - 1 ? ")" : ",\n");
                                ptr += 4;
                        }
                        CODE_UNINDENT;
@@ -205,9 +214,9 @@ dissasemble_cil (MonoImage *m, MonoMethodHeader *mh)
                }
 
                case MonoInlineVar: {
-                       gint16 var_idx = read16 (ptr);
+                       guint16 var_idx = read16 (ptr);
 
-                       fprintf (output, "variable-%d\n", var_idx);
+                       fprintf (output, "%d\n", var_idx);
                        ptr += 2;
                        break;
                }
@@ -229,7 +238,8 @@ dissasemble_cil (MonoImage *m, MonoMethodHeader *mh)
                }
 
                case MonoShortInlineR: {
-                       float f = *(float *) ptr;
+                       float f;
+                       readr4 (ptr, &f);
 
                        fprintf (output, "%g", (double) f);
                        ptr += 4;
@@ -237,7 +247,7 @@ dissasemble_cil (MonoImage *m, MonoMethodHeader *mh)
                }
 
                case MonoShortInlineVar: {
-                       signed char x = *ptr;
+                       unsigned char x = *ptr;
 
                        fprintf (output, "%d", (int) x);
                        ptr++;