class SearchHistory

Records the history of currently open implicit searches

Constructors

SearchHistory ( searchDepth: Int , seen: Map [ ClassSymbol, Int ] )

Members

val searchDepth : Int
val seen : Map [ ClassSymbol, Int ]
[+] def nest ( proto: Type ) ( implicit ctx: Context ) : SearchHistory

Check for possible divergence. If one is detected return the current search history (this will be used as a criterion to abandon the implicit search in...

Check for possible divergence. If one is detected return the current search history (this will be used as a criterion to abandon the implicit search in rankImplicits). If no divergence is detected, produce a new search history nested in the current one which records that we are now also looking for type proto.

As long as searchDepth is lower than the XminImplicitSearchDepth value in settings, a new history is always produced, so the implicit search is always undertaken. If searchDepth matches or exceeds the XminImplicitSearchDepth value, we test that the new search is for a class that is either not yet in the set of seen classes, or the complexity of the type proto being searched for is strictly lower than the complexity of the type that was previously encountered and that had the same class symbol as proto. A possible divergence is detected if that test fails.

private def typeSize ( tp: Type ) ( implicit ctx: Context ) : Int

The number of RefinementTypes in this type, after all aliases are expanded

The number of RefinementTypes in this type, after all aliases are expanded