[Mono-list] Method Attributes
Paolo Molaro
lupus@ximian.com
Mon, 18 Aug 2003 18:24:33 +0200
On 08/18/03 Hamza Karamali wrote:
> Thanks for the info. However, I want to do this within the mono C code
> (I'm a Master's student trying to hack mono for research) -- not from C#.
> While I am compiling a method (in mini_method_compile, for example), I'd
> like to check the method attributes by referencing its metadata directly.
> Is there any easy way to do this in mono? Or do I have to read the CLI
> specs and then use the functions in metadata.c in an appropriate manner?
You can call:
MonoCustomAttrInfo* attributes = mono_custom_attrs_from_method (method);
It returns NULL if there are no attributes defined for the method.
MonoCustomAttrInfo is defined in reflection.h. You can run a loop
over the attrs array elements, checking whether the ctor belongs
to the attribute class that interests you. For example, given:
class MySpecialAttribute: Attribute {...}
and
[MySpecialAttribute]
public void method (...) {...}
When compiling method, you can do something like (untested):
// my_special_attr should be cached...
MonoClass *my_special_attr = mono_class_from_name (image, "Hack", "MySpecialAttribute");
MonoCustomAttrInfo* attributes = mono_custom_attrs_from_method (method);
if (!attributes)
return; // no special processing requested
for (i = 0; i < attributes->num_attrs; ++i) {
if (attributes->attrs [i].ctor->klass == my_special_attr) {
// do something special with method
break;
}
}
mono_custom_attrs_free (attributes);
lupus
--
-----------------------------------------------------------------
lupus@debian.org debian/rules
lupus@ximian.com Monkeys do it better