mono_object_new_alloc_specific_checked (MonoVTable *vtable, MonoError *error);
void
-mono_field_static_get_value_for_thread (MonoInternalThread *thread, MonoVTable *vt, MonoClassField *field, void *value);
+mono_field_static_get_value_for_thread (MonoInternalThread *thread, MonoVTable *vt, MonoClassField *field, void *value, MonoError *error);
/* exported, used by the debugger */
MONO_API void *
}
void
-mono_field_static_get_value_for_thread (MonoInternalThread *thread, MonoVTable *vt, MonoClassField *field, void *value)
+mono_field_static_get_value_for_thread (MonoInternalThread *thread, MonoVTable *vt, MonoClassField *field, void *value, MonoError *error)
{
MONO_REQ_GC_UNSAFE_MODE;
- MonoError error;
void *src;
+ mono_error_init (error);
+
g_return_if_fail (field->type->attrs & FIELD_ATTRIBUTE_STATIC);
if (field->type->attrs & FIELD_ATTRIBUTE_LITERAL) {
- get_default_field_value (vt->domain, field, value, &error);
- mono_error_raise_exception (&error); /* FIXME don't raise here */
+ get_default_field_value (vt->domain, field, value, error);
return;
}
{
MONO_REQ_GC_NEUTRAL_MODE;
- mono_field_static_get_value_for_thread (mono_thread_internal_current (), vt, field, value);
+ MonoError error;
+
+ mono_field_static_get_value_for_thread (mono_thread_internal_current (), vt, field, value, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
}
/**
vtable = mono_class_vtable (domain, f->parent);
val = (guint8 *)g_malloc (mono_class_instance_size (mono_class_from_mono_type (f->type)));
- mono_field_static_get_value_for_thread (thread ? thread : mono_thread_internal_current (), vtable, f, val);
+ mono_field_static_get_value_for_thread (thread ? thread : mono_thread_internal_current (), vtable, f, val, &error);
+ if (!is_ok (&error))
+ return ERR_INVALID_FIELDID;
buffer_add_value (buf, f->type, val, domain);
g_free (val);
}