forked from OSchip/llvm-project
[modules] Add optional out-param to ASTReader::ReadAST for imported submodules.
Summary: The Swift frontend is acquiring the ability to load non-module PCH files containing bridging definitions from C/ObjC. As part of this work, it needs to know which submodules were imported by a PCH in order to wrap them in local Swift modules. This information is collected by ASTReader::ReadAST in a local vector, but is currently kept private. The change here is just to make the type of the vector elements public, and provide an optional out-parameter to the ReadAST method to provide the vector's contents to a caller after a successful read. Reviewers: manmanren, rsmith, doug.gregor Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D27580 llvm-svn: 289276
This commit is contained in:
parent
6c03cfb091
commit
e7196af07d
|
@ -821,6 +821,7 @@ private:
|
||||||
// \brief A list of late parsed template function data.
|
// \brief A list of late parsed template function data.
|
||||||
SmallVector<uint64_t, 1> LateParsedTemplates;
|
SmallVector<uint64_t, 1> LateParsedTemplates;
|
||||||
|
|
||||||
|
public:
|
||||||
struct ImportedSubmodule {
|
struct ImportedSubmodule {
|
||||||
serialization::SubmoduleID ID;
|
serialization::SubmoduleID ID;
|
||||||
SourceLocation ImportLoc;
|
SourceLocation ImportLoc;
|
||||||
|
@ -829,6 +830,7 @@ private:
|
||||||
: ID(ID), ImportLoc(ImportLoc) {}
|
: ID(ID), ImportLoc(ImportLoc) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private:
|
||||||
/// \brief A list of modules that were imported by precompiled headers or
|
/// \brief A list of modules that were imported by precompiled headers or
|
||||||
/// any other non-module AST file.
|
/// any other non-module AST file.
|
||||||
SmallVector<ImportedSubmodule, 2> ImportedModules;
|
SmallVector<ImportedSubmodule, 2> ImportedModules;
|
||||||
|
@ -1404,9 +1406,13 @@ public:
|
||||||
/// \param ClientLoadCapabilities The set of client load-failure
|
/// \param ClientLoadCapabilities The set of client load-failure
|
||||||
/// capabilities, represented as a bitset of the enumerators of
|
/// capabilities, represented as a bitset of the enumerators of
|
||||||
/// LoadFailureCapabilities.
|
/// LoadFailureCapabilities.
|
||||||
|
///
|
||||||
|
/// \param Imported optional out-parameter to append the list of modules
|
||||||
|
/// that were imported by precompiled headers or any other non-module AST file
|
||||||
ASTReadResult ReadAST(StringRef FileName, ModuleKind Type,
|
ASTReadResult ReadAST(StringRef FileName, ModuleKind Type,
|
||||||
SourceLocation ImportLoc,
|
SourceLocation ImportLoc,
|
||||||
unsigned ClientLoadCapabilities);
|
unsigned ClientLoadCapabilities,
|
||||||
|
SmallVectorImpl<ImportedSubmodule> *Imported = nullptr);
|
||||||
|
|
||||||
/// \brief Make the entities in the given module and any of its (non-explicit)
|
/// \brief Make the entities in the given module and any of its (non-explicit)
|
||||||
/// submodules visible to name lookup.
|
/// submodules visible to name lookup.
|
||||||
|
|
|
@ -3578,7 +3578,8 @@ static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
|
||||||
ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
|
ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
|
||||||
ModuleKind Type,
|
ModuleKind Type,
|
||||||
SourceLocation ImportLoc,
|
SourceLocation ImportLoc,
|
||||||
unsigned ClientLoadCapabilities) {
|
unsigned ClientLoadCapabilities,
|
||||||
|
SmallVectorImpl<ImportedSubmodule> *Imported) {
|
||||||
llvm::SaveAndRestore<SourceLocation>
|
llvm::SaveAndRestore<SourceLocation>
|
||||||
SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
|
SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
|
||||||
|
|
||||||
|
@ -3744,6 +3745,10 @@ ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
|
||||||
}
|
}
|
||||||
UnresolvedModuleRefs.clear();
|
UnresolvedModuleRefs.clear();
|
||||||
|
|
||||||
|
if (Imported)
|
||||||
|
Imported->append(ImportedModules.begin(),
|
||||||
|
ImportedModules.end());
|
||||||
|
|
||||||
// FIXME: How do we load the 'use'd modules? They may not be submodules.
|
// FIXME: How do we load the 'use'd modules? They may not be submodules.
|
||||||
// Might be unnecessary as use declarations are only used to build the
|
// Might be unnecessary as use declarations are only used to build the
|
||||||
// module itself.
|
// module itself.
|
||||||
|
|
Loading…
Reference in New Issue