Author: martin
Date: 2007-10-10 11:07:45 -0400 (Wed, 10 Oct 2007)
New Revision: 87272

Modified:
   trunk/debugger/ChangeLog
   trunk/debugger/frontend/Expression.cs
   trunk/debugger/languages/TargetClassObject.cs
   trunk/debugger/languages/mono/MonoClassObject.cs
   trunk/debugger/languages/mono/MonoClassType.cs
   trunk/debugger/languages/native/NativeStructObject.cs
   trunk/debugger/test/testsuite/TestObject.cs
Log:
2007-10-10  Martin Baulig  <[EMAIL PROTECTED]>

        Fix the "field from parent class madness".

        * languages/TargetClassObject.cs
        (TargetClassObject.GetParentObject): Take a `TargetMemoryAccess'
        instead of a `Target' argument.

        * languages/mono/MonoClassObject.cs
        (MonoClassObject.GetParentObject): Disallow any implicit boxings.

        * frontend/Expression.cs
        (StructAccessExpression.FindMember): When searching in the parent
        class, also use the parent instance.



Modified: trunk/debugger/ChangeLog
===================================================================
--- trunk/debugger/ChangeLog    2007-10-10 15:00:25 UTC (rev 87271)
+++ trunk/debugger/ChangeLog    2007-10-10 15:07:45 UTC (rev 87272)
@@ -1,3 +1,18 @@
+2007-10-10  Martin Baulig  <[EMAIL PROTECTED]>
+
+       Fix the "field from parent class madness".
+
+       * languages/TargetClassObject.cs
+       (TargetClassObject.GetParentObject): Take a `TargetMemoryAccess'
+       instead of a `Target' argument.
+
+       * languages/mono/MonoClassObject.cs
+       (MonoClassObject.GetParentObject): Disallow any implicit boxings.
+
+       * frontend/Expression.cs
+       (StructAccessExpression.FindMember): When searching in the parent
+       class, also use the parent instance.
+
 2007-10-09  Martin Baulig  <[EMAIL PROTECTED]>
 
        * languages/mono/MonoClassInfo.cs

Modified: trunk/debugger/frontend/Expression.cs
===================================================================
--- trunk/debugger/frontend/Expression.cs       2007-10-10 15:00:25 UTC (rev 
87271)
+++ trunk/debugger/frontend/Expression.cs       2007-10-10 15:07:45 UTC (rev 
87272)
@@ -1827,6 +1827,11 @@
                        TargetClassType ctype = stype as TargetClassType;
                        if ((ctype != null) && ctype.HasParent) {
                                stype = ctype.ParentType;
+                               if (instance != null) {
+                                       instance = instance.GetParentObject 
(target);
+                                       if (instance == null)
+                                               return null;
+                               }
                                goto again;
                        }
 

Modified: trunk/debugger/languages/TargetClassObject.cs
===================================================================
--- trunk/debugger/languages/TargetClassObject.cs       2007-10-10 15:00:25 UTC 
(rev 87271)
+++ trunk/debugger/languages/TargetClassObject.cs       2007-10-10 15:07:45 UTC 
(rev 87272)
@@ -10,7 +10,7 @@
                        this.Type = type;
                }
 
-               public abstract TargetClassObject GetParentObject (Thread 
target);
+               public abstract TargetClassObject GetParentObject 
(TargetMemoryAccess target);
 
                public abstract TargetClassObject GetCurrentObject 
(TargetMemoryAccess target);
 

Modified: trunk/debugger/languages/mono/MonoClassObject.cs
===================================================================
--- trunk/debugger/languages/mono/MonoClassObject.cs    2007-10-10 15:00:25 UTC 
(rev 87271)
+++ trunk/debugger/languages/mono/MonoClassObject.cs    2007-10-10 15:07:45 UTC 
(rev 87272)
@@ -16,7 +16,7 @@
                        this.info = info;
                }
 
