Skip to content

Commit 9b4e014

Browse files
committed
Define high-level dependency sources
Plug high-level requests that define dependency sources into the evaluator's incremental infrastructure.
1 parent a337b67 commit 9b4e014

File tree

8 files changed

+84
-11
lines changed

8 files changed

+84
-11
lines changed

include/swift/AST/IRGenRequests.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#define SWIFT_IRGen_REQUESTS_H
1919

2020
#include "swift/AST/ASTTypeIDs.h"
21+
#include "swift/AST/EvaluatorDependencies.h"
2122
#include "swift/AST/SimpleRequest.h"
2223
#include "swift/Basic/PrimarySpecificPaths.h"
2324
#include "llvm/ADT/StringSet.h"
@@ -116,7 +117,7 @@ void reportEvaluatedRequest(UnifiedStatsReporter &stats,
116117
class IRGenSourceFileRequest
117118
: public SimpleRequest<IRGenSourceFileRequest,
118119
std::unique_ptr<llvm::Module>(IRGenDescriptor),
119-
CacheKind::Uncached> {
120+
CacheKind::Uncached|CacheKind::DependencySource> {
120121
public:
121122
using SimpleRequest::SimpleRequest;
122123

@@ -129,6 +130,10 @@ class IRGenSourceFileRequest
129130

130131
public:
131132
bool isCached() const { return true; }
133+
134+
public:
135+
// Incremental dependencies.
136+
evaluator::DependencySource readDependencySource(Evaluator &) const;
132137
};
133138

134139
class IRGenWholeModuleRequest

include/swift/AST/ParseRequests.h

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#define SWIFT_PARSE_REQUESTS_H
1818

1919
#include "swift/AST/ASTTypeIDs.h"
20+
#include "swift/AST/EvaluatorDependencies.h"
2021
#include "swift/AST/SimpleRequest.h"
2122

2223
namespace swift {
@@ -82,9 +83,9 @@ class ParseAbstractFunctionBodyRequest :
8283

8384
/// Parse the top-level decls of a SourceFile.
8485
class ParseSourceFileRequest
85-
: public SimpleRequest<ParseSourceFileRequest,
86-
ArrayRef<Decl *>(SourceFile *),
87-
CacheKind::SeparatelyCached> {
86+
: public SimpleRequest<
87+
ParseSourceFileRequest, ArrayRef<Decl *>(SourceFile *),
88+
CacheKind::SeparatelyCached | CacheKind::DependencySource> {
8889
public:
8990
using SimpleRequest::SimpleRequest;
9091

@@ -99,6 +100,9 @@ class ParseSourceFileRequest
99100
bool isCached() const { return true; }
100101
Optional<ArrayRef<Decl *>> getCachedResult() const;
101102
void cacheResult(ArrayRef<Decl *> decls) const;
103+
104+
public:
105+
evaluator::DependencySource readDependencySource(Evaluator &) const;
102106
};
103107

104108
void simple_display(llvm::raw_ostream &out,
@@ -107,7 +111,7 @@ void simple_display(llvm::raw_ostream &out,
107111
class CodeCompletionSecondPassRequest
108112
: public SimpleRequest<CodeCompletionSecondPassRequest,
109113
bool(SourceFile *, CodeCompletionCallbacksFactory *),
110-
CacheKind::Uncached> {
114+
CacheKind::Uncached|CacheKind::DependencySource> {
111115
public:
112116
using SimpleRequest::SimpleRequest;
113117

@@ -117,6 +121,9 @@ class CodeCompletionSecondPassRequest
117121
// Evaluation.
118122
bool evaluate(Evaluator &evaluator, SourceFile *SF,
119123
CodeCompletionCallbacksFactory *Factory) const;
124+
125+
public:
126+
evaluator::DependencySource readDependencySource(Evaluator &) const;
120127
};
121128

122129
/// The zone number for the parser.

include/swift/AST/SILGenRequests.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#define SWIFT_SILGEN_REQUESTS_H
1919

2020
#include "swift/AST/ASTTypeIDs.h"
21+
#include "swift/AST/EvaluatorDependencies.h"
2122
#include "swift/AST/SimpleRequest.h"
2223

2324
namespace swift {
@@ -81,7 +82,7 @@ SourceLoc extractNearestSourceLoc(const SILGenDescriptor &desc);
8182
class SILGenSourceFileRequest :
8283
public SimpleRequest<SILGenSourceFileRequest,
8384
std::unique_ptr<SILModule>(SILGenDescriptor),
84-
CacheKind::Uncached> {
85+
CacheKind::Uncached|CacheKind::DependencySource> {
8586
public:
8687
using SimpleRequest::SimpleRequest;
8788

@@ -94,6 +95,10 @@ class SILGenSourceFileRequest :
9495

9596
public:
9697
bool isCached() const { return true; }
98+
99+
public:
100+
// Incremental dependencies.
101+
evaluator::DependencySource readDependencySource(Evaluator &) const;
97102
};
98103

99104
class SILGenWholeModuleRequest :

include/swift/AST/TypeCheckRequests.h

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -842,7 +842,7 @@ class LazyStoragePropertyRequest :
842842
class TypeCheckFunctionBodyUntilRequest :
843843
public SimpleRequest<TypeCheckFunctionBodyUntilRequest,
844844
bool(AbstractFunctionDecl *, SourceLoc),
845-
CacheKind::Cached> {
845+
CacheKind::Cached|CacheKind::DependencySource> {
846846
public:
847847
using SimpleRequest::SimpleRequest;
848848

@@ -856,6 +856,10 @@ class TypeCheckFunctionBodyUntilRequest :
856856

857857
public:
858858
bool isCached() const { return true; }
859+
860+
public:
861+
// Incremental dependencies.
862+
evaluator::DependencySource readDependencySource(Evaluator &) const;
859863
};
860864

861865
/// Request to obtain a list of stored properties in a nominal type.
@@ -1973,10 +1977,10 @@ class DynamicallyReplacedDeclRequest
19731977
bool isCached() const { return true; }
19741978
};
19751979

1976-
class TypeCheckSourceFileRequest :
1977-
public SimpleRequest<TypeCheckSourceFileRequest,
1978-
evaluator::SideEffect (SourceFile *),
1979-
CacheKind::SeparatelyCached> {
1980+
class TypeCheckSourceFileRequest
1981+
: public SimpleRequest<
1982+
TypeCheckSourceFileRequest, evaluator::SideEffect(SourceFile *),
1983+
CacheKind::SeparatelyCached | CacheKind::DependencySource> {
19801984
public:
19811985
using SimpleRequest::SimpleRequest;
19821986

@@ -1992,6 +1996,10 @@ class TypeCheckSourceFileRequest :
19921996
bool isCached() const { return true; }
19931997
Optional<evaluator::SideEffect> getCachedResult() const;
19941998
void cacheResult(evaluator::SideEffect) const;
1999+
2000+
public:
2001+
// Incremental dependencies.
2002+
evaluator::DependencySource readDependencySource(Evaluator &) const;
19952003
};
19962004

19972005
/// Computes whether the specified type or a super-class/super-protocol has the

lib/AST/TypeCheckRequests.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1283,6 +1283,11 @@ void CheckRedeclarationRequest::cacheResult(evaluator::SideEffect) const {
12831283
// TypeCheckSourceFileRequest computation.
12841284
//----------------------------------------------------------------------------//
12851285

1286+
evaluator::DependencySource
1287+
TypeCheckSourceFileRequest::readDependencySource(Evaluator &e) const {
1288+
return {std::get<0>(getStorage()), evaluator::DependencyScope::Cascading};
1289+
}
1290+
12861291
Optional<evaluator::SideEffect>
12871292
TypeCheckSourceFileRequest::getCachedResult() const {
12881293
auto *SF = std::get<0>(getStorage());
@@ -1324,3 +1329,17 @@ void TypeCheckSourceFileRequest::cacheResult(evaluator::SideEffect) const {
13241329
#endif
13251330
}
13261331
}
1332+
1333+
//----------------------------------------------------------------------------//
1334+
// TypeCheckFunctionBodyUntilRequest computation.
1335+
//----------------------------------------------------------------------------//
1336+
1337+
evaluator::DependencySource
1338+
TypeCheckFunctionBodyUntilRequest::readDependencySource(Evaluator &e) const {
1339+
// We're going under a function body scope, unconditionally flip the scope
1340+
// to private.
1341+
return {
1342+
std::get<0>(getStorage())->getParentSourceFile(),
1343+
evaluator::DependencyScope::Private
1344+
};
1345+
}

lib/IRGen/IRGenRequests.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,15 @@ SourceLoc swift::extractNearestSourceLoc(const IRGenDescriptor &desc) {
4848
return SourceLoc();
4949
}
5050

51+
evaluator::DependencySource
52+
IRGenSourceFileRequest::readDependencySource(Evaluator &e) const {
53+
auto &desc = std::get<0>(getStorage());
54+
return {
55+
desc.Ctx.dyn_cast<SourceFile *>(),
56+
evaluator::DependencyScope::Cascading
57+
};
58+
}
59+
5160
// Define request evaluation functions for each of the IRGen requests.
5261
static AbstractRequestFunction *irGenRequestFunctions[] = {
5362
#define SWIFT_REQUEST(Zone, Name, Sig, Caching, LocOptions) \

lib/Parse/ParseRequests.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,11 @@ ArrayRef<Decl *> ParseSourceFileRequest::evaluate(Evaluator &evaluator,
167167
return ctx.AllocateCopy(decls);
168168
}
169169

170+
evaluator::DependencySource
171+
ParseSourceFileRequest::readDependencySource(Evaluator &e) const {
172+
return {std::get<0>(getStorage()), evaluator::DependencyScope::Cascading};
173+
}
174+
170175
Optional<ArrayRef<Decl *>> ParseSourceFileRequest::getCachedResult() const {
171176
auto *SF = std::get<0>(getStorage());
172177
return SF->getCachedTopLevelDecls();
@@ -189,6 +194,11 @@ void ParseSourceFileRequest::cacheResult(ArrayRef<Decl *> decls) const {
189194
void swift::simple_display(llvm::raw_ostream &out,
190195
const CodeCompletionCallbacksFactory *factory) { }
191196

197+
evaluator::DependencySource
198+
CodeCompletionSecondPassRequest::readDependencySource(Evaluator &e) const {
199+
return {std::get<0>(getStorage()), e.getActiveSourceScope()};
200+
}
201+
192202
// Define request evaluation functions for each of the type checker requests.
193203
static AbstractRequestFunction *parseRequestFunctions[] = {
194204
#define SWIFT_REQUEST(Zone, Name, Sig, Caching, LocOptions) \

lib/SILGen/SILGenRequests.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,16 @@ SourceLoc swift::extractNearestSourceLoc(const SILGenDescriptor &desc) {
4646
return SourceLoc();
4747
}
4848

49+
evaluator::DependencySource
50+
SILGenSourceFileRequest::readDependencySource(Evaluator &e) const {
51+
auto &desc = std::get<0>(getStorage());
52+
auto *unit = desc.context.get<FileUnit *>();
53+
return {
54+
dyn_cast_or_null<SourceFile>(unit),
55+
evaluator::DependencyScope::Cascading
56+
};
57+
}
58+
4959
// Define request evaluation functions for each of the SILGen requests.
5060
static AbstractRequestFunction *silGenRequestFunctions[] = {
5161
#define SWIFT_REQUEST(Zone, Name, Sig, Caching, LocOptions) \

0 commit comments

Comments
 (0)