Patch for bug #62532 implemention of a kqueue/kevent based FileSystemWatcher.
[mono.git] / mono / metadata / object.h
index d682956835767284bcf6f3392a76c498b49d7a1b..2413cc7a346727372949fc020f72ca13b0b576cd 100644 (file)
@@ -2,70 +2,28 @@
 #define _MONO_CLI_OBJECT_H_
 
 #include <mono/metadata/class.h>
-#include <mono/metadata/threads-types.h>
-
-#if 1
-#define mono_assert(expr)                 G_STMT_START{                  \
-     if (!(expr))                                                        \
-       {                                                                 \
-               MonoException *ex;                                        \
-                char *msg = g_strdup_printf ("file %s: line %d (%s): "    \
-                "assertion failed: (%s)", __FILE__, __LINE__,             \
-                __PRETTY_FUNCTION__, #expr);                             \
-               ex = mono_get_exception_execution_engine (msg);           \
-               g_free (msg);                                             \
-                mono_raise_exception (ex);                                \
-       };                              }G_STMT_END
-
-#define mono_assert_not_reached()                G_STMT_START{           \
-     MonoException *ex;                                                   \
-     char *msg = g_strdup_printf ("file %s: line %d (%s): "               \
-     "should not be reached", __FILE__, __LINE__, __PRETTY_FUNCTION__);          \
-     ex = mono_get_exception_execution_engine (msg);                      \
-     g_free (msg);                                                        \
-     mono_raise_exception (ex);                                           \
-}G_STMT_END
-#else
-#define mono_assert(expr) g_assert(expr)
-#define mono_assert_not_reached() g_assert_not_reached() 
-#endif
-
-#define MONO_CHECK_ARG(arg, expr)              G_STMT_START{             \
-     if (!(expr))                                                        \
-       {                                                                 \
-               MonoException *ex;                                        \
-                char *msg = g_strdup_printf ("assertion `%s' failed",     \
-               #expr);                                                   \
-                if (arg) {} /* check if the name exists */                \
-               ex = mono_get_exception_argument (#arg, msg);             \
-               g_free (msg);                                             \
-                mono_raise_exception (ex);                                \
-       };                              }G_STMT_END
-
-#define MONO_CHECK_ARG_NULL(arg)           G_STMT_START{                 \
-     if (arg == NULL)                                                    \
-       {                                                                 \
-               MonoException *ex;                                        \
-                if (arg) {} /* check if the name exists */                \
-               ex = mono_get_exception_argument_null (#arg);             \
-                mono_raise_exception (ex);                                \
-       };                              }G_STMT_END
 
 typedef guchar MonoBoolean;
 
 typedef struct _MonoReflectionMethod MonoReflectionMethod;
+typedef struct _MonoReflectionAssembly MonoReflectionAssembly;
+typedef struct _MonoReflectionModule MonoReflectionModule;
+typedef struct _MonoReflectionField MonoReflectionField;
+typedef struct _MonoReflectionProperty MonoReflectionProperty;
+typedef struct _MonoReflectionEvent MonoReflectionEvent;
+typedef struct _MonoReflectionType MonoReflectionType;
 typedef struct _MonoDelegate MonoDelegate;
+typedef struct _MonoException MonoException;
+typedef struct _MonoThreadsSync MonoThreadsSync;
+typedef struct _MonoThread MonoThread;
+typedef struct _MonoDynamicAssembly MonoDynamicAssembly;
+typedef struct _MonoDynamicImage MonoDynamicImage;
 
 typedef struct {
        MonoVTable *vtable;
        MonoThreadsSync *synchronisation;
 } MonoObject;
 
-typedef struct {
-       MonoObject obj;
-       MonoObject *identity;
-} MonoMarshalByRefObject;
-
 typedef struct {
        guint32 length;
        guint32 lower_bound;
@@ -87,119 +45,8 @@ 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;
-} 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;
-
-typedef struct {
-       MonoException base;
-} MonoSystemException;
-
-typedef struct {
-       MonoSystemException base;
-       MonoString *param_name;
-} MonoArgumentException;
-
-typedef struct {
-       MonoObject   object;
-       MonoObject  *async_state;
-       MonoObject  *handle;
-       MonoObject  *async_delegate;
-       gpointer     data;
-       MonoBoolean  sync_completed;
-       MonoBoolean  completed;
-       MonoBoolean  endinvoke_called;
-} MonoAsyncResult;
-
-typedef struct {
-       MonoMarshalByRefObject object;
-       gpointer     handle;
-       MonoBoolean  disposed;
-} MonoWaitHandle;
-
-typedef struct {
-       MonoObject  object;
-       MonoReflectionType *class_to_proxy;     
-       MonoObject *context;
-       MonoObject *unwrapped_server;
-} 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;
-
-typedef struct {
-       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, MonoObject **exc);
-typedef gpointer    (*MonoCompileFunc)       (MonoMethod *method);
+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)
@@ -218,15 +65,16 @@ typedef void           (*MonoMainThreadFunc)    (gpointer user_data);
 #define mono_string_chars(s) ((gunichar2*)(s)->chars)
 #define mono_string_length(s) ((s)->length)
 
