2003-11-25 Zoltan Varga <vargaz@freemail.hu>
authorZoltan Varga <vargaz@gmail.com>
Tue, 25 Nov 2003 11:48:26 +0000 (11:48 -0000)
committerZoltan Varga <vargaz@gmail.com>
Tue, 25 Nov 2003 11:48:26 +0000 (11:48 -0000)
* TypeBuilder.cs: Implement GetField.

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

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

index b91cc556586a381cb1263b42fd5cab5985469f9f..b695a5ab90478e305c3bb71661bbe4e2bf4115a3 100644 (file)
@@ -1,3 +1,7 @@
+2003-11-25  Zoltan Varga  <vargaz@freemail.hu>
+
+       * TypeBuilder.cs: Implement GetField.
+
 2003-11-24  Zoltan Varga  <vargaz@freemail.hu>
 
        * DynamicMethod.cs: New class.
index 5d9a0b64639d557ba983fd64617169eb6c191053..15963b0bba53440c3eeef1b2928a452d8fce1394 100644 (file)
@@ -650,7 +650,39 @@ namespace System.Reflection.Emit {
                }
 
                public override FieldInfo GetField( string name, BindingFlags bindingAttr) {
-                       throw not_supported ();
+                       if (fields == null)
+                               return null;
+
+                       bool match;
+                       FieldAttributes mattrs;
+                       
+                       foreach (FieldInfo c in fields) {
+                               if (c.Name != name)
+                                       continue;
+                               match = false;
+                               mattrs = c.Attributes;
+                               if ((mattrs & FieldAttributes.FieldAccessMask) == FieldAttributes.Public) {
+                                       if ((bindingAttr & BindingFlags.Public) != 0)
+                                               match = true;
+                               } else {
+                                       if ((bindingAttr & BindingFlags.NonPublic) != 0)
+                                               match = true;
+                               }
+                               if (!match)
+                                       continue;
+                               match = false;
+                               if ((mattrs & FieldAttributes.Static) != 0) {
+                                       if ((bindingAttr & BindingFlags.Static) != 0)
+                                               match = true;
+                               } else {
+                                       if ((bindingAttr & BindingFlags.Instance) != 0)
+                                               match = true;
+                               }
+                               if (!match)
+                                       continue;
+                               return c;
+                       }
+                       return null;
                }
 
                public override FieldInfo[] GetFields (BindingFlags bindingAttr) {