grammar updates
[mono.git] / mono / metadata / object.h
index 4565fd411130b9fd8b5b8c4f47a634c064f779c9..17d0322c236a82d88f245cfd75f2f6d9790ede4b 100644 (file)
@@ -5,6 +5,7 @@
 #include <mono/metadata/threads-types.h>
 
 #if 1
+#ifdef __GNUC__
 #define mono_assert(expr)                 G_STMT_START{                  \
      if (!(expr))                                                        \
        {                                                                 \
      g_free (msg);                                                        \
      mono_raise_exception (ex);                                           \
 }G_STMT_END
+#else /* not GNUC */
+#define mono_assert(expr)                 G_STMT_START{                  \
+     if (!(expr))                                                        \
+       {                                                                 \
+               MonoException *ex;                                        \
+                char *msg = g_strdup_printf ("file %s: line %d: "         \
+                "assertion failed: (%s)", __FILE__, __LINE__,             \
+                #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): "                   \
+     "should not be reached", __FILE__, __LINE__);                       \
+     ex = mono_get_exception_execution_engine (msg);                      \
+     g_free (msg);                                                        \
+     mono_raise_exception (ex);                                           \
+}G_STMT_END
+#endif
 #else
 #define mono_assert(expr) g_assert(expr)
 #define mono_assert_not_reached() g_assert_not_reached() 
@@ -99,6 +122,23 @@ typedef struct {
        MonoType  *type;
 } MonoReflectionType;
 
+typedef struct {
+       MonoType *type;
+       gpointer  value;
+       MonoClass *klass;
+} MonoTypedRef;
+
+typedef struct {
+       gpointer args;
+} MonoArgumentHandle;
+
+typedef struct {
+       MonoMethodSignature *sig;
+       gpointer args;
+       gint32 next_arg;
+       gint32 num_args;
+} MonoArgIterator;
+
 typedef struct {
        MonoObject object;
        MonoArray  *trace_ips;
@@ -108,7 +148,7 @@ typedef struct {
        MonoString *class_name;
        MonoString *stack_trace;
        MonoString *remote_stack_trace;
-       gint32     *remote_stack_index;
+       gint32      remote_stack_index;
        gint32      hresult;
        MonoString *source;
 } MonoException;
@@ -122,6 +162,12 @@ typedef struct {
        MonoString *param_name;
 } MonoArgumentException;
 
+typedef struct {
+       MonoSystemException base;
+       MonoString *msg;
+       MonoString *type_name;
+} MonoTypeLoadException;
+
 typedef struct {
        MonoObject   object;
        MonoObject  *async_state;
@@ -142,6 +188,8 @@ typedef struct {
 typedef struct {
        MonoObject  object;
        MonoReflectionType *class_to_proxy;     
+       MonoObject *context;
+       MonoObject *unwrapped_server;
 } MonoRealProxy;
 
 typedef struct {
@@ -150,6 +198,14 @@ typedef struct {
        MonoClass     *klass; 
 } MonoTransparentProxy;
 
+/* This is a copy of System.Runtime.Remoting.Messaging.CallType */
+typedef enum {
+       CallType_Sync = 0,
+       CallType_BeginInvoke = 1,
+       CallType_EndInvoke = 2,
+       CallType_OneWay = 3
+} MonoCallType;
+
 typedef struct {
        MonoObject obj;
        MonoReflectionMethod *method;
@@ -159,6 +215,8 @@ typedef struct {
        MonoObject *ctx;
        MonoObject *rval;
        MonoObject *exc;
+       MonoAsyncResult *async_result;
+       guint32     call_type;
 } MonoMethodMessage;
 
 typedef struct {
@@ -181,6 +239,11 @@ typedef struct {
        MonoObject *abort_state;
        guint32 tid;
        HANDLE      start_notify;
+       gpointer stack_ptr;
+       gpointer *static_data;
+       gpointer jit_data;
+       gpointer lock_data;
+       GSList *appdomain_refs;
 } MonoThread;
 
 typedef struct {
@@ -214,15 +277,19 @@ 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);
 
 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);
+
 MonoObject *
 mono_object_new_from_token  (MonoDomain *domain, MonoImage *image, guint32 token);
 
@@ -277,7 +344,10 @@ mono_object_free            (MonoObject *o);
 
 MonoObject *
 mono_value_box              (MonoDomain *domain, MonoClass *klass, gpointer val);
-                     
+
+gpointer
+mono_object_unbox           (MonoObject *obj);
+
 MonoObject *
 mono_object_clone           (MonoObject *obj);
 
@@ -296,7 +366,7 @@ void
 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);
@@ -365,13 +435,13 @@ gpointer
 mono_load_remote_field (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, gpointer *res);
 
 MonoObject *
-mono_load_remote_field_new (MonoObject *this, MonoClass *klass, MonoClassField *field);
+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, MonoClass *klass, MonoClassField *field, MonoObject *arg);
+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);