Author: martin
Date: 2007-10-10 11:11:30 -0400 (Wed, 10 Oct 2007)
New Revision: 87273

Modified:
   branches/martin/debugger-terrania/ChangeLog
   branches/martin/debugger-terrania/frontend/Expression.cs
   branches/martin/debugger-terrania/languages/TargetClassObject.cs
   branches/martin/debugger-terrania/languages/mono/MonoClassInfo.cs
   branches/martin/debugger-terrania/languages/mono/MonoClassObject.cs
   branches/martin/debugger-terrania/languages/mono/MonoClassType.cs
   branches/martin/debugger-terrania/languages/native/NativeStructObject.cs
   branches/martin/debugger-terrania/test/testsuite/TestObject.cs
Log:
Merged from HEAD.

Modified: branches/martin/debugger-terrania/ChangeLog
===================================================================
--- branches/martin/debugger-terrania/ChangeLog 2007-10-10 15:07:45 UTC (rev 
87272)
+++ branches/martin/debugger-terrania/ChangeLog 2007-10-10 15:11:30 UTC (rev 
87273)
@@ -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: branches/martin/debugger-terrania/frontend/Expression.cs
===================================================================
--- branches/martin/debugger-terrania/frontend/Expression.cs    2007-10-10 
15:07:45 UTC (rev 87272)
+++ branches/martin/debugger-terrania/frontend/Expression.cs    2007-10-10 
15:11:30 UTC (rev 87273)
@@ -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: branches/martin/debugger-terrania/languages/TargetClassObject.cs
===================================================================
--- branches/martin/debugger-terrania/languages/TargetClassObject.cs    
2007-10-10 15:07:45 UTC (rev 87272)
+++ branches/martin/debugger-terrania/languages/TargetClassObject.cs    
2007-10-10 15:11:30 UTC (rev 87273)
@@ -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: branches/martin/debugger-terrania/languages/mono/MonoClassInfo.cs
===================================================================
--- branches/martin/debugger-terrania/languages/mono/MonoClassInfo.cs   
2007-10-10 15:07:45 UTC (rev 87272)
+++ branches/martin/debugger-terrania/languages/mono/MonoClassInfo.cs   
2007-10-10 15:11:30 UTC (rev 87273)
@@ -45,6 +45,9 @@
 
                        MonoClassInfo info = new MonoClassInfo (
                                file, typedef, target, reader, klass_address);
+                       Console.WriteLine ("READ CLASS INFO: {0} {1} {2} {3}",
+                                          klass_address, typedef, 
info.GenericContainer,
+                                          info.GenericClass);
                        info.type = file.LookupMonoClass (typedef);
                        return info;
                }

Modified: branches/martin/debugger-terrania/languages/mono/MonoClassObject.cs
===================================================================
--- branches/martin/debugger-terrania/languages/mono/MonoClassObject.cs 
2007-10-10 15:07:45 UTC (rev 87272)
+++ branches/martin/debugger-terrania/languages/mono/MonoClassObject.cs 
2007-10-10 15:11:30 UTC (rev 87273)
@@ -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: branches/martin/debugger-terrania/languages/mono/MonoClassType.cs
===================================================================
--- branches/martin/debugger-terrania/languages/mono/MonoClassType.cs   
2007-10-10 15:07:45 UTC (rev 87272)
+++ branches/martin/debugger-terrania/languages/mono/MonoClassType.cs   
2007-10-10 15:11:30 UTC (rev 87273)
@@ -446,20 +446,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: 
branches/martin/debugger-terrania/languages/native/NativeStructObject.cs
===================================================================
--- branches/martin/debugger-terrania/languages/native/NativeStructObject.cs    
2007-10-10 15:07:45 UTC (rev 87272)
+++ branches/martin/debugger-terrania/languages/native/NativeStructObject.cs    
2007-10-10 15:11:30 UTC (rev 87273)
@@ -12,7 +12,7 @@
                        this.type = type;
                }
 
-               public override TargetClassObject GetParentObject (Thread 
target)
+               public override TargetClassObject GetParentObject 
(TargetMemoryAccess target)
                {
                        return null;
                }

Modified: branches/martin/debugger-terrania/test/testsuite/TestObject.cs
===================================================================
--- branches/martin/debugger-terrania/test/testsuite/TestObject.cs      
2007-10-10 15:07:45 UTC (rev 87272)
+++ branches/martin/debugger-terrania/test/testsuite/TestObject.cs      
2007-10-10 15:11:30 UTC (rev 87273)
@@ -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