@@ -44,7 +44,7 @@ class Deserializer {
4444
4545public:
4646 Deserializer (llvm::MemoryBufferRef Data) : Cursor(Data) {}
47- bool readFineGrainedDependencyGraph (SourceFileDepGraph &g, bool standalone );
47+ bool readFineGrainedDependencyGraph (SourceFileDepGraph &g, Purpose purpose );
4848 bool readFineGrainedDependencyGraphFromSwiftModule (SourceFileDepGraph &g);
4949};
5050
@@ -152,14 +152,23 @@ static llvm::Optional<DeclAspect> getDeclAspect(unsigned declAspect) {
152152}
153153
154154bool Deserializer::readFineGrainedDependencyGraph (SourceFileDepGraph &g,
155- bool standalone ) {
155+ Purpose purpose ) {
156156 using namespace record_block ;
157157
158- if (standalone && readSignature ())
159- return true ;
158+ switch (purpose) {
159+ case Purpose::ForSwiftDeps:
160+ if (readSignature ())
161+ return true ;
160162
161- if (standalone && enterTopLevelBlock ())
162- return true ;
163+ if (enterTopLevelBlock ())
164+ return true ;
165+ LLVM_FALLTHROUGH;
166+ case Purpose::ForSwiftModule:
167+ // N.B. Incremental metadata embedded in swiftmodule files does not have
168+ // a leading signature, and its top-level block has already been
169+ // consumed by the time we get here.
170+ break ;
171+ }
163172
164173 if (readMetadata ())
165174 return true ;
@@ -261,7 +270,7 @@ bool Deserializer::readFineGrainedDependencyGraph(SourceFileDepGraph &g,
261270bool swift::fine_grained_dependencies::readFineGrainedDependencyGraph (
262271 llvm::MemoryBuffer &buffer, SourceFileDepGraph &g) {
263272 Deserializer deserializer (buffer.getMemBufferRef ());
264- return deserializer.readFineGrainedDependencyGraph (g, /* standalone */ true );
273+ return deserializer.readFineGrainedDependencyGraph (g, Purpose::ForSwiftDeps );
265274}
266275
267276bool swift::fine_grained_dependencies::readFineGrainedDependencyGraph (
@@ -324,7 +333,7 @@ class Serializer {
324333
325334public:
326335 void writeFineGrainedDependencyGraph (const SourceFileDepGraph &g,
327- bool standalone );
336+ Purpose purpose );
328337};
329338
330339} // end namespace
@@ -385,13 +394,19 @@ void Serializer::writeMetadata() {
385394
386395void
387396Serializer::writeFineGrainedDependencyGraph (const SourceFileDepGraph &g,
388- bool standalone) {
389- auto blockID = INCREMENTAL_INFORMATION_BLOCK_ID;
390- if (standalone) {
397+ Purpose purpose) {
398+ unsigned blockID = 0 ;
399+ switch (purpose) {
400+ case Purpose::ForSwiftDeps:
391401 writeSignature ();
392402 writeBlockInfoBlock ();
393403 blockID = RECORD_BLOCK_ID;
404+ break ;
405+ case Purpose::ForSwiftModule:
406+ blockID = INCREMENTAL_INFORMATION_BLOCK_ID;
407+ break ;
394408 }
409+
395410 llvm::BCBlockRAII restoreBlock (Out, blockID, 8 );
396411
397412 using namespace record_block ;
@@ -474,9 +489,10 @@ unsigned Serializer::getIdentifier(StringRef str) {
474489}
475490
476491void swift::fine_grained_dependencies::writeFineGrainedDependencyGraph (
477- llvm::BitstreamWriter &Out, const SourceFileDepGraph &g, bool standalone) {
492+ llvm::BitstreamWriter &Out, const SourceFileDepGraph &g,
493+ Purpose purpose) {
478494 Serializer serializer{Out};
479- serializer.writeFineGrainedDependencyGraph (g, standalone );
495+ serializer.writeFineGrainedDependencyGraph (g, purpose );
480496}
481497
482498bool swift::fine_grained_dependencies::writeFineGrainedDependencyGraphToPath (
@@ -486,7 +502,7 @@ bool swift::fine_grained_dependencies::writeFineGrainedDependencyGraphToPath(
486502 return withOutputFile (diags, path, [&](llvm::raw_ostream &out) {
487503 SmallVector<char , 0 > Buffer;
488504 llvm::BitstreamWriter Writer{Buffer};
489- writeFineGrainedDependencyGraph (Writer, g, /* standalone */ true );
505+ writeFineGrainedDependencyGraph (Writer, g, Purpose::ForSwiftDeps );
490506 out.write (Buffer.data (), Buffer.size ());
491507 out.flush ();
492508 return false ;
@@ -578,7 +594,7 @@ bool Deserializer::readFineGrainedDependencyGraphFromSwiftModule(
578594 consumeError (std::move (Err));
579595 return false ;
580596 }
581- if (readFineGrainedDependencyGraph (g, /* standalone */ false )) {
597+ if (readFineGrainedDependencyGraph (g, Purpose::ForSwiftModule )) {
582598 break ;
583599 }
584600
0 commit comments