mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Dependencies: teach the Driver about the new member-based dependencies.
If file A extends a common type (say, Dictionary), but only adds new members, other files using Dictionary don't need to be recompiled if they definitively don't use those members. That should be working now. Swift SVN r30286
This commit is contained in:
@@ -20,6 +20,10 @@ TEST(DependencyGraph, BasicLoad) {
|
||||
LoadResult::UpToDate);
|
||||
EXPECT_EQ(graph.loadFromString(i++, "depends-dynamic-lookup: [k, l]"),
|
||||
LoadResult::UpToDate);
|
||||
EXPECT_EQ(graph.loadFromString(i++, "provides-member: [[m, mm], [n, nn]]"),
|
||||
LoadResult::UpToDate);
|
||||
EXPECT_EQ(graph.loadFromString(i++, "depends-member: [[o, oo], [p, pp]]"),
|
||||
LoadResult::UpToDate);
|
||||
EXPECT_EQ(graph.loadFromString(i++, "depends-external: [/foo, /bar]"),
|
||||
LoadResult::UpToDate);
|
||||
|
||||
@@ -115,6 +119,31 @@ TEST(DependencyGraph, IndependentDepKinds2) {
|
||||
EXPECT_TRUE(graph.isMarked(1));
|
||||
}
|
||||
|
||||
TEST(DependencyGraph, IndependentMembers) {
|
||||
DependencyGraph<uintptr_t> graph;
|
||||
|
||||
EXPECT_EQ(graph.loadFromString(0, "provides-member: [[a,aa]]"),
|
||||
LoadResult::UpToDate);
|
||||
EXPECT_EQ(graph.loadFromString(1, "depends-member: [[a,bb]]"),
|
||||
LoadResult::UpToDate);
|
||||
EXPECT_EQ(graph.loadFromString(2, "depends-member: [[a,\"\"]]"),
|
||||
LoadResult::UpToDate);
|
||||
EXPECT_EQ(graph.loadFromString(3, "depends-member: [[b,aa]]"),
|
||||
LoadResult::UpToDate);
|
||||
EXPECT_EQ(graph.loadFromString(4, "depends-member: [[b,bb]]"),
|
||||
LoadResult::UpToDate);
|
||||
|
||||
SmallVector<uintptr_t, 4> marked;
|
||||
|
||||
graph.markTransitive(marked, 0);
|
||||
EXPECT_EQ(0u, marked.size());
|
||||
EXPECT_TRUE(graph.isMarked(0));
|
||||
EXPECT_FALSE(graph.isMarked(1));
|
||||
EXPECT_FALSE(graph.isMarked(2));
|
||||
EXPECT_FALSE(graph.isMarked(3));
|
||||
EXPECT_FALSE(graph.isMarked(4));
|
||||
}
|
||||
|
||||
TEST(DependencyGraph, SimpleDependent) {
|
||||
DependencyGraph<uintptr_t> graph;
|
||||
|
||||
@@ -285,6 +314,32 @@ TEST(DependencyGraph, SimpleDependent6) {
|
||||
}
|
||||
|
||||
|
||||
TEST(DependencyGraph, SimpleDependentMember) {
|
||||
DependencyGraph<uintptr_t> graph;
|
||||
|
||||
EXPECT_EQ(graph.loadFromString(0,
|
||||
"provides-member: [[a,aa], [b,bb], [c,cc]]"),
|
||||
LoadResult::UpToDate);
|
||||
EXPECT_EQ(graph.loadFromString(1,
|
||||
"depends-member: [[x, xx], [b,bb], [z,zz]]"),
|
||||
LoadResult::UpToDate);
|
||||
|
||||
SmallVector<uintptr_t, 4> marked;
|
||||
|
||||
graph.markTransitive(marked, 0);
|
||||
EXPECT_EQ(1u, marked.size());
|
||||
EXPECT_EQ(1u, marked.front());
|
||||
EXPECT_TRUE(graph.isMarked(0));
|
||||
EXPECT_TRUE(graph.isMarked(1));
|
||||
|
||||
marked.clear();
|
||||
graph.markTransitive(marked, 0);
|
||||
EXPECT_EQ(0u, marked.size());
|
||||
EXPECT_TRUE(graph.isMarked(0));
|
||||
EXPECT_TRUE(graph.isMarked(1));
|
||||
}
|
||||
|
||||
|
||||
template <typename Range, typename T>
|
||||
static bool contains(const Range &range, const T &value) {
|
||||
return std::find(std::begin(range),std::end(range),value) != std::end(range);
|
||||
|
||||
Reference in New Issue
Block a user