* TypeBuilder.cs (GetField): Return MonoField instance if the type is
authorGert Driesen <drieseng@users.sourceforge.net>
Wed, 16 May 2007 20:01:49 +0000 (20:01 -0000)
committerGert Driesen <drieseng@users.sourceforge.net>
Wed, 16 May 2007 20:01:49 +0000 (20:01 -0000)
already created. Fixed other part of bug #81368.
* TypeBuilderTest.cs: Added GetFields test for bug #81368. Enabled
test for bug #81640.

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

mcs/class/corlib/System.Reflection.Emit/ChangeLog
mcs/class/corlib/System.Reflection.Emit/TypeBuilder.cs
mcs/class/corlib/Test/System.Reflection.Emit/ChangeLog
mcs/class/corlib/Test/System.Reflection.Emit/TypeBuilderTest.cs

index 6f6f07c6f0c4694a14c0ebbcd71056471e77d12a..804fd9104ad259369c07ba242a764a966a15ecf2 100644 (file)
@@ -1,3 +1,8 @@
+2007-05-16  Gert Driesen  <drieseng@users.sourceforge.net>
+
+       * TypeBuilder.cs (GetField): Return MonoField instance if the type is
+       already created. Fixed other part of bug #81368.
+
 2007-05-16  Zoltan Varga  <vargaz@gmail.com>
 
        * TypeBuilder.cs (GetFields): Return MonoField objects if the type is already
index 141046081c0961a2d49960dc6f8a5df99559ae05..635982a91b9783ff92e0d2b329c707eccb6dd53d 100644 (file)
@@ -851,6 +851,9 @@ namespace System.Reflection.Emit {
                }
 
                public override FieldInfo GetField( string name, BindingFlags bindingAttr) {
+                       if (created != null)
+                               return created.GetField (name, bindingAttr);
+
                        if (fields == null)
                                return null;
 
index 5ef485b28c7b12356925316e08c9a0517f5fd4ae..02cbc08aadcf97e531715e3eaa95a5e4ab9d75a4 100644 (file)
@@ -1,3 +1,8 @@
+2007-05-16  Gert Driesen  <drieseng@users.sourceforge.net>
+
+       * TypeBuilderTest.cs: Added GetFields test for bug #81368. Enabled
+       test for bug #81640.
+
 2007-05-16  Gert Driesen  <drieseng@users.sourceforge.net>
 
        * TypeBuilderTest.cs: Use Assert instead of deprecated Assertion
index cd468090748476c984c4dd3e27ac8902909886ad..dc5abe46d7b27fa55517261d532cc51a2737b39f 100644 (file)
@@ -1317,9 +1317,22 @@ namespace MonoTests.System.Reflection.Emit
                        tb.DefineField ("TestField", typeof (int), FieldAttributes.Public);
 
                        Type emittedType = tb.CreateType ();
+                       FieldInfo [] dynamicFields = tb.GetFields ();
+                       FieldInfo [] emittedFields = emittedType.GetFields ();
 
-                       Assert.AreEqual (1, tb.GetFields ().Length);
-                       Assert.AreEqual (tb.GetFields ().Length, emittedType.GetFields ().Length);
+                       Assert.AreEqual (1, dynamicFields.Length, "#A1");
+                       Assert.AreEqual (dynamicFields.Length, emittedFields.Length, "#A2");
+                       Assert.IsFalse ((dynamicFields [0]) is FieldBuilder, "#A3");
+                       Assert.IsFalse ((emittedFields [0]) is FieldBuilder, "#A4");
+
+                       // bug #81638
+                       object value = Activator.CreateInstance (emittedType);
+                       emittedFields [0].SetValue (value, 5);
+                       Assert.AreEqual (5, emittedFields [0].GetValue (value), "#B1");
+                       Assert.AreEqual (5, dynamicFields [0].GetValue (value), "#B2");
+                       dynamicFields [0].SetValue (value, 4);
+                       Assert.AreEqual (4, emittedFields [0].GetValue (value), "#B3");
+                       Assert.AreEqual (4, dynamicFields [0].GetValue (value), "#B4");
                }
 
                [Test]
@@ -1370,16 +1383,16 @@ namespace MonoTests.System.Reflection.Emit
                        Assert.AreEqual (dynamicField.Name, emittedField.Name, "#A2");
                        Assert.IsNull (tb.GetField ("TestOtherField"), "#A3");
                        Assert.IsFalse (emittedField is FieldBuilder, "#A4");
-                       //Assert.IsFalse (dynamicField is FieldBuilder, "#A5");
+                       Assert.IsFalse (dynamicField is FieldBuilder, "#A5");
 
                        // bug #81638
                        object value = Activator.CreateInstance (emittedType);
                        emittedField.SetValue (value, 5);
                        Assert.AreEqual (5, emittedField.GetValue (value), "#B1");
-                       //Assert.AreEqual (5, dynamicField.GetValue (value), "#B2");
+                       Assert.AreEqual (5, dynamicField.GetValue (value), "#B2");
                        dynamicField.SetValue (value, 4);
                        Assert.AreEqual (4, emittedField.GetValue (value), "#B3");
-                       //Assert.AreEqual (4, dynamicField.GetValue (value), "#B4");
+                       Assert.AreEqual (4, dynamicField.GetValue (value), "#B4");
                }
 
                [Test] // bug #81640