[sgen] We must do bridge processing with all sgen locks taken.
[mono.git] / mono / metadata / object-internals.h
index 40e542dfa61642aea95f69666c460f4611c35d55..d969533904f41f5f88dbd5ad5c4d422bc7df7c2f 100644 (file)
@@ -194,6 +194,27 @@ struct _MonoString {
 #define mono_array_length_fast(array) ((array)->max_length)
 #define mono_array_addr_with_size_fast(array,size,index) ( ((char*)(array)->vector) + (size) * (index) )
 
+#define mono_array_addr_fast(array,type,index) ((type*)(void*) mono_array_addr_with_size_fast (array, sizeof (type), index))
+#define mono_array_get_fast(array,type,index) ( *(type*)mono_array_addr_fast ((array), type, (index)) ) 
+#define mono_array_set_fast(array,type,index,value)    \
+       do {    \
+               type *__p = (type *) mono_array_addr_fast ((array), type, (index));     \
+               *__p = (value); \
+       } while (0)
+#define mono_array_setref_fast(array,index,value)      \
+       do {    \
+               void **__p = (void **) mono_array_addr_fast ((array), void*, (index));  \
+               mono_gc_wbarrier_set_arrayref ((array), __p, (MonoObject*)(value));     \
+               /* *__p = (value);*/    \
+       } while (0)
+#define mono_array_memcpy_refs_fast(dest,destidx,src,srcidx,count)     \
+       do {    \
+               void **__p = (void **) mono_array_addr_fast ((dest), void*, (destidx)); \
+               void **__s = mono_array_addr_fast ((src), void*, (srcidx));     \
+               mono_gc_wbarrier_arrayref_copy (__p, __s, (count));     \
+       } while (0)
+
+
 typedef struct {
        MonoObject obj;
        MonoObject *identity;
@@ -1584,7 +1605,7 @@ void
 mono_field_static_get_value_for_thread (MonoInternalThread *thread, MonoVTable *vt, MonoClassField *field, void *value) MONO_INTERNAL;
 
 /* exported, used by the debugger */
-void *
+MONO_API void *
 mono_vtable_get_static_field_data (MonoVTable *vt);
 
 char *