Commits

Slava Pestov committed c373b1c015f
Reflection: Some improvements to substitutions The most important change is a fix for dependent member lookup in bound generic TypeRefs. The TypeRef logic here is a similified version of what Sema does, and roughly works as follows: When looking up a member type O.M for an original type O and member type M, we first substitute O, to yield a concrete type S. Then, we look up M in the serialized conformance info section to yield the unsubstituted member type T', and apply substitutions to produce the substituted member type T. Trouble is, we were applying the wrong substitutions the second time around. If S is a bound generic type, the "base type substitutions" of S are the substitutions required to turn the fully-abstracted bound generic type into S. This might not be the same substitution map that took us from O to S. Apart from that, add some assertions that the result of a substitution is always concrete and that the substitution map must not contain all generic parameters referenced in the original type.