X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fmcs%2Fdecl.cs;h=56d423ad23d6ccb754014c5a28a574cb027f69f1;hb=103fd26cbb781ecf436924b2a49b214d0d7470c1;hp=b705e6c744c2c6f96186699e52e55bc41d86ac78;hpb=bc561b12917c01f6ee56e4c78c8e548b908d02b7;p=mono.git diff --git a/mcs/mcs/decl.cs b/mcs/mcs/decl.cs index b705e6c744c..56d423ad23d 100644 --- a/mcs/mcs/decl.cs +++ b/mcs/mcs/decl.cs @@ -294,7 +294,8 @@ namespace Mono.CSharp { HasStructLayout = 1 << 15, // Has StructLayoutAttribute HasInstanceConstructor = 1 << 16, HasUserOperators = 1 << 17, - CanBeReused = 1 << 18 + CanBeReused = 1 << 18, + InterfacesExpanded = 1 << 19 } /// @@ -302,7 +303,7 @@ namespace Mono.CSharp { /// internal Flags caching_flags; - public MemberCore (TypeContainer parent, MemberName name, Attributes attrs) + protected MemberCore (TypeContainer parent, MemberName name, Attributes attrs) { this.Parent = parent; member_name = name; @@ -434,7 +435,7 @@ namespace Mono.CSharp { if ((mod_flags & Modifiers.COMPILER_GENERATED) != 0) return true; - return Parent == null ? false : Parent.IsCompilerGenerated; + return Parent != null && Parent.IsCompilerGenerated; } } @@ -466,7 +467,7 @@ namespace Mono.CSharp { caching_flags |= Flags.IsAssigned; } - public void SetConstraints (List constraints_list) + public virtual void SetConstraints (List constraints_list) { var tparams = member_name.TypeParameters; if (tparams == null) { @@ -883,7 +884,7 @@ namespace Mono.CSharp { if (GetAttributeObsolete () != null) return true; - return Parent == null ? false : Parent.IsObsolete; + return Parent != null && Parent.IsObsolete; } } @@ -892,7 +893,7 @@ namespace Mono.CSharp { if ((ModFlags & Modifiers.UNSAFE) != 0) return true; - return Parent == null ? false : Parent.IsUnsafe; + return Parent != null && Parent.IsUnsafe; } } @@ -936,7 +937,8 @@ namespace Mono.CSharp { InflatedExpressionType = 1 << 19, InflatedNullableType = 1 << 20, GenericIterateInterface = 1 << 21, - GenericTask = 1 << 22 + GenericTask = 1 << 22, + InterfacesImported = 1 << 23, } // @@ -966,7 +968,10 @@ namespace Mono.CSharp { this.definition = definition; this.modifiers = modifiers; - state = StateFlags.Obsolete_Undetected | StateFlags.CLSCompliant_Undetected | StateFlags.MissingDependency_Undetected; + if (kind == MemberKind.MissingType) + state = StateFlags.MissingDependency; + else + state = StateFlags.Obsolete_Undetected | StateFlags.CLSCompliant_Undetected | StateFlags.MissingDependency_Undetected; } #region Properties @@ -1080,7 +1085,12 @@ namespace Mono.CSharp { // will contain types only but it can have numerous values for members // like methods where both return type and all parameters are checked // - public List GetMissingDependencies () + public List GetMissingDependencies () + { + return GetMissingDependencies (this); + } + + public List GetMissingDependencies (MemberSpec caller) { if ((state & (StateFlags.MissingDependency | StateFlags.MissingDependency_Undetected)) == 0) return null; @@ -1088,11 +1098,11 @@ namespace Mono.CSharp { state &= ~StateFlags.MissingDependency_Undetected; var imported = definition as ImportedDefinition; - List missing; + List missing; if (imported != null) { - missing = ResolveMissingDependencies (); + missing = ResolveMissingDependencies (caller); } else if (this is ElementTypeSpec) { - missing = ((ElementTypeSpec) this).Element.GetMissingDependencies (); + missing = ((ElementTypeSpec) this).Element.GetMissingDependencies (caller); } else { missing = null; } @@ -1104,7 +1114,7 @@ namespace Mono.CSharp { return missing; } - public abstract List ResolveMissingDependencies (); + public abstract List ResolveMissingDependencies (MemberSpec caller); protected virtual bool IsNotCLSCompliant (out bool attrValue) { @@ -1156,7 +1166,7 @@ namespace Mono.CSharp { var ctype = ctx.CurrentType; if (ma == Modifiers.PRIVATE) { - if (ctype == null) + if (ctype == null || parentType == null) return false; // // It's only accessible to the current class or children @@ -1222,7 +1232,7 @@ namespace Mono.CSharp { return (state & StateFlags.CLSCompliant) != 0; } - public bool IsConditionallyExcluded (IMemberContext ctx, Location loc) + public bool IsConditionallyExcluded (IMemberContext ctx) { if ((Kind & (MemberKind.Class | MemberKind.Method)) == 0) return false; @@ -1270,6 +1280,11 @@ namespace Mono.CSharp { void SetIsUsed (); } + public interface IMethodDefinition : IMemberDefinition + { + MethodBase Metadata { get; } + } + public interface IParametersMember : IInterfaceMemberSpec { AParametersCollection Parameters { get; }