public IList<MethodSpec> LookupExtensionMethod (TypeSpec extensionType, string name, int arity, ref NamespaceEntry scope)
{
List<MethodSpec> candidates = null;
foreach (Namespace n in GetUsingTable ()) {
var a = n.LookupExtensionMethod (extensionType, RootContext.ToplevelTypes, name, arity);
if (a == null)
continue;
if (candidates == null)
candidates = a;
else
candidates.AddRange (a);
}
scope = parent;
if (candidates != null)
return candidates;
if (parent == null)
return null;
//
// Inspect parent namespaces in namespace expression
//
Namespace parent_ns = ns.Parent;
do {
candidates = parent_ns.LookupExtensionMethod (extensionType, RootContext.ToplevelTypes, name, arity);
if (candidates != null)
return candidates;
parent_ns = parent_ns.Parent;
} while (parent_ns != null);
//
// Continue in parent scope
//
return parent.LookupExtensionMethod (extensionType, name, arity, ref scope);
}