Provide more public API to inspect MonoTypes, MonoClasses and MonoMethodSignatures.
authorRolf Bjarne Kvinge <rolf@xamarin.com>
Tue, 22 Oct 2013 21:59:28 +0000 (23:59 +0200)
committerRolf Bjarne Kvinge <rolf@xamarin.com>
Wed, 23 Oct 2013 21:25:46 +0000 (23:25 +0200)
mono/metadata/class.c
mono/metadata/class.h
mono/metadata/metadata.c
mono/metadata/metadata.h

index 06cec52aae8367a1eb2545c13de0a681f72388e1..9dcaee804eab247814171524a8e97bda61595226 100644 (file)
@@ -8901,6 +8901,32 @@ mono_class_get_nested_types (MonoClass* klass, gpointer *iter)
        return NULL;
 }
 
+
+/**
+ * mono_class_is_delegate
+ * @klass: the MonoClass to act on
+ *
+ * Returns: true if the MonoClass represents a System.Delegate.
+ */
+mono_bool
+mono_class_is_delegate (MonoClass *klass)
+{
+       return klass->delegate;
+}
+
+/**
+ * mono_class_implements_interface
+ * @klass: The MonoClass to act on
+ * @interface: The interface to check if @klass implements.
+ *
+ * Returns: true if @klass implements @interface.
+ */
+mono_bool
+mono_class_implements_interface (MonoClass* klass, MonoClass* interface)
+{
+       return mono_class_is_assignable_from (interface, klass);
+}
+
 /**
  * mono_field_get_name:
  * @field: the MonoClassField to act on
index 27710839cd27a150b78305383def3a919c550091..fa499903ebf1a2dc339333868ca20dad549388a7 100644 (file)
@@ -189,6 +189,12 @@ mono_class_get_interfaces    (MonoClass* klass, void **iter);
 MONO_API MonoClass*
 mono_class_get_nested_types  (MonoClass* klass, void **iter);
 
+MONO_API mono_bool
+mono_class_is_delegate       (MonoClass* klass);
+
+MONO_API mono_bool
+mono_class_implements_interface (MonoClass* klass, MonoClass* interface);
+
 /* MonoClassField accessors */
 MONO_API const char*
 mono_field_get_name   (MonoClassField *field);
index eea4a8cd39213bb6ce18399f61e55a056722f5f0..18c1be537c80fa677a3f20a3827365a1acb9f021 100644 (file)
@@ -6203,6 +6203,21 @@ mono_signature_is_instance (MonoMethodSignature *sig)
        return sig->hasthis;
 }
 
+/**
+ * mono_signature_param_is_out
+ * @sig: the method signature inspected
+ * @param_num: the 0-based index of the inspected parameter
+ * 
+ * Returns: #TRUE if the parameter is an out parameter, #FALSE
+ * otherwise.
+ */
+mono_bool
+mono_signature_param_is_out (MonoMethodSignature *sig, int param_num)
+{
+       g_assert (param_num >= 0 && param_num < sig->param_count);
+       return (sig->params [param_num]->attrs & PARAM_ATTRIBUTE_OUT) != 0;
+}
+
 /**
  * mono_signature_explicit_this:
  * @sig: the method signature inspected
index b9c591bf771347047fe23cb859c056bc34c55029..4b880c7bab42bb5aa733d70d0358604471524b29 100644 (file)
@@ -379,6 +379,9 @@ mono_signature_is_instance     (MonoMethodSignature *sig);
 MONO_API mono_bool
 mono_signature_explicit_this   (MonoMethodSignature *sig);
 
+MONO_API mono_bool
+mono_signature_param_is_out    (MonoMethodSignature *sig, int param_num);
+
 MONO_API uint32_t     mono_metadata_parse_typedef_or_ref (MonoImage      *m,
                                                 const char      *ptr,
                                                 const char     **rptr);