Commits

Doug Gregor committed 531583e2d18
Implement support for nested generics in the AST and type checker. There are a few related sets of changes here: - Generic parameter lists have a link to their "outer" generic parameter lists, so its easy to establish the full generic context of an entity. - Bound and unbound generic types now carry a parent type, so that we distinguish between, e.g., X<Int>.Inner<Int> and X<Double>.Inner<Int>. Deduction, substitution, canonicalization, etc. cope with the parent type. - Opening of polymorphic types now handles multiple levels of generic parameters when needed (e.g., when we're substituting into the base). Note that the generics module implied by this representation restricts what one can do with requirements clauses in nested generics. For example, one cannot add requirements to outer generic parameters or their associated types, e.g., this is ill-formed: struct X<T : Range> { func f<U requires T.Element : Range>() {} } The restriction has some precedent (e.g., in C#), but could be loosened by rearchitecting how we handle archetypes in nested generics. The current approach is more straightforward. Swift SVN r2568