Browse Source

* ObjectManager.cs: Corrected a problem with arrays of structs. Elements where
not correctly updated by the final fixup.

svn path=/trunk/mcs/; revision=11660

Lluis Sanchez 23 years ago
parent
commit
a7a4e09ae6

+ 5 - 0
mcs/class/corlib/System.Runtime.Serialization/ChangeLog

@@ -1,3 +1,8 @@
+2003-02-18  Lluis Sanchez Gual  <[email protected]>
+
+	* ObjectManager.cs: Corrected a problem with arrays of structs. Elements where
+	  not correctly updated by the final fixup.
+
 2003-01-27  Lluis Sanchez Gual  <[email protected]>
 2003-01-27  Lluis Sanchez Gual  <[email protected]>
 
 
 	* ObjectManager.cs: Corrected a problem with IObjectReferece objects.
 	* ObjectManager.cs: Corrected a problem with IObjectReferece objects.

+ 17 - 3
mcs/class/corlib/System.Runtime.Serialization/ObjectManager.cs

@@ -1,7 +1,7 @@
 //
 //
 // System.Runtime.Serialization.ObjectIDGenerator.cs
 // System.Runtime.Serialization.ObjectIDGenerator.cs
 //
 //
-// Author: Lluis Sanchez Gual (l[email protected])
+// Author: Lluis Sanchez Gual (l[email protected])
 //
 //
 // (C) 2003 Lluis Sanchez Gual
 // (C) 2003 Lluis Sanchez Gual
 //
 //
@@ -306,8 +306,7 @@ namespace System.Runtime.Serialization
 		}
 		}
 
 
 		protected override void FixupImpl (ObjectManager manager) {
 		protected override void FixupImpl (ObjectManager manager) {
-			Array array = (Array)ObjectToBeFixed.ObjectInstance;
-			array.SetValue (ObjectRequired.ObjectInstance, _indices);
+			ObjectToBeFixed.SetArrayValue (manager, ObjectRequired.ObjectInstance, _indices);
 		}
 		}
 	}
 	}
 
 
@@ -375,6 +374,16 @@ namespace System.Runtime.Serialization
 				if (containerRecord.IsRegistered)
 				if (containerRecord.IsRegistered)
 					containerRecord.SetMemberValue (manager, Member, ObjectInstance);
 					containerRecord.SetMemberValue (manager, Member, ObjectInstance);
 			}
 			}
+			else if (ArrayIndex != null)
+			{
+				ObjectRecord containerRecord = manager.GetObjectRecord (IdOfContainingObj);
+				if (containerRecord.IsRegistered)
+					containerRecord.SetArrayValue (manager, ObjectInstance, ArrayIndex);
+			}
+		}
+		public void SetArrayValue (ObjectManager manager, object value, int[] indices)
+		{
+			((Array)ObjectInstance).SetValue (value, indices);
 		}
 		}
 
 
 		public void SetMemberValue (ObjectManager manager, string memberName, object value)
 		public void SetMemberValue (ObjectManager manager, string memberName, object value)
@@ -522,6 +531,11 @@ namespace System.Runtime.Serialization
 				ObjectRecord containerRecord = manager.GetObjectRecord (IdOfContainingObj);
 				ObjectRecord containerRecord = manager.GetObjectRecord (IdOfContainingObj);
 				containerRecord.SetMemberValue (manager, Member, ObjectInstance);
 				containerRecord.SetMemberValue (manager, Member, ObjectInstance);
 			}
 			}
+			else if (ArrayIndex != null)
+			{
+				ObjectRecord containerRecord = manager.GetObjectRecord (IdOfContainingObj);
+				containerRecord.SetArrayValue (manager, ObjectInstance, ArrayIndex);
+			}
 
 
 			return true;
 			return true;
 		}
 		}