Update C++/WinRT to consider the full contract version history for fast ABI #1132
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently interfaces are being sorted for fast ABI by their current contract version which is incorrect because (1) we actually want to consider their initial contract/version, not the current ones, and (2) we want to consider the contract each interface was introduced in relative to the contract history of the type they apply to. E.g. an interface introduced in contract 'A' version 2 should be sorted before an interface introduced in contract 'B' version 1 if the class was in contract 'A' before contract 'B'.
Note that the sorting algorithm is N^2, however this should be fine since moving contracts should be rare and the history should be small to the point that trying to create a graph/linked list would be wasteful and probably more inefficient.
Also note that this maintains some simplifying assumptions we've generally agreed in the past are okay.