feded664c0
This lets us substitute different values for a type parameter depending on the variance of its use site. For example: (T) => T can be substituted with [bottom <: T <: num] to get: (bottom) => num which is the best upper bound that doesn't use T. This generalizes the existing substitution method, since it's complicated enough that I don't want to maintain two versions of it. BUG= R=kmillikin@google.com Review URL: https://chromereviews.googleplex.com/501577015 .