X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fgmcs%2Fclass.cs;h=7130f2aa6c85c79b738c766bf210509ea2ad211a;hb=dd866d68820e0f66046256bb5d3f84e3988a8be0;hp=e73b334cc45744444e437cc49601c24475d10d0d;hpb=6439d2901170c26c49f57ea37a5413d4cab5df9b;p=mono.git diff --git a/mcs/gmcs/class.cs b/mcs/gmcs/class.cs index e73b334cc45..7130f2aa6c8 100755 --- a/mcs/gmcs/class.cs +++ b/mcs/gmcs/class.cs @@ -398,7 +398,7 @@ namespace Mono.CSharp { if (indexers == null) indexers = new ArrayList (); - if (i.MemberName.TypeName != null) + if (i.MemberName.Left != null) indexers.Insert (0, i); else indexers.Add (i); @@ -3195,6 +3195,9 @@ namespace Mono.CSharp { // public override bool Define (TypeContainer container) { + if (!DoDefineBase (container)) + return false; + DeclSpace decl; MethodBuilder mb = null; if (GenericMethod != null) { @@ -4588,7 +4591,7 @@ namespace Mono.CSharp { return !error; } - protected virtual bool DoDefine (DeclSpace decl, TypeContainer container) + protected virtual bool DoDefineBase (TypeContainer container) { if (Name == null) Name = "this"; @@ -4604,12 +4607,17 @@ namespace Mono.CSharp { MethodAttributes.NewSlot | MethodAttributes.Virtual; } else { - if (!container.MethodModifiersValid (ModFlags, Name, Location)) - return false; + if (!container.MethodModifiersValid (ModFlags, Name, Location)) + return false; - flags = Modifiers.MethodAttr (ModFlags); + flags = Modifiers.MethodAttr (ModFlags); } + return true; + } + + protected virtual bool DoDefine (DeclSpace decl, TypeContainer container) + { // Lookup Type, verify validity MemberType = decl.ResolveType (Type, false, Location); if (MemberType == null) @@ -4655,12 +4663,12 @@ namespace Mono.CSharp { if (MemberType.IsPointer && !UnsafeOK (container)) return false; - + // // Check for explicit interface implementation // - if (MemberName.TypeName != null) { - ExplicitInterfaceName = MemberName.TypeName.GetTypeExpression (Location); + if (MemberName.Left != null) { + ExplicitInterfaceName = MemberName.Left.GetTypeExpression (Location); ShortName = MemberName.Name; } else ShortName = Name; @@ -5533,6 +5541,9 @@ namespace Mono.CSharp { public override bool Define (TypeContainer container) { + if (!DoDefineBase (container)) + return false; + if (!DoDefine (container, container)) return false; @@ -6049,6 +6060,9 @@ namespace Mono.CSharp { e_attr = EventAttributes.RTSpecialName | EventAttributes.SpecialName; ; + if (!DoDefineBase (container)) + return false; + if (!DoDefine (container, container)) return false; @@ -6256,6 +6270,9 @@ namespace Mono.CSharp { PropertyAttributes.RTSpecialName | PropertyAttributes.SpecialName; + if (!DoDefineBase (container)) + return false; + if (!DoDefine (container, container)) return false;