@@ -31,25 +31,34 @@ TapiUniversal::TapiUniversal(MemoryBufferRef Source, Error &Err)
3131 }
3232 ParsedFile = std::move (Result.get ());
3333
34- auto FlattenObjectInfo = [this ](const auto &File) {
34+ auto FlattenObjectInfo = [this ](const auto &File,
35+ std::optional<size_t > DocIdx = std::nullopt ) {
3536 StringRef Name = File->getInstallName ();
3637 for (const Architecture Arch : File->getArchitectures ())
37- Libraries.emplace_back (Library ({Name, Arch}));
38+ Libraries.emplace_back (Library ({Name, Arch, DocIdx }));
3839 };
39-
4040 FlattenObjectInfo (ParsedFile);
4141 // Get inlined documents from tapi file.
42+ size_t DocIdx = 0 ;
4243 for (const std::shared_ptr<InterfaceFile> &File : ParsedFile->documents ())
43- FlattenObjectInfo (File);
44+ FlattenObjectInfo (File, DocIdx++ );
4445}
4546
4647TapiUniversal::~TapiUniversal () = default ;
4748
4849Expected<std::unique_ptr<TapiFile>>
4950TapiUniversal::ObjectForArch::getAsObjectFile () const {
50- return std::make_unique<TapiFile>(Parent->getMemoryBufferRef (),
51- *Parent->ParsedFile ,
52- Parent->Libraries [Index].Arch );
51+ const auto &InlinedDocuments = Parent->ParsedFile ->documents ();
52+ const Library &CurrLib = Parent->Libraries [Index];
53+ assert (
54+ (isTopLevelLib () || (CurrLib.DocumentIdx .has_value () &&
55+ (InlinedDocuments.size () > *CurrLib.DocumentIdx ))) &&
56+ " Index into documents exceeds the container for them" );
57+ InterfaceFile *IF = isTopLevelLib ()
58+ ? Parent->ParsedFile .get ()
59+ : InlinedDocuments[*CurrLib.DocumentIdx ].get ();
60+ return std::make_unique<TapiFile>(Parent->getMemoryBufferRef (), *IF,
61+ CurrLib.Arch );
5362}
5463
5564Expected<std::unique_ptr<TapiUniversal>>
0 commit comments