[Mono-bugs] [Bug 77494][Min] Changed - Mono runtime after 1.1.8.x
goes into infinite recursion when accessing virtual override
property.
bugzilla-daemon at bugzilla.ximian.com
bugzilla-daemon at bugzilla.ximian.com
Tue Feb 7 20:22:22 EST 2006
Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.
Changed by miguel at ximian.com.
http://bugzilla.ximian.com/show_bug.cgi?id=77494
--- shadow/77494 2006-02-07 18:40:24.000000000 -0500
+++ shadow/77494.tmp.2824 2006-02-07 20:22:22.000000000 -0500
@@ -1,15 +1,15 @@
Bug#: 77494
Product: Mono: Runtime
Version: 1.1
OS: Mandrake 9.0
OS Details: x86, glibc 2.2.5
-Status: NEW
+Status: NEEDINFO
Resolution:
Severity: Unknown
-Priority: Major
+Priority: Minor
Component: JIT
AssignedTo: lupus at ximian.com
ReportedBy: mwickline at maad.com
QAContact: mono-bugs at ximian.com
TargetMilestone: ---
URL:
@@ -210,6 +210,150 @@
}
}
------- Additional Comments From miguel at ximian.com 2006-02-07 18:40 -------
I am unable to reproduce this failure.
+
+------- Additional Comments From miguel at ximian.com 2006-02-07 20:22 -------
+I also obtained the code for this one directly.
+
+The code sample that is producing the problem in your code is this
+line in method get_StartID of class IPMEPreferences:
+
+ IL_0001: call instance string class
+[MAAD.Simulator]MAAD.Simulator.Utilities.IPreferences::get_StartID()
+
+While both MCS and CSC produce this code for the sample you pasted above:
+
+ IL_0001: call instance string class
+DefaultPreferences::get_StartID()
+
+I suspect that the source code on your system does something along the
+lines of:
+
+ ((Preferences) this).StartID)
+
+I am afraid you posted the sample code after having fixed it locally
+(as discussed on the email).
+
+Here is my current test case:
+
+using System;
+using System.Xml;
+using System.Xml.Serialization;
+using System.ComponentModel;
+
+ [ Serializable(),
+ XmlRoot("IPMEPreferences")
+ ]
+ public class IPMEPreferences : Preferences
+ {
+
+ [ XmlAttribute() ]
+ public override string StartID
+ {
+ get
+ {
+ if(base.StartID != null && IDDelimiter != null)
+ return base.StartID.Replace(IDDelimiter, "_");
+ return base.StartID;
+ }
+ set
+ {
+ // NOTE: IDDelimiter may be undefined here during the XML
+deserialization,
+ // so we have to do the replacement in the getter.
+ base.StartID = value;
+ }
+ }
+ }
+
+
+interface IPreferences {
+ string StartID { get; set; }
+}
+
+ [
+ Serializable()
+ ]
+ public class Preferences : DefaultPreferences, IPreferences
+ {
+ private string idDelimiter;
+
+ public Preferences()
+ {
+ IDDelimiter = "_";
+ }
+
+ [
+ Browsable(false),
+ XmlAttribute()
+ ]
+ public virtual string IDDelimiter
+ {
+ get { return idDelimiter; }
+ set
+ {
+ OldValue = IDDelimiter;
+ idDelimiter = value;
+ }
+ }
+
+ }
+
+ [Serializable()]
+ public class DefaultPreferences : DefaultEditable
+ {
+ private string startID;
+ public DefaultPreferences()
+ {
+ StartID = "1";
+ }
+
+ [
+ XmlAttribute(),
+ Description("The ID of the start task in the network.")
+ ]
+ public virtual string StartID
+ {
+ get { return startID; }
+ set
+ {
+ OldValue = StartID;
+ startID = value;
+ }
+ }
+ }
+
+ [Serializable()]
+ public abstract class DefaultEditable
+ {
+ [NonSerialized()] private object oldValue;
+ public DefaultEditable()
+ {
+ OldValue = null;
+ }
+
+ [
+ Browsable(false),
+ XmlIgnore(),
+ ]
+ protected object OldValue
+ {
+ get { return oldValue; }
+ set { oldValue = value; }
+ }
+ }
+
+
+
+class D {
+ static void Main ()
+ {
+ new IPMEPreferences ();
+ }
+}
+
+Your code runs on .NET, but does fail in Mono as you described. It
+would help to track down the bug to get the original classes involved
+in this problem.
More information about the mono-bugs
mailing list