[runtime] Wrap MonoClass::marshal_info with accessors.
authorRodrigo Kumpera <kumpera@gmail.com>
Thu, 3 Nov 2016 14:48:36 +0000 (07:48 -0700)
committerRodrigo Kumpera <kumpera@gmail.com>
Thu, 10 Nov 2016 22:56:34 +0000 (14:56 -0800)
mono/metadata/class-accessors.c
mono/metadata/class-internals.h
mono/metadata/marshal.c

index 53e67682d53604ac205868943fada78ad4fc51b2..eb8d9f2cd9b65a1b4cf42287b2ac0bb92ec28f7b 100644 (file)
@@ -222,3 +222,15 @@ mono_class_set_field_count (MonoClass *klass, guint32 count)
                break;
        }
 }
+
+MonoMarshalType*
+mono_class_get_marshal_info (MonoClass *class)
+{
+       return class->marshal_info;
+}
+
+void
+mono_class_set_marshal_info (MonoClass *class, MonoMarshalType *marshal_info)
+{
+       class->marshal_info = marshal_info;
+}
index afbae43bff65bd721ac8c95acd74a26aa17808c0..5f92351018ab6704f97922c2c1626febd69d50ec 100644 (file)
@@ -1494,6 +1494,12 @@ mono_class_get_field_count (MonoClass *klass);
 void
 mono_class_set_field_count (MonoClass *klass, guint32 count);
 
+MonoMarshalType*
+mono_class_get_marshal_info (MonoClass *class);
+
+void
+mono_class_set_marshal_info (MonoClass *class, MonoMarshalType *marshal_info);
+
 /*Now that everything has been defined, let's include the inline functions */
 #include <mono/metadata/class-inlines.h>
 
index 11b688dbea39934fbf45e03c95b4a219d89a5edb..5433a033d39dc894ac873ca6db0771ffa4240428 100644 (file)
@@ -9128,8 +9128,8 @@ mono_marshal_get_struct_to_ptr (MonoClass *klass)
 
        mono_marshal_load_type_info (klass);
 
-       if (klass->marshal_info->str_to_ptr)
-               return klass->marshal_info->str_to_ptr;
+       if (mono_class_get_marshal_info (klass)->str_to_ptr)
+               return mono_class_get_marshal_info (klass)->str_to_ptr;
 
        if (!stoptr) 
                stoptr = mono_class_get_method_from_name (mono_defaults.marshal_class, "StructureToPtr", 3);
@@ -9175,10 +9175,10 @@ mono_marshal_get_struct_to_ptr (MonoClass *klass)
        mono_mb_free (mb);
 
        mono_marshal_lock ();
-       if (!klass->marshal_info->str_to_ptr)
-               klass->marshal_info->str_to_ptr = res;
+       if (!mono_class_get_marshal_info (klass)->str_to_ptr)
+               mono_class_get_marshal_info (klass)->str_to_ptr = res;
        else
-               res = klass->marshal_info->str_to_ptr;
+               res = mono_class_get_marshal_info (klass)->str_to_ptr;
        mono_marshal_unlock ();
        return res;
 }
@@ -9201,8 +9201,8 @@ mono_marshal_get_ptr_to_struct (MonoClass *klass)
 
        mono_marshal_load_type_info (klass);
 
-       if (klass->marshal_info->ptr_to_str)
-               return klass->marshal_info->ptr_to_str;
+       if (mono_class_get_marshal_info (klass)->ptr_to_str)
+               return mono_class_get_marshal_info (klass)->ptr_to_str;
 
        if (!ptostr) {
                MonoMethodSignature *sig;
@@ -9253,10 +9253,10 @@ mono_marshal_get_ptr_to_struct (MonoClass *klass)
        mono_mb_free (mb);
 
        mono_marshal_lock ();
-       if (!klass->marshal_info->ptr_to_str)
-               klass->marshal_info->ptr_to_str = res;
+       if (!mono_class_get_marshal_info (klass)->ptr_to_str)
+               mono_class_get_marshal_info (klass)->ptr_to_str = res;
        else
-               res = klass->marshal_info->ptr_to_str;
+               res = mono_class_get_marshal_info (klass)->ptr_to_str;
        mono_marshal_unlock ();
        return res;
 }
@@ -11233,7 +11233,7 @@ mono_marshal_is_loading_type_info (MonoClass *klass)
 /**
  * mono_marshal_load_type_info:
  *
- *  Initialize klass->marshal_info using information from metadata. This function can
+ *  Initialize klass::marshal_info using information from metadata. This function can
  * recursively call itself, and the caller is responsible to avoid that by calling 
  * mono_marshal_is_loading_type_info () beforehand.
  *
@@ -11252,14 +11252,14 @@ mono_marshal_load_type_info (MonoClass* klass)
 
        g_assert (klass != NULL);
 
-       if (klass->marshal_info)
-               return klass->marshal_info;
+       if (mono_class_get_marshal_info (klass))
+               return mono_class_get_marshal_info (klass);
 
        if (!klass->inited)
                mono_class_init (klass);
 
-       if (klass->marshal_info)
-               return klass->marshal_info;
+       if (mono_class_get_marshal_info (klass))
+               return mono_class_get_marshal_info (klass);
 
        /*
         * This function can recursively call itself, so we keep the list of classes which are
@@ -11381,15 +11381,15 @@ mono_marshal_load_type_info (MonoClass* klass)
        mono_native_tls_set_value (load_type_info_tls_id, loads_list);
 
        mono_marshal_lock ();
-       if (!klass->marshal_info) {
+       if (!mono_class_get_marshal_info (klass)) {
                /*We do double-checking locking on marshal_info */
                mono_memory_barrier ();
-               klass->marshal_info = info;
+               mono_class_set_marshal_info (klass, info);
                ++class_marshal_info_count;
        }
        mono_marshal_unlock ();
 
-       return klass->marshal_info;
+       return mono_class_get_marshal_info (klass);
 }
 
 /**
@@ -11402,7 +11402,7 @@ mono_marshal_load_type_info (MonoClass* klass)
 gint32
 mono_class_native_size (MonoClass *klass, guint32 *align)
 {      
-       if (!klass->marshal_info) {
+       if (!mono_class_get_marshal_info (klass)) {
                if (mono_marshal_is_loading_type_info (klass)) {
                        if (align)
                                *align = 0;
@@ -11413,9 +11413,9 @@ mono_class_native_size (MonoClass *klass, guint32 *align)
        }
 
        if (align)
-               *align = klass->marshal_info->min_align;
+               *align = mono_class_get_marshal_info (klass)->min_align;
 
-       return klass->marshal_info->native_size;
+       return mono_class_get_marshal_info (klass)->native_size;
 }
 
 /*