X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fobject.h;h=388e079ad8251b98337051b27dd047e30d1d32d7;hb=e952d46d0f0101e9a814be6d63af8f108ef45121;hp=0ada161a13f6b35118baee511682b5101e0070c2;hpb=3b0014f7236a2de12316b0c3e90ac653446a2abe;p=mono.git diff --git a/mono/metadata/object.h b/mono/metadata/object.h index 0ada161a13f..388e079ad82 100644 --- a/mono/metadata/object.h +++ b/mono/metadata/object.h @@ -53,11 +53,19 @@ typedef guchar MonoBoolean; +typedef struct _MonoReflectionMethod MonoReflectionMethod; +typedef struct _MonoDelegate MonoDelegate; + typedef struct { MonoVTable *vtable; MonoThreadsSync *synchronisation; } MonoObject; +typedef struct { + MonoObject obj; + MonoObject *identity; +} MonoMarshalByRefObject; + typedef struct { guint32 length; guint32 lower_bound; @@ -65,26 +73,42 @@ 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; + gint32 capacity; + gint32 length; + MonoArray *chars; +} MonoStringBuilder; + +typedef struct { + MonoObject object; + MonoType *type; +} MonoReflectionType; + +typedef struct { + MonoObject object; + MonoArray *trace_ips; MonoObject *inner_ex; MonoString *message; MonoString *help_link; MonoString *class_name; MonoString *stack_trace; + MonoString *remote_stack_trace; + gint32 *remote_stack_index; gint32 hresult; MonoString *source; } MonoException; @@ -110,18 +134,78 @@ typedef struct { } MonoAsyncResult; typedef struct { - MonoObject object; + MonoMarshalByRefObject object; gpointer handle; MonoBoolean disposed; } MonoWaitHandle; -typedef void (*MonoRuntimeObjectInit) (MonoObject *o); -typedef gint32 (*MonoRuntimeExecMain) (MonoMethod *method, MonoArray *args); +typedef struct { + MonoObject object; + MonoReflectionType *class_to_proxy; + MonoObject *context; + MonoObject *unwrapped_server; +} MonoRealProxy; + +typedef struct { + MonoObject object; + MonoRealProxy *rp; + MonoClass *klass; +} MonoTransparentProxy; -extern MonoRuntimeObjectInit mono_runtime_object_init; -extern MonoRuntimeExecMain mono_runtime_exec_main; +typedef struct { + MonoObject obj; + MonoReflectionMethod *method; + MonoArray *args; + MonoArray *names; + MonoArray *arg_types; + MonoObject *ctx; + MonoObject *rval; + MonoObject *exc; +} MonoMethodMessage; + +typedef struct { + MonoObject obj; + gint32 il_offset; + gint32 native_offset; + MonoReflectionMethod *method; + MonoString *filename; + gint32 line; + gint32 column; +} MonoStackFrame; -#define mono_array_length(array) ((array)->bounds->length) +typedef struct { + MonoObject obj; + HANDLE handle; + MonoObject *culture_info; + MonoBoolean threadpool_thread; + guint32 state; + MonoException *abort_exc; + MonoObject *abort_state; + guint32 tid; + HANDLE start_notify; + gpointer stack_ptr; + gpointer *static_data; +} MonoThread; + +typedef struct { + MonoString *name; + MonoReflectionType *type; + MonoObject *value; +} MonoSerializationEntry; + +typedef struct { + guint32 state; + MonoObject *additional; +} MonoStreamingContext; + +typedef MonoObject* (*MonoInvokeFunc) (MonoMethod *method, void *obj, void **params, MonoObject **exc); +typedef gpointer (*MonoCompileFunc) (MonoMethod *method); +typedef void (*MonoMainThreadFunc) (gpointer user_data); + +#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 +215,8 @@ 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) void * mono_object_allocate (size_t size); @@ -139,6 +224,12 @@ 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_alloc_specific (MonoVTable *vtable); + MonoObject * mono_object_new_from_token (MonoDomain *domain, MonoImage *image, guint32 token); @@ -149,6 +240,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 +250,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); @@ -179,6 +276,9 @@ mono_string_to_utf8 (MonoString *string_obj); gunichar2 * mono_string_to_utf16 (MonoString *string_obj); +MonoString * +mono_string_from_utf16 (gunichar2 *data); + void mono_object_free (MonoObject *o); @@ -200,10 +300,50 @@ void mono_raise_exception (MonoException *ex); void -mono_install_runtime_object_init (MonoRuntimeObjectInit func); +mono_runtime_object_init (MonoObject *this_obj); void -mono_install_runtime_exec_main (MonoRuntimeExecMain func); +mono_runtime_class_init (MonoVTable *vtable); + +void +mono_install_runtime_invoke (MonoInvokeFunc func); + +void +mono_install_compile_method (MonoCompileFunc func); + +MonoMethod* +mono_object_get_virtual_method (MonoObject *obj, MonoMethod *method); + +MonoObject* +mono_runtime_invoke (MonoMethod *method, void *obj, void **params, + MonoObject **exc); + +MonoMethod * +mono_get_delegate_invoke (MonoClass *klass); + +MonoObject* +mono_runtime_delegate_invoke (MonoObject *delegate, void **params, + MonoObject **exc); + +MonoObject* +mono_runtime_invoke_array (MonoMethod *method, void *obj, MonoArray *params, + MonoObject **exc); + +MonoArray* +mono_runtime_get_main_args (void); + +void +mono_runtime_exec_managed_code (MonoDomain *domain, + MonoMainThreadFunc main_func, + gpointer main_args); + +int +mono_runtime_run_main (MonoMethod *method, int argc, char* argv[], + MonoObject **exc); + +int +mono_runtime_exec_main (MonoMethod *method, MonoArray *args, + MonoObject **exc); MonoAsyncResult * mono_async_result_new (MonoDomain *domain, HANDLE handle, @@ -212,5 +352,67 @@ 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_obj, + 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); + +MonoMethodMessage * +mono_method_call_message_new (MonoMethod *method, gpointer *params, MonoMethod *invoke, + MonoDelegate **cb, MonoObject **state); + +gpointer +mono_load_remote_field (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, gpointer *res); + +MonoObject * +mono_load_remote_field_new (MonoObject *this_obj, MonoClass *klass, MonoClassField *field); + +void +mono_store_remote_field (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, gpointer val); + +void +mono_store_remote_field_new (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, MonoObject *arg); + +void +mono_method_return_message_restore (MonoMethod *method, gpointer *params, MonoArray *out_args); + +void +mono_unhandled_exception (MonoObject *exc); + +void +mono_print_unhandled_exception (MonoObject *exc); + +void +mono_delegate_ctor (MonoObject *this_obj, MonoObject *target, gpointer addr); + +gpointer +mono_compile_method (MonoMethod *method); + +/* accessors for fields and properties */ +void +mono_field_set_value (MonoObject *obj, MonoClassField *field, void *value); + +void +mono_field_static_set_value (MonoVTable *vt, MonoClassField *field, void *value); + +void +mono_field_get_value (MonoObject *obj, MonoClassField *field, void *value); + +void +mono_field_static_get_value (MonoVTable *vt, MonoClassField *field, void *value); + +void +mono_property_set_value (MonoProperty *prop, void *obj, void **params, MonoObject **exc); + +MonoObject* +mono_property_get_value (MonoProperty *prop, void *obj, void **params, MonoObject **exc); + #endif