#include <config.h>
#include <glib.h>
#include <stdio.h>
+#ifdef HAVE_WCHAR_H
#include <wchar.h>
+#endif
#include "meta.h"
#include "get.h"
#include "dump.h"
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) {
break;
case MonoInlineR: {
- double r = *(double *) ptr;
+ double r;
+ readr8 (ptr, &r);
fprintf (output, "%g", r);
ptr += 8;
break;
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;
}
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;
}
}
case MonoShortInlineR: {
- float f = *(float *) ptr;
+ float f;
+ readr4 (ptr, &f);
fprintf (output, "%g", (double) f);
ptr += 4;
}
case MonoShortInlineVar: {
- signed char x = *ptr;
+ unsigned char x = *ptr;
fprintf (output, "%d", (int) x);
ptr++;