clang
10.0.0git
|
Writes an AST file containing the contents of a translation unit. More...
#include "clang/Serialization/ASTWriter.h"
Public Types | |
using | RecordData = SmallVector< uint64_t, 64 > |
using | RecordDataImpl = SmallVectorImpl< uint64_t > |
using | RecordDataRef = ArrayRef< uint64_t > |
Public Member Functions | |
ASTWriter (llvm::BitstreamWriter &Stream, SmallVectorImpl< char > &Buffer, InMemoryModuleCache &ModuleCache, ArrayRef< std::shared_ptr< ModuleFileExtension >> Extensions, bool IncludeTimestamps=true) | |
Create a new precompiled header writer that outputs to the given bitstream. More... | |
~ASTWriter () override | |
const LangOptions & | getLangOpts () const |
time_t | getTimestampForOutput (const FileEntry *E) const |
Get a timestamp for output into the AST file. More... | |
ASTFileSignature | WriteAST (Sema &SemaRef, const std::string &OutputFile, Module *WritingModule, StringRef isysroot, bool hasErrors=false, bool ShouldCacheASTInMemory=false) |
Write a precompiled header for the given semantic analysis. More... | |
void | AddToken (const Token &Tok, RecordDataImpl &Record) |
Emit a token. More... | |
void | AddSourceLocation (SourceLocation Loc, RecordDataImpl &Record) |
Emit a source location. More... | |
void | AddSourceRange (SourceRange Range, RecordDataImpl &Record) |
Emit a source range. More... | |
void | AddIdentifierRef (const IdentifierInfo *II, RecordDataImpl &Record) |
Emit a reference to an identifier. More... | |
serialization::SelectorID | getSelectorRef (Selector Sel) |
Get the unique number used to refer to the given selector. More... | |
serialization::IdentID | getIdentifierRef (const IdentifierInfo *II) |
Get the unique number used to refer to the given identifier. More... | |
serialization::MacroID | getMacroRef (MacroInfo *MI, const IdentifierInfo *Name) |
Get the unique number used to refer to the given macro. More... | |
serialization::MacroID | getMacroID (MacroInfo *MI) |
Determine the ID of an already-emitted macro. More... | |
uint64_t | getMacroDirectivesOffset (const IdentifierInfo *Name) |
void | AddTypeRef (QualType T, RecordDataImpl &Record) |
Emit a reference to a type. More... | |
serialization::TypeID | GetOrCreateTypeID (QualType T) |
Force a type to be emitted and get its ID. More... | |
serialization::TypeID | getTypeID (QualType T) const |
Determine the type ID of an already-emitted type. More... | |
const Decl * | getFirstLocalDecl (const Decl *D) |
Find the first local declaration of a given local redeclarable decl. More... | |
bool | IsLocalDecl (const Decl *D) |
Is this a local declaration (that is, one that will be written to our AST file)? This is the case for declarations that are neither imported from another AST file nor predefined. More... | |
void | AddDeclRef (const Decl *D, RecordDataImpl &Record) |
Emit a reference to a declaration. More... | |
serialization::DeclID | GetDeclRef (const Decl *D) |
Force a declaration to be emitted and get its ID. More... | |
serialization::DeclID | getDeclID (const Decl *D) |
Determine the declaration ID of an already-emitted declaration. More... | |
unsigned | getAnonymousDeclarationNumber (const NamedDecl *D) |
void | AddString (StringRef Str, RecordDataImpl &Record) |
Add a string to the given record. More... | |
bool | PreparePathForOutput (SmallVectorImpl< char > &Path) |
Convert a path from this build process into one that is appropriate for emission in the module file. More... | |
void | AddPath (StringRef Path, RecordDataImpl &Record) |
Add a path to the given record. More... | |
void | EmitRecordWithPath (unsigned Abbrev, RecordDataRef Record, StringRef Path) |
Emit the current record with the given path as a blob. More... | |
void | AddVersionTuple (const VersionTuple &Version, RecordDataImpl &Record) |
Add a version tuple to the given record. More... | |
unsigned | getLocalOrImportedSubmoduleID (Module *Mod) |
Retrieve or create a submodule ID for this module, or return 0 if the submodule is neither local (a submodle of the currently-written module) nor from an imported module. More... | |
void | SetIdentifierOffset (const IdentifierInfo *II, uint32_t Offset) |
Note that the identifier II occurs at the given offset within the identifier table. More... | |
void | SetSelectorOffset (Selector Sel, uint32_t Offset) |
Note that the selector Sel occurs at the given offset within the method pool/selector table. More... | |
unsigned | RecordSwitchCaseID (SwitchCase *S) |
Record an ID for the given switch-case statement. More... | |
unsigned | getSwitchCaseID (SwitchCase *S) |
Retrieve the ID for the given switch-case statement. More... | |
void | ClearSwitchCaseIDs () |
unsigned | getTypeExtQualAbbrev () const |
unsigned | getTypeFunctionProtoAbbrev () const |
unsigned | getDeclParmVarAbbrev () const |
unsigned | getDeclRecordAbbrev () const |
unsigned | getDeclTypedefAbbrev () const |
unsigned | getDeclVarAbbrev () const |
unsigned | getDeclFieldAbbrev () const |
unsigned | getDeclEnumAbbrev () const |
unsigned | getDeclObjCIvarAbbrev () const |
unsigned | getDeclCXXMethodAbbrev () const |
unsigned | getDeclRefExprAbbrev () const |
unsigned | getCharacterLiteralAbbrev () const |
unsigned | getIntegerLiteralAbbrev () const |
unsigned | getExprImplicitCastAbbrev () const |
bool | hasChain () const |
ASTReader * | getChain () const |
![]() | |
virtual | ~ASTDeserializationListener () |
virtual void | DeclRead (serialization::DeclID ID, const Decl *D) |
A decl was deserialized from the AST file. More... | |
virtual void | ModuleImportRead (serialization::SubmoduleID ID, SourceLocation ImportLoc) |
A module import was read from the AST file. More... | |
![]() | |
virtual | ~ASTMutationListener () |
Friends | |
class | ASTDeclWriter |
class | ASTRecordWriter |
Writes an AST file containing the contents of a translation unit.
The ASTWriter class produces a bitstream containing the serialized representation of a given abstract syntax tree and its supporting data structures. This bitstream can be de-serialized via an instance of the ASTReader class.
Definition at line 96 of file ASTWriter.h.
using clang::ASTWriter::RecordData = SmallVector<uint64_t, 64> |
Definition at line 102 of file ASTWriter.h.
using clang::ASTWriter::RecordDataImpl = SmallVectorImpl<uint64_t> |
Definition at line 103 of file ASTWriter.h.
using clang::ASTWriter::RecordDataRef = ArrayRef<uint64_t> |
Definition at line 104 of file ASTWriter.h.
ASTWriter::ASTWriter | ( | llvm::BitstreamWriter & | Stream, |
SmallVectorImpl< char > & | Buffer, | ||
InMemoryModuleCache & | ModuleCache, | ||
ArrayRef< std::shared_ptr< ModuleFileExtension >> | Extensions, | ||
bool | IncludeTimestamps = true |
||
) |
Create a new precompiled header writer that outputs to the given bitstream.
Definition at line 4264 of file ASTWriter.cpp.
|
override |
Definition at line 4277 of file ASTWriter.cpp.
void ASTWriter::AddDeclRef | ( | const Decl * | D, |
RecordDataImpl & | Record | ||
) |
Emit a reference to a declaration.
Definition at line 5260 of file ASTWriter.cpp.
References GetDeclRef().
Referenced by clang::ASTRecordWriter::AddCXXDefinitionData(), clang::ASTRecordWriter::AddCXXTemporary(), clang::ASTRecordWriter::AddDeclRef(), AddLazyVectorDecls(), clang::ASTRecordWriter::AddNestedNameSpecifierLoc(), clang::ASTRecordWriter::AddTemplateParameterList(), and clang::ASTRecordWriter::AddUnresolvedSet().
void ASTWriter::AddIdentifierRef | ( | const IdentifierInfo * | II, |
RecordDataImpl & | Record | ||
) |
Emit a reference to an identifier.
Definition at line 5094 of file ASTWriter.cpp.
References getIdentifierRef().
Referenced by clang::ASTRecordWriter::AddIdentifierRef(), AddLazyVectorDecls(), and clang::ASTRecordWriter::AddNestedNameSpecifierLoc().
void ASTWriter::AddPath | ( | StringRef | Path, |
RecordDataImpl & | Record | ||
) |
Add a path to the given record.
Definition at line 4216 of file ASTWriter.cpp.
Referenced by clang::ASTRecordWriter::AddPath().
void ASTWriter::AddSourceLocation | ( | SourceLocation | Loc, |
RecordDataImpl & | Record | ||
) |
Emit a source location.
Definition at line 5025 of file ASTWriter.cpp.
References clang::SourceLocation::getRawEncoding().
Referenced by clang::ASTRecordWriter::AddASTTemplateArgumentListInfo(), clang::ASTRecordWriter::AddCXXBaseSpecifier(), clang::ASTRecordWriter::AddCXXDefinitionData(), clang::ASTRecordWriter::AddDeclarationNameInfo(), AddLazyVectorDecls(), clang::ASTRecordWriter::AddNestedNameSpecifierLoc(), clang::ASTRecordWriter::AddSourceLocation(), AddSourceRange(), clang::ASTRecordWriter::AddTemplateArgumentLocInfo(), and clang::ASTRecordWriter::AddTemplateParameterList().
void ASTWriter::AddSourceRange | ( | SourceRange | Range, |
RecordDataImpl & | Record | ||
) |
Emit a source range.
Definition at line 5030 of file ASTWriter.cpp.
References AddSourceLocation(), clang::SourceRange::getBegin(), and clang::SourceRange::getEnd().
Referenced by clang::ASTRecordWriter::AddCXXBaseSpecifier(), clang::ASTRecordWriter::AddNestedNameSpecifierLoc(), and clang::ASTRecordWriter::AddSourceRange().
void ASTWriter::AddString | ( | StringRef | Str, |
RecordDataImpl & | Record | ||
) |
Add a string to the given record.
Definition at line 4193 of file ASTWriter.cpp.
Referenced by clang::ASTRecordWriter::AddString().
void ASTWriter::AddToken | ( | const Token & | Tok, |
RecordDataImpl & | Record | ||
) |
Emit a token.
Definition at line 4180 of file ASTWriter.cpp.
References clang::Token::getFlags(), clang::Token::getIdentifierInfo(), clang::Token::getKind(), clang::Token::getLength(), and clang::Token::getLocation().
void ASTWriter::AddTypeRef | ( | QualType | T, |
RecordDataImpl & | Record | ||
) |
Emit a reference to a type.
Definition at line 5220 of file ASTWriter.cpp.
References GetOrCreateTypeID().
Referenced by AddLazyVectorDecls(), clang::ASTRecordWriter::AddNestedNameSpecifierLoc(), clang::ASTRecordWriter::AddTypeRef(), and clang::ASTRecordWriter::AddTypeSourceInfo().
void ASTWriter::AddVersionTuple | ( | const VersionTuple & | Version, |
RecordDataImpl & | Record | ||
) |
Add a version tuple to the given record.
Definition at line 4229 of file ASTWriter.cpp.
Referenced by clang::ASTRecordWriter::AddVersionTuple().
void ASTWriter::ClearSwitchCaseIDs | ( | ) |
Definition at line 2499 of file ASTWriterStmt.cpp.
References clang::serialization::STMT_NULL_PTR, and clang::serialization::STMT_REF_PTR.
void ASTWriter::EmitRecordWithPath | ( | unsigned | Abbrev, |
RecordDataRef | Record, | ||
StringRef | Path | ||
) |
Emit the current record with the given path as a blob.
Definition at line 4222 of file ASTWriter.cpp.
unsigned ASTWriter::getAnonymousDeclarationNumber | ( | const NamedDecl * | D | ) |
Definition at line 5352 of file ASTWriter.cpp.
References clang::Decl::getLexicalDeclContext(), clang::serialization::needsAnonymousDeclarationNumber(), and clang::serialization::numberAnonymousDeclsWithin().
|
inline |
Definition at line 690 of file ASTWriter.h.
References clang::diff::Delete.
|
inline |
Definition at line 685 of file ASTWriter.h.
Referenced by addSubstitutionDiagnostic().
|
inline |
Definition at line 682 of file ASTWriter.h.
|
inline |
Definition at line 680 of file ASTWriter.h.
|
inline |
Definition at line 679 of file ASTWriter.h.
DeclID ASTWriter::getDeclID | ( | const Decl * | D | ) |
Determine the declaration ID of an already-emitted declaration.
Definition at line 5293 of file ASTWriter.cpp.
References clang::SourceManager::getDecomposedLoc(), clang::SourceManager::getFileLoc(), clang::Decl::getGlobalID(), clang::Decl::getLexicalDeclContext(), clang::Decl::getLocation(), clang::SourceManager::getSLocEntry(), clang::ASTContext::getSourceManager(), clang::SrcMgr::SLocEntry::isFile(), clang::DeclContext::isFileContext(), clang::Decl::isFromASTFile(), clang::SourceLocation::isInvalid(), clang::SourceManager::isLocalSourceLocation(), Offset, and SM.
Referenced by getDeclForLocalLookup().
|
inline |
Definition at line 681 of file ASTWriter.h.
|
inline |
Definition at line 675 of file ASTWriter.h.
|
inline |
Definition at line 676 of file ASTWriter.h.
DeclID ASTWriter::GetDeclRef | ( | const Decl * | D | ) |
Force a declaration to be emitted and get its ID.
Definition at line 5264 of file ASTWriter.cpp.
References clang::Decl::getGlobalID(), and clang::Decl::isFromASTFile().
Referenced by AddDeclRef(), AddLazyVectorDecls(), and getDeclForLocalLookup().
|
inline |
Definition at line 684 of file ASTWriter.h.
Referenced by addSubstitutionDiagnostic().
|
inline |
Definition at line 677 of file ASTWriter.h.
|
inline |
Definition at line 678 of file ASTWriter.h.
|
inline |
Definition at line 687 of file ASTWriter.h.
Find the first local declaration of a given local redeclarable decl.
Definition at line 1758 of file ASTWriterDecl.cpp.
References clang::Decl::getCanonicalDecl(), and clang::Decl::getPreviousDecl().
Referenced by clang::ASTDeclWriter::RegisterTemplateSpecialization().
IdentID ASTWriter::getIdentifierRef | ( | const IdentifierInfo * | II | ) |
Get the unique number used to refer to the given identifier.
Definition at line 5098 of file ASTWriter.cpp.
Referenced by AddIdentifierRef(), and CreateSLocExpansionAbbrev().
|
inline |
Definition at line 686 of file ASTWriter.h.
Referenced by addSubstitutionDiagnostic().
const LangOptions & ASTWriter::getLangOpts | ( | ) | const |
Definition at line 4281 of file ASTWriter.cpp.
References clang::ASTContext::getLangOpts().
Referenced by AddLazyVectorDecls(), and getDeclForLocalLookup().
unsigned ASTWriter::getLocalOrImportedSubmoduleID | ( | Module * | Mod | ) |
Retrieve or create a submodule ID for this module, or return 0 if the submodule is neither local (a submodle of the currently-written module) nor from an imported module.
Definition at line 2417 of file ASTWriter.cpp.
References clang::Module::getTopLevelModule().
Referenced by CreateSLocExpansionAbbrev().
uint64_t ASTWriter::getMacroDirectivesOffset | ( | const IdentifierInfo * | Name | ) |
Definition at line 5132 of file ASTWriter.cpp.
Referenced by getDeclForLocalLookup().
Determine the ID of an already-emitted macro.
Definition at line 5124 of file ASTWriter.cpp.
References clang::MacroInfo::isBuiltinMacro().
MacroID ASTWriter::getMacroRef | ( | MacroInfo * | MI, |
const IdentifierInfo * | Name | ||
) |
Get the unique number used to refer to the given macro.
Definition at line 5108 of file ASTWriter.cpp.
Force a type to be emitted and get its ID.
Definition at line 5224 of file ASTWriter.cpp.
References clang::QualType::getLocalFastQualifiers(), clang::QualType::isNull(), and clang::serialization::MakeTypeID().
Referenced by AddTypeRef().
SelectorID ASTWriter::getSelectorRef | ( | Selector | Sel | ) |
Get the unique number used to refer to the given selector.
Definition at line 5140 of file ASTWriter.cpp.
References clang::Selector::getAsOpaquePtr().
unsigned ASTWriter::getSwitchCaseID | ( | SwitchCase * | S | ) |
Retrieve the ID for the given switch-case statement.
Definition at line 2493 of file ASTWriterStmt.cpp.
time_t ASTWriter::getTimestampForOutput | ( | const FileEntry * | E | ) | const |
Get a timestamp for output into the AST file.
The actual timestamp of the specified file may be ignored if we have been instructed to not include timestamps in the output file.
Definition at line 4286 of file ASTWriter.cpp.
References clang::FileEntry::getModificationTime().
|
inline |
Definition at line 667 of file ASTWriter.h.
Referenced by getTypeCodeForTypeClass().
|
inline |
Definition at line 671 of file ASTWriter.h.
Determine the type ID of an already-emitted type.
Definition at line 5247 of file ASTWriter.cpp.
References clang::QualType::getLocalFastQualifiers(), clang::QualType::isNull(), and clang::serialization::MakeTypeID().
|
inline |
Definition at line 689 of file ASTWriter.h.
Is this a local declaration (that is, one that will be written to our AST file)? This is the case for declarations that are neither imported from another AST file nor predefined.
Definition at line 609 of file ASTWriter.h.
References clang::Decl::isFromASTFile(), clang::serialization::NUM_PREDEF_DECL_IDS, and Offset.
Referenced by isImportedDeclContext().
bool ASTWriter::PreparePathForOutput | ( | SmallVectorImpl< char > & | Path | ) |
Convert a path from this build process into one that is appropriate for emission in the module file.
Definition at line 4198 of file ASTWriter.cpp.
References adjustFilenameForRelocatableAST(), cleanPathForOutput(), clang::SourceManager::getFileManager(), and clang::ASTContext::getSourceManager().
unsigned ASTWriter::RecordSwitchCaseID | ( | SwitchCase * | S | ) |
Record an ID for the given switch-case statement.
Definition at line 2485 of file ASTWriterStmt.cpp.
void ASTWriter::SetIdentifierOffset | ( | const IdentifierInfo * | II, |
uint32_t | Offset | ||
) |
Note that the identifier II occurs at the given offset within the identifier table.
Definition at line 4244 of file ASTWriter.cpp.
References Offset.
Referenced by getDeclForLocalLookup().
void ASTWriter::SetSelectorOffset | ( | Selector | Sel, |
uint32_t | Offset | ||
) |
Note that the selector Sel occurs at the given offset within the method pool/selector table.
Definition at line 4254 of file ASTWriter.cpp.
References Offset.
ASTFileSignature ASTWriter::WriteAST | ( | Sema & | SemaRef, |
const std::string & | OutputFile, | ||
Module * | WritingModule, | ||
StringRef | isysroot, | ||
bool | hasErrors = false , |
||
bool | ShouldCacheASTInMemory = false |
||
) |
Write a precompiled header for the given semantic analysis.
SemaRef | a reference to the semantic analysis object that processed the AST to be written into the precompiled header. |
WritingModule | The module that we are writing. If null, we are writing a precompiled header. |
isysroot | if non-empty, write a relocatable file whose headers are relative to the given system root. If we're writing a module, its build directory will be used in preference to this if both are available. |
Definition at line 4290 of file ASTWriter.cpp.
References clang::InMemoryModuleCache::addBuiltPCM(), clang::Sema::Context, and clang::Sema::PP.
Referenced by clang::PCHGenerator::HandleTranslationUnit(), and serializeUnit().
|
friend |
Definition at line 99 of file ASTWriter.h.
|
friend |
Definition at line 100 of file ASTWriter.h.