2005-09-26 Carlos Alberto Cortez <calberto.cortez@gmail.com>
[mono.git] / mono / metadata / mono-debug-debugger.c
index b55fed04fb71781f5108e1fca13c7f578686c63a..31f91225ab4d171e35a840403f42d411fe4d5613 100644 (file)
@@ -25,9 +25,18 @@ struct _MonoDebuggerMetadataInfo {
        int size;
        int mono_defaults_size;
        MonoDefaults *mono_defaults;
+       int type_size;
+       int array_type_size;
+       int klass_size;
+       int klass_instance_size_offset;
+       int klass_token_offset;
        int klass_field_offset;
        int klass_methods_offset;
        int klass_method_count_offset;
+       int klass_this_arg_offset;
+       int klass_byval_arg_offset;
+       int klass_generic_class_offset;
+       int klass_generic_container_offset;
        int field_info_size;
 };
 
@@ -65,9 +74,12 @@ MonoDebuggerIOLayer mono_debugger_io_layer = {
 
 #endif
 
+static int initialized = 0;
+
 void
 mono_debugger_lock (void)
 {
+       g_assert (initialized);
        EnterCriticalSection (&debugger_lock_mutex);
        debugger_lock_level++;
 }
@@ -75,8 +87,7 @@ mono_debugger_lock (void)
 void
 mono_debugger_unlock (void)
 {
-       g_assert (debugger_lock_level > 0);
-
+       g_assert (initialized);
        if (debugger_lock_level == 1) {
                if (must_reload_symtabs && mono_debugger_use_debugger) {
                        mono_debugger_event (MONO_DEBUGGER_EVENT_RELOAD_SYMTABS, 0, 0);
@@ -97,6 +108,7 @@ mono_debugger_initialize (gboolean use_debugger)
 
        InitializeCriticalSection (&debugger_lock_mutex);
        mono_debugger_use_debugger = use_debugger;
+       initialized = 1;
 }
 
 void
@@ -121,9 +133,18 @@ mono_debugger_add_builtin_types (MonoDebugHandle *symfile)
        info->size = sizeof (MonoDebuggerMetadataInfo);
        info->mono_defaults = &mono_defaults;
        info->mono_defaults_size = sizeof (MonoDefaults);
+       info->type_size = sizeof (MonoType);
+       info->array_type_size = sizeof (MonoArrayType);
+       info->klass_size = sizeof (MonoClass);
+       info->klass_instance_size_offset = (guint8*)&klass.instance_size - (guint8*)&klass;
+       info->klass_token_offset = (guint8*)&klass.type_token - (guint8*)&klass;
        info->klass_field_offset = (guint8*)&klass.fields - (guint8*)&klass;
        info->klass_methods_offset = (guint8*)&klass.methods - (guint8*)&klass;
        info->klass_method_count_offset = (guint8*)&klass.method.count - (guint8*)&klass;
+       info->klass_this_arg_offset = (guint8*)&klass.this_arg - (guint8*)&klass;
+       info->klass_byval_arg_offset = (guint8*)&klass.byval_arg - (guint8*)&klass;
+       info->klass_generic_class_offset = (guint8*)&klass.generic_class - (guint8*)&klass;
+       info->klass_generic_container_offset = (guint8*)&klass.generic_container - (guint8*)&klass;
        info->field_info_size = sizeof (MonoClassField);
 }
 
@@ -133,71 +154,6 @@ mono_debugger_start_add_type (MonoDebugHandle *symfile, MonoClass *klass)
        must_reload_symtabs = TRUE;
 }
 
-void
-mono_debugger_add_type (MonoDebugHandle *symfile, MonoClass *klass)
-{
-}
-
-void
-mono_debugger_add_method (MonoDebugMethodJitInfo *jit)
-{
-}
-
-MonoReflectionMethod *
-ves_icall_MonoDebugger_GetMethod (MonoReflectionAssembly *assembly, guint32 token)
-{
-       MonoMethod *method;
-
-       method = mono_get_method (mono_assembly_get_image (assembly->assembly), token, NULL);
-
-       return mono_method_get_object (mono_domain_get (), method, NULL);
-}
-
-int
-ves_icall_MonoDebugger_GetMethodToken (MonoReflectionAssembly *assembly, MonoReflectionMethod *method)
-{
-       return method->method->token;
-}
-
-MonoReflectionType *
-ves_icall_MonoDebugger_GetType (MonoReflectionAssembly *assembly, guint32 token)
-{
-       MonoClass *klass;
-
-       klass = mono_class_get (mono_assembly_get_image (assembly->assembly), token);
-       if (!klass) {
-               g_warning (G_STRLOC ": %x", token);
-               return NULL;
-       }
-
-       return mono_type_get_object (mono_domain_get (), &klass->byval_arg);
-}
-
-MonoReflectionType *
-ves_icall_MonoDebugger_GetLocalTypeFromSignature (MonoReflectionAssembly *assembly, MonoArray *signature)
-{
-       MonoDomain *domain; 
-       MonoImage *image;
-       MonoType *type;
-       const char *ptr;
-       int len = 0;
-
-       MONO_CHECK_ARG_NULL (assembly);
-       MONO_CHECK_ARG_NULL (signature);
-
-       domain = mono_domain_get();
-       image = mono_assembly_get_image (assembly->assembly);
-
-       ptr = mono_array_addr (signature, char, 0);
-       g_assert (*ptr++ == 0x07);
-       len = mono_metadata_decode_value (ptr, &ptr);
-       g_assert (len == 1);
-
-       type = mono_metadata_parse_type (image, MONO_PARSE_LOCAL, 0, ptr, &ptr);
-
-       return mono_type_get_object (domain, type);
-}
-
 void
 mono_debugger_event (MonoDebuggerEvent event, guint64 data, guint64 arg)
 {
@@ -396,9 +352,6 @@ mono_debugger_runtime_invoke (MonoMethod *method, void *obj, void **params, Mono
        MonoObject *retval;
        gchar *message;
 
-       //      g_message (G_STRLOC ": %p - %p - %p - %p", method, obj, params, exc);
-       //      g_message (G_STRLOC ": %s.%s", method->klass->name, method->name);
-
        if (!strcmp (method->name, ".ctor")) {
                retval = obj = mono_object_new (mono_domain_get (), method->klass);