*/
}
+static gboolean
+add_event_other_methods_to_array (MonoDomain *domain, MonoMethod *m, MonoArrayHandle dest, int i, MonoError *error)
+{
+ HANDLE_FUNCTION_ENTER ();
+ error_init (error);
+ MonoReflectionMethodHandle rm = mono_method_get_object_handle (domain, m, NULL, error);
+ if (!is_ok (error))
+ goto leave;
+ MONO_HANDLE_ARRAY_SETREF (dest, i, rm);
+leave:
+ HANDLE_FUNCTION_RETURN_VAL (is_ok (error));
+}
+
ICALL_EXPORT void
-ves_icall_MonoEventInfo_get_event_info (MonoReflectionMonoEvent *event, MonoEventInfo *info)
+ves_icall_MonoEventInfo_get_event_info (MonoReflectionMonoEventHandle ref_event, MonoEventInfo *info, MonoError *error)
{
- MonoError error;
- MonoReflectionType *rt;
- MonoReflectionMethod *rm;
- MonoDomain *domain = mono_object_domain (event);
+ error_init (error);
+ MonoDomain *domain = MONO_HANDLE_DOMAIN (ref_event);
- rt = mono_type_get_object_checked (domain, &event->klass->byval_arg, &error);
- if (mono_error_set_pending_exception (&error))
- return;
+ MonoClass *klass = MONO_HANDLE_GETVAL (ref_event, klass);
+ MonoEvent *event = MONO_HANDLE_GETVAL (ref_event, event);
- MONO_STRUCT_SETREF (info, reflected_type, rt);
+ MonoReflectionTypeHandle rt = mono_type_get_object_handle (domain, &klass->byval_arg, error);
+ return_if_nok (error);
+ MONO_STRUCT_SETREF (info, reflected_type, MONO_HANDLE_RAW (rt));
- rt = mono_type_get_object_checked (domain, &event->event->parent->byval_arg, &error);
- if (mono_error_set_pending_exception (&error))
- return;
+ rt = mono_type_get_object_handle (domain, &event->parent->byval_arg, error);
+ return_if_nok (error);
+ MONO_STRUCT_SETREF (info, declaring_type, MONO_HANDLE_RAW (rt));
- MONO_STRUCT_SETREF (info, declaring_type, rt);
+ MonoStringHandle ev_name = mono_string_new_handle (domain, event->name, error);
+ return_if_nok (error);
+ MONO_STRUCT_SETREF (info, name, MONO_HANDLE_RAW (ev_name));
- MONO_STRUCT_SETREF (info, name, mono_string_new (domain, event->event->name));
- info->attrs = event->event->attrs;
+ info->attrs = event->attrs;
- if (event->event->add) {
- rm = mono_method_get_object_checked (domain, event->event->add, NULL, &error);
- if (mono_error_set_pending_exception (&error))
- return;
+ MonoReflectionMethodHandle rm;
+ if (event->add) {
+ rm = mono_method_get_object_handle (domain, event->add, NULL, error);
+ return_if_nok (error);
} else {
- rm = NULL;
+ rm = MONO_HANDLE_NEW (MonoReflectionMethod, NULL);
}
- MONO_STRUCT_SETREF (info, add_method, rm);
+ MONO_STRUCT_SETREF (info, add_method, MONO_HANDLE_RAW (rm));
- if (event->event->remove) {
- rm = mono_method_get_object_checked (domain, event->event->remove, NULL, &error);
- if (mono_error_set_pending_exception (&error))
- return;
+ if (event->remove) {
+ rm = mono_method_get_object_handle (domain, event->remove, NULL, error);
+ return_if_nok (error);
} else {
- rm = NULL;
+ rm = MONO_HANDLE_NEW (MonoReflectionMethod, NULL);
}
- MONO_STRUCT_SETREF (info, remove_method, rm);
+ MONO_STRUCT_SETREF (info, remove_method, MONO_HANDLE_RAW (rm));
- if (event->event->raise) {
- rm = mono_method_get_object_checked (domain, event->event->raise, NULL, &error);
- if (mono_error_set_pending_exception (&error))
- return;
+ if (event->raise) {
+ rm = mono_method_get_object_handle (domain, event->raise, NULL, error);
+ return_if_nok (error);
} else {
- rm = NULL;
+ rm = MONO_HANDLE_NEW (MonoReflectionMethod, NULL);
}
- MONO_STRUCT_SETREF (info, raise_method, rm);
+ MONO_STRUCT_SETREF (info, raise_method, MONO_HANDLE_RAW (rm));
#ifndef MONO_SMALL_CONFIG
- if (event->event->other) {
+ if (event->other) {
int i, n = 0;
- while (event->event->other [n])
+ while (event->other [n])
n++;
- MonoArray *info_arr = mono_array_new_checked (domain, mono_defaults.method_info_class, n, &error);
- if (mono_error_set_pending_exception (&error))
- return;
- MONO_STRUCT_SETREF (info, other_methods, info_arr);
+ MonoArrayHandle info_arr = mono_array_new_handle (domain, mono_defaults.method_info_class, n, error);
+ return_if_nok (error);
- for (i = 0; i < n; i++) {
- rm = mono_method_get_object_checked (domain, event->event->other [i], NULL, &error);
- if (mono_error_set_pending_exception (&error))
+ MONO_STRUCT_SETREF (info, other_methods, MONO_HANDLE_RAW (info_arr));
+
+ for (i = 0; i < n; i++)
+ if (!add_event_other_methods_to_array (domain, event->other [i], info_arr, i, error))
return;
- mono_array_setref (info->other_methods, i, rm);
- }
}
#endif
}