Commits

Doug Gregor committed 3d77855b311
Start allowing extensions of protocol types. Remove the semantic restrictions that prohibited extensions of protocol types, and start making some systematic changes so that protocol extensions start to make sense: - Replace a lot of occurrences of isa<ProtocolDecl> and dyn_cast<ProtocolDecl> on DeclContexts to use the new DeclContext::isProtocolOrProtocolExtensionContext(), where we want that behavior to apply equally to protocols and protocol extensions. - Eliminate ProtocolDecl::getSelf() in favor of DeclContext::getProtocolSelf(), which produces the appropriate generic type parameter for the 'Self' of a protocol or protocol extension. Update all of the callers of ProtocolDecl::getSelf() appropriately. - Update extension validation to appropriately form generic parameter lists for protocol extensions. - Methods in protocol extensions always use the witnesscc calling convention. At this point, we can type check and SILGen very basic definitions of protocol extensions with methods that can call protocol requirements, generic free functions, and other methods within the same protocol extension. Regresses four compiler crashers but improves three compiler crashers... we'll call that "progress"; the four regressions all hit the same assertion in the constraint system that will likely be addressed as protocol extensions starts working. Swift SVN r26579