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