Do TLS using pthreads if __thread keyword not supported.
[mono.git] / mono / metadata / class-internals.h
index f15ba7ca4a5d80a723214f5dd6daf808da45d6c5..f537354ab1e3fc0f6bacf9c7ea2e93ebf862df76 100644 (file)
@@ -515,6 +515,30 @@ struct _MonoDynamicGenericClass {
        MonoObject **field_objects;
 };
 
+/*
+ * A type parameter.
+ */
+struct _MonoGenericParam {
+       MonoGenericContainer *owner;    /* Type or method this parameter was defined in. */
+       guint16 num;
+       /* If owner is NULL, this is the image whose mempool this struct was allocated from */
+       MonoImage *image;
+};
+
+/* Additional details about a MonoGenericParam */
+typedef struct {
+       MonoClass *pklass;              /* The corresponding `MonoClass'. */
+       const char *name;
+       guint16 flags;
+       guint32 token;
+       MonoClass** constraints; /* NULL means end of list */
+} MonoGenericParamInfo;
+
+typedef struct {
+       MonoGenericParam param;
+       MonoGenericParamInfo info;
+} MonoGenericParamFull;
+
 /*
  * The generic container.
  *
@@ -535,35 +559,15 @@ struct _MonoGenericContainer {
        /* Invariant: parent != NULL => is_method */
        int is_method    : 1;
        /* Our type parameters. */
-       MonoGenericParam *type_params;
+       MonoGenericParamFull *type_params;
 };
 
-#define mono_generic_container_get_param(gc, i) ((gc)->type_params + (i))
-#define mono_generic_container_get_param_info(gc, i) (mono_generic_param_info ((gc)->type_params + (i)))
-
-/* Additional details about a MonoGenericParam */
-typedef struct {
-       MonoClass *pklass;              /* The corresponding `MonoClass'. */
-       const char *name;
-       guint16 flags;
-       MonoClass** constraints; /* NULL means end of list */
-} MonoGenericParamInfo;
-
-/*
- * A type parameter.
- */
-struct _MonoGenericParam {
-       MonoGenericContainer *owner;    /* Type or method this parameter was defined in. */
-       guint16 num;
-       /* If owner is NULL, this is the image whose mempool this struct was allocated from */
-       MonoImage *image;
-
-       MonoGenericParamInfo info;
-};
+#define mono_generic_container_get_param(gc, i) ((MonoGenericParam *) ((gc)->type_params + (i)))
+#define mono_generic_container_get_param_info(gc, i) (&((gc)->type_params + (i))->info)
 
 #define mono_generic_param_owner(p)            ((p)->owner)
 #define mono_generic_param_num(p)              ((p)->num)
-#define mono_generic_param_info(p)             (&(p)->info)
+#define mono_generic_param_info(p)             (mono_generic_param_owner (p) ? &((MonoGenericParamFull *) p)->info : NULL)
 #define mono_type_get_generic_param_owner(t)   (mono_generic_param_owner ((t)->data.generic_param))
 #define mono_type_get_generic_param_num(t)     (mono_generic_param_num   ((t)->data.generic_param))
 
@@ -1123,6 +1127,9 @@ mono_class_get_method_generic (MonoClass *klass, MonoMethod *method) MONO_INTERN
 MonoType*
 mono_type_get_basic_type_from_generic (MonoType *type) MONO_INTERNAL;
 
+void
+mono_set_generic_sharing_supported (gboolean supported) MONO_INTERNAL;
+
 gboolean
 mono_class_generic_sharing_enabled (MonoClass *class) MONO_INTERNAL;