if (mono_class_has_failure (klass)) {
*ex = mono_class_get_exception_for_failure (klass);
} else {
- *ex = mono_loader_error_prepare_exception (mono_loader_get_last_error ());
- mono_loader_clear_error ();
+ *ex = mono_get_exception_execution_engine ("Unknown error");
}
return NULL;
}
if (throwOnError)
e = mono_get_exception_type_load (name, NULL);
- if (mono_loader_get_last_error () && mono_defaults.generic_ilist_class)
- e = mono_loader_error_prepare_exception (mono_loader_get_last_error ());
-
- mono_loader_clear_error ();
-
if (e != NULL)
mono_set_pending_exception (e);
return NULL;
- } else if (mono_loader_get_last_error ()) {
- if (throwOnError) {
- mono_set_pending_exception (mono_loader_error_prepare_exception (mono_loader_get_last_error ()));
- return NULL;
- }
- mono_loader_clear_error ();
}
if (type->type == MONO_TYPE_CLASS) {
return NULL;
}
- if (mono_loader_get_last_error ()) {
- mono_set_pending_exception (mono_loader_error_prepare_exception (mono_loader_get_last_error ()));
- return NULL;
- } else {
- return res;
- }
+ return res;
}
ICALL_EXPORT MonoArray*
}
}
-/**
- * mono_loader_error_prepare_exception:
- * @error: The MonoLoaderError to turn into an exception
- *
- * This turns a MonoLoaderError into an exception that can be thrown
- * and resets the Mono Loader Error state during this process.
- *
- */
-MonoException *
-mono_loader_error_prepare_exception (MonoLoaderError *error)
-{
- MonoException *ex = NULL;
-
- switch (error->exception_type) {
- case MONO_EXCEPTION_TYPE_LOAD: {
- char *cname = g_strdup (error->class_name);
- char *aname = g_strdup (error->assembly_name);
- MonoString *class_name;
-
- mono_loader_clear_error ();
-
- class_name = mono_string_new (mono_domain_get (), cname);
-
- ex = mono_get_exception_type_load (class_name, aname);
- g_free (cname);
- g_free (aname);
- break;
- }
- case MONO_EXCEPTION_MISSING_METHOD: {
- char *cname = g_strdup (error->class_name);
- char *aname = g_strdup (error->member_name);
-
- mono_loader_clear_error ();
- ex = mono_get_exception_missing_method (cname, aname);
- g_free (cname);
- g_free (aname);
- break;
- }
-
- case MONO_EXCEPTION_MISSING_FIELD: {
- char *class_name;
- char *cmembername = g_strdup (error->member_name);
- if (error->klass)
- class_name = mono_type_get_full_name (error->klass);
- else
- class_name = g_strdup ("");
-
- mono_loader_clear_error ();
-
- ex = mono_get_exception_missing_field (class_name, cmembername);
- g_free (class_name);
- g_free (cmembername);
- break;
- }
-
- case MONO_EXCEPTION_FILE_NOT_FOUND: {
- char *msg;
- char *filename;
-
- if (error->ref_only)
- msg = g_strdup_printf ("Cannot resolve dependency to assembly '%s' because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.", error->assembly_name);
- else
- msg = g_strdup_printf ("Could not load file or assembly '%s' or one of its dependencies.", error->assembly_name);
- filename = g_strdup (error->assembly_name);
- /* Has to call this before calling anything which might call mono_class_init () */
- mono_loader_clear_error ();
- ex = mono_get_exception_file_not_found2 (msg, mono_string_new (mono_domain_get (), filename));
- g_free (msg);
- g_free (filename);
- break;
- }
-
- case MONO_EXCEPTION_BAD_IMAGE: {
- char *msg = g_strdup (error->msg);
- mono_loader_clear_error ();
- ex = mono_get_exception_bad_image_format (msg);
- g_free (msg);
- break;
- }
-
- default:
- g_assert_not_reached ();
- }
-
- return ex;
-}
-
/*
* find_cached_memberref_sig:
*