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;
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);
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;
}
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: {
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;
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;
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,
guint32 token = read32 (ptr);
char *s;
- s = get_token (m, token);
+ s = get_token (m, token, context);
fprintf (output, "%s", s);
g_free (s);
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;