-void *
-mono_object_allocate        (size_t size);
-
 MonoObject *
-mono_object_new             (MonoDomain *domain, MonoClass *klass);
+mono_object_new                    (MonoDomain *domain, MonoClass *klass);
 
 MonoObject *
 mono_object_new_specific    (MonoVTable *vtable);
 
+/* can be used for classes without finalizer in non-profiling mode */
+MonoObject *
+mono_object_new_fast       (MonoVTable *vtable);
+
 MonoObject *
 mono_object_new_alloc_specific (MonoVTable *vtable);
 
@@ -234,88 +82,98 @@ MonoObject *
 mono_object_new_from_token  (MonoDomain *domain, MonoImage *image, guint32 token);
 
 MonoArray*
-mono_array_new              (MonoDomain *domain, MonoClass *eclass, guint32 n);
+mono_array_new             (MonoDomain *domain, MonoClass *eclass, guint32 n);
 
 MonoArray*
-mono_array_new_full         (MonoDomain *domain, MonoClass *array_class,
+mono_array_new_full        (MonoDomain *domain, MonoClass *array_class,
                             guint32 *lengths, guint32 *lower_bounds);
 
 MonoArray *
-mono_array_new_specific     (MonoVTable *vtable, guint32 n);
+mono_array_new_specific            (MonoVTable *vtable, guint32 n);
 
 MonoArray*
-mono_array_clone            (MonoArray *array);
+mono_array_clone           (MonoArray *array);
 
 MonoString*
-mono_string_new_utf16       (MonoDomain *domain, const guint16 *text, gint32 len);
+mono_string_new_utf16      (MonoDomain *domain, const guint16 *text, gint32 len);
 
 MonoString*
 mono_string_new_size       (MonoDomain *domain, gint32 len);
 
 MonoString*
-mono_ldstr                  (MonoDomain *domain, MonoImage *image, guint32 str_index);
+mono_ldstr                 (MonoDomain *domain, MonoImage *image, guint32 str_index);
 
 MonoString*
-mono_string_is_interned     (MonoString *str);
+mono_string_is_interned            (MonoString *str);
 
 MonoString*
-mono_string_intern          (MonoString *str);
+mono_string_intern         (MonoString *str);
 
 MonoString*
-mono_string_new             (MonoDomain *domain, const char *text);
+mono_string_new                    (MonoDomain *domain, const char *text);
 
 MonoString*
-mono_string_new_wrapper     (const char *text);
+mono_string_new_wrapper            (const char *text);
 
 MonoString*
-mono_string_new_len         (MonoDomain *domain, const char *text, guint length);
+mono_string_new_len        (MonoDomain *domain, const char *text, guint length);
 
 char *
-mono_string_to_utf8         (MonoString *string_obj);
+mono_string_to_utf8        (MonoString *string_obj);
 
 gunichar2 *
-mono_string_to_utf16        (MonoString *string_obj);
+mono_string_to_utf16       (MonoString *string_obj);
 
 MonoString *
-mono_string_from_utf16      (gunichar2 *data);
+mono_string_from_utf16     (gunichar2 *data);
+
+MonoObject *
+mono_value_box             (MonoDomain *domain, MonoClass *klass, gpointer val);
+
+MonoDomain*
+mono_object_get_domain      (MonoObject *obj);
+
+MonoClass*
+mono_object_get_class       (MonoObject *obj);
 
-void       
-mono_object_free            (MonoObject *o);
+gpointer
+mono_object_unbox          (MonoObject *obj);
 
 MonoObject *
-mono_value_box              (MonoDomain *domain, MonoClass *klass, gpointer val);
-                     
+mono_object_clone          (MonoObject *obj);
+
 MonoObject *
-mono_object_clone           (MonoObject *obj);
+mono_object_isinst         (MonoObject *obj, MonoClass *klass);
 
 MonoObject *
-mono_object_isinst          (MonoObject *obj, MonoClass *klass);
+mono_object_isinst_mbyref   (MonoObject *obj, MonoClass *klass);
 
-typedef void (*MonoExceptionFunc) (MonoException *ex);
+MonoObject *
+mono_object_castclass_mbyref (MonoObject *obj, MonoClass *klass);
 
-void
-mono_install_handler        (MonoExceptionFunc func);
+gboolean 
+mono_monitor_try_enter       (MonoObject *obj, guint32 ms);
+
+gboolean
+mono_monitor_enter           (MonoObject *obj);
+
+void 
+mono_monitor_exit            (MonoObject *obj);
 
 void
-mono_raise_exception        (MonoException *ex);
+mono_raise_exception       (MonoException *ex);
 
 void
 mono_runtime_object_init    (MonoObject *this_obj);
 
 void
-mono_runtime_class_init     (MonoClass *klass);
-
-void        
-mono_install_runtime_invoke (MonoInvokeFunc func);
-
-void        
-mono_install_compile_method (MonoCompileFunc func);
+mono_runtime_class_init            (MonoVTable *vtable);
 
 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 *
@@ -338,36 +196,13 @@ mono_runtime_exec_managed_code (MonoDomain *domain,
                                gpointer main_args);
 
 int
-mono_runtime_run_main       (MonoMethod *method, int argc, char* argv[], 
+mono_runtime_run_main      (MonoMethod *method, int argc, char* argv[], 
                             MonoObject **exc);
 
 int
-mono_runtime_exec_main      (MonoMethod *method, MonoArray *args,
+mono_runtime_exec_main     (MonoMethod *method, MonoArray *args,
                             MonoObject **exc);
 
-MonoAsyncResult *
-mono_async_result_new       (MonoDomain *domain, HANDLE handle, 
-                            MonoObject *state, gpointer data);
-
-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);
 
@@ -380,20 +215,20 @@ mono_store_remote_field (MonoObject *this_obj, MonoClass *klass, MonoClassField
 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);
+mono_compile_method       (MonoMethod *method);
+
+MonoRemoteClass*
+mono_remote_class (MonoDomain *domain, MonoString *class_name, MonoClass *proxy_class);
+
+void
+mono_upgrade_remote_class (MonoDomain *domain, MonoRemoteClass *remote_class, MonoClass *klass);
 
 /* accessors for fields and properties */
 void
@@ -408,11 +243,20 @@ mono_field_get_value (MonoObject *obj, MonoClassField *field, void *value);
 void
 mono_field_static_get_value (MonoVTable *vt, MonoClassField *field, void *value);
 
+MonoObject *
+mono_field_get_value_object (MonoDomain *domain, MonoClassField *field, MonoObject *obj);
+
 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);
 
+/* GC handles support */
+guint32      mono_gchandle_new         (MonoObject *obj, gboolean pinned);
+guint32      mono_gchandle_new_weakref (MonoObject *obj, gboolean track_resurrection);
+MonoObject*  mono_gchandle_get_target  (guint32 gchandle);
+void         mono_gchandle_free        (guint32 gchandle);
+
 #endif