if (error->error_code != MONO_ERROR_NONE)
return;
- error->type_name = error->assembly_name = error->member_name = error->full_message = error->exception_name_space = error->exception_name = NULL;
+ error->type_name = error->assembly_name = error->member_name = error->full_message = error->exception_name_space = error->exception_name = error->full_message_with_fields = NULL;
error->klass = NULL;
error->message [0] = 0;
}
+static const char*
+get_type_name (MonoErrorInternal *error)
+{
+ if (error->type_name)
+ return error->type_name;
+ if (error->klass)
+ return error->klass->name;
+ return "<unknown type>";
+}
+
+static const char*
+get_assembly_name (MonoErrorInternal *error)
+{
+ if (error->assembly_name)
+ return error->assembly_name;
+ if (error->klass && error->klass->image)
+ return error->klass->image->name;
+ return "<unknown assembly>";
+}
+
void
mono_error_init_flags (MonoError *oerror, unsigned short flags)
{
return;
g_free ((char*)error->full_message);
+ g_free ((char*)error->full_message_with_fields);
if (!(error->flags & MONO_ERROR_FREE_STRINGS)) //no memory was allocated
return;
MonoErrorInternal *error = (MonoErrorInternal*)oerror;
if (error->error_code == MONO_ERROR_NONE)
return NULL;
- return mono_internal_error_get_message (error);
+ if (error->full_message_with_fields)
+ return error->full_message_with_fields;
+
+ error->full_message_with_fields = g_strdup_printf ("%s assembly:%s type:%s member:%s",
+ mono_internal_error_get_message (error),
+ get_assembly_name (error),
+ get_type_name (error),
+ error->member_name ? error->member_name : "<none>");
+
+ return error->full_message_with_fields ? error->full_message_with_fields : mono_internal_error_get_message (error);
}
/*
mono_loader_clear_error ();
}
-static const char*
-get_type_name (MonoErrorInternal *error)
-{
- if (error->type_name)
- return error->type_name;
- if (error->klass)
- return error->klass->name;
- return "<unknown type>";
-}
-
-static const char*
-get_assembly_name (MonoErrorInternal *error)
-{
- if (error->assembly_name)
- return error->assembly_name;
- if (error->klass && error->klass->image)
- return error->klass->image->name;
- return "<unknown assembly>";
-}
-
void
mono_loader_set_error_from_mono_error (MonoError *oerror)
{