protected void FormatObject(Thread target, TargetObject obj)
{
switch (obj.Kind) {
case TargetObjectKind.Array:
FormatArray (target, (TargetArrayObject) obj);
break;
case TargetObjectKind.Pointer:
TargetPointerObject pobj = (TargetPointerObject) obj;
if (!pobj.Type.IsTypesafe) {
FormatObjectRecursed (target, pobj, true);
break;
}
try {
TargetObject deref = pobj.GetDereferencedObject (target);
Append ("&({0}) ", deref.TypeName);
FormatObjectRecursed (target, deref, true);
} catch (Exception ex) {
FormatObjectRecursed (target, pobj, true);
}
break;
case TargetObjectKind.Object:
TargetObjectObject oobj = (TargetObjectObject) obj;
try {
TargetObject deref = oobj.GetDereferencedObject (target);
Append ("&({0}) ", deref.TypeName);
FormatObjectRecursed (target, deref, false);
} catch {
FormatObjectRecursed (target, oobj, true);
}
break;
case TargetObjectKind.Class:
case TargetObjectKind.Struct:
FormatStructObject (target, (TargetClassObject) obj);
break;
case TargetObjectKind.Fundamental: {
object value = ((TargetFundamentalObject) obj).GetObject (target);
Format (target, value);
break;
}
case TargetObjectKind.Enum:
FormatEnum (target, (TargetEnumObject) obj);
break;
case TargetObjectKind.GenericInstance:
FormatStructObject (target, (TargetClassObject) obj);
break;
case TargetObjectKind.Nullable:
FormatNullable (target, (TargetNullableObject) obj);
break;
default:
PrintObject (target, obj);
break;
}
}