Ejemplo n.º 1
0
void
mono_loader_set_error_from_mono_error (MonoError *oerror)
{
	MonoErrorInternal *error = (MonoErrorInternal*)oerror;

	switch (error->error_code) {
	case MONO_ERROR_MISSING_METHOD:
		mono_loader_set_error_method_load (get_type_name (error), error->member_name);
		break;
	case MONO_ERROR_MISSING_FIELD:
		mono_loader_set_error_field_load (error->exn.klass, error->member_name);
		break;
	case MONO_ERROR_TYPE_LOAD:
		mono_loader_set_error_type_load (get_type_name (error), get_assembly_name (error));
		break;
	case MONO_ERROR_FILE_NOT_FOUND:
		/* XXX can't recover if it's ref only or not */
		mono_loader_set_error_assembly_load (get_assembly_name (error), FALSE);
		break;
	case MONO_ERROR_BAD_IMAGE:
		mono_loader_set_error_bad_image (g_strdup (error->full_message));
		break;
	case MONO_ERROR_EXCEPTION_INSTANCE:
		mono_loader_set_error_bad_image (g_strdup_printf ("Non translatable error"));
	default:
		mono_loader_set_error_bad_image (g_strdup_printf ("Non translatable error: %s", error->full_message));
	}
}
Ejemplo n.º 2
0
/*Return a pointer to the internal error message, might be NULL.
Caller should not release it.*/
const char*
mono_error_get_message (MonoError *oerror)
{
	MonoErrorInternal *error = (MonoErrorInternal*)oerror;
	const guint16 error_code = error->error_code;
	if (error_code == MONO_ERROR_NONE)
		return NULL;

	g_assert (error_code != MONO_ERROR_CLEANUP_CALLED_SENTINEL);

	//Those are the simplified errors
	switch (error_code) {
	case MONO_ERROR_MISSING_METHOD:
	case MONO_ERROR_BAD_IMAGE:
	case MONO_ERROR_FILE_NOT_FOUND:
	case MONO_ERROR_MISSING_FIELD:
		return error->full_message;
	}

	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",
		error->full_message,
		get_assembly_name (error),
		get_type_name (error),
		error->member_name);

	return error->full_message_with_fields ? error->full_message_with_fields : error->full_message;
}
Ejemplo n.º 3
0
/*Return a pointer to the internal error message, might be NULL.
Caller should not release it.*/
const char*
mono_error_get_message (MonoError *oerror)
{
	MonoErrorInternal *error = (MonoErrorInternal*)oerror;
	if (error->error_code == MONO_ERROR_NONE)
		return NULL;
	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",
		error->full_message,
		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 : error->full_message;
}