[mcs] Use same result bucket for extension method lookup in all types of using expression
[mono.git] / mcs / mcs / namespace.cs
index a0669b8ce3d95cefbe7697092048e91a032f70b4..f5ca0a818a4480e5080a67945f414dca21fd4a2e 100644 (file)
@@ -498,10 +498,12 @@ namespace Mono.CSharp {
                                                types.Remove (tc.MemberName.Name);
                                        else
                                                found.RemoveAt (i);
+
+                                       break;
                                }
                        }
 
-                       cached_types.Remove (tc.Basename);
+                       cached_types.Remove (tc.MemberName.Basename);
                }
 
                public void SetBuiltinType (BuiltinTypeSpec pts)
@@ -802,9 +804,8 @@ namespace Mono.CSharp {
 
                public override void AddTypeContainer (TypeContainer tc)
                {
-                       string name = tc.Basename;
-
                        var mn = tc.MemberName;
+                       var name = mn.Basename;
                        while (mn.Left != null) {
                                mn = mn.Left;
                                name = mn.Name;
@@ -950,22 +951,18 @@ namespace Mono.CSharp {
                                                candidates.AddRange (a);
                                }
 
-                               if (candidates != null)
-                                       return new ExtensionMethodCandidates (invocationContext, candidates, this, position);
-                       }
-
-                       // LAMESPEC: TODO no spec about priority over normal extension methods yet
-                       if (types_using_table != null) {
-                               foreach (var t in types_using_table) {
+                               if (types_using_table != null) {
+                                       foreach (var t in types_using_table) {
 
-                                       var res = t.MemberCache.FindExtensionMethods (invocationContext, name, arity);
-                                       if (res == null)
-                                               continue;
+                                               var res = t.MemberCache.FindExtensionMethods (invocationContext, name, arity);
+                                               if (res == null)
+                                                       continue;
 
-                                       if (candidates == null)
-                                               candidates = res;
-                                       else
-                                               candidates.AddRange (res);
+                                               if (candidates == null)
+                                                       candidates = res;
+                                               else
+                                                       candidates.AddRange (res);
+                                       }
                                }
 
                                if (candidates != null)