ICALL(CATTR_DATA_1, "ResolveArgumentsInternal", mono_reflection_resolve_custom_attribute_data)
ICALL_TYPE(ASSEMB, "System.Reflection.Emit.AssemblyBuilder", ASSEMB_1)
-ICALL(ASSEMB_1, "InternalAddModule", mono_image_load_module_dynamic)
+ICALL(ASSEMB_1, "InternalAddModule", ves_icall_System_Reflection_Emit_AssemblyBuilder_InternalAddModule)
ICALL(ASSEMB_2, "basic_init", mono_image_basic_init)
ICALL_TYPE(CATTRB, "System.Reflection.Emit.CustomAttributeBuilder", CATTRB_1)
return obj;
}
+ICALL_EXPORT MonoReflectionModule*
+ves_icall_System_Reflection_Emit_AssemblyBuilder_InternalAddModule (MonoReflectionAssemblyBuilder *ab, MonoString *fileName)
+{
+ MonoError error;
+ MonoReflectionModule *result = mono_image_load_module_dynamic (ab, fileName, &error);
+ mono_error_set_pending_exception (&error);
+ return result;
+}
+
static gboolean
get_caller (MonoMethod *m, gint32 no, gint32 ilo, gboolean managed, gpointer data)
{
gboolean mono_image_create_pefile (MonoReflectionModuleBuilder *module, HANDLE file, MonoError *error);
void mono_image_basic_init (MonoReflectionAssemblyBuilder *assembly);
-MonoReflectionModule * mono_image_load_module_dynamic (MonoReflectionAssemblyBuilder *assembly, MonoString *file_name);
+MonoReflectionModule * mono_image_load_module_dynamic (MonoReflectionAssemblyBuilder *assembly, MonoString *file_name, MonoError *error);
guint32 mono_image_insert_string (MonoReflectionModuleBuilder *module, MonoString *str);
guint32 mono_image_create_token (MonoDynamicImage *assembly, MonoObject *obj, gboolean create_methodspec, gboolean register_token, MonoError *error);
guint32 mono_image_create_method_token (MonoDynamicImage *assembly, MonoObject *obj, MonoArray *opt_param_types, MonoError *error);
#ifndef DISABLE_REFLECTION_EMIT
MonoReflectionModule *
-mono_image_load_module_dynamic (MonoReflectionAssemblyBuilder *ab, MonoString *fileName)
+mono_image_load_module_dynamic (MonoReflectionAssemblyBuilder *ab, MonoString *fileName, MonoError *error)
{
- MonoError error;
- MonoReflectionModule *result = NULL;
char *name;
MonoImage *image;
MonoImageOpenStatus status;
MonoImage **new_modules;
gboolean *new_modules_loaded;
+ mono_error_init (error);
+
name = mono_string_to_utf8 (fileName);
image = mono_image_open (name, &status);
if (!image) {
- MonoException *exc;
if (status == MONO_IMAGE_ERROR_ERRNO)
- exc = mono_get_exception_file_not_found (fileName);
+ mono_error_set_exception_instance (error, mono_get_exception_file_not_found (fileName));
else
- exc = mono_get_exception_bad_image_format (name);
+ mono_error_set_bad_image_name (error, name, NULL);
g_free (name);
- mono_raise_exception (exc);
+ return NULL;
}
g_free (name);
mono_assembly_load_references (image, &status);
if (status) {
mono_image_close (image);
- mono_raise_exception (mono_get_exception_file_not_found (fileName));
+ mono_error_set_exception_instance (error, mono_get_exception_file_not_found (fileName));
+ return NULL;
}
- result = mono_module_get_object_checked (mono_domain_get (), image, &error);
- mono_error_raise_exception (&error); /* FIXME don't raise here */
- return result;
+ return mono_module_get_object_checked (mono_domain_get (), image, error);
}
#endif /* DISABLE_REFLECTION_EMIT */
}
MonoReflectionModule *
-mono_image_load_module_dynamic (MonoReflectionAssemblyBuilder *ab, MonoString *fileName)
+mono_image_load_module_dynamic (MonoReflectionAssemblyBuilder *ab, MonoString *fileName, MonoError *error)
{
g_assert_not_reached ();
return NULL;