public static TargetStructObject ToStructObject(MdbEvaluationContext ctx, TargetObject obj) { TargetStructObject sobj = obj as TargetStructObject; if (sobj != null) { return(sobj); } TargetObjectObject oobj = obj as TargetObjectObject; if (oobj != null) { return(oobj.GetClassObject(ctx.Thread)); } TargetArrayObject aobj = obj as TargetArrayObject; if ((aobj != null) && aobj.HasClassObject) { return(aobj.GetClassObject(ctx.Thread)); } return(null); }
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; } }