2006-05-31 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mono / metadata / object.c
index f36908c347e4110bf5a1147bcd6ef724acdc81d7..e96f043093154f5d5ba5e54c51b5f250a7ff8dcb 100644 (file)
@@ -475,7 +475,12 @@ compute_class_bitmap (MonoClass *class, gsize *bitmap, int size, int offset, int
        MonoClassField *field;
        MonoClass *p;
        guint32 pos;
-       int max_size = class->instance_size / sizeof (gpointer);
+       int max_size;
+
+       if (static_fields)
+               max_size = class->class_size / sizeof (gpointer);
+       else
+               max_size = class->instance_size / sizeof (gpointer);
        if (max_size > size) {
                bitmap = g_malloc0 (sizeof (gsize) * ((max_size) + 1));
        }
@@ -722,7 +727,13 @@ mono_class_create_runtime_vtable (MonoDomain *domain, MonoClass *class)
                return runtime_info->domain_vtables [domain->domain_id];
        }
        if (!class->inited)
-               mono_class_init (class);
+               if (!mono_class_init (class)){
+                       MonoException *exc;
+                       mono_domain_unlock (domain);
+                       exc = mono_class_get_exception_for_failure (class);
+                       g_assert (exc);
+                       mono_raise_exception (exc);
+               }
 
        mono_class_setup_vtable (class);
 
@@ -1946,6 +1957,8 @@ mono_runtime_run_main (MonoMethod *method, int argc, char* argv[],
        gchar *utf8_fullpath;
        int result;
 
+       g_assert (method != NULL);
+       
        mono_thread_set_main (mono_thread_current ());
 
        main_args = g_new0 (char*, argc);
@@ -3545,7 +3558,7 @@ mono_wait_handle_new (MonoDomain *domain, HANDLE handle)
  *
  */
 MonoAsyncResult *
-mono_async_result_new (MonoDomain *domain, HANDLE handle, MonoObject *state, gpointer data)
+mono_async_result_new (MonoDomain *domain, HANDLE handle, MonoObject *state, gpointer data, MonoObject *object_data)
 {
        MonoAsyncResult *res = (MonoAsyncResult *)mono_object_new (domain, mono_defaults.asyncresult_class);
        MonoMethod *method = mono_get_context_capture_method ();
@@ -3557,6 +3570,7 @@ mono_async_result_new (MonoDomain *domain, HANDLE handle, MonoObject *state, gpo
        }
 
        res->data = data;
+       MONO_OBJECT_SETREF (res, object_data, object_data);
        MONO_OBJECT_SETREF (res, async_state, state);
        if (handle != NULL)
                MONO_OBJECT_SETREF (res, handle, (MonoObject *) mono_wait_handle_new (domain, handle));