[Mono-dev] Runtime.MonoIline
Jerry Maine
crashfourit at gmail.com
Sat Jan 24 16:43:32 EST 2009
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
You mean something like this? (Released under MIT/X11 license)
gboolean*
mono_index_custom_attr (MonoImage *image, guint32 idx, const char
*attr_assembly, const char *attr_name_space, const char *attr)
{
guint32 mtoken, i, len;
guint32 cols [MONO_CUSTOM_ATTR_SIZE];
MonoTableInfo *ca;
//MonoCustomAttrInfo *ainfo;
GList *tmp, *list = NULL;
MonoMethod* attr_ctor;
ca = &image->tables [MONO_TABLE_CUSTOMATTRIBUTE];
if ((attr_assembly == NULL) || (attr_name_space == NULL) || (attr
== NULL))
return FALSE;
if (!mono_image_has_assembly_ref(assembly->image, attr_assembly)
return FALSE;
i = mono_metadata_custom_attrs_from_index (image, idx);
if (!i)
return NULL;
i --;
while (i < ca->rows) {
if (mono_metadata_decode_row_col (ca, i,
MONO_CUSTOM_ATTR_PARENT) != idx)
break;
list = g_list_prepend (list, GUINT_TO_POINTER (i));
++i;
}
len = g_list_length (list);
if (!len)
return NULL;
for (i = 0, tmp = list; i < len; ++i, tmp = tmp->next) {
mono_metadata_decode_row (ca, GPOINTER_TO_UINT (tmp->data),
cols, MONO_CUSTOM_ATTR_SIZE);
mtoken = cols [MONO_CUSTOM_ATTR_TYPE] >>
MONO_CUSTOM_ATTR_TYPE_BITS;
switch (cols [MONO_CUSTOM_ATTR_TYPE] &
MONO_CUSTOM_ATTR_TYPE_MASK) {
case MONO_CUSTOM_ATTR_TYPE_METHODDEF:
mtoken |= MONO_TOKEN_METHOD_DEF;
break;
case MONO_CUSTOM_ATTR_TYPE_MEMBERREF:
mtoken |= MONO_TOKEN_MEMBER_REF;
break;
default:
g_error ("Unknown table for custom attr type %08x", cols
[MONO_CUSTOM_ATTR_TYPE]);
break;
}
attr_ctor = mono_get_method (image, mtoken, NULL);
if (!attr_ctor) {
g_warning ("Can't find custom attr constructor image: %s
mtoken: 0x%08x", image->name, mtoken);
g_list_free (list);
//g_free (ainfo);
return FALSE;
} else {
if (strcmp (attr_ctor->klass->image->assembly_name,
attr_assembly) )
continue;
if (strcmp (attr_ctor->klass->name_space, attr_name_space) )
continue;
if (!strcmp (attr_ctor->klass->name, attr_name) ) {
g_list_free (list);
return TRUE;
}
}
}
g_list_free (list);
return FALSE;
}
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iEYEARECAAYFAkl7i3sACgkQ1jvea6V8vHJO5ACfRi0EdEaVLnURhKs2gkguhILV
32oAnAh3013UYegJZ+kbdNxG5oehjfnZ
=uOXp
-----END PGP SIGNATURE-----
More information about the Mono-devel-list
mailing list