Commit Graph

106 Commits

Author SHA1 Message Date
Doug Gregor
57ff959529 Add conformances with ArchetypeBuilder::PotentialArchetype::addConformance().
This means we'll get proper merging of requirement sources when
merging conformances due to same-type requirements.

Swift SVN r22642
2014-10-09 21:52:33 +00:00
Doug Gregor
f844ab4331 Store the generic type parameter type for non-associated potential archetypes.
This lets us map from potential archetypes back to dependent types
more efficiently, eliminating a linear search.

Swift SVN r22640
2014-10-09 21:52:32 +00:00
Doug Gregor
c4cd133737 Archetype builder: enumerate requirements directly from the potential archetypes.
Use this for the archetype builder debug dump so we can test it
without affecting compilation (yet).

Swift SVN r22639
2014-10-09 21:52:31 +00:00
Doug Gregor
91ddaf59eb Archetype builder: start tracking the locations and reasons for specific requirements.
Whenever we add a requirement, we now know

  (1) Why we added the requirement, e.g., whether it was explicitly written, inferred from a signature, or introduced by an outer scope.
  (2) Where in the source code that requirement originated.

Also add a debugging flag for dumping the archetype builder information, so we can write tests against it.

This is effectively NFC, but it's infrastructure to help a number of requirements-related tasks.

Swift SVN r22638
2014-10-09 21:52:28 +00:00
Ted Kremenek
fad874708e Adjust test cases.
Swift SVN r17964
2014-05-12 22:01:52 +00:00
Doug Gregor
28cc919fb4 Infer conformance requirements from the signature of a generic function.
When a specialization of a generic type occurs within the signature of
a generic function, it implies that the generic arguments meet the
requirements of the generic type. For example, in

  func printHashes<K, V>(dict : Dictionary<K, V>) {
    for (k, v) in dict {
        print("\(k.hashValue())\n")
    } 
  } 

the presence of Dictionary<K, V> in the signature implies that K and V
meet the requirements on Dictionary's generic parameters, i.e., that K
is Hashable. Thus, infer that K is Hashable in printHashes().

Fixes the easy part of <rdar://problem/14691708>. Same-type and
superclass requirements are more interesting.


<rdar://problem/14691708>


Swift SVN r7574
2013-08-26 16:46:38 +00:00