ICALL_EXPORT MonoReflectionType *
ves_icall_System_Object_GetType (MonoObject *obj)
{
+ MonoError error;
+ MonoReflectionType *ret;
#ifndef DISABLE_REMOTING
if (obj->vtable->klass == mono_defaults.transparent_proxy_class)
- return mono_type_get_object (mono_object_domain (obj), &((MonoTransparentProxy*)obj)->remote_class->proxy_class->byval_arg);
+ ret = mono_type_get_object_checked (mono_object_domain (obj), &((MonoTransparentProxy*)obj)->remote_class->proxy_class->byval_arg, &error);
else
#endif
- return mono_type_get_object (mono_object_domain (obj), &obj->vtable->klass->byval_arg);
+ ret = mono_type_get_object_checked (mono_object_domain (obj), &obj->vtable->klass->byval_arg, &error);
+
+ mono_error_raise_exception (&error);
+
+ return ret;
}
ICALL_EXPORT void
static MonoReflectionType *
type_from_parsed_name (MonoTypeNameParse *info, MonoBoolean ignoreCase)
{
+ MonoError error;
+ MonoReflectionType *ret;
MonoMethod *m, *dest;
MonoType *type = NULL;
if (!type)
return NULL;
- return mono_type_get_object (mono_domain_get (), type);
+ ret = mono_type_get_object_checked (mono_domain_get (), type, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
+
+ return ret;
}
#ifdef UNUSED
ICALL_EXPORT MonoReflectionType*
ves_icall_type_from_handle (MonoType *handle)
{
+ MonoError error;
+ MonoReflectionType *ret;
MonoDomain *domain = mono_domain_get ();
- return mono_type_get_object (domain, handle);
+ ret = mono_type_get_object_checked (domain, handle, &error);
+ mono_error_raise_exception (&error);
+
+ return ret;
}
/* System.TypeCode */
ves_icall_get_method_info (MonoMethod *method, MonoMethodInfo *info)
{
MonoError error;
+ MonoReflectionType *rt;
MonoDomain *domain = mono_domain_get ();
MonoMethodSignature* sig;
if (!mono_error_ok (&error))
mono_error_raise_exception (&error);
+ rt = mono_type_get_object_checked (domain, &method->klass->byval_arg, &error);
+ mono_error_raise_exception (&error);
+
+ MONO_STRUCT_SETREF (info, parent, rt);
+
+ rt = mono_type_get_object_checked (domain, sig->ret, &error);
+ mono_error_raise_exception (&error);
+
+ MONO_STRUCT_SETREF (info, ret, rt);
- MONO_STRUCT_SETREF (info, parent, mono_type_get_object (domain, &method->klass->byval_arg));
- MONO_STRUCT_SETREF (info, ret, mono_type_get_object (domain, sig->ret));
info->attrs = method->flags;
info->implattrs = method->iflags;
if (sig->call_convention == MONO_CALL_DEFAULT)
ICALL_EXPORT MonoReflectionType*
ves_icall_MonoField_GetParentType (MonoReflectionField *field, MonoBoolean declaring)
{
+ MonoError error;
+ MonoReflectionType *ret;
MonoClass *parent;
parent = declaring? field->field->parent: field->klass;
- return mono_type_get_object (mono_object_domain (field), &parent->byval_arg);
+ ret = mono_type_get_object_checked (mono_object_domain (field), &parent->byval_arg, &error);
+ mono_error_raise_exception (&error);
+
+ return ret;
+
}
ICALL_EXPORT MonoObject *
ves_icall_MonoField_ResolveType (MonoReflectionField *ref_field)
{
MonoError error;
- MonoClassField *field = ref_field->field;
- MonoType *type = mono_field_get_type_checked (field, &error);
- if (!mono_error_ok (&error))
- mono_error_raise_exception (&error);
- return mono_type_get_object (mono_object_domain (ref_field), type);
+ MonoReflectionType *ret;
+ MonoType *type;
+
+ type = mono_field_get_type_checked (ref_field->field, &error);
+ mono_error_raise_exception (&error);
+
+ ret = mono_type_get_object_checked (mono_object_domain (ref_field), type, &error);
+ mono_error_raise_exception (&error);
+
+ return ret;
}
/* From MonoProperty.cs */
ICALL_EXPORT void
ves_icall_get_property_info (const MonoReflectionProperty *property, MonoPropertyInfo *info, PInfo req_info)
{
+ MonoError error;
+ MonoReflectionType *rt;
MonoDomain *domain = mono_object_domain (property);
const MonoProperty *pproperty = property->property;
- if ((req_info & PInfo_ReflectedType) != 0)
- MONO_STRUCT_SETREF (info, parent, mono_type_get_object (domain, &property->klass->byval_arg));
- if ((req_info & PInfo_DeclaringType) != 0)
- MONO_STRUCT_SETREF (info, declaring_type, mono_type_get_object (domain, &pproperty->parent->byval_arg));
+ if ((req_info & PInfo_ReflectedType) != 0) {
+ rt = mono_type_get_object_checked (domain, &property->klass->byval_arg, &error);
+ mono_error_raise_exception (&error);
+
+ MONO_STRUCT_SETREF (info, parent, rt);
+ }
+ if ((req_info & PInfo_DeclaringType) != 0) {
+ rt = mono_type_get_object_checked (domain, &pproperty->parent->byval_arg, &error);
+ mono_error_raise_exception (&error);
+
+ MONO_STRUCT_SETREF (info, declaring_type, rt);
+ }
if ((req_info & PInfo_Name) != 0)
MONO_STRUCT_SETREF (info, name, mono_string_new (domain, pproperty->name));
ICALL_EXPORT void
ves_icall_get_event_info (MonoReflectionMonoEvent *event, MonoEventInfo *info)
{
+ MonoError error;
+ MonoReflectionType *rt;
MonoDomain *domain = mono_object_domain (event);
- MONO_STRUCT_SETREF (info, reflected_type, mono_type_get_object (domain, &event->klass->byval_arg));
- MONO_STRUCT_SETREF (info, declaring_type, mono_type_get_object (domain, &event->event->parent->byval_arg));
+ rt = mono_type_get_object_checked (domain, &event->klass->byval_arg, &error);
+ mono_error_raise_exception (&error);
+
+ MONO_STRUCT_SETREF (info, reflected_type, rt);
+
+ rt = mono_type_get_object_checked (domain, &event->event->parent->byval_arg, &error);
+ mono_error_raise_exception (&error);
+
+ MONO_STRUCT_SETREF (info, declaring_type, rt);
MONO_STRUCT_SETREF (info, name, mono_string_new (domain, event->event->name));
info->attrs = event->event->attrs;
static void
fill_iface_array (gpointer key, gpointer value, gpointer user_data)
{
+ MonoReflectionType *rt;
FillIfaceArrayData *data = (FillIfaceArrayData *)user_data;
MonoClass *ic = (MonoClass *)key;
MonoType *ret = &ic->byval_arg, *inflated = NULL;
return;
}
- mono_array_setref (data->iface_array, data->next_idx++, mono_type_get_object (data->domain, ret));
+ rt = mono_type_get_object_checked (data->domain, ret, data->error);
+ if (!mono_error_ok (data->error))
+ return;
+
+ mono_array_setref (data->iface_array, data->next_idx++, rt);
if (inflated)
mono_metadata_free_type (inflated);
ICALL_EXPORT MonoReflectionType*
ves_icall_MonoType_GetElementType (MonoReflectionType *type)
{
+ MonoError error;
+ MonoReflectionType *ret;
MonoClass *klass;
- if (!type->type->byref && type->type->type == MONO_TYPE_SZARRAY)
- return mono_type_get_object (mono_object_domain (type), &type->type->data.klass->byval_arg);
+ if (!type->type->byref && type->type->type == MONO_TYPE_SZARRAY) {
+ ret = mono_type_get_object_checked (mono_object_domain (type), &type->type->data.klass->byval_arg, &error);
+ mono_error_raise_exception (&error);
+
+ return ret;
+ }
klass = mono_class_from_mono_type (type->type);
mono_class_init_or_throw (klass);
// GetElementType should only return a type for:
// Array Pointer PassedByRef
if (type->type->byref)
- return mono_type_get_object (mono_object_domain (type), &klass->byval_arg);
+ ret = mono_type_get_object_checked (mono_object_domain (type), &klass->byval_arg, &error);
else if (klass->element_class && MONO_CLASS_IS_ARRAY (klass))
- return mono_type_get_object (mono_object_domain (type), &klass->element_class->byval_arg);
+ ret = mono_type_get_object_checked (mono_object_domain (type), &klass->element_class->byval_arg, &error);
else if (klass->element_class && type->type->type == MONO_TYPE_PTR)
- return mono_type_get_object (mono_object_domain (type), &klass->element_class->byval_arg);
+ ret = mono_type_get_object_checked (mono_object_domain (type), &klass->element_class->byval_arg, &error);
else
return NULL;
+
+ mono_error_raise_exception (&error);
+
+ return ret;
}
ICALL_EXPORT MonoReflectionType*
ves_icall_get_type_parent (MonoReflectionType *type)
{
+ MonoError error;
+ MonoReflectionType *ret;
+
if (type->type->byref)
return NULL;
MonoClass *klass = mono_class_from_mono_type (type->type);
- return klass->parent ? mono_type_get_object (mono_object_domain (type), &klass->parent->byval_arg): NULL;
+ if (!klass->parent)
+ return NULL;
+
+ ret = mono_type_get_object_checked (mono_object_domain (type), &klass->parent->byval_arg, &error);
+ mono_error_raise_exception (&error);
+
+ return ret;
}
ICALL_EXPORT MonoBoolean
ICALL_EXPORT MonoReflectionType*
ves_icall_MonoType_get_DeclaringType (MonoReflectionType *type)
{
+ MonoError error;
+ MonoReflectionType *ret;
MonoDomain *domain = mono_domain_get ();
MonoClass *klass;
klass = mono_class_from_mono_type (type->type)->nested_in;
}
- return klass ? mono_type_get_object (domain, &klass->byval_arg) : NULL;
+ if (!klass)
+ return NULL;
+
+ ret = mono_type_get_object_checked (domain, &klass->byval_arg, &error);
+ mono_error_raise_exception (&error);
+
+ return ret;
}
ICALL_EXPORT MonoString*
ICALL_EXPORT MonoArray*
ves_icall_MonoType_GetGenericArguments (MonoReflectionType *type, MonoBoolean runtimeTypeArray)
{
+ MonoError error;
+ MonoReflectionType *rt;
MonoArray *res;
MonoClass *klass, *pklass;
MonoDomain *domain = mono_object_domain (type);
res = create_type_array (domain, runtimeTypeArray, container->type_argc);
for (i = 0; i < container->type_argc; ++i) {
pklass = mono_class_from_generic_parameter_internal (mono_generic_container_get_param (container, i));
- mono_array_setref (res, i, mono_type_get_object (domain, &pklass->byval_arg));
+
+ rt = mono_type_get_object_checked (domain, &pklass->byval_arg, &error);
+ mono_error_raise_exception (&error);
+
+ mono_array_setref (res, i, rt);
}
} else if (klass->generic_class) {
MonoGenericInst *inst = klass->generic_class->context.class_inst;
res = create_type_array (domain, runtimeTypeArray, inst->type_argc);
- for (i = 0; i < inst->type_argc; ++i)
- mono_array_setref (res, i, mono_type_get_object (domain, inst->type_argv [i]));
+ for (i = 0; i < inst->type_argc; ++i) {
+ rt = mono_type_get_object_checked (domain, inst->type_argv [i], &error);
+ mono_error_raise_exception (&error);
+
+ mono_array_setref (res, i, rt);
+ }
} else {
res = NULL;
}
ICALL_EXPORT MonoReflectionType*
ves_icall_Type_GetGenericTypeDefinition_impl (MonoReflectionType *type)
{
+ MonoError error;
+ MonoReflectionType *ret;
MonoClass *klass;
if (type->type->byref)
if (generic_class->wastypebuilder && tb)
return (MonoReflectionType *)tb;
- else
- return mono_type_get_object (mono_object_domain (type), &generic_class->byval_arg);
+ else {
+ ret = mono_type_get_object_checked (mono_object_domain (type), &generic_class->byval_arg, &error);
+ mono_error_raise_exception (&error);
+
+ return ret;
+ }
}
return NULL;
}
ICALL_EXPORT MonoReflectionType*
ves_icall_Type_MakeGenericType (MonoReflectionType *type, MonoArray *type_array)
{
+ MonoError error;
+ MonoReflectionType *ret;
MonoClass *klass;
MonoType *geninst, **types;
int i, count;
return NULL;
}
- return mono_type_get_object (mono_object_domain (type), geninst);
+ ret = mono_type_get_object_checked (mono_object_domain (type), geninst, &error);
+ mono_error_raise_exception (&error);
+
+ return ret;
}
ICALL_EXPORT gboolean
ICALL_EXPORT MonoArray *
ves_icall_Type_GetGenericParameterConstraints (MonoReflectionType *type)
{
+ MonoError error;
+ MonoReflectionType *rt;
MonoGenericParamInfo *param_info;
MonoDomain *domain;
MonoClass **ptr;
;
res = mono_array_new (domain, mono_defaults.monotype_class, count);
- for (i = 0; i < count; i++)
- mono_array_setref (res, i, mono_type_get_object (domain, ¶m_info->constraints [i]->byval_arg));
+ for (i = 0; i < count; i++) {
+ rt = mono_type_get_object_checked (domain, ¶m_info->constraints [i]->byval_arg, &error);
+ mono_error_raise_exception (&error);
+
+ mono_array_setref (res, i, rt);
+ }
return res;
ICALL_EXPORT MonoArray*
ves_icall_MonoMethod_GetGenericArguments (MonoReflectionMethod *method)
{
+ MonoError error;
+ MonoReflectionType *rt;
MonoArray *res;
MonoDomain *domain;
int count, i;
count = inst->type_argc;
res = mono_array_new (domain, mono_defaults.systemtype_class, count);
- for (i = 0; i < count; i++)
- mono_array_setref (res, i, mono_type_get_object (domain, inst->type_argv [i]));
+ for (i = 0; i < count; i++) {
+ rt = mono_type_get_object_checked (domain, inst->type_argv [i], &error);
+ mono_error_raise_exception (&error);
+
+ mono_array_setref (res, i, rt);
+ }
return res;
}
MonoGenericContainer *container = mono_method_get_generic_container (method->method);
MonoGenericParam *param = mono_generic_container_get_param (container, i);
MonoClass *pklass = mono_class_from_generic_parameter_internal (param);
- mono_array_setref (res, i,
- mono_type_get_object (domain, &pklass->byval_arg));
+
+ rt = mono_type_get_object_checked (domain, &pklass->byval_arg, &error);
+ mono_error_raise_exception (&error);
+
+ mono_array_setref (res, i, rt);
}
return res;
ICALL_EXPORT MonoReflectionType *
ves_icall_System_Enum_get_underlying_type (MonoReflectionType *type)
{
+ MonoError error;
+ MonoReflectionType *ret;
MonoType *etype;
MonoClass *klass;
return NULL;
}
- return mono_type_get_object (mono_object_domain (type), etype);
+ ret = mono_type_get_object_checked (mono_object_domain (type), etype, &error);
+ mono_error_raise_exception (&error);
+
+ return ret;
}
ICALL_EXPORT int
ICALL_EXPORT MonoArray*
ves_icall_Type_GetNestedTypes (MonoReflectionType *type, MonoString *name, guint32 bflags)
{
+ MonoError error;
+ MonoReflectionType *rt;
MonoDomain *domain;
MonoClass *klass;
MonoArray *res;
- MonoObject *member;
int i, match;
MonoClass *nested;
gpointer iter;
continue;
}
- member = (MonoObject*)mono_type_get_object (domain, &nested->byval_arg);
- mono_ptr_array_append (tmp_array, member);
+ rt = mono_type_get_object_checked (domain, &nested->byval_arg, &error);
+ mono_error_raise_exception (&error);
+
+ mono_ptr_array_append (tmp_array, (MonoObject*) rt);
}
res = mono_array_new_cached (domain, mono_defaults.monotype_class, mono_ptr_array_size (tmp_array));
ICALL_EXPORT MonoReflectionType*
ves_icall_System_Reflection_Assembly_InternalGetType (MonoReflectionAssembly *assembly, MonoReflectionModule *module, MonoString *name, MonoBoolean throwOnError, MonoBoolean ignoreCase)
{
+ MonoError error;
+ MonoReflectionType *ret;
gchar *str;
MonoType *type = NULL;
MonoTypeNameParse info;
}
/* g_print ("got it\n"); */
- return mono_type_get_object (mono_object_domain (assembly), type);
+ ret = mono_type_get_object_checked (mono_object_domain (assembly), type, &error);
+ mono_error_raise_exception (&error);
+
+ return ret;
}
static gboolean
static MonoArray*
mono_module_get_types (MonoDomain *domain, MonoImage *image, MonoArray **exceptions, MonoBoolean exportedOnly)
{
+ MonoError error;
+ MonoReflectionType *rt;
MonoArray *res;
MonoClass *klass;
MonoTableInfo *tdef = &image->tables [MONO_TABLE_TYPEDEF];
count = 0;
for (i = 1; i < tdef->rows; ++i) {
if (!exportedOnly || mono_module_type_is_visible (tdef, image, i + 1)) {
- MonoError error;
klass = mono_class_get_checked (image, (i + 1) | MONO_TOKEN_TYPE_DEF, &error);
mono_loader_assert_no_error (); /* Plug any leaks */
+ g_assert (mono_error_ok (&error));
if (klass) {
- mono_array_setref (res, count, mono_type_get_object (domain, &klass->byval_arg));
+ rt = mono_type_get_object_checked (domain, &klass->byval_arg, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
+
+ mono_array_setref (res, count, rt);
} else {
MonoException *ex = mono_error_convert_to_exception (&error);
mono_array_setref (*exceptions, count, ex);
ves_icall_System_Reflection_Module_GetGlobalType (MonoReflectionModule *module)
{
MonoError error;
+ MonoReflectionType *ret;
MonoDomain *domain = mono_object_domain (module);
MonoClass *klass;
klass = mono_class_get_checked (module->image, 1 | MONO_TOKEN_TYPE_DEF, &error);
mono_error_raise_exception (&error);
- return mono_type_get_object (domain, &klass->byval_arg);
+
+ ret = mono_type_get_object_checked (domain, &klass->byval_arg, &error);
+ mono_error_raise_exception (&error);
+
+ return ret;
}
ICALL_EXPORT void
ICALL_EXPORT MonoObject*
ves_icall_System_Reflection_Module_ResolveMemberToken (MonoImage *image, guint32 token, MonoArray *type_args, MonoArray *method_args, MonoResolveTokenError *error)
{
+ MonoError merror;
+ MonoObject *ret;
int table = mono_metadata_token_table (token);
*error = ResolveTokenError_Other;
case MONO_TABLE_TYPEREF:
case MONO_TABLE_TYPESPEC: {
MonoType *t = ves_icall_System_Reflection_Module_ResolveTypeToken (image, token, type_args, method_args, error);
- if (t)
- return (MonoObject*)mono_type_get_object (mono_domain_get (), t);
+ if (t) {
+ ret = (MonoObject*) mono_type_get_object_checked (mono_domain_get (), t, &merror);
+ mono_error_raise_exception (&merror);
+
+ return ret;
+ }
else
return NULL;
}
ICALL_EXPORT MonoReflectionType*
ves_icall_ModuleBuilder_create_modified_type (MonoReflectionTypeBuilder *tb, MonoString *smodifiers)
{
+ MonoError error;
+ MonoReflectionType *ret;
MonoClass *klass;
int isbyref = 0, rank;
char *str = mono_string_to_utf8 (smodifiers);
}
isbyref = 1;
p++;
+
g_free (str);
- return mono_type_get_object (mono_object_domain (tb), &klass->this_arg);
- break;
+
+ ret = mono_type_get_object_checked (mono_object_domain (tb), &klass->this_arg, &error);
+ mono_error_raise_exception (&error);
+
+ return ret;
case '*':
klass = mono_ptr_class_get (&klass->byval_arg);
mono_class_init (klass);
break;
}
}
+
g_free (str);
- return mono_type_get_object (mono_object_domain (tb), &klass->byval_arg);
+
+ ret = mono_type_get_object_checked (mono_object_domain (tb), &klass->byval_arg, &error);
+ mono_error_raise_exception (&error);
+
+ return ret;
}
ICALL_EXPORT MonoBoolean
ICALL_EXPORT MonoReflectionType *
ves_icall_Type_make_array_type (MonoReflectionType *type, int rank)
{
+ MonoError error;
+ MonoReflectionType *ret;
MonoClass *klass, *aklass;
klass = mono_class_from_mono_type (type->type);
else
aklass = mono_bounded_array_class_get (klass, rank, TRUE);
- return mono_type_get_object (mono_object_domain (type), &aklass->byval_arg);
+ ret = mono_type_get_object_checked (mono_object_domain (type), &aklass->byval_arg, &error);
+ mono_error_raise_exception (&error);
+
+ return ret;
}
ICALL_EXPORT MonoReflectionType *
ves_icall_Type_make_byref_type (MonoReflectionType *type)
{
+ MonoError error;
+ MonoReflectionType *ret;
MonoClass *klass;
klass = mono_class_from_mono_type (type->type);
mono_class_init_or_throw (klass);
check_for_invalid_type (klass);
- return mono_type_get_object (mono_object_domain (type), &klass->this_arg);
+ ret = mono_type_get_object_checked (mono_object_domain (type), &klass->this_arg, &error);
+ mono_error_raise_exception (&error);
+
+ return ret;
}
ICALL_EXPORT MonoReflectionType *
ves_icall_Type_MakePointerType (MonoReflectionType *type)
{
+ MonoError error;
+ MonoReflectionType *ret;
MonoClass *klass, *pklass;
klass = mono_class_from_mono_type (type->type);
pklass = mono_ptr_class_get (type->type);
- return mono_type_get_object (mono_object_domain (type), &pklass->byval_arg);
+ ret = mono_type_get_object_checked (mono_object_domain (type), &pklass->byval_arg, &error);
+ mono_error_raise_exception (&error);
+
+ return ret;
}
ICALL_EXPORT MonoObject *
ICALL_EXPORT MonoReflectionType *
ves_icall_Remoting_RealProxy_InternalGetProxyType (MonoTransparentProxy *tp)
{
- return mono_type_get_object (mono_object_domain (tp), &tp->remote_class->proxy_class->byval_arg);
+ MonoError error;
+ MonoReflectionType *ret = mono_type_get_object_checked (mono_object_domain (tp), &tp->remote_class->proxy_class->byval_arg, &error);
+ mono_error_raise_exception (&error);
+
+ return ret;
}
#endif
static MonoArray*
type_array_from_modifiers (MonoImage *image, MonoType *type, int optional)
{
+ MonoError error;
+ MonoReflectionType *rt;
MonoArray *res;
int i, count = 0;
for (i = 0; i < type->num_mods; ++i) {
count = 0;
for (i = 0; i < type->num_mods; ++i) {
if ((optional && !type->modifiers [i].required) || (!optional && type->modifiers [i].required)) {
- MonoError error;
MonoClass *klass = mono_class_get_checked (image, type->modifiers [i].token, &error);
mono_error_raise_exception (&error); /* this is safe, no cleanup needed on callers */
- mono_array_setref (res, count, mono_type_get_object (mono_domain_get (), &klass->byval_arg));
+
+ rt = mono_type_get_object_checked (mono_domain_get (), &klass->byval_arg, &error);
+ mono_error_raise_exception (&error);
+
+ mono_array_setref (res, count, rt);
count++;
}
}
{
MONO_REQ_GC_UNSAFE_MODE;
+ MonoError error;
const char *name = mb->attrs & METHOD_ATTRIBUTE_STATIC ? ".cctor": ".ctor";
memset (rmb, 0, sizeof (ReflectionMethodBuilder));
rmb->ilgen = mb->ilgen;
- rmb->rtype = mono_type_get_object (mono_domain_get (), &mono_defaults.void_class->byval_arg);
+ rmb->rtype = mono_type_get_object_checked (mono_domain_get (), &mono_defaults.void_class->byval_arg, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
rmb->parameters = mb->parameters;
rmb->generic_params = NULL;
rmb->generic_container = NULL;
mono_type_get_object (MonoDomain *domain, MonoType *type)
{
MonoError error;
+ MonoReflectionType *ret = mono_type_get_object_checked (domain, type, &error);
+ mono_error_raise_exception (&error);
+
+ return ret;
+}
+
+MonoReflectionType*
+mono_type_get_object_checked (MonoDomain *domain, MonoType *type, MonoError *error)
+{
MonoType *norm_type;
MonoReflectionType *res;
- MonoClass *klass = mono_class_from_mono_type (type);
+ MonoClass *klass;
+
+ mono_error_init (error);
+
+ klass = mono_class_from_mono_type (type);
/*we must avoid using @type as it might have come
* from a mono_metadata_type_dup and the caller
*/
norm_type = mono_type_normalize (type);
if (norm_type != type) {
- res = mono_type_get_object (domain, norm_type);
+ res = mono_type_get_object_checked (domain, norm_type, error);
+ if (!mono_error_ok (error))
+ return NULL;
mono_g_hash_table_insert (domain->type_hash, type, res);
mono_domain_unlock (domain);
mono_loader_unlock ();
}
}
/* This is stored in vtables/JITted code so it has to be pinned */
- res = (MonoReflectionType *)mono_object_new_pinned (domain, mono_defaults.monotype_class, &error);
- mono_error_raise_exception (&error);
+ res = (MonoReflectionType *)mono_object_new_pinned (domain, mono_defaults.monotype_class, error);
+ if (!mono_error_ok (error))
+ return NULL;
+
res->type = type;
mono_g_hash_table_insert (domain->type_hash, type, res);
static MonoClass *System_Reflection_MonoCMethod = NULL;
static MonoClass *System_Reflection_MonoGenericMethod = NULL;
static MonoClass *System_Reflection_MonoGenericCMethod = NULL;
+ MonoError error;
+ MonoReflectionType *rt;
MonoClass *klass;
MonoReflectionMethod *ret;
}
gret = (MonoReflectionGenericMethod*)mono_object_new (domain, klass);
gret->method.method = method;
+
MONO_OBJECT_SETREF (gret, method.name, mono_string_new (domain, method->name));
- MONO_OBJECT_SETREF (gret, method.reftype, mono_type_get_object (domain, &refclass->byval_arg));
+
+ rt = mono_type_get_object_checked (domain, &refclass->byval_arg, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
+
+ MONO_OBJECT_SETREF (gret, method.reftype, rt);
+
CACHE_OBJECT (MonoReflectionMethod *, method, (MonoReflectionMethod*)gret, refclass);
}
}
ret = (MonoReflectionMethod*)mono_object_new (domain, klass);
ret->method = method;
- MONO_OBJECT_SETREF (ret, reftype, mono_type_get_object (domain, &refclass->byval_arg));
+
+ rt = mono_type_get_object_checked (domain, &refclass->byval_arg, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */;
+
+ MONO_OBJECT_SETREF (ret, reftype, rt);
+
CACHE_OBJECT (MonoReflectionMethod *, method, ret, refclass);
}
MonoReflectionField*
mono_field_get_object (MonoDomain *domain, MonoClass *klass, MonoClassField *field)
{
+ MonoError error;
+ MonoReflectionType *rt;
MonoReflectionField *res;
static MonoClass *monofield_klass;
if (is_field_on_inst (field)) {
res->attrs = get_field_on_inst_generic_type (field)->attrs;
- MONO_OBJECT_SETREF (res, type, mono_type_get_object (domain, field->type));
+
+ rt = mono_type_get_object_checked (domain, field->type, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
+
+ MONO_OBJECT_SETREF (res, type, rt);
} else {
- if (field->type)
- MONO_OBJECT_SETREF (res, type, mono_type_get_object (domain, field->type));
+ if (field->type) {
+ rt = mono_type_get_object_checked (domain, field->type, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
+
+ MONO_OBJECT_SETREF (res, type, rt);
+ }
res->attrs = mono_field_get_flags (field);
}
CACHE_OBJECT (MonoReflectionField *, field, res, klass);
MonoMarshalSpec **mspecs;
MonoMethodSignature *sig;
MonoVTable *pinfo_vtable;
+ MonoReflectionType *rt;
int i;
if (!System_Reflection_ParameterInfo_array) {
for (i = 0; i < sig->param_count; ++i) {
param = (MonoReflectionParameter *) mono_object_new_specific_checked (pinfo_vtable, &error);
mono_error_raise_exception (&error); /* FIXME don't raise here */
- MONO_OBJECT_SETREF (param, ClassImpl, mono_type_get_object (domain, sig->params [i]));
+
+ rt = mono_type_get_object_checked (domain, sig->params [i], &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
+
+ MONO_OBJECT_SETREF (param, ClassImpl, rt);
+
MONO_OBJECT_SETREF (param, MemberImpl, (MonoObject*)member);
+
MONO_OBJECT_SETREF (param, NameImpl, mono_string_new (domain, names [i]));
+
param->PositionImpl = i;
param->AttrsImpl = sig->params [i]->attrs;
static MonoClass *System_Reflection_MethodBody = NULL;
static MonoClass *System_Reflection_LocalVariableInfo = NULL;
static MonoClass *System_Reflection_ExceptionHandlingClause = NULL;
+ MonoError error;
MonoReflectionMethodBody *ret;
MonoMethodHeader *header;
MonoImage *image;
+ MonoReflectionType *rt;
guint32 method_rva, local_var_sig_token;
char *ptr;
unsigned char format, flags;
MONO_OBJECT_SETREF (ret, locals, mono_array_new_cached (domain, System_Reflection_LocalVariableInfo, header->num_locals));
for (i = 0; i < header->num_locals; ++i) {
MonoReflectionLocalVariableInfo *info = (MonoReflectionLocalVariableInfo*)mono_object_new (domain, System_Reflection_LocalVariableInfo);
- MONO_OBJECT_SETREF (info, local_type, mono_type_get_object (domain, header->locals [i]));
+
+ rt = mono_type_get_object_checked (domain, header->locals [i], &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
+
+ MONO_OBJECT_SETREF (info, local_type, rt);
+
info->is_pinned = header->locals [i]->pinned;
info->local_index = i;
mono_array_setref (ret->locals, i, info);
info->handler_length = clause->handler_len;
if (clause->flags == MONO_EXCEPTION_CLAUSE_FILTER)
info->filter_offset = clause->data.filter_offset;
- else if (clause->data.catch_class)
- MONO_OBJECT_SETREF (info, catch_type, mono_type_get_object (mono_domain_get (), &clause->data.catch_class->byval_arg));
+ else if (clause->data.catch_class) {
+ rt = mono_type_get_object_checked (mono_domain_get (), &clause->data.catch_class->byval_arg, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
+
+ MONO_OBJECT_SETREF (info, catch_type, rt);
+ }
mono_array_setref (ret->clauses, i, info);
}
static MonoType*
mono_reflection_get_type_internal (MonoImage *rootimage, MonoImage* image, MonoTypeNameParse *info, gboolean ignorecase)
{
+ MonoError error;
MonoClass *klass;
GList *mod;
int modval;
}
}
- the_type = mono_type_get_object (mono_domain_get (), &klass->byval_arg);
+ the_type = mono_type_get_object_checked (mono_domain_get (), &klass->byval_arg, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
instance = mono_reflection_bind_generic_parameters (
the_type, info->type_arguments->len, type_args);
*end = p + slen;
return mono_string_new_len (mono_domain_get (), p, slen);
case MONO_TYPE_CLASS: {
+ MonoReflectionType *rt;
char *n;
MonoType *t;
if (*p == (char)0xFF) {
}
g_free (n);
*end = p + slen;
- return mono_type_get_object (mono_domain_get (), t);
+
+ rt = mono_type_get_object_checked (mono_domain_get (), t, error);
+ if (!mono_error_ok (error))
+ return NULL;
+
+ return rt;
}
case MONO_TYPE_OBJECT: {
char subt = *p++;
{
static MonoClass *klass;
static MonoMethod *ctor;
+ MonoError error;
MonoObject *retval;
void *params [2], *unboxed;
if (!ctor)
ctor = mono_class_get_method_from_name (klass, ".ctor", 2);
- params [0] = mono_type_get_object (mono_domain_get (), t);
+ params [0] = mono_type_get_object_checked (mono_domain_get (), t, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
+
params [1] = val;
retval = mono_object_new (mono_domain_get (), klass);
unboxed = mono_object_unbox (retval);
klass = mono_class_from_mono_type (res);
- mono_loader_lock (); /*same locking as mono_type_get_object*/
+ mono_loader_lock (); /*same locking as mono_type_get_object_checked */
mono_domain_lock (domain);
if (!image_is_dynamic (klass->image)) {
MonoMarshalSpec *spec)
{
static MonoClass *System_Reflection_Emit_MarshalAsAttribute;
+ MonoError error;
+ MonoReflectionType *rt;
MonoReflectionMarshalAsAttribute *minfo;
MonoType *mtype;
case MONO_NATIVE_CUSTOM:
if (spec->data.custom_data.custom_name) {
mtype = mono_reflection_type_from_name (spec->data.custom_data.custom_name, klass->image);
- if (mtype)
- MONO_OBJECT_SETREF (minfo, marshal_type_ref, mono_type_get_object (domain, mtype));
+ if (mtype) {
+ rt = mono_type_get_object_checked (domain, mtype, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
+
+ MONO_OBJECT_SETREF (minfo, marshal_type_ref, rt);
+ }
MONO_OBJECT_SETREF (minfo, marshal_type, mono_string_new (domain, spec->data.custom_data.custom_name));
}
if (klass->wastypebuilder) {
mono_domain_unlock (domain);
mono_loader_unlock ();
- return mono_type_get_object (mono_object_domain (tb), &klass->byval_arg);
+
+ res = mono_type_get_object_checked (mono_object_domain (tb), &klass->byval_arg, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
+
+ return res;
}
/*
* Fields to set in klass:
klass->wastypebuilder = TRUE;
mono_loader_unlock ();
mono_domain_unlock (domain);
- return mono_type_get_object (mono_object_domain (tb), &klass->byval_arg);
+
+ res = mono_type_get_object_checked (mono_object_domain (tb), &klass->byval_arg, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
+
+ return res;
}
}
#endif
mono_raise_exception (mono_get_exception_type_load (tb->name, NULL));
}
- res = mono_type_get_object (mono_object_domain (tb), &klass->byval_arg);
+ res = mono_type_get_object_checked (mono_object_domain (tb), &klass->byval_arg, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
+
g_assert (res != (MonoReflectionType*)tb);
return res;
gboolean
mono_reflection_call_is_assignable_to (MonoClass *klass, MonoClass *oklass)
{
+ MonoError error;
MonoObject *res, *exc;
void *params [1];
static MonoClass *System_Reflection_Emit_TypeBuilder = NULL;
}
/*
- * The result of mono_type_get_object () might be a System.MonoType but we
+ * The result of mono_type_get_object_checked () might be a System.MonoType but we
* need a TypeBuilder so use mono_class_get_ref_info (klass).
*/
g_assert (mono_class_get_ref_info (klass));
g_assert (!strcmp (((MonoObject*)(mono_class_get_ref_info (klass)))->vtable->klass->name, "TypeBuilder"));
- params [0] = mono_type_get_object (mono_domain_get (), &oklass->byval_arg);
+ params [0] = mono_type_get_object_checked (mono_domain_get (), &oklass->byval_arg, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
res = mono_runtime_invoke (method, (MonoObject*)(mono_class_get_ref_info (klass)), params, &exc);
if (exc)