* ILTokenizer.cs: Handle comments first, handle whitespace in hex
[mono.git] / mcs / mcs / enum.cs
index 1099ec5b463e6b0ff92c41adc37da73a21a54f5e..ac9ef2b430533d49fe20041eefddcd7c9b03440a 100755 (executable)
@@ -17,6 +17,7 @@ using System.Globalization;
 
 namespace Mono.CSharp {
 
+       // Maybe can be usefull to derive from MemberCore
        class EnumMember: Attributable {
                string name;
                Enum parent;
@@ -74,6 +75,23 @@ namespace Mono.CSharp {
                                OptAttributes.Emit (ec, this); 
                }
 
+               // TODO: caching would be usefull
+               public ObsoleteAttribute GetObsoleteAttribute (EmitContext ec)
+               {
+                       if (OptAttributes == null)
+                               return null;
+
+                       Attribute obsolete_attr = OptAttributes.Search (TypeManager.obsolete_attribute_type, ec);
+                       if (obsolete_attr == null)
+                               return null;
+
+                       ObsoleteAttribute obsolete = obsolete_attr.GetObsoleteAttribute (ec.DeclSpace);
+                       if (obsolete == null)
+                               return null;
+
+                       return obsolete;
+               }
+
                protected override string[] ValidAttributeTargets {
                        get {
                                return attribute_targets;
@@ -775,5 +793,32 @@ namespace Mono.CSharp {
                        }
                }
 
+               protected override void VerifyObsoleteAttribute()
+               {
+                       // UnderlyingType is never obsolete
+               }
+
+               /// <summary>
+               /// Returns ObsoleteAttribute for both enum type and enum member
+               /// </summary>
+               public ObsoleteAttribute GetObsoleteAttribute (EmitContext ec, string identifier)
+               {
+                       if ((caching_flags & Flags.Obsolete_Undetected) == 0 && (caching_flags & Flags.Obsolete) == 0) {
+                               return null;
+                       }
+
+                       ObsoleteAttribute oa = GetObsoleteAttribute (ec.DeclSpace);
+                       if (oa != null)
+                               return oa;
+
+                       EnumMember em = (EnumMember)name_to_member [identifier];
+                       oa = em.GetObsoleteAttribute (ec);
+
+                       if (oa == null)
+                               return null;
+
+                       caching_flags |= Flags.Obsolete;
+                       return oa;
+               }
        }
 }