2007-09-11 Mark Probst <mark.probst@gmail.com>
[mono.git] / mono / metadata / object-internals.h
index f81e8b39941daa2aa39ff409e092efff1934eb9c..e62d3883c2ed4e411e85503684651abebdba7756 100644 (file)
@@ -129,6 +129,7 @@ struct _MonoException {
        gint32      remote_stack_index;
        gint32      hresult;
        MonoString *source;
+       MonoObject *_data;
 };
 
 typedef struct {
@@ -274,8 +275,10 @@ struct _MonoThread {
        MonoBoolean thread_dump_requested;
        gpointer end_stack; /* This is only used when running in the debugger. */
        MonoBoolean thread_interrupt_requested;
-       gpointer unused4;
-       gpointer unused5;
+       guint8  apartment_state;
+       gssize small_id;    /* A small, unique id, used for the hazard
+                              pointer table.  Should be changed to a
+                              guint32 at the next corlib version bump. */
        gpointer unused6;
        gpointer unused7;
 };
@@ -387,6 +390,7 @@ typedef struct {
        MonoString *iso2lang;
        MonoString *icu_name;
        MonoString *win3lang;
+       MonoString *territory;
        MonoCompareInfo *compareinfo;
        const gint32 *calendar_data;
        const void* text_info_data;
@@ -519,12 +523,14 @@ struct _MonoReflectionGenericMethod {
 
 struct _MonoDelegate {
        MonoObject object;
-       MonoObject *target_type;
+       gpointer method_ptr;
+       gpointer invoke_impl;
        MonoObject *target;
+       MonoObject *target_type;
        MonoString *method_name;
-       gpointer method_ptr;
        gpointer delegate_trampoline;
        MonoReflectionMethod *method_info;
+       MonoReflectionMethod *original_method_info;
 };
 
 typedef struct _MonoMulticastDelegate MonoMulticastDelegate;
@@ -1070,11 +1076,12 @@ MonoReflectionType* mono_reflection_create_runtime_class  (MonoReflectionTypeBui
 void        mono_reflection_get_dynamic_overrides (MonoClass *klass, MonoMethod ***overrides, int *num_overrides) MONO_INTERNAL;
 
 void mono_reflection_create_dynamic_method (MonoReflectionDynamicMethod *m) MONO_INTERNAL;
+void mono_reflection_destroy_dynamic_method (MonoReflectionDynamicMethod *mb) MONO_INTERNAL;
 
 void        mono_reflection_initialize_generic_parameter (MonoReflectionGenericParam *gparam) MONO_INTERNAL;
 
-MonoType*
-mono_class_bind_generic_parameters (MonoType *type, int type_argc, MonoType **types) MONO_INTERNAL;
+MonoClass*
+mono_class_bind_generic_parameters (MonoClass *klass, int type_argc, MonoType **types, gboolean is_dynamic) MONO_INTERNAL;
 MonoType*
 mono_reflection_bind_generic_parameters (MonoReflectionType *type, int type_argc, MonoType **types) MONO_INTERNAL;
 MonoReflectionMethod*
@@ -1091,7 +1098,7 @@ MonoArray  *mono_reflection_sighelper_get_signature_field (MonoReflectionSigHelp
 MonoReflectionMarshal* mono_reflection_marshal_from_marshal_spec (MonoDomain *domain, MonoClass *klass, MonoMarshalSpec *spec) MONO_INTERNAL;
 
 gpointer
-mono_reflection_lookup_dynamic_token (MonoImage *image, guint32 token, MonoClass **handle_class) MONO_INTERNAL;
+mono_reflection_lookup_dynamic_token (MonoImage *image, guint32 token, MonoClass **handle_class, MonoGenericContext *context) MONO_INTERNAL;
 
 gboolean
 mono_reflection_call_is_assignable_to (MonoClass *klass, MonoClass *oklass) MONO_INTERNAL;
@@ -1129,5 +1136,36 @@ mono_nullable_init (guint8 *buf, MonoObject *value, MonoClass *klass) MONO_INTER
 MonoObject*
 mono_nullable_box (guint8 *buf, MonoClass *klass) MONO_INTERNAL;
 
+#define MONO_IMT_SIZE 19
+
+typedef struct _MonoImtBuilderEntry {
+       MonoMethod *method;
+       struct _MonoImtBuilderEntry *next;
+       int vtable_slot;
+       int children;
+} MonoImtBuilderEntry;
+
+typedef struct _MonoIMTCheckItem MonoIMTCheckItem;
+
+struct _MonoIMTCheckItem {
+       MonoMethod       *method;
+       int               check_target_idx;
+       int               vtable_slot;
+       guint8           *jmp_code;
+       guint8           *code_target;
+       guint8            is_equals;
+       guint8            compare_done;
+       guint8            chunk_size;
+       guint8            short_branch;
+};
+
+typedef gpointer (*MonoImtThunkBuilder) (MonoVTable *vtable, MonoDomain *domain, MonoIMTCheckItem **imt_entries, int count);
+
+void
+mono_install_imt_thunk_builder (MonoImtThunkBuilder func) MONO_INTERNAL;
+
+guint32
+mono_method_get_imt_slot (MonoMethod *method) MONO_INTERNAL;
+
 #endif /* __MONO_OBJECT_INTERNALS_H__ */