internal override TargetFundamentalObject CreateInstance(Thread thread, object obj) { string str = obj as string; if (str == null) throw new ArgumentException (); if (!thread.CurrentFrame.Language.IsManaged) throw new TargetException (TargetError.InvalidContext); TargetAddress retval = thread.CallMethod ( CreateString, TargetAddress.Null, 0, 0, str); TargetLocation location = new AbsoluteTargetLocation (retval); return new MonoStringObject (this, location); }
public override TargetMethodSignature GetSignature(Thread thread) { if (signature != null) return signature; if (!ContainsGenericParameters) return new MonoMethodSignature (return_type, parameter_types); if (!thread.CurrentFrame.Language.IsManaged) throw new TargetException (TargetError.InvalidContext); TargetAddress addr = (TargetAddress) thread.ThreadServant.DoTargetAccess ( delegate (TargetMemoryAccess target) { MonoClassInfo class_info = ResolveClass (target, true); return class_info.GetMethodAddress (target, token); }); MonoLanguageBackend mono = klass.File.MonoLanguage; TargetAddress sig = thread.CallMethod ( mono.MonoDebuggerInfo.GetMethodSignature, addr, 0); signature = (MonoMethodSignature) thread.ThreadServant.DoTargetAccess ( delegate (TargetMemoryAccess target) { return mono.MetadataHelper.GetMethodSignature (mono, target, sig); }); return signature; }
public override TargetClass ForceClassInitialization(Thread thread) { if (class_info != null) return class_info; thread.ThreadServant.DoTargetAccess ( delegate (TargetMemoryAccess target) { class_info = ResolveClass (target, false); return class_info; }); if (class_info != null) return class_info; TargetAddress image = file.MonoImage; TargetAddress klass = thread.CallMethod ( file.MonoLanguage.MonoDebuggerInfo.LookupClass, image, 0, 0, Name); return (TargetClass) thread.ThreadServant.DoTargetAccess ( delegate (TargetMemoryAccess target) { class_info = MonoClassInfo.ReadClassInfo ( file.MonoLanguage, target, klass); return class_info; }); }
internal void SetStaticField(Thread thread, TargetFieldInfo field, TargetObject obj) { if (!thread.CurrentFrame.Language.IsManaged) throw new TargetException (TargetError.InvalidContext); TargetAddress data_address = thread.CallMethod ( SymbolFile.MonoLanguage.MonoDebuggerInfo.ClassGetStaticFieldData, KlassAddress, 0); thread.ThreadServant.DoTargetAccess ( delegate (TargetMemoryAccess target) { SetStaticField (target, field, data_address, obj); return null; }); }