[runtime] Use MonoError in mono_field_get_value_object
[mono.git] / mono / metadata / icall.c
index 171019c57da3a8a08e9a9338ac983adda3973e86..ee70870d102a934a85cb544f61aadd01310bd867 100644 (file)
@@ -985,6 +985,7 @@ ves_icall_System_Object_MemberwiseClone (MonoObject *this_obj)
 ICALL_EXPORT gint32
 ves_icall_System_ValueType_InternalGetHashCode (MonoObject *this_obj, MonoArray **fields)
 {
+       MonoError error;
        MonoClass *klass;
        MonoObject **values = NULL;
        MonoObject *o;
@@ -1024,7 +1025,11 @@ ves_icall_System_ValueType_InternalGetHashCode (MonoObject *this_obj, MonoArray
                default:
                        if (!values)
                                values = g_newa (MonoObject*, mono_class_num_fields (klass));
-                       o = mono_field_get_value_object (mono_object_domain (this_obj), field, this_obj);
+                       o = mono_field_get_value_object_checked (mono_object_domain (this_obj), field, this_obj, &error);
+                       if (!is_ok (&error)) {
+                               mono_error_set_pending_exception (&error);
+                               return 0;
+                       }
                        values [count++] = o;
                }
        }
@@ -1043,6 +1048,7 @@ ves_icall_System_ValueType_InternalGetHashCode (MonoObject *this_obj, MonoArray
 ICALL_EXPORT MonoBoolean
 ves_icall_System_ValueType_Equals (MonoObject *this_obj, MonoObject *that, MonoArray **fields)
 {
+       MonoError error;
        MonoClass *klass;
        MonoObject **values = NULL;
        MonoObject *o;
@@ -1128,9 +1134,17 @@ ves_icall_System_ValueType_Equals (MonoObject *this_obj, MonoObject *that, MonoA
                default:
                        if (!values)
                                values = g_newa (MonoObject*, mono_class_num_fields (klass) * 2);
-                       o = mono_field_get_value_object (mono_object_domain (this_obj), field, this_obj);
+                       o = mono_field_get_value_object_checked (mono_object_domain (this_obj), field, this_obj, &error);
+                       if (!is_ok (&error)) {
+                               mono_error_set_pending_exception (&error);
+                               return FALSE;
+                       }
                        values [count++] = o;
-                       o = mono_field_get_value_object (mono_object_domain (this_obj), field, that);
+                       o = mono_field_get_value_object_checked (mono_object_domain (this_obj), field, that, &error);
+                       if (!is_ok (&error)) {
+                               mono_error_set_pending_exception (&error);
+                               return FALSE;
+                       }
                        values [count++] = o;
                }
 
@@ -1814,6 +1828,7 @@ ves_icall_MonoField_GetParentType (MonoReflectionField *field, MonoBoolean decla
 ICALL_EXPORT MonoObject *
 ves_icall_MonoField_GetValueInternal (MonoReflectionField *field, MonoObject *obj)
 {      
+       MonoError error;
        MonoClass *fklass = field->klass;
        MonoClassField *cf = field->field;
        MonoDomain *domain = mono_object_domain (field);
@@ -1827,7 +1842,9 @@ ves_icall_MonoField_GetValueInternal (MonoReflectionField *field, MonoObject *ob
        if (mono_security_core_clr_enabled ())
                mono_security_core_clr_ensure_reflection_access_field (cf);
 
-       return mono_field_get_value_object (domain, cf, obj);
+       MonoObject * result = mono_field_get_value_object_checked (domain, cf, obj, &error);
+       mono_error_set_pending_exception (&error);
+       return result;
 }
 
 ICALL_EXPORT void