return NULL;
}
v = ((gchar *) o) + sizeof (MonoObject);
- mono_get_constant_value_from_blob (domain, def_type, def_value, v);
+ mono_get_constant_value_from_blob (domain, def_type, def_value, v, &error);
+ if (mono_error_set_pending_exception (&error))
+ return NULL;
break;
}
case MONO_TYPE_STRING:
case MONO_TYPE_CLASS:
- mono_get_constant_value_from_blob (domain, def_type, def_value, &o);
+ mono_get_constant_value_from_blob (domain, def_type, def_value, &o, &error);
+ if (mono_error_set_pending_exception (&error))
+ return NULL;
break;
default:
g_assert_not_reached ();
mono_image_build_metadata (MonoReflectionModuleBuilder *module, MonoError *error);
int
-mono_get_constant_value_from_blob (MonoDomain* domain, MonoTypeEnum type, const char *blob, void *value);
+mono_get_constant_value_from_blob (MonoDomain* domain, MonoTypeEnum type, const char *blob, void *value, MonoError *error);
void
mono_release_type_locks (MonoInternalThread *thread);
}
int
-mono_get_constant_value_from_blob (MonoDomain* domain, MonoTypeEnum type, const char *blob, void *value)
+mono_get_constant_value_from_blob (MonoDomain* domain, MonoTypeEnum type, const char *blob, void *value, MonoError *error)
{
MONO_REQ_GC_UNSAFE_MODE;
- MonoError error;
+ mono_error_init (error);
int retval = 0;
const char *p = blob;
mono_metadata_decode_blob_size (p, &p);
readr8 (p, (double*) value);
break;
case MONO_TYPE_STRING:
- *(gpointer*) value = mono_ldstr_metadata_sig (domain, blob, &error);
- mono_error_raise_exception (&error); /* FIXME don't raise here */
+ *(gpointer*) value = mono_ldstr_metadata_sig (domain, blob, error);
break;
case MONO_TYPE_CLASS:
*(gpointer*) value = NULL;
{
MONO_REQ_GC_NEUTRAL_MODE;
+ MonoError error;
MonoTypeEnum def_type;
const char* data;
data = mono_class_get_field_default_value (field, &def_type);
- mono_get_constant_value_from_blob (domain, def_type, data, value);
+ mono_get_constant_value_from_blob (domain, def_type, data, value, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
}
void
retval = &object;
}
- if (!mono_get_constant_value_from_blob (domain, basetype->type, blob, retval))
+ if (!mono_get_constant_value_from_blob (domain, basetype->type, blob, retval, error))
return object;
else
return NULL;