Commits

Doug Gregor committed 651f858dbba
Represent all type variables within the constraint graph without simplification. Previously, the constraint graph only represented type variables that were both unbound and were the representatives within their respective equivalence classes. To achieve this, each constraint was fully simplified when it was added to the graph, which is a fairly expensive process. This representation made certain operations---merging two type variables, replacing a type variable with a fixed type, etc---both hard to implement and hard to reverse, forcing us to rebuild the constraint graph each time. Now, add all type variables to the graph (including those with fixed type bindings and non-representatives) and add constraints without simplification. Separately track the equivalence classes of each type variable (in the representative's node) and adjacencies due to type variables showing up in the fixed type bindings of other type variables. Although not yet implemented, the merging and type variable replacement operations are far easier to implement (and more efficient) with this representation, and are also easier to undo, making this a step toward creating and updating a single consistent, global constraint graph rather than re-creating a constraint graph during each solver step. Performance-wise, this is a 4% regression when type-checking the standard library. I expect to make that up easily once we switch to a single constraint graph. Swift SVN r10897