-
- }
-}
-
-#if HAVE_BOEHM_GC
-static void
-vtable_finalizer (void *obj, void *data) {
- g_print ("%s finalized (%p)\n", (char*)data, obj);
-}
-#endif
-
-/**
- * mono_class_vtable:
- * @domain: the application domain
- * @class: the class to initialize
- *
- * VTables are domain specific because we create domain specific code, and
- * they contain the domain specific static class data.
- */
-MonoVTable *
-mono_class_vtable (MonoDomain *domain, MonoClass *class)
-{
- MonoClass *k;
- MonoVTable *vt;
- MonoClassField *field;
- guint32 cindex;
- guint32 cols [MONO_CONSTANT_SIZE];
- const char *p;
- char *t;
- int i, len;
-
- g_assert (class);
-
- /* can interfaces have static fields? */
- if (class->flags & TYPE_ATTRIBUTE_INTERFACE)
- g_assert_not_reached ();
-
- if ((vt = mono_g_hash_table_lookup (domain->class_vtable_hash, class)))
- return vt;
-
- if (!class->inited)
- mono_class_init (class);
-
-#if HAVE_BOEHM_GC
- vt = GC_malloc (sizeof (MonoVTable) + class->vtable_size * sizeof (gpointer));
- /*vt = GC_debug_malloc (sizeof (MonoVTable) + class->vtable_size * sizeof (gpointer), class->name, 1);*/
- GC_register_finalizer (vt, vtable_finalizer, "vtable", NULL, NULL);
-#else
- vt = g_malloc0 (sizeof (MonoVTable) + class->vtable_size * sizeof (gpointer));
-#endif
- vt->klass = class;
- vt->domain = domain;
-
- if (class->class_size) {
-#if HAVE_BOEHM_GC
- vt->data = GC_malloc (class->class_size + 8);
- /*vt->data = GC_debug_malloc (class->class_size + 8, class->name, 2);*/
- GC_register_finalizer (vt->data, vtable_finalizer, class->name, NULL, NULL);
-#else
- vt->data = g_malloc0 (class->class_size + 8);
-#endif
- /* align: fixme not 64 bit clean */
- if (((guint32)vt->data) & 0x7)
- vt->data = (char*)vt->data + 8 - (((guint32)vt->data) & 0x7);