-               public override TargetClassObject GetParentObject (Thread 
target)
+               public override TargetClassObject GetParentObject 
(TargetMemoryAccess target)
                {
                        if (!type.HasParent || !type.IsByRef)
                                return null;
@@ -26,15 +26,9 @@
                                return null;
 
                        MonoClassType parent_type = parent_info.ClassType;
+                       if (!type.IsByRef && parent_type.IsByRef)
+                               return null;
 
-                       if (!type.IsByRef && parent_type.IsByRef) {
-                               TargetAddress boxed = target.CallMethod (
-                                       
type.File.MonoLanguage.MonoDebuggerInfo.GetBoxedObjectMethod,
-                                       info.KlassAddress, Location.GetAddress 
(target).Address);
-                               TargetLocation new_loc = new 
AbsoluteTargetLocation (boxed);
-                               return new MonoClassObject (parent_type, 
parent_info, new_loc);
-                       }
-
                        return new MonoClassObject (parent_type, parent_info, 
Location);
                }
 
@@ -48,18 +42,17 @@
 
                public override TargetObject GetField (TargetMemoryAccess 
target, TargetFieldInfo field)
                {
-                       return ((MonoFieldInfo) field).DeclaringType.GetField 
(target, Location, field);
+                       return info.GetField (target, Location, field);
                }
 
                public override void SetField (TargetAccess target, 
TargetFieldInfo field,
                                               TargetObject obj)
                {
-                       ((MonoFieldInfo) field).DeclaringType.SetField (target, 
Location, field, obj);
+                       info.SetField (target, Location, field, obj);
                }
 
                internal TargetAddress GetKlassAddress (TargetMemoryAccess 
target)
                {
-                       MonoClassInfo info = type.ResolveClass (target, true);
                        return info.KlassAddress;
                }
 

Modified: trunk/debugger/languages/mono/MonoClassType.cs
===================================================================
--- trunk/debugger/languages/mono/MonoClassType.cs      2007-10-10 15:00:25 UTC 
(rev 87271)
+++ trunk/debugger/languages/mono/MonoClassType.cs      2007-10-10 15:07:45 UTC 
(rev 87272)
@@ -433,20 +433,6 @@
                        return null;
                }
 
-               internal TargetObject GetField (TargetMemoryAccess target, 
TargetLocation location,
-                                               TargetFieldInfo field)
-               {
-                       ResolveClass (target, true);
-                       return class_info.GetField (target, location, field);
-               }
-
-               internal void SetField (TargetAccess target, TargetLocation 
location,
-                                       TargetFieldInfo field, TargetObject obj)
-               {
-                       ResolveClass (target, true);
-                       class_info.SetField (target, location, field, obj);
-               }
-
                public override TargetObject GetStaticField (Thread target, 
TargetFieldInfo field)
                {
                        ResolveClass (target, true);

Modified: trunk/debugger/languages/native/NativeStructObject.cs
===================================================================
--- trunk/debugger/languages/native/NativeStructObject.cs       2007-10-10 
15:00:25 UTC (rev 87271)
+++ trunk/debugger/languages/native/NativeStructObject.cs       2007-10-10 
15:07:45 UTC (rev 87272)
@@ -12,7 +12,7 @@
                        this.type = type;
                }
 
-               public override TargetClassObject GetParentObject (Thread 
target)
+               public override TargetClassObject GetParentObject 
(TargetMemoryAccess target)
                {
                        return null;
                }

Modified: trunk/debugger/test/testsuite/TestObject.cs
===================================================================
--- trunk/debugger/test/testsuite/TestObject.cs 2007-10-10 15:00:25 UTC (rev 
87271)
+++ trunk/debugger/test/testsuite/TestObject.cs 2007-10-10 15:07:45 UTC (rev 
87272)
@@ -41,7 +41,6 @@
                        AssertPrint (thread, "boxed.GetType()", 
"(System.MonoType) { \"Hello\" }");
                        AssertPrint (thread, "boxed.ToString ()", "(string) 
\"0x12345678\"");
                        AssertPrint (thread, "value", "(Hello) { \"0x12345678\" 
}");
-                       AssertPrint (thread, "value.GetType ()", 
"(System.MonoType) { \"Hello\" }");
                        AssertPrint (thread, "value.ToString ()", "(string) 
\"0x12345678\"");
 
                        AssertExecute ("continue");

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to