2005-04-27 Marek Safar <marek.safar@seznam.cz>
authorMarek Safar <marek.safar@gmail.com>
Wed, 27 Apr 2005 06:53:12 +0000 (06:53 -0000)
committerMarek Safar <marek.safar@gmail.com>
Wed, 27 Apr 2005 06:53:12 +0000 (06:53 -0000)
Fix #74378
* class.cs (EmitFieldInitializers): Use FieldExpr in initializer.

* ecore.cs (FieldExpr): Add a new ctor with in_initializer.
(FieldExpr.DoResolve): Obsolete members are ignored for field
initializers.

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

mcs/mcs/ChangeLog
mcs/mcs/class.cs
mcs/mcs/ecore.cs

index 5d8c9c3ccaeeeeb95a2c30ef7d8a239de6bf3482..c029136ff6fd338e1b6bf765fea3c7e714a82471 100644 (file)
@@ -1,3 +1,12 @@
+2005-04-27  Marek Safar  <marek.safar@seznam.cz>
+
+       Fix #74378
+       * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
+       
+       * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
+       (FieldExpr.DoResolve): Obsolete members are ignored for field
+       initializers.
+       
 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
 
        * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
index 3d0e7fe6eda071e53d5f577b653cfa6f5189f962..14416104e5829f8436658799a878647a6afdc439 100644 (file)
@@ -883,7 +883,7 @@ namespace Mono.CSharp {
                                        return false;
 
                                Location l = f.Location;
-                               FieldExpr fe = new FieldExpr (f.FieldBuilder, l);
+                               FieldExpr fe = new FieldExpr (f.FieldBuilder, l, true);
                                fe.InstanceExpression = instance_expr;
                                ExpressionStatement a = new Assign (fe, e, l);
 
index 1b1c921a212f6a87a69d7bb2297daf53971822e1..f00d039194a988e3658ffd9befc0f2e252f19bf6 100644 (file)
@@ -2661,6 +2661,13 @@ namespace Mono.CSharp {
 
                LocalTemporary temp;
                bool prepared;
+               bool in_initializer;
+
+               public FieldExpr (FieldInfo fi, Location l, bool in_initializer):
+                       this (fi, l)
+               {
+                       this.in_initializer = in_initializer;
+               }
                
                public FieldExpr (FieldInfo fi, Location l)
                {
@@ -2829,18 +2836,20 @@ namespace Mono.CSharp {
                                        return null;
                        }
 
-                       ObsoleteAttribute oa;
-                       FieldBase f = TypeManager.GetField (FieldInfo);
-                       if (f != null) {
-                               oa = f.GetObsoleteAttribute (f.Parent);
-                               if (oa != null)
-                                       AttributeTester.Report_ObsoleteMessage (oa, f.GetSignatureForError (), loc);
+                       if (!in_initializer) {
+                               ObsoleteAttribute oa;
+                               FieldBase f = TypeManager.GetField (FieldInfo);
+                               if (f != null) {
+                                       oa = f.GetObsoleteAttribute (f.Parent);
+                                       if (oa != null)
+                                               AttributeTester.Report_ObsoleteMessage (oa, f.GetSignatureForError (), loc);
                                 
-                        // To be sure that type is external because we do not register generated fields
-                        } else if (!(FieldInfo.DeclaringType is TypeBuilder)) {                                
-                               oa = AttributeTester.GetMemberObsoleteAttribute (FieldInfo);
-                               if (oa != null)
-                                       AttributeTester.Report_ObsoleteMessage (oa, TypeManager.GetFullNameSignature (FieldInfo), loc);
+                                       // To be sure that type is external because we do not register generated fields
+                               } else if (!(FieldInfo.DeclaringType is TypeBuilder)) {                                
+                                       oa = AttributeTester.GetMemberObsoleteAttribute (FieldInfo);
+                                       if (oa != null)
+                                               AttributeTester.Report_ObsoleteMessage (oa, TypeManager.GetFullNameSignature (FieldInfo), loc);
+                               }
                        }
 
                        if (ec.CurrentAnonymousMethod != null){