2002-05-20 Radek Doulik <rodo@ximian.com>
authorRadek Doulik <rodo@mono-cvs.ximian.com>
Mon, 20 May 2002 11:38:56 +0000 (11:38 -0000)
committerRadek Doulik <rodo@mono-cvs.ximian.com>
Mon, 20 May 2002 11:38:56 +0000 (11:38 -0000)
* interp.c (dump_stack): print boxed values for --noptr

svn path=/trunk/mono/; revision=4775

mono/interpreter/ChangeLog
mono/interpreter/interp.c

index ad02e1020e42e5f5169007a39944387c6282696a..0c2b0baffcd07a76cc8e01953bee315638ed4446 100644 (file)
@@ -1,3 +1,7 @@
+2002-05-20  Radek Doulik  <rodo@ximian.com>
+
+       * interp.c (dump_stack): print boxed values for --noptr
+
 2002-05-17  Radek Doulik  <rodo@ximian.com>
 
        * interp.c (dump_stack): if --noptr then print content of strings
index fb903fce4683659add68c09dc472f67d5b37fb1a..99f5e417b944ba8478f2f0451626f5289f98eb63 100644 (file)
@@ -628,11 +628,60 @@ dump_stack (stackval *stack, stackval *sp)
                        break;
                case VAL_OBJ: {
                        MonoObject *obj =  s->data.p;
-                       if (global_no_pointers && obj && mono_object_class (obj) == mono_defaults.string_class) {
-                               char *utf8 = mono_string_to_utf8 ((MonoString*) obj);
-                               g_string_sprintfa (str, "[str:%s] ", utf8);
-                               g_free (utf8);
-                               break;
+                       if (global_no_pointers && obj && obj->vtable) {
+                               MonoClass *klass = mono_object_class (obj);
+                               if (klass == mono_defaults.string_class) {
+                                       char *utf8 = mono_string_to_utf8 ((MonoString*) obj);
+                                       g_string_sprintfa (str, "[str:%s] ", utf8);
+                                       g_free (utf8);
+                                       break;
+                               } else if (klass == mono_defaults.sbyte_class) {
+                                       g_string_sprintfa (str, "[b:%d] ",
+                                                          *(gint8 *)((guint8 *) obj + sizeof (MonoObject)));
+                                       break;
+                               } else if (klass == mono_defaults.int16_class) {
+                                       g_string_sprintfa (str, "[b:%d] ",
+                                                          *(gint16 *)((guint8 *) obj + sizeof (MonoObject)));
+                                       break;
+                               } else if (klass == mono_defaults.int32_class) {
+                                       g_string_sprintfa (str, "[b:%d] ",
+                                                          *(gint32 *)((guint8 *) obj + sizeof (MonoObject)));
+                                       break;
+                               } else if (klass == mono_defaults.byte_class) {
+                                       g_string_sprintfa (str, "[b:%u] ",
+                                                          *(guint8 *)((guint8 *) obj + sizeof (MonoObject)));
+                                       break;
+                               } else if (klass == mono_defaults.char_class
+                                          || klass == mono_defaults.uint16_class) {
+                                       g_string_sprintfa (str, "[b:%u] ",
+                                                          *(guint16 *)((guint8 *) obj + sizeof (MonoObject)));
+                                       break;
+                               } else if (klass == mono_defaults.uint32_class) {
+                                       g_string_sprintfa (str, "[b:%u] ",
+                                                          *(guint32 *)((guint8 *) obj + sizeof (MonoObject)));
+                                       break;
+                               } else if (klass == mono_defaults.int64_class) {
+                                       g_string_sprintfa (str, "[b:%lld] ",
+                                                          *(gint64 *)((guint8 *) obj + sizeof (MonoObject)));
+                                       break;
+                               } else if (klass == mono_defaults.uint64_class) {
+                                       g_string_sprintfa (str, "[b:%llu] ",
+                                                          *(guint64 *)((guint8 *) obj + sizeof (MonoObject)));
+                                       break;
+                               } else if (klass == mono_defaults.double_class) {
+                                       g_string_sprintfa (str, "[b:%0.5f] ",
+                                                          *(gdouble *)((guint8 *) obj + sizeof (MonoObject)));
+                                       break;
+                               } else if (klass == mono_defaults.single_class) {
+                                       g_string_sprintfa (str, "[b:%0.5f] ",
+                                                          *(gfloat *)((guint8 *) obj + sizeof (MonoObject)));
+                                       break;
+                               } else if (klass == mono_defaults.boolean_class) {
+                                       g_string_sprintfa (str, "[b:%s] ",
+                                                          *(gboolean *)((guint8 *) obj + sizeof (MonoObject))
+                                                          ? "true" : "false");
+                                       break;
+                               }
                        }
                        /* fall thru */
                }