Example #1
0
        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);
        }
Example #2
0
        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;
            }
        }