Esempio n. 1
0
        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);
                });
            }
        }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        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;
     }
 }
Esempio n. 5
0
        protected bool DoResolve(TargetMemoryAccess target)
        {
            field = scope.GetField(target, field_name);
            if (field == null)
            {
                return(false);
            }

            type = field.Type;
            return(true);
        }
Esempio n. 6
0
        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);
            });
        }
Esempio n. 7
0
        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);
            }));
        }
Esempio n. 8
0
        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 ();
        }
Esempio n. 9
0
        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);
            }));
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        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));
        }
Esempio n. 12
0
        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();
        }
Esempio n. 13
0
        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));
            }
        }
Esempio n. 14
0
        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);
        }
Esempio n. 15
0
        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);
                });
            }
        }
Esempio n. 16
0
        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);
        }
Esempio n. 17
0
        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);
        }
Esempio n. 18
0
        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);
        }
Esempio n. 19
0
        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;
            });
        }
Esempio n. 20
0
        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);
        }
Esempio n. 21
0
 public TargetFieldInstance(TargetFieldInfo targetFieldInfo, object target)
 {
     TargetFieldInfo = targetFieldInfo;
     Target          = target;
 }
Esempio n. 22
0
        protected bool DoResolve(TargetMemoryAccess target)
        {
            field = scope.GetField (target, field_name);
            if (field == null)
                return false;

            type = field.Type;
            return true;
        }
Esempio n. 23
0
        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;
                });
            }
        }