}
MonoReflectionAssembly *
-mono_try_assembly_resolve (MonoDomain *domain, MonoString *fname, MonoAssembly *requesting, gboolean refonly)
+mono_try_assembly_resolve (MonoDomain *domain, MonoString *fname, MonoAssembly *requesting, gboolean refonly, MonoError *error)
{
- MonoError error;
MonoReflectionAssembly *ret;
MonoClass *klass;
MonoMethod *method;
MonoBoolean isrefonly;
gpointer params [3];
+ mono_error_init (error);
+
if (mono_runtime_get_no_exec ())
return NULL;
isrefonly = refonly ? 1 : 0;
params [0] = fname;
if (requesting) {
- params[1] = mono_assembly_get_object_checked (domain, requesting, &error);
- if (!mono_error_ok (&error))
- mono_error_raise_exception (&error); /* FIXME don't raise here */
+ params[1] = mono_assembly_get_object_checked (domain, requesting, error);
+ return_val_if_nok (error, NULL);
} else
params [1] = NULL;
params [2] = &isrefonly;
- ret = (MonoReflectionAssembly *) mono_runtime_invoke_checked (method, domain->domain, params, &error);
- mono_error_raise_exception (&error); /* FIXME don't raise here */
+ ret = (MonoReflectionAssembly *) mono_runtime_invoke_checked (method, domain->domain, params, error);
+ return_val_if_nok (error, NULL);
return ret;
}
mono_domain_assembly_postload_search (MonoAssemblyName *aname, MonoAssembly *requesting,
gboolean refonly)
{
+ MonoError error;
MonoReflectionAssembly *assembly;
MonoDomain *domain = mono_domain_get ();
char *aname_str;
g_free (aname_str);
return NULL;
}
- assembly = mono_try_assembly_resolve (domain, str, requesting, refonly);
+
+ assembly = mono_try_assembly_resolve (domain, str, requesting, refonly, &error);
+ if (!mono_error_ok (&error)) {
+ g_free (aname_str);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
+ }
+
g_free (aname_str);
if (assembly)
if (!parsed) {
/* This is a parse error... */
- if (!refOnly)
- refass = mono_try_assembly_resolve (domain, assRef, NULL, refOnly);
+ if (!refOnly) {
+ refass = mono_try_assembly_resolve (domain, assRef, NULL, refOnly, &error);
+ if (!mono_error_ok (&error)) {
+ mono_error_set_pending_exception (&error);
+ return NULL;
+ }
+ }
return refass;
}
if (!ass) {
/* MS.NET doesn't seem to call the assembly resolve handler for refonly assemblies */
- if (!refOnly)
- refass = mono_try_assembly_resolve (domain, assRef, NULL, refOnly);
+ if (!refOnly) {
+ refass = mono_try_assembly_resolve (domain, assRef, NULL, refOnly, &error);
+ if (!mono_error_ok (&error)) {
+ mono_error_set_pending_exception (&error);
+ return NULL;
+ }
+ }
else
refass = NULL;
if (!refass) {
MonoAssembly*
mono_assembly_load_with_partial_name (const char *name, MonoImageOpenStatus *status)
{
+ MonoError error;
MonoAssembly *res;
MonoAssemblyName *aname, base_name;
MonoAssemblyName mapped_aname;
res->in_gac = TRUE;
else {
MonoDomain *domain = mono_domain_get ();
- MonoReflectionAssembly *refasm = mono_try_assembly_resolve (domain, mono_string_new (domain, name), NULL, FALSE);
+ MonoReflectionAssembly *refasm;
+
+ refasm = mono_try_assembly_resolve (domain, mono_string_new (domain, name), NULL, FALSE, &error);
+ if (!mono_error_ok (&error)) {
+ g_free (fullname);
+ mono_assembly_name_free (aname);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
+ }
+
if (refasm)
res = refasm->assembly;
}
mono_domain_add_class_static_data (MonoDomain *domain, MonoClass *klass, gpointer data, guint32 *bitmap);
MonoReflectionAssembly *
-mono_try_assembly_resolve (MonoDomain *domain, MonoString *fname, MonoAssembly *requesting, gboolean refonly);
+mono_try_assembly_resolve (MonoDomain *domain, MonoString *fname, MonoAssembly *requesting, gboolean refonly, MonoError *error);
MonoAssembly *
mono_domain_assembly_postload_search (MonoAssemblyName *aname, MonoAssembly *requesting, gboolean refonly);