static gboolean test_scc (MonoGCBridgeSCC *scc, int i) { int status = BRIDGE_DEAD; mono_field_get_value (scc->objs [i], mono_bridge_test_field, &status); return status > 0; }
static MonoToggleRefStatus test_toggleref_callback (MonoObject *obj) { static MonoClassField *mono_toggleref_test_field; int status = MONO_TOGGLE_REF_DROP; if (!mono_toggleref_test_field) { mono_toggleref_test_field = mono_class_get_field_from_name (mono_object_get_class (obj), "__test"); g_assert (mono_toggleref_test_field); } mono_field_get_value (obj, mono_toggleref_test_field, &status); printf ("toggleref-cb obj %d\n", status); return status; }
void MonoField::getValue(MonoObject* instance, void* outValue) { mono_field_get_value(instance, mField, outValue); }
static int memory_usage (MonoObject *obj, GHashTable *visited) { int total = 0; MonoClass *klass; MonoType *type; gpointer iter = NULL; MonoClassField *field; if (g_hash_table_lookup (visited, obj)) return 0; g_hash_table_insert (visited, obj, obj); klass = mono_object_get_class (obj); type = mono_class_get_type (klass); /* This is an array, so drill down into it */ if (type->type == MONO_TYPE_SZARRAY) total += memory_usage_array ((MonoArray *) obj, visited); while ((field = mono_class_get_fields (klass, &iter)) != NULL) { MonoType *ftype = mono_field_get_type (field); gpointer value; if ((ftype->attrs & (FIELD_ATTRIBUTE_STATIC | FIELD_ATTRIBUTE_HAS_FIELD_RVA)) != 0) continue; /* FIXME: There are probably other types we need to drill down into */ switch (ftype->type) { case MONO_TYPE_CLASS: case MONO_TYPE_OBJECT: mono_field_get_value (obj, field, &value); if (value != NULL) total += memory_usage ((MonoObject *) value, visited); break; case MONO_TYPE_STRING: mono_field_get_value (obj, field, &value); if (value != NULL) total += mono_object_get_size ((MonoObject *) value); break; 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); return total; }
void mioField::getValueImpl(mioObject obj, void *p) const { if (!mfield) { return; } mono_field_get_value(obj, mfield, p); }