public override void SetField(Thread thread, TargetStructObject instance, TargetFieldInfo field, TargetObject value) { if (field.IsStatic) { if (instance != null) { throw new InvalidOperationException(); } SetStaticField(thread, field, value); } else { if (instance == null) { throw new InvalidOperationException(); } thread.ThreadServant.DoTargetAccess( delegate(TargetMemoryAccess target) { SetInstanceField(target, instance, field, value); return(null); }); } }
internal TargetObject GetInstanceField(TargetMemoryAccess target, TargetStructObject instance, TargetFieldInfo field) { GetFields(target); int offset = field_offsets [field.Position]; TargetType type = field_types [field.Position]; if (!Type.IsByRef) { offset -= 2 * target.TargetMemoryInfo.TargetAddressSize; } TargetLocation field_loc = instance.Location.GetLocationAtOffset(offset); TargetAddress orig_addr = field_loc.GetAddress(target); if (type.IsByRef) { field_loc = field_loc.GetDereferencedLocation(); } TargetAddress addr = field_loc.GetAddress(target); if (field_loc.HasAddress && field_loc.GetAddress(target).IsNull) { return(new TargetNullObject(type)); } return(type.GetObject(target, field_loc)); }
public override TargetObject GetField(Thread thread, TargetStructObject instance, TargetFieldInfo field) { if (field.HasConstValue) { return(SymbolFile.MonoLanguage.CreateInstance(thread, field.ConstValue)); } if (field.IsStatic) { return(GetStaticField(thread, field)); } else { if (instance == null) { throw new InvalidOperationException(); } return((TargetObject)thread.ThreadServant.DoTargetAccess( delegate(TargetMemoryAccess target) { return GetInstanceField(target, instance, field); })); } }
public FieldReference(EvaluationContext ctx, TargetStructObject thisobj, TargetType type, TargetFieldInfo field) : base(ctx) { this.type = type; this.field = field; if (!field.IsStatic) { this.thisobj = thisobj; } }
protected bool DoResolve(TargetMemoryAccess target) { field = scope.GetField(target, field_name); if (field == null) { return(false); } type = field.Type; return(true); }
public override TargetObject GetField(Thread thread, TargetStructObject instance, TargetFieldInfo field) { if (field.HasConstValue) return type.Language.CreateInstance (thread, field.ConstValue); return (TargetObject) thread.ThreadServant.DoTargetAccess ( delegate (TargetMemoryAccess target) { return GetField (target, instance, field); }); }
public override TargetObject GetField(Thread thread, TargetStructObject instance, TargetFieldInfo field) { if (field.HasConstValue) { return(type.Language.CreateInstance(thread, field.ConstValue)); } return((TargetObject)thread.ThreadServant.DoTargetAccess( delegate(TargetMemoryAccess target) { return GetField(target, instance, field); })); }
public override void SetField(Thread thread, TargetStructObject instance, TargetFieldInfo field, TargetObject value) { TargetLocation field_loc = instance.Location.GetLocationAtOffset (field.Offset); if (field.Type.IsByRef) field_loc = field_loc.GetDereferencedLocation (); NativeFieldInfo nfield = (NativeFieldInfo) field; if (!field.Type.IsByRef && nfield.IsBitfield) field_loc = new BitfieldTargetLocation ( field_loc, nfield.BitOffset, nfield.BitSize); // field.Type.SetObject (field_loc, value); throw new NotImplementedException (); }
internal TargetObject GetStaticField(Thread thread, TargetFieldInfo field) { if (!thread.CurrentFrame.Language.IsManaged) { throw new TargetException(TargetError.InvalidContext); } TargetAddress data_address = thread.CallMethod( SymbolFile.MonoLanguage.MonoDebuggerInfo.ClassGetStaticFieldData, KlassAddress, 0); return((TargetObject)thread.ThreadServant.DoTargetAccess( delegate(TargetMemoryAccess target) { return GetStaticField(target, field, data_address); })); }
internal void SetStaticField(TargetMemoryAccess target, TargetFieldInfo field, TargetAddress data_address, TargetObject obj) { GetFields(target); int offset = field_offsets [field.Position]; TargetType type = field_types [field.Position]; TargetLocation location = new AbsoluteTargetLocation(data_address); TargetLocation field_loc = location.GetLocationAtOffset(offset); if (type.IsByRef) { field_loc = field_loc.GetDereferencedLocation(); } type.SetObject(target, field_loc, obj); }
internal TargetObject GetField(TargetMemoryAccess target, TargetStructObject instance, TargetFieldInfo field) { TargetLocation field_loc = instance.Location.GetLocationAtOffset(field.Offset); if (field.Type.IsByRef) { field_loc = field_loc.GetDereferencedLocation(); } NativeFieldInfo nfield = (NativeFieldInfo)field; if (!field.Type.IsByRef && nfield.IsBitfield) { field_loc = new BitfieldTargetLocation( field_loc, nfield.BitOffset, nfield.BitSize); } return(field.Type.GetObject(target, field_loc)); }
public override void SetField(Thread thread, TargetStructObject instance, TargetFieldInfo field, TargetObject value) { TargetLocation field_loc = instance.Location.GetLocationAtOffset(field.Offset); if (field.Type.IsByRef) { field_loc = field_loc.GetDereferencedLocation(); } NativeFieldInfo nfield = (NativeFieldInfo)field; if (!field.Type.IsByRef && nfield.IsBitfield) { field_loc = new BitfieldTargetLocation( field_loc, nfield.BitOffset, nfield.BitSize); } // field.Type.SetObject (field_loc, value); throw new NotImplementedException(); }
protected string FormatMember(string prefix, TargetMemberInfo member, bool is_static, Hashtable hash) { string tname = member.Type != null ? member.Type.Name : "<unknown type>"; TargetFieldInfo fi = member as TargetFieldInfo; if ((fi != null) && fi.HasConstValue) { return(String.Format( "{0} const {1} {2} = {3}", prefix, tname, member.Name, fi.ConstValue)); } else if (is_static) { return(String.Format( "{0} static {1} {2}", prefix, tname, member.Name)); } else { return(String.Format( "{0} {1} {2}", prefix, tname, member.Name)); } }
internal void SetInstanceField(TargetMemoryAccess target, TargetStructObject instance, TargetFieldInfo field, TargetObject obj) { GetFields(target); int offset = field_offsets [field.Position]; TargetType type = field_types [field.Position]; if (!Type.IsByRef) { offset -= 2 * target.TargetMemoryInfo.TargetAddressSize; } TargetLocation field_loc = instance.Location.GetLocationAtOffset(offset); if (type.IsByRef) { field_loc = field_loc.GetDereferencedLocation(); } type.SetObject(target, field_loc, obj); }
public override TargetObject GetField(Thread thread, TargetStructObject instance, TargetFieldInfo field) { if (field.HasConstValue) return SymbolFile.MonoLanguage.CreateInstance (thread, field.ConstValue); if (field.IsStatic) { return GetStaticField (thread, field); } else { if (instance == null) throw new InvalidOperationException (); return (TargetObject) thread.ThreadServant.DoTargetAccess ( delegate (TargetMemoryAccess target) { return GetInstanceField (target, instance, field); }); } }
internal TargetObject GetField(TargetMemoryAccess target, TargetStructObject instance, TargetFieldInfo field) { TargetLocation field_loc = instance.Location.GetLocationAtOffset (field.Offset); if (field.Type.IsByRef) field_loc = field_loc.GetDereferencedLocation (); NativeFieldInfo nfield = (NativeFieldInfo) field; if (!field.Type.IsByRef && nfield.IsBitfield) field_loc = new BitfieldTargetLocation ( field_loc, nfield.BitOffset, nfield.BitSize); return field.Type.GetObject (target, field_loc); }
internal TargetObject GetInstanceField(TargetMemoryAccess target, TargetStructObject instance, TargetFieldInfo field) { GetFields (target); int offset = field_offsets [field.Position]; TargetType type = field_types [field.Position]; if (!Type.IsByRef) offset -= 2 * target.TargetMemoryInfo.TargetAddressSize; TargetLocation field_loc = instance.Location.GetLocationAtOffset (offset); TargetAddress orig_addr = field_loc.GetAddress (target); if (type.IsByRef) field_loc = field_loc.GetDereferencedLocation (); TargetAddress addr = field_loc.GetAddress (target); if (field_loc.HasAddress && field_loc.GetAddress (target).IsNull) return new TargetNullObject (type); return type.GetObject (target, field_loc); }
internal void SetInstanceField(TargetMemoryAccess target, TargetStructObject instance, TargetFieldInfo field, TargetObject obj) { GetFields (target); int offset = field_offsets [field.Position]; TargetType type = field_types [field.Position]; if (!Type.IsByRef) offset -= 2 * target.TargetMemoryInfo.TargetAddressSize; TargetLocation field_loc = instance.Location.GetLocationAtOffset (offset); if (type.IsByRef) field_loc = field_loc.GetDereferencedLocation (); type.SetObject (target, field_loc, obj); }
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; }); }
internal void SetStaticField(TargetMemoryAccess target, TargetFieldInfo field, TargetAddress data_address, TargetObject obj) { GetFields (target); int offset = field_offsets [field.Position]; TargetType type = field_types [field.Position]; TargetLocation location = new AbsoluteTargetLocation (data_address); TargetLocation field_loc = location.GetLocationAtOffset (offset); if (type.IsByRef) field_loc = field_loc.GetDereferencedLocation (); type.SetObject (target, field_loc, obj); }
public TargetFieldInstance(TargetFieldInfo targetFieldInfo, object target) { TargetFieldInfo = targetFieldInfo; Target = target; }
protected bool DoResolve(TargetMemoryAccess target) { field = scope.GetField (target, field_name); if (field == null) return false; type = field.Type; return true; }
public override void SetField(Thread thread, TargetStructObject instance, TargetFieldInfo field, TargetObject value) { if (field.IsStatic) { if (instance != null) throw new InvalidOperationException (); SetStaticField (thread, field, value); } else { if (instance == null) throw new InvalidOperationException (); thread.ThreadServant.DoTargetAccess ( delegate (TargetMemoryAccess target) { SetInstanceField (target, instance, field, value); return null; }); } }