guint32 flags;
} MonoILT;
-static void register_assembly (MonoDomain *domain, MonoReflectionAssembly *res, MonoAssembly *assembly);
+static gpointer register_assembly (MonoDomain *domain, MonoReflectionAssembly *res, MonoAssembly *assembly);
static MonoDynamicImage*
create_dynamic_mono_image (MonoDynamicAssembly *assembly, char *assembly_name, char *module_name)
#define ALLOC_REFENTRY mono_mempool_alloc (domain->mp, sizeof (ReflectedEntry))
#endif
-#define CACHE_OBJECT(p,o,k) \
+#define CACHE_OBJECT(t,p,o,k) \
do { \
+ t _obj; \
ReflectedEntry pe; \
pe.item = (p); \
pe.refclass = (k); \
mono_domain_lock (domain); \
if (!domain->refobject_hash) \
domain->refobject_hash = mono_g_hash_table_new (reflected_hash, reflected_equal); \
- if (!mono_g_hash_table_lookup (domain->refobject_hash, &pe)) { \
+ _obj = mono_g_hash_table_lookup (domain->refobject_hash, &pe); \
+ if (!_obj) { \
ReflectedEntry *e = ALLOC_REFENTRY; \
e->item = (p); \
e->refclass = (k); \
mono_g_hash_table_insert (domain->refobject_hash, e,o); \
+ _obj = o; \
} \
mono_domain_unlock (domain); \
+ return _obj; \
} while (0)
-static void
+static gpointer
register_assembly (MonoDomain *domain, MonoReflectionAssembly *res, MonoAssembly *assembly)
{
- CACHE_OBJECT (assembly, res, NULL);
+ CACHE_OBJECT (MonoReflectionAssembly *, assembly, res, NULL);
}
-static void
+static gpointer
register_module (MonoDomain *domain, MonoReflectionModuleBuilder *res, MonoDynamicImage *module)
{
- CACHE_OBJECT (module, res, NULL);
+ CACHE_OBJECT (MonoReflectionModuleBuilder *, module, res, NULL);
}
void
res = (MonoReflectionAssembly *)mono_object_new (domain, System_Reflection_Assembly);
res->assembly = assembly;
- CACHE_OBJECT (assembly, res, NULL);
- return res;
+ CACHE_OBJECT (MonoReflectionAssembly *, assembly, res, NULL);
}
mono_image_addref (image);
- CACHE_OBJECT (image, res, NULL);
- return res;
+ CACHE_OBJECT (MonoReflectionModule *, image, res, NULL);
}
MonoReflectionModule*
gret->method.method = method;
gret->method.name = mono_string_new (domain, method->name);
gret->method.reftype = mono_type_get_object (domain, &refclass->byval_arg);
- CACHE_OBJECT (method, gret, refclass);
- return (MonoReflectionMethod *) gret;
+ CACHE_OBJECT (MonoReflectionMethod *, method, gret, refclass);
}
if (!refclass)
ret->method = method;
ret->name = mono_string_new (domain, method->name);
ret->reftype = mono_type_get_object (domain, &refclass->byval_arg);
- CACHE_OBJECT (method, ret, refclass);
- return ret;
+ CACHE_OBJECT (MonoReflectionMethod *, method, ret, refclass);
}
/*
else
res->attrs = field->type->attrs;
res->type = mono_type_get_object (domain, field->type);
- CACHE_OBJECT (field, res, klass);
- return res;
+ CACHE_OBJECT (MonoReflectionField *, field, res, klass);
}
/*
res = (MonoReflectionProperty *)mono_object_new (domain, oklass);
res->klass = klass;
res->property = property;
- CACHE_OBJECT (property, res, klass);
- return res;
+ CACHE_OBJECT (MonoReflectionProperty *, property, res, klass);
}
/*
res = (MonoReflectionEvent *)mono_object_new (domain, oklass);
res->klass = klass;
res->event = event;
- CACHE_OBJECT (event, res, klass);
- return res;
+ CACHE_OBJECT (MonoReflectionEvent *, event, res, klass);
}
/*
mono_metadata_free_marshal_spec (mspecs [i]);
g_free (mspecs);
- CACHE_OBJECT (&(method->signature), res, NULL);
- return res;
+ CACHE_OBJECT (MonoArray *, &(method->signature), res, NULL);
}
/*
mono_array_set (ret->clauses, MonoReflectionExceptionHandlingClause*, i, info);
}
- CACHE_OBJECT (method, ret, NULL);
+ CACHE_OBJECT (MonoReflectionMethodBody *, method, ret, NULL);
return ret;
}