aboutsummaryrefslogblamecommitdiff
path: root/src/dotty/tools/dotc/core/Types.overflow
blob: 0474bc2297d1b46d9334528d1d78b181793c6bde (plain) (tree)






















                                                                                                      









                                                                                   

   
object Types {
  class Type {
  
    /** The non-private symbol with given name in the given class that matches this type.
     *  @param inClass   The class containing the symbol's definition
     *  @param name      The name of the symbol we are looking for
     *  @param site      The base type from which member types are computed
    def matchingTermSymbol(inClass: Symbol, name: Name, site: Type)(implicit ctx: Context): Symbol = {
      var denot = inClass.info.nonPrivateDecl(name)
      if (denot.isTerm) { // types of the same name always match
        if (denot.isOverloaded)
          denot = denot.atSignature(this.signature) // seems we need two kinds of signatures here
        if (!(site.memberInfo(denot.symbol) matches this))
          denot = NoDenotation
      }
      denot.symbol
    }   
    
    final def firstParamTypes: List[Type] = this match {
      case mt: MethodType => mt.paramTypes
      case pt: PolyType => pt.firstParamTypes
      case _ => Nil
    }
    
    /** `tp` is either a type variable or poly param. Returns
     *  Covariant      if all occurrences of `tp` in this type are covariant
     *  Contravariant  if all occurrences of `tp` in this type are contravariant
     *  Covariant | Contravariant  if there are no occurrences of `tp` in this type
     *  EmptyFlags     if `tp` occurs noon-variantly in this type
     */
    def varianceOf(tp: Type): FlagSet = ???

    
  }
}