clang  6.0.0svn
Classes | Public Types | Public Member Functions | Friends | List of all members
clang::ASTWriter Class Reference

Writes an AST file containing the contents of a translation unit. More...

#include "clang/Serialization/ASTWriter.h"

Inheritance diagram for clang::ASTWriter:
Inheritance graph
[legend]
Collaboration diagram for clang::ASTWriter:
Collaboration graph
[legend]

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, MemoryBufferCache &PCMCache, 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 LangOptionsgetLangOpts () 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)
 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 DeclgetFirstLocalDecl (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
 
ASTReadergetChain () const
 
- Public Member Functions inherited from clang::ASTDeserializationListener
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...
 
- Public Member Functions inherited from clang::ASTMutationListener
virtual ~ASTMutationListener ()
 

Friends

class ASTDeclWriter
 
class ASTRecordWriter
 
class ASTStmtWriter
 
class ASTTypeWriter
 

Detailed Description

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 104 of file ASTWriter.h.

Member Typedef Documentation

◆ RecordData

Definition at line 112 of file ASTWriter.h.

◆ RecordDataImpl

Definition at line 113 of file ASTWriter.h.

◆ RecordDataRef

Definition at line 114 of file ASTWriter.h.

Constructor & Destructor Documentation

◆ ASTWriter()

ASTWriter::ASTWriter ( llvm::BitstreamWriter &  Stream,
SmallVectorImpl< char > &  Buffer,
MemoryBufferCache PCMCache,
ArrayRef< std::shared_ptr< ModuleFileExtension >>  Extensions,
bool  IncludeTimestamps = true 
)

Create a new precompiled header writer that outputs to the given bitstream.

Definition at line 4526 of file ASTWriter.cpp.

◆ ~ASTWriter()

ASTWriter::~ASTWriter ( )
override

Definition at line 4538 of file ASTWriter.cpp.

Member Function Documentation

◆ AddDeclRef()

void ASTWriter::AddDeclRef ( const Decl D,
RecordDataImpl Record 
)

◆ AddIdentifierRef()

void ASTWriter::AddIdentifierRef ( const IdentifierInfo II,
RecordDataImpl Record 
)

◆ AddPath()

void ASTWriter::AddPath ( StringRef  Path,
RecordDataImpl Record 
)

Add a path to the given record.

Definition at line 4478 of file ASTWriter.cpp.

Referenced by clang::ASTRecordWriter::AddPath().

◆ AddSourceLocation()

void ASTWriter::AddSourceLocation ( SourceLocation  Loc,
RecordDataImpl Record 
)

◆ AddSourceRange()

void ASTWriter::AddSourceRange ( SourceRange  Range,
RecordDataImpl Record 
)

◆ AddString()

void ASTWriter::AddString ( StringRef  Str,
RecordDataImpl Record 
)

Add a string to the given record.

Definition at line 4455 of file ASTWriter.cpp.

Referenced by clang::ASTRecordWriter::AddString().

◆ AddToken()

void ASTWriter::AddToken ( const Token Tok,
RecordDataImpl Record 
)

◆ AddTypeRef()

void ASTWriter::AddTypeRef ( QualType  T,
RecordDataImpl Record 
)

◆ AddVersionTuple()

void ASTWriter::AddVersionTuple ( const VersionTuple Version,
RecordDataImpl Record 
)

Add a version tuple to the given record.

Definition at line 4491 of file ASTWriter.cpp.

References clang::VersionTuple::getMajor(), clang::VersionTuple::getMinor(), and clang::VersionTuple::getSubminor().

Referenced by clang::ASTRecordWriter::AddVersionTuple().

◆ ClearSwitchCaseIDs()

void ASTWriter::ClearSwitchCaseIDs ( )

Definition at line 2674 of file ASTWriterStmt.cpp.

References clang::serialization::STMT_NULL_PTR.

◆ EmitRecordWithPath()

void ASTWriter::EmitRecordWithPath ( unsigned  Abbrev,
RecordDataRef  Record,
StringRef  Path 
)

Emit the current record with the given path as a blob.

Definition at line 4484 of file ASTWriter.cpp.

◆ getAnonymousDeclarationNumber()

unsigned ASTWriter::getAnonymousDeclarationNumber ( const NamedDecl D)

◆ getChain()

ASTReader* clang::ASTWriter::getChain ( ) const
inline

Definition at line 699 of file ASTWriter.h.

References clang::diff::Delete.

◆ getCharacterLiteralAbbrev()

unsigned clang::ASTWriter::getCharacterLiteralAbbrev ( ) const
inline

Definition at line 694 of file ASTWriter.h.

◆ getDeclCXXMethodAbbrev()

unsigned clang::ASTWriter::getDeclCXXMethodAbbrev ( ) const
inline

Definition at line 691 of file ASTWriter.h.

◆ getDeclEnumAbbrev()

unsigned clang::ASTWriter::getDeclEnumAbbrev ( ) const
inline

Definition at line 689 of file ASTWriter.h.

◆ getDeclFieldAbbrev()

unsigned clang::ASTWriter::getDeclFieldAbbrev ( ) const
inline

Definition at line 688 of file ASTWriter.h.

◆ getDeclID()

DeclID ASTWriter::getDeclID ( const Decl D)

◆ getDeclObjCIvarAbbrev()

unsigned clang::ASTWriter::getDeclObjCIvarAbbrev ( ) const
inline

Definition at line 690 of file ASTWriter.h.

◆ getDeclParmVarAbbrev()

unsigned clang::ASTWriter::getDeclParmVarAbbrev ( ) const
inline

Definition at line 684 of file ASTWriter.h.

◆ getDeclRecordAbbrev()

unsigned clang::ASTWriter::getDeclRecordAbbrev ( ) const
inline

Definition at line 685 of file ASTWriter.h.

◆ GetDeclRef()

DeclID ASTWriter::GetDeclRef ( const Decl D)

Force a declaration to be emitted and get its ID.

Definition at line 5464 of file ASTWriter.cpp.

References clang::Decl::getGlobalID(), and clang::Decl::isFromASTFile().

Referenced by AddDeclRef().

◆ getDeclRefExprAbbrev()

unsigned clang::ASTWriter::getDeclRefExprAbbrev ( ) const
inline

Definition at line 693 of file ASTWriter.h.

◆ getDeclTypedefAbbrev()

unsigned clang::ASTWriter::getDeclTypedefAbbrev ( ) const
inline

Definition at line 686 of file ASTWriter.h.

◆ getDeclVarAbbrev()

unsigned clang::ASTWriter::getDeclVarAbbrev ( ) const
inline

Definition at line 687 of file ASTWriter.h.

◆ getExprImplicitCastAbbrev()

unsigned clang::ASTWriter::getExprImplicitCastAbbrev ( ) const
inline

Definition at line 696 of file ASTWriter.h.

◆ getFirstLocalDecl()

const Decl * ASTWriter::getFirstLocalDecl ( const Decl D)

Find the first local declaration of a given local redeclarable decl.

Definition at line 1634 of file ASTWriterDecl.cpp.

References clang::Decl::getCanonicalDecl(), and clang::Decl::getPreviousDecl().

Referenced by clang::ASTDeclWriter::RegisterTemplateSpecialization().

◆ getIdentifierRef()

IdentID ASTWriter::getIdentifierRef ( const IdentifierInfo II)

Get the unique number used to refer to the given identifier.

Definition at line 5297 of file ASTWriter.cpp.

Referenced by AddIdentifierRef(), and CreateSLocExpansionAbbrev().

◆ getIntegerLiteralAbbrev()

unsigned clang::ASTWriter::getIntegerLiteralAbbrev ( ) const
inline

Definition at line 695 of file ASTWriter.h.

◆ getLangOpts()

const LangOptions & ASTWriter::getLangOpts ( ) const

Definition at line 4542 of file ASTWriter.cpp.

References clang::ASTContext::getLangOpts().

Referenced by getDeclForLocalLookup().

◆ getLocalOrImportedSubmoduleID()

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 2731 of file ASTWriter.cpp.

References clang::Module::getTopLevelModule().

Referenced by CreateSLocExpansionAbbrev().

◆ getMacroDirectivesOffset()

uint64_t ASTWriter::getMacroDirectivesOffset ( const IdentifierInfo Name)

Definition at line 5331 of file ASTWriter.cpp.

Referenced by getDeclForLocalLookup().

◆ getMacroID()

MacroID ASTWriter::getMacroID ( MacroInfo MI)

Determine the ID of an already-emitted macro.

Definition at line 5323 of file ASTWriter.cpp.

References clang::MacroInfo::isBuiltinMacro().

◆ getMacroRef()

MacroID ASTWriter::getMacroRef ( MacroInfo MI,
const IdentifierInfo Name 
)

Get the unique number used to refer to the given macro.

Definition at line 5307 of file ASTWriter.cpp.

◆ GetOrCreateTypeID()

TypeID ASTWriter::GetOrCreateTypeID ( QualType  T)

Force a type to be emitted and get its ID.

Definition at line 5424 of file ASTWriter.cpp.

References clang::QualType::getLocalFastQualifiers(), clang::QualType::isNull(), clang::serialization::MakeTypeID(), and clang::T.

Referenced by AddTypeRef().

◆ getSelectorRef()

SelectorID ASTWriter::getSelectorRef ( Selector  Sel)

Get the unique number used to refer to the given selector.

Definition at line 5339 of file ASTWriter.cpp.

References clang::Selector::getAsOpaquePtr().

◆ getSwitchCaseID()

unsigned ASTWriter::getSwitchCaseID ( SwitchCase S)

Retrieve the ID for the given switch-case statement.

Definition at line 2668 of file ASTWriterStmt.cpp.

◆ getTimestampForOutput()

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 4547 of file ASTWriter.cpp.

◆ getTypeExtQualAbbrev()

unsigned clang::ASTWriter::getTypeExtQualAbbrev ( ) const
inline

Definition at line 676 of file ASTWriter.h.

◆ getTypeFunctionProtoAbbrev()

unsigned clang::ASTWriter::getTypeFunctionProtoAbbrev ( ) const
inline

Definition at line 680 of file ASTWriter.h.

◆ getTypeID()

TypeID ASTWriter::getTypeID ( QualType  T) const

Determine the type ID of an already-emitted type.

Definition at line 5447 of file ASTWriter.cpp.

References clang::QualType::getLocalFastQualifiers(), clang::QualType::isNull(), and clang::serialization::MakeTypeID().

◆ hasChain()

bool clang::ASTWriter::hasChain ( ) const
inline

Definition at line 698 of file ASTWriter.h.

◆ IsLocalDecl()

bool clang::ASTWriter::IsLocalDecl ( const Decl D)
inline

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 618 of file ASTWriter.h.

References clang::Decl::isFromASTFile().

Referenced by isImportedDeclContext().

◆ PreparePathForOutput()

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 4460 of file ASTWriter.cpp.

References adjustFilenameForRelocatableAST(), cleanPathForOutput(), clang::SourceManager::getFileManager(), and clang::ASTContext::getSourceManager().

◆ RecordSwitchCaseID()

unsigned ASTWriter::RecordSwitchCaseID ( SwitchCase S)

Record an ID for the given switch-case statement.

Definition at line 2660 of file ASTWriterStmt.cpp.

◆ SetIdentifierOffset()

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 4506 of file ASTWriter.cpp.

Referenced by getDeclForLocalLookup().

◆ SetSelectorOffset()

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 4516 of file ASTWriter.cpp.

◆ WriteAST()

ASTFileSignature ASTWriter::WriteAST ( Sema SemaRef,
const std::string &  OutputFile,
Module WritingModule,
StringRef  isysroot,
bool  hasErrors = false 
)

Write a precompiled header for the given semantic analysis.

Parameters
SemaRefa reference to the semantic analysis object that processed the AST to be written into the precompiled header.
WritingModuleThe module that we are writing. If null, we are writing a precompiled header.
isysrootif 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.
Returns
the module signature, which eventually will be a hash of the module but currently is merely a random 32-bit number.

Definition at line 4551 of file ASTWriter.cpp.

References clang::MemoryBufferCache::addBuffer(), clang::Sema::Context, clang::ASTContext::getLangOpts(), and clang::Sema::PP.

Referenced by clang::PCHGenerator::HandleTranslationUnit(), and serializeUnit().

Friends And Related Function Documentation

◆ ASTDeclWriter

friend class ASTDeclWriter
friend

Definition at line 107 of file ASTWriter.h.

◆ ASTRecordWriter

friend class ASTRecordWriter
friend

Definition at line 108 of file ASTWriter.h.

◆ ASTStmtWriter

friend class ASTStmtWriter
friend

Definition at line 109 of file ASTWriter.h.

◆ ASTTypeWriter

friend class ASTTypeWriter
friend

Definition at line 110 of file ASTWriter.h.


The documentation for this class was generated from the following files: