Commits

Doug Gregor committed 3eed1fbafd7
Generalize the substitution of a "base type" into a reference to a member of a oneof/struct/class/extension to support types nested within generic classes, e.g., Vector<Int>.ElementRange. Most importantly, nominal types are no longer inherently canonical. A nominal type refers to both a particular nominal type declaration as well as its parent, which may be non-canonical and will vary. For example, the variance in the parent makes Vector<Int>.ElementRange and Vector<Float>.ElementRange different types. Introduce deduction and substitution for nominal types. Deduction is particular interesting because we actually do allow deduction of T when comparing X<T>.Inner and X<Int>.Inner, because (unlike C++) there is no specialization to thwart us. Swift SVN r2507