[runtime] Introduce kind test functions to cleanup things a bit.
authorRodrigo Kumpera <kumpera@gmail.com>
Thu, 29 Sep 2016 23:07:51 +0000 (16:07 -0700)
committerRodrigo Kumpera <kumpera@gmail.com>
Tue, 1 Nov 2016 21:17:59 +0000 (14:17 -0700)
Instead of doing

```
if (klass->class_kind == MONO_CLASS_GTD)
...
```

Now you do:

```
if (mono_class_is_gtd (klass))
...
```

mono/metadata/Makefile.am
mono/metadata/class-inlines.h [new file with mode: 0644]
mono/metadata/class-internals.h
mono/metadata/class.c
mono/metadata/object.c
mono/metadata/verify.c

index 86de9a7c062be7606101de9ebc503ad54b309efe..4a9ed14b585efae0f8e77d97ab04728473cfc63f 100644 (file)
@@ -119,6 +119,7 @@ common_sources = \
        cil-coff.h              \
        class.c                 \
        class-internals.h       \
+       class-inlines.h         \
        cominterop.c            \
        cominterop.h            \
        console-io.h            \
diff --git a/mono/metadata/class-inlines.h b/mono/metadata/class-inlines.h
new file mode 100644 (file)
index 0000000..03f0fdb
--- /dev/null
@@ -0,0 +1,46 @@
+/* 
+ * Copyright 2014 Xamarin Inc
+ */
+#ifndef __MONO_METADATA_CLASS_INLINES_H__
+#define __MONO_METADATA_CLASS_INLINES_H__
+
+#include <mono/metadata/class-internals.h>
+
+static inline gboolean
+mono_class_is_def (MonoClass *class)
+{
+       return class->class_kind == MONO_CLASS_DEF;
+}
+
+static inline gboolean
+mono_class_is_gtd (MonoClass *class)
+{
+       return class->class_kind == MONO_CLASS_GTD;
+}
+
+static inline gboolean
+mono_class_is_ginst (MonoClass *class)
+{
+       return class->class_kind == MONO_CLASS_GINST;
+}
+
+static inline gboolean
+mono_class_is_gparam (MonoClass *class)
+{
+       return class->class_kind == MONO_CLASS_GPARAM;
+}
+
+static inline gboolean
+mono_class_is_array (MonoClass *class)
+{
+       return class->class_kind == MONO_CLASS_ARRAY;
+}
+
+static inline gboolean
+mono_class_is_pointer (MonoClass *class)
+{
+       return class->class_kind == MONO_CLASS_POINTER;
+}
+
+
+#endif
\ No newline at end of file
index 2d607b6f2a8ebc71ee78ed7c6d13b19ccdcf8421..b4134130427225c54b073bac452efd1a7f9124a5 100644 (file)
@@ -1439,4 +1439,7 @@ mono_error_set_for_class_failure (MonoError *orerror, const MonoClass *klass);
 gboolean
 mono_class_has_failure (const MonoClass *klass);
 
+/*Now that everything has been defined, let's include the inline functions */
+#include <mono/metadata/class-inlines.h>
+
 #endif /* __MONO_METADATA_CLASS_INTERNALS_H__ */
index fd47724bb1de1a8ea598469786587c95c8ef4a4b..44c68fa954b386315b313e8bc34d5d9596bf6e7b 100644 (file)
@@ -838,7 +838,7 @@ mono_class_get_context (MonoClass *klass)
 MonoGenericContainer*
 mono_class_get_generic_container (MonoClass *klass)
 {
-       g_assert (klass->class_kind == MONO_CLASS_GTD);
+       g_assert (mono_class_is_gtd (klass));
 
        return klass->generic_container;
 }
@@ -851,7 +851,7 @@ mono_class_get_generic_container (MonoClass *klass)
 MonoGenericClass*
 mono_class_get_generic_class (MonoClass *klass)
 {
-       g_assert (klass->class_kind == MONO_CLASS_GINST);
+       g_assert (mono_class_is_ginst (klass));
 
        return klass->generic_class;
 }
index f65fa14c66e119002ef07e14dccc57255e16c679..c60d9d3f4e20c9fd4f39c98fc513be27405ac0c3 100644 (file)
@@ -1406,7 +1406,7 @@ build_imt_slots (MonoClass *klass, MonoVTable *vt, MonoDomain *domain, gpointer*
                for (method_slot_in_interface = 0; method_slot_in_interface < iface->method.count; method_slot_in_interface++) {
                        MonoMethod *method;
 
-                       if (slot_num >= 0 && iface->class_kind == MONO_CLASS_GINST) {
+                       if (slot_num >= 0 && mono_class_is_ginst (iface)) {
                                /*
                                 * The imt slot of the method is the same as for its declaring method,
                                 * see the comment in mono_method_get_imt_slot (), so we can
index 632dd799588226a251883f84c597f30e418bd142..9021cfd45ea57a12c0faa56780b6a2d7ff133620 100644 (file)
@@ -4848,7 +4848,7 @@ mono_method_verify (MonoMethod *method, int level)
                finish_collect_stats ();
                return ctx.list;
        }
-       if (!method->is_generic && method->klass->class_kind != MONO_CLASS_GTD && ctx.signature->has_type_parameters) {
+       if (!method->is_generic && !mono_class_is_gtd (method->klass) && ctx.signature->has_type_parameters) {
                ADD_VERIFY_ERROR (&ctx, g_strdup_printf ("Method and signature don't match in terms of genericity"));
                finish_collect_stats ();
                return ctx.list;