Mon May 26 12:10:35 CEST 2003 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / metadata / object.h
index 65daf10ceb7dd20a3f78de43a02b06c5c2468e89..388e079ad8251b98337051b27dd047e30d1d32d7 100644 (file)
 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;
@@ -81,6 +87,13 @@ typedef struct {
        gunichar2 chars [MONO_ZERO_LEN_ARRAY];
 } MonoString;
 
+typedef struct {
+       MonoObject object;
+       gint32 capacity;
+       gint32 length;
+       MonoArray *chars;
+} MonoStringBuilder;
+
 typedef struct {
        MonoObject object;
        MonoType  *type;
@@ -88,11 +101,14 @@ typedef struct {
 
 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;
@@ -118,7 +134,7 @@ typedef struct {
 } MonoAsyncResult;
 
 typedef struct {
-       MonoObject   object;
+       MonoMarshalByRefObject object;
        gpointer     handle;
        MonoBoolean  disposed;
 } MonoWaitHandle;
@@ -126,6 +142,8 @@ typedef struct {
 typedef struct {
        MonoObject  object;
        MonoReflectionType *class_to_proxy;     
+       MonoObject *context;
+       MonoObject *unwrapped_server;
 } MonoRealProxy;
 
 typedef struct {
@@ -146,14 +164,43 @@ typedef struct {
 } MonoMethodMessage;
 
 typedef struct {
-       gulong new_object_count;
-       gulong initialized_class_count;
-       gulong used_class_count;
-       gulong class_vtable_size;
-       gulong class_static_data_size;
-} MonoStats;
+       MonoObject obj;
+       gint32 il_offset;
+       gint32 native_offset;
+       MonoReflectionMethod *method;
+       MonoString *filename;
+       gint32 line;
+       gint32 column;
+} MonoStackFrame;
+
+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);
+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)
@@ -171,8 +218,6 @@ typedef MonoObject* (*MonoInvokeFunc)        (MonoMethod *method, void *obj, voi
 #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);
 
@@ -182,6 +227,9 @@ 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);
 
@@ -202,7 +250,7 @@ MonoString*
 mono_string_new_utf16       (MonoDomain *domain, const guint16 *text, gint32 len);
 
 MonoString*
-mono_string_new_size           (MonoDomain *domain, gint32 len);
+mono_string_new_size       (MonoDomain *domain, gint32 len);
 
 MonoString*
 mono_ldstr                  (MonoDomain *domain, MonoImage *image, guint32 str_index);
@@ -228,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);
 
@@ -249,22 +300,50 @@ void
 mono_raise_exception        (MonoException *ex);
 
 void
-mono_runtime_object_init    (MonoObject *this);
+mono_runtime_object_init    (MonoObject *this_obj);
 
 void
-mono_runtime_class_init     (MonoClass *klass);
+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);
+mono_runtime_invoke         (MonoMethod *method, void *obj, void **params,
+                            MonoObject **exc);
+
+MonoMethod *
+mono_get_delegate_invoke    (MonoClass *klass);
 
 MonoObject*
-mono_runtime_invoke_array   (MonoMethod *method, void *obj, MonoArray *params);
+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_exec_main      (MonoMethod *method, MonoArray *args);
+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, 
@@ -274,7 +353,7 @@ MonoWaitHandle *
 mono_wait_handle_new        (MonoDomain *domain, HANDLE handle);
 
 void
-mono_message_init           (MonoDomain *domain, MonoMethodMessage *this, 
+mono_message_init           (MonoDomain *domain, MonoMethodMessage *this_obj
                             MonoReflectionMethod *method, MonoArray *out_args);
 
 MonoObject *
@@ -285,5 +364,55 @@ 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