return addr;
}
+MonoString*
+ves_icall_mono_ldstr (MonoDomain *domain, MonoImage *image, guint32 idx)
+{
+ MonoError error;
+ MonoString *result = mono_ldstr_checked (domain, image, idx, &error);
+ mono_error_set_pending_exception (&error);
+ return result;
+}
+
MonoString*
mono_helper_ldstr (MonoImage *image, guint32 idx)
{
- return mono_ldstr (mono_domain_get (), image, idx);
+ MonoError error;
+ MonoString *result = mono_ldstr_checked (mono_domain_get (), image, idx, &error);
+ mono_error_set_pending_exception (&error);
+ return result;
}
MonoString*
mono_helper_ldstr_mscorlib (guint32 idx)
{
- return mono_ldstr (mono_domain_get (), mono_defaults.corlib, idx);
+ MonoError error;
+ MonoString *result = mono_ldstr_checked (mono_domain_get (), mono_defaults.corlib, idx, &error);
+ mono_error_set_pending_exception (&error);
+ return result;
}
MonoObject*
mono_error_set_pending_exception (&error);
}
+void
+ves_icall_mono_delegate_ctor (MonoObject *this_obj, MonoObject *target, gpointer addr)
+{
+ MonoError error;
+ mono_delegate_ctor (this_obj, target, addr, &error);
+ mono_error_set_pending_exception (&error);
+}
+
gpointer
mono_fill_class_rgctx (MonoVTable *vtable, int index)
{
/* Same as in common_call_trampoline () */
/* Avoid loading metadata or creating a generic vtable if possible */
- addr = mono_aot_get_method_from_vt_slot (mono_domain_get (), vt, slot);
+ addr = mono_aot_get_method_from_vt_slot (mono_domain_get (), vt, slot, &error);
+ mono_error_raise_exception (&error); // FIXME: Don't raise here
if (addr && !vt->klass->valuetype)
return mono_create_ftnptr (mono_domain_get (), addr);
if (ex)
mono_raise_exception (ex);
}
+
+void
+mono_throw_method_access (MonoMethod *callee, MonoMethod *caller)
+{
+ char *callee_name = mono_method_full_name (callee, 1);
+ char *caller_name = mono_method_full_name (caller, 1);
+ MonoError error;
+
+ mono_error_init (&error);
+ mono_error_set_generic_error (&error, "System", "MethodAccessException", "Method `%s' is inaccessible from method `%s'\n", callee_name, caller_name);
+ mono_error_set_pending_exception (&error);
+ g_free (callee_name);
+ g_free (caller_name);
+}