Commits

Slava Pestov committed 0ff0f3c5b98
Sema: Generic classes and subclasses of generic classes now inherit required initializers Initializers are inherited by synthesizing an implicit decl which delegates to super.init(). Previously this was only done if the class and superclass were concrete. The only thing missing was that we weren't computing an interface type for the synthesized constructor. There are two steps to this: - First, we must map the contextual types of the superclass initializer's ParamDecls to the subclass generic context. - Second, we must set the interface type by calling the new configureInterfaceType() method, extracted from from validateGenericSignature(). Note that configureInterfaceType() now uses the new AbstractFunctionDecl::hasThrows() flag to set the 'throws' bit on the function type. Previously, validateGenericFuncSignature() would look at getThrowsLoc().isValid(), which is not correct for imported, implicitly-generated or de-serialized decls that 'throw', because none of those have source location information. We still don't allow inheriting initializers which have their own generic parameter list, like 'init<T>(t: T) {...}'. That requires a little bit more refactoring. Progress on <rdar://problem/23376955>.