X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fobject.h;h=65daf10ceb7dd20a3f78de43a02b06c5c2468e89;hb=1d0ac15ee26bc43731acf7358ed0389793d47afa;hp=7354590645c02ab273b84de3e809d48c6c5b51ab;hpb=579f146c9d103ebdee692808578091963b526286;p=mono.git diff --git a/mono/metadata/object.h b/mono/metadata/object.h index 7354590645c..65daf10ceb7 100644 --- a/mono/metadata/object.h +++ b/mono/metadata/object.h @@ -53,6 +53,8 @@ typedef guchar MonoBoolean; +typedef struct _MonoReflectionMethod MonoReflectionMethod; + typedef struct { MonoVTable *vtable; MonoThreadsSync *synchronisation; @@ -65,19 +67,25 @@ typedef struct { typedef struct { MonoObject obj; + /* bounds is NULL for szarrays */ MonoArrayBounds *bounds; - /* used by single dimensional arrays to speed up bound checking */ + /* total number of elements of the array */ guint32 max_length; /* we use double to ensure proper alignment on platforms that need it */ double vector [MONO_ZERO_LEN_ARRAY]; } MonoArray; typedef struct { - MonoObject obj; - MonoArray *c_str; + MonoObject object; gint32 length; + gunichar2 chars [MONO_ZERO_LEN_ARRAY]; } MonoString; +typedef struct { + MonoObject object; + MonoType *type; +} MonoReflectionType; + typedef struct { MonoObject object; MonoObject *inner_ex; @@ -115,13 +123,42 @@ typedef struct { MonoBoolean disposed; } MonoWaitHandle; -typedef void (*MonoRuntimeObjectInit) (MonoObject *o); -typedef gint32 (*MonoRuntimeExecMain) (MonoMethod *method, MonoArray *args); +typedef struct { + MonoObject object; + MonoReflectionType *class_to_proxy; +} MonoRealProxy; + +typedef struct { + MonoObject object; + MonoRealProxy *rp; + MonoClass *klass; +} MonoTransparentProxy; + +typedef struct { + MonoObject obj; + MonoReflectionMethod *method; + MonoArray *args; + MonoArray *names; + MonoArray *arg_types; + MonoObject *ctx; + MonoObject *rval; + MonoObject *exc; +} MonoMethodMessage; -extern MonoRuntimeObjectInit mono_runtime_object_init; -extern MonoRuntimeExecMain mono_runtime_exec_main; +typedef struct { + gulong new_object_count; + gulong initialized_class_count; + gulong used_class_count; + gulong class_vtable_size; + gulong class_static_data_size; +} MonoStats; + +typedef MonoObject* (*MonoInvokeFunc) (MonoMethod *method, void *obj, void **params); -#define mono_array_length(array) ((array)->bounds->length) +#define mono_object_class(obj) (((MonoObject*)(obj))->vtable->klass) +#define mono_object_domain(obj) (((MonoObject*)(obj))->vtable->domain) + +#define mono_array_length(array) ((array)->max_length) #define mono_array_addr(array,type,index) ( ((char*)(array)->vector) + sizeof (type) * (index) ) #define mono_array_addr_with_size(array,size,index) ( ((char*)(array)->vector) + (size) * (index) ) #define mono_array_get(array,type,index) ( *(type*)mono_array_addr ((array), type, (index)) ) @@ -131,7 +168,10 @@ extern MonoRuntimeExecMain mono_runtime_exec_main; *__p = (value); \ } while (0) -#define mono_string_chars(s) ((gushort*)(s)->c_str->vector) +#define mono_string_chars(s) ((gunichar2*)(s)->chars) +#define mono_string_length(s) ((s)->length) + +extern MonoStats mono_stats; void * mono_object_allocate (size_t size); @@ -139,6 +179,9 @@ mono_object_allocate (size_t size); MonoObject * mono_object_new (MonoDomain *domain, MonoClass *klass); +MonoObject * +mono_object_new_specific (MonoVTable *vtable); + MonoObject * mono_object_new_from_token (MonoDomain *domain, MonoImage *image, guint32 token); @@ -149,6 +192,9 @@ MonoArray* mono_array_new_full (MonoDomain *domain, MonoClass *array_class, guint32 *lengths, guint32 *lower_bounds); +MonoArray * +mono_array_new_specific (MonoVTable *vtable, guint32 n); + MonoArray* mono_array_clone (MonoArray *array); @@ -156,7 +202,10 @@ MonoString* mono_string_new_utf16 (MonoDomain *domain, const guint16 *text, gint32 len); MonoString* -mono_ldstr (MonoDomain *domain, MonoImage *image, guint32 index); +mono_string_new_size (MonoDomain *domain, gint32 len); + +MonoString* +mono_ldstr (MonoDomain *domain, MonoImage *image, guint32 str_index); MonoString* mono_string_is_interned (MonoString *str); @@ -176,7 +225,7 @@ mono_string_new_len (MonoDomain *domain, const char *text, guint length) char * mono_string_to_utf8 (MonoString *string_obj); -char * +gunichar2 * mono_string_to_utf16 (MonoString *string_obj); void @@ -200,10 +249,22 @@ void mono_raise_exception (MonoException *ex); void -mono_install_runtime_object_init (MonoRuntimeObjectInit func); +mono_runtime_object_init (MonoObject *this); void -mono_install_runtime_exec_main (MonoRuntimeExecMain func); +mono_runtime_class_init (MonoClass *klass); + +void +mono_install_runtime_invoke (MonoInvokeFunc func); + +MonoObject* +mono_runtime_invoke (MonoMethod *method, void *obj, void **params); + +MonoObject* +mono_runtime_invoke_array (MonoMethod *method, void *obj, MonoArray *params); + +int +mono_runtime_exec_main (MonoMethod *method, MonoArray *args); MonoAsyncResult * mono_async_result_new (MonoDomain *domain, HANDLE handle, @@ -212,5 +273,17 @@ mono_async_result_new (MonoDomain *domain, HANDLE handle, MonoWaitHandle * mono_wait_handle_new (MonoDomain *domain, HANDLE handle); +void +mono_message_init (MonoDomain *domain, MonoMethodMessage *this, + MonoReflectionMethod *method, MonoArray *out_args); + +MonoObject * +mono_remoting_invoke (MonoObject *real_proxy, MonoMethodMessage *msg, + MonoObject **exc, MonoArray **out_args); + +MonoObject * +mono_message_invoke (MonoObject *target, MonoMethodMessage *msg, + MonoObject **exc, MonoArray **out_args); + #endif