public override TargetObjectObject CreateBoxedObject(Thread thread, TargetObject value)
{
TargetAddress klass;
if ((value is MonoClassObject) && !value.Type.IsByRef)
klass = ((MonoClassObject) value).KlassAddress;
else if (value is TargetFundamentalObject) {
MonoClassType ctype = ((MonoFundamentalType) value.Type).MonoClassType;
MonoClassInfo info = (MonoClassInfo) thread.ThreadServant.DoTargetAccess (
delegate (TargetMemoryAccess target) {
return ctype.ResolveClass (target, true);
});
klass = info.KlassAddress;
} else
throw new InvalidOperationException ();
if (!thread.CurrentFrame.Language.IsManaged)
throw new TargetException (TargetError.InvalidContext);
TargetAddress boxed = thread.CallMethod (MonoDebuggerInfo.GetBoxedObjectMethod, klass, value);
if (boxed.IsNull)
return null;
return new MonoObjectObject (builtin_types.ObjectType, new AbsoluteTargetLocation (boxed));
}