[sgen] Remove an incorrect assertion in the workers code and explain.
[mono.git] / mono / metadata / object-internals.h
index 204133813cfac939eef806dd91602064acc3b2d3..46ebab02775d7889b5c63895ceebcd918c94a2b1 100644 (file)
 #ifdef __GNUC__
 
 /* namespace and name should be a constant */
+/* image must be mscorlib since other assemblies can be unloaded */
 #define mono_class_from_name_cached(image,namespace,name) ({ \
                        static MonoClass *tmp_klass; \
                        if (!tmp_klass) { \
+                               g_assert (image == mono_defaults.corlib); \
                                tmp_klass = mono_class_from_name ((image), (namespace), (name)); \
                                g_assert (tmp_klass); \
                        }; \
@@ -258,6 +260,11 @@ typedef struct {
        MonoString *type_name;
 } MonoTypeLoadException;
 
+typedef struct {
+       MonoException base;
+       MonoObject *wrapped_exception;
+} MonoRuntimeWrappedException;
+
 typedef struct {
        MonoObject   object;
        MonoObject  *async_state;
@@ -271,6 +278,7 @@ typedef struct {
        MonoObject  *async_callback;
        MonoObject  *execution_context;
        MonoObject  *original_context;
+       gint64       add_time;
 } MonoAsyncResult;
 
 typedef struct {
@@ -359,7 +367,7 @@ typedef enum {
 
 struct _MonoInternalThread {
        MonoObject  obj;
-       int         lock_thread_id; /* to be used as the pre-shifted thread id in thin locks */
+       volatile int lock_thread_id; /* to be used as the pre-shifted thread id in thin locks. Used for appdomain_ref push/pop */
        HANDLE      handle;
        MonoArray  *cached_culture_info;
        gpointer    unused1;
@@ -395,11 +403,11 @@ struct _MonoInternalThread {
        MonoThread *root_domain_thread;
        gpointer interrupt_on_stop;
        gsize    flags;
+       gpointer android_tid;
        /* 
         * These fields are used to avoid having to increment corlib versions
         * when a new field is added to the unmanaged MonoThread structure.
         */
-       gpointer unused4;
        gpointer unused5;
        gpointer unused6;
 };
@@ -559,6 +567,8 @@ typedef struct {
        gpointer (*get_addr_from_ftnptr) (gpointer descr);
        char*    (*get_runtime_build_info) (void);
        gpointer (*get_vtable_trampoline) (int slot_index);
+       gpointer (*get_imt_trampoline) (int imt_slot_index);
+       void (*set_cast_details) (MonoClass *from, MonoClass *to);
 } MonoRuntimeCallbacks;
 
 /* used to free a dynamic method */
@@ -639,6 +649,9 @@ mono_type_initialization_init (void) MONO_INTERNAL;
 void
 mono_type_initialization_cleanup (void) MONO_INTERNAL;
 
+int
+mono_thread_kill           (MonoInternalThread *thread, int signal) MONO_INTERNAL;
+
 guint32
 mono_thread_get_tls_key    (void) MONO_INTERNAL;
 
@@ -811,6 +824,7 @@ typedef struct {
 
 typedef struct {
        MonoReflectionType *parent;
+       MonoReflectionType *declaring_type;
        MonoString *name;
        MonoReflectionMethod *get;
        MonoReflectionMethod *set;
@@ -1064,6 +1078,12 @@ typedef struct {
        MonoReflectionMethodBuilder *set_method;
        MonoReflectionMethodBuilder *get_method;
        gint32 table_idx;
+       MonoObject *type_builder;
+       MonoArray *returnModReq;
+       MonoArray *returnModOpt;
+       MonoArray *paramModReq;
+       MonoArray *paramModOpt;
+       guint32 call_conv;
 } MonoReflectionPropertyBuilder;
 
 struct _MonoReflectionModule {
@@ -1338,6 +1358,7 @@ void        mono_reflection_create_unmanaged_type (MonoReflectionType *type) MON
 void        mono_reflection_register_with_runtime (MonoReflectionType *type) MONO_INTERNAL;
 
 void        mono_reflection_create_custom_attr_data_args (MonoImage *image, MonoMethod *method, const guchar *data, guint32 len, MonoArray **typed_args, MonoArray **named_args, CattrNamedArg **named_arg_info) MONO_INTERNAL;
+MonoMethodSignature * mono_reflection_lookup_signature (MonoImage *image, MonoMethod *method, guint32 token) MONO_INTERNAL;
 
 MonoArray* mono_param_get_objects_internal  (MonoDomain *domain, MonoMethod *method, MonoClass *refclass) MONO_INTERNAL;
 
@@ -1367,9 +1388,15 @@ mono_reflection_call_is_assignable_to (MonoClass *klass, MonoClass *oklass) MONO
 gboolean
 mono_reflection_is_valid_dynamic_token (MonoDynamicImage *image, guint32 token) MONO_INTERNAL;
 
+void
+mono_reflection_resolve_custom_attribute_data (MonoReflectionMethod *method, MonoReflectionAssembly *assembly, gpointer data, guint32 data_length, MonoArray **ctor_args, MonoArray ** named_args) MONO_INTERNAL;
+
 MonoType*
 mono_reflection_type_get_handle (MonoReflectionType *ref) MONO_INTERNAL;
 
+void
+mono_reflection_free_dynamic_generic_class (MonoGenericClass *gclass) MONO_INTERNAL;
+
 void
 mono_image_build_metadata (MonoReflectionModuleBuilder *module) MONO_INTERNAL;
 
@@ -1453,9 +1480,6 @@ typedef gpointer (*MonoImtThunkBuilder) (MonoVTable *vtable, MonoDomain *domain,
 void
 mono_install_imt_thunk_builder (MonoImtThunkBuilder func) MONO_INTERNAL;
 
-void
-mono_install_imt_trampoline (gpointer tramp) MONO_INTERNAL;
-
 void
 mono_vtable_build_imt_slot (MonoVTable* vtable, int imt_slot) MONO_INTERNAL;
 
@@ -1492,12 +1516,12 @@ mono_method_clear_object (MonoDomain *domain, MonoMethod *method) MONO_INTERNAL;
 void
 mono_class_compute_gc_descriptor (MonoClass *class) MONO_INTERNAL;
 
+gsize*
+mono_class_compute_bitmap (MonoClass *class, gsize *bitmap, int size, int offset, int *max_set, gboolean static_fields) MONO_INTERNAL;
+
 MonoObject*
 mono_object_xdomain_representation (MonoObject *obj, MonoDomain *target_domain, MonoObject **exc) MONO_INTERNAL;
 
-char *
-mono_string_to_utf8_checked (MonoString *s, MonoError *error) MONO_INTERNAL;
-
 gboolean
 mono_class_is_reflection_method_or_constructor (MonoClass *class) MONO_INTERNAL;
 
@@ -1513,6 +1537,21 @@ mono_class_set_ref_info (MonoClass *klass, gpointer obj) MONO_INTERNAL;
 void
 mono_class_free_ref_info (MonoClass *klass) MONO_INTERNAL;
 
+MonoObject *
+mono_object_new_pinned (MonoDomain *domain, MonoClass *klass) MONO_INTERNAL;
+
+void
+mono_field_static_get_value_for_thread (MonoInternalThread *thread, MonoVTable *vt, MonoClassField *field, void *value) MONO_INTERNAL;
+
+char *
+mono_string_to_utf8_ignore (MonoString *s) MONO_INTERNAL;
+
+char *
+mono_string_to_utf8_image_ignore (MonoImage *image, MonoString *s) MONO_INTERNAL;
+
+char *
+mono_string_to_utf8_mp_ignore (MonoMemPool *mp, MonoString *s) MONO_INTERNAL;
+
 #endif /* __MONO_OBJECT_INTERNALS_H__ */