- case MONO_TYPE_SZARRAY:
- {
- int len, i;
- mono_field_get_value (this, field, &value);
- len = mono_array_length ((MonoArray *)value);
- for (i = 0; i < len; i++){
- MonoObject *item = mono_array_get ((MonoArray *) value, gpointer, i);
- if (item != NULL)
- total += memory_usage (item, visited);
- }
- }
- break;
-
- case MONO_TYPE_I4:
- case MONO_TYPE_I1:
- case MONO_TYPE_I2:
- case MONO_TYPE_U4:
- case MONO_TYPE_U2:
- case MONO_TYPE_U1:
- case MONO_TYPE_VOID:
- case MONO_TYPE_BOOLEAN:
- case MONO_TYPE_CHAR:
- /* ignore */
- break;
- default:
- printf ("unhandled type: 0x%x\n", ftype->type);
- }
- }
-
- total += mono_class_instance_size (class);
+ case MONO_TYPE_SZARRAY:
+ mono_field_get_value (obj, field, &value);
+
+ if (value != NULL) {
+ total += memory_usage_array ((MonoArray *) value, visited);
+ total += mono_object_get_size ((MonoObject *) value);
+ }
+
+ break;
+
+ default:
+ /* printf ("Got type 0x%x\n", ftype->type); */
+ /* ignore, this will be included in mono_object_get_size () */
+ break;
+ }
+ }
+
+ total += mono_object_get_size (obj);