Commits

Slava Pestov committed a485e525c53
Sema: Allow protocol typealiases to be accessed from expression context, as long as they don't depend on 'Self' Suppose you have this protocol: protocol P { typealias A = Int typealias B = Self } Clearly, 'P.B' does not make sense, because then the type parameter would "leak out" of the existential container. However, 'P.A' is totally fine, it just means 'Int'. Previously, we would allow 'P.A' in type context, and diagnose on 'P.B'. However, due to an oversight, neither one was allowed in expression context, so for example you could not write 'P.A.self', even though that should just mean 'Int.self'. Fix this by generalizing performMemberLookup(), and fix up some diagnostics to be more specific when something is wrong -- we want to avoid talking about typealiases as 'static members', since that doesn't really make much sense. Fixes <https://bugs.swift.org/browse/SR-2314>.