зеркало из https://github.com/microsoft/clang-1.git
Improvements to abbreviations for PCH which add support for EnumDecl, ObjCIvarDecl, TypedefDecl, VarDecl and FieldDecl and improve support for ParmVarDecl.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132604 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
352697a87b
Коммит
953c564288
|
@ -338,7 +338,7 @@ private:
|
|||
void WriteFPPragmaOptions(const FPOptions &Opts);
|
||||
void WriteOpenCLExtensions(Sema &SemaRef);
|
||||
|
||||
unsigned ParmVarDeclAbbrev;
|
||||
unsigned DeclParmVarAbbrev;
|
||||
unsigned DeclContextLexicalAbbrev;
|
||||
unsigned DeclContextVisibleLookupAbbrev;
|
||||
unsigned UpdateVisibleAbbrev;
|
||||
|
@ -346,7 +346,11 @@ private:
|
|||
unsigned CharacterLiteralAbbrev;
|
||||
unsigned DeclRecordAbbrev;
|
||||
unsigned IntegerLiteralAbbrev;
|
||||
unsigned EnumConstantDeclAbbrev;
|
||||
unsigned DeclTypedefAbbrev;
|
||||
unsigned DeclVarAbbrev;
|
||||
unsigned DeclFieldAbbrev;
|
||||
unsigned DeclEnumAbbrev;
|
||||
unsigned DeclObjCIvarAbbrev;
|
||||
|
||||
void WriteDeclsBlockAbbrevs();
|
||||
void WriteDecl(ASTContext &Context, Decl *D);
|
||||
|
@ -574,13 +578,17 @@ public:
|
|||
/// \brief Retrieve the ID for the given opaque value expression.
|
||||
unsigned getOpaqueValueID(OpaqueValueExpr *e);
|
||||
|
||||
unsigned getParmVarDeclAbbrev() const { return ParmVarDeclAbbrev; }
|
||||
unsigned getDeclParmVarAbbrev() const { return DeclParmVarAbbrev; }
|
||||
unsigned getDeclRefExprAbbrev() const { return DeclRefExprAbbrev; }
|
||||
unsigned getCharacterLiteralAbbrev() const { return CharacterLiteralAbbrev; }
|
||||
unsigned getDeclRecordAbbrev() const { return DeclRecordAbbrev; }
|
||||
unsigned getIntegerLiteralAbbrev() const { return IntegerLiteralAbbrev; }
|
||||
unsigned getEnumConstantDeclAbbrev() const { return EnumConstantDeclAbbrev; }
|
||||
|
||||
unsigned getDeclTypedefAbbrev() const { return DeclTypedefAbbrev; }
|
||||
unsigned getDeclVarAbbrev() const { return DeclVarAbbrev; }
|
||||
unsigned getDeclFieldAbbrev() const { return DeclFieldAbbrev; }
|
||||
unsigned getDeclEnumAbbrev() const { return DeclEnumAbbrev; }
|
||||
unsigned getDeclObjCIvarAbbrev() const { return DeclObjCIvarAbbrev; }
|
||||
|
||||
bool hasChain() const { return Chain; }
|
||||
|
||||
// ASTDeserializationListener implementation
|
||||
|
|
|
@ -174,6 +174,18 @@ uint64_t ASTDeclReader::GetCurrentCursorOffset() {
|
|||
void ASTDeclReader::Visit(Decl *D) {
|
||||
DeclVisitor<ASTDeclReader, void>::Visit(D);
|
||||
|
||||
if (DeclaratorDecl *DD = dyn_cast<DeclaratorDecl>(D)) {
|
||||
if (DD->DeclInfo) {
|
||||
DeclaratorDecl::ExtInfo *Info =
|
||||
DD->DeclInfo.get<DeclaratorDecl::ExtInfo *>();
|
||||
Info->TInfo =
|
||||
GetTypeSourceInfo(Record, Idx);
|
||||
}
|
||||
else {
|
||||
DD->DeclInfo = GetTypeSourceInfo(Record, Idx);
|
||||
}
|
||||
}
|
||||
|
||||
if (TypeDecl *TD = dyn_cast<TypeDecl>(D)) {
|
||||
// if we have a fully initialized TypeDecl, we can safely read its type now.
|
||||
TD->setTypeForDecl(Reader.GetType(TypeIDForTypeDecl).getTypePtrOrNull());
|
||||
|
@ -308,10 +320,8 @@ void ASTDeclReader::VisitDeclaratorDecl(DeclaratorDecl *DD) {
|
|||
DeclaratorDecl::ExtInfo *Info
|
||||
= new (*Reader.getContext()) DeclaratorDecl::ExtInfo();
|
||||
ReadQualifierInfo(*Info, Record, Idx);
|
||||
Info->TInfo = GetTypeSourceInfo(Record, Idx);
|
||||
DD->DeclInfo = Info;
|
||||
} else
|
||||
DD->DeclInfo = GetTypeSourceInfo(Record, Idx);
|
||||
}
|
||||
}
|
||||
|
||||
void ASTDeclReader::VisitFunctionDecl(FunctionDecl *FD) {
|
||||
|
|
|
@ -2703,11 +2703,13 @@ ASTWriter::ASTWriter(llvm::BitstreamWriter &Stream)
|
|||
NumStatements(0), NumMacros(0), NumLexicalDeclContexts(0),
|
||||
NumVisibleDeclContexts(0),
|
||||
FirstCXXBaseSpecifiersID(1), NextCXXBaseSpecifiersID(1),
|
||||
ParmVarDeclAbbrev(0), DeclContextLexicalAbbrev(0),
|
||||
DeclParmVarAbbrev(0), DeclContextLexicalAbbrev(0),
|
||||
DeclContextVisibleLookupAbbrev(0), UpdateVisibleAbbrev(0),
|
||||
DeclRefExprAbbrev(0), CharacterLiteralAbbrev(0),
|
||||
DeclRecordAbbrev(0), IntegerLiteralAbbrev(0),
|
||||
EnumConstantDeclAbbrev(0)
|
||||
DeclTypedefAbbrev(0),
|
||||
DeclVarAbbrev(0), DeclFieldAbbrev(0),
|
||||
DeclEnumAbbrev(0), DeclObjCIvarAbbrev(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -124,6 +124,13 @@ namespace clang {
|
|||
void ASTDeclWriter::Visit(Decl *D) {
|
||||
DeclVisitor<ASTDeclWriter>::Visit(D);
|
||||
|
||||
// Source locations require array (variable-length) abbreviations. The
|
||||
// abbreviation infrastructure requires that arrays are encoded last, so
|
||||
// we handle it here in the case of those classes derived from DeclaratorDecl
|
||||
if (DeclaratorDecl *DD = dyn_cast<DeclaratorDecl>(D)){
|
||||
Writer.AddTypeSourceInfo(DD->getTypeSourceInfo(), Record);
|
||||
}
|
||||
|
||||
// Handle FunctionDecl's body here and write it after all other Stmts/Exprs
|
||||
// have been written. We want it last because we will not read it back when
|
||||
// retrieving it from the AST, we'll just lazily set the offset.
|
||||
|
@ -169,6 +176,18 @@ void ASTDeclWriter::VisitTypeDecl(TypeDecl *D) {
|
|||
void ASTDeclWriter::VisitTypedefDecl(TypedefDecl *D) {
|
||||
VisitTypeDecl(D);
|
||||
Writer.AddTypeSourceInfo(D->getTypeSourceInfo(), Record);
|
||||
|
||||
if (!D->hasAttrs() &&
|
||||
!D->isImplicit() &&
|
||||
!D->isUsed(false) &&
|
||||
D->getPCHLevel() == 0 &&
|
||||
D->RedeclLink.getNext() == D &&
|
||||
!D->isInvalidDecl() &&
|
||||
!D->isReferenced() &&
|
||||
D->getAccess() == AS_none &&
|
||||
D->getDeclName().getNameKind() == DeclarationName::Identifier)
|
||||
AbbrevToUse = Writer.getDeclTypedefAbbrev();
|
||||
|
||||
Code = serialization::DECL_TYPEDEF;
|
||||
}
|
||||
|
||||
|
@ -205,6 +224,21 @@ void ASTDeclWriter::VisitEnumDecl(EnumDecl *D) {
|
|||
Record.push_back(D->isScopedUsingClassTag());
|
||||
Record.push_back(D->isFixed());
|
||||
Writer.AddDeclRef(D->getInstantiatedFromMemberEnum(), Record);
|
||||
|
||||
if (!D->hasAttrs() &&
|
||||
!D->isImplicit() &&
|
||||
!D->isUsed(false) &&
|
||||
D->getPCHLevel() == 0 &&
|
||||
!D->hasExtInfo() &&
|
||||
D->RedeclLink.getNext() == D &&
|
||||
!D->isInvalidDecl() &&
|
||||
!D->isReferenced() &&
|
||||
D->getAccess() == AS_none &&
|
||||
!CXXRecordDecl::classofKind(D->getKind()) &&
|
||||
!D->getIntegerTypeSourceInfo() &&
|
||||
D->getDeclName().getNameKind() == DeclarationName::Identifier)
|
||||
AbbrevToUse = Writer.getDeclEnumAbbrev();
|
||||
|
||||
Code = serialization::DECL_ENUM;
|
||||
}
|
||||
|
||||
|
@ -225,7 +259,6 @@ void ASTDeclWriter::VisitRecordDecl(RecordDecl *D) {
|
|||
D->getAccess() == AS_none &&
|
||||
!CXXRecordDecl::classofKind(D->getKind()) &&
|
||||
D->getDeclName().getNameKind() == DeclarationName::Identifier)
|
||||
|
||||
AbbrevToUse = Writer.getDeclRecordAbbrev();
|
||||
|
||||
Code = serialization::DECL_RECORD;
|
||||
|
@ -243,19 +276,6 @@ void ASTDeclWriter::VisitEnumConstantDecl(EnumConstantDecl *D) {
|
|||
Writer.AddStmt(D->getInitExpr());
|
||||
Writer.AddAPSInt(D->getInitVal(), Record);
|
||||
|
||||
if (!D->getInitExpr() &&
|
||||
!D->isInvalidDecl() &&
|
||||
!D->hasAttrs() &&
|
||||
!D->isImplicit() &&
|
||||
!D->isUsed(false) &&
|
||||
!D->isReferenced() &&
|
||||
D->getAccess() == AS_none &&
|
||||
D->getPCHLevel() == 0 &&
|
||||
D->getDeclName().getNameKind() == DeclarationName::Identifier &&
|
||||
D->getInitVal().getBitWidth() == 32
|
||||
)
|
||||
AbbrevToUse = Writer.getEnumConstantDeclAbbrev();
|
||||
|
||||
Code = serialization::DECL_ENUM_CONSTANT;
|
||||
}
|
||||
|
||||
|
@ -265,7 +285,6 @@ void ASTDeclWriter::VisitDeclaratorDecl(DeclaratorDecl *D) {
|
|||
Record.push_back(D->hasExtInfo());
|
||||
if (D->hasExtInfo())
|
||||
Writer.AddQualifierInfo(*D->getExtInfo(), Record);
|
||||
Writer.AddTypeSourceInfo(D->getTypeSourceInfo(), Record);
|
||||
}
|
||||
|
||||
void ASTDeclWriter::VisitFunctionDecl(FunctionDecl *D) {
|
||||
|
@ -445,6 +464,18 @@ void ASTDeclWriter::VisitObjCIvarDecl(ObjCIvarDecl *D) {
|
|||
// FIXME: stable encoding for @public/@private/@protected/@package
|
||||
Record.push_back(D->getAccessControl());
|
||||
Record.push_back(D->getSynthesize());
|
||||
|
||||
if (!D->hasAttrs() &&
|
||||
!D->isImplicit() &&
|
||||
!D->isUsed(false) &&
|
||||
!D->isInvalidDecl() &&
|
||||
!D->isReferenced() &&
|
||||
D->getPCHLevel() == 0 &&
|
||||
!D->getBitWidth() &&
|
||||
!D->hasExtInfo() &&
|
||||
D->getDeclName())
|
||||
AbbrevToUse = Writer.getDeclObjCIvarAbbrev();
|
||||
|
||||
Code = serialization::DECL_OBJC_IVAR;
|
||||
}
|
||||
|
||||
|
@ -572,6 +603,20 @@ void ASTDeclWriter::VisitFieldDecl(FieldDecl *D) {
|
|||
Writer.AddStmt(D->getBitWidth());
|
||||
if (!D->getDeclName())
|
||||
Writer.AddDeclRef(Context.getInstantiatedFromUnnamedFieldDecl(D), Record);
|
||||
|
||||
if (!D->hasAttrs() &&
|
||||
!D->isImplicit() &&
|
||||
!D->isUsed(false) &&
|
||||
!D->isInvalidDecl() &&
|
||||
!D->isReferenced() &&
|
||||
D->getPCHLevel() == 0 &&
|
||||
!D->getBitWidth() &&
|
||||
!D->hasExtInfo() &&
|
||||
!ObjCIvarDecl::classofKind(D->getKind()) &&
|
||||
!ObjCAtDefsFieldDecl::classofKind(D->getKind()) &&
|
||||
D->getDeclName())
|
||||
AbbrevToUse = Writer.getDeclFieldAbbrev();
|
||||
|
||||
Code = serialization::DECL_FIELD;
|
||||
}
|
||||
|
||||
|
@ -609,6 +654,22 @@ void ASTDeclWriter::VisitVarDecl(VarDecl *D) {
|
|||
Writer.AddSourceLocation(SpecInfo->getPointOfInstantiation(), Record);
|
||||
}
|
||||
|
||||
if (!D->hasAttrs() &&
|
||||
!D->isImplicit() &&
|
||||
!D->isUsed(false) &&
|
||||
!D->isInvalidDecl() &&
|
||||
!D->isReferenced() &&
|
||||
D->getAccess() == AS_none &&
|
||||
D->getPCHLevel() == 0 &&
|
||||
D->getDeclName().getNameKind() == DeclarationName::Identifier &&
|
||||
!D->hasExtInfo() &&
|
||||
D->RedeclLink.getNext() == D &&
|
||||
!D->hasCXXDirectInitializer() &&
|
||||
D->getInit() == 0 &&
|
||||
!ParmVarDecl::classofKind(D->getKind()) &&
|
||||
!SpecInfo)
|
||||
AbbrevToUse = Writer.getDeclVarAbbrev();
|
||||
|
||||
Code = serialization::DECL_VAR;
|
||||
}
|
||||
|
||||
|
@ -633,8 +694,8 @@ void ASTDeclWriter::VisitParmVarDecl(ParmVarDecl *D) {
|
|||
// If the assumptions about the DECL_PARM_VAR abbrev are true, use it. Here
|
||||
// we dynamically check for the properties that we optimize for, but don't
|
||||
// know are true of all PARM_VAR_DECLs.
|
||||
if (!D->getTypeSourceInfo() &&
|
||||
!D->hasAttrs() &&
|
||||
if (!D->hasAttrs() &&
|
||||
!D->hasExtInfo() &&
|
||||
!D->isImplicit() &&
|
||||
!D->isUsed(false) &&
|
||||
D->getAccess() == AS_none &&
|
||||
|
@ -647,7 +708,7 @@ void ASTDeclWriter::VisitParmVarDecl(ParmVarDecl *D) {
|
|||
!D->hasInheritedDefaultArg() &&
|
||||
D->getInit() == 0 &&
|
||||
!D->hasUninstantiatedDefaultArg()) // No default expr.
|
||||
AbbrevToUse = Writer.getParmVarDeclAbbrev();
|
||||
AbbrevToUse = Writer.getDeclParmVarAbbrev();
|
||||
|
||||
// Check things we know are true of *every* PARM_VAR_DECL, which is more than
|
||||
// just us assuming it.
|
||||
|
@ -1181,9 +1242,74 @@ void ASTWriter::WriteDeclsBlockAbbrevs() {
|
|||
|
||||
BitCodeAbbrev *Abv;
|
||||
|
||||
// Abbreviation for DECL_ENUM_CONSTANT
|
||||
Abv = new BitCodeAbbrev();
|
||||
Abv->Add(BitCodeAbbrevOp(serialization::DECL_ENUM_CONSTANT));
|
||||
// Abbreviation for DECL_FIELD
|
||||
Abv = new BitCodeAbbrev();
|
||||
Abv->Add(BitCodeAbbrevOp(serialization::DECL_FIELD));
|
||||
// Decl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // DeclContext
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // LexicalDeclContext
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Location
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // isInvalidDecl (!?)
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // HasAttrs
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // isImplicit
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // isUsed
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // isReferenced
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 2)); // AccessSpecifier
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // PCH level
|
||||
// NamedDecl
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // NameKind = Identifier
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Name
|
||||
// ValueDecl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Type
|
||||
// DeclaratorDecl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // InnerStartLoc
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // hasExtInfo
|
||||
// FieldDecl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // isMutable
|
||||
Abv->Add(BitCodeAbbrevOp(0)); //getBitWidth
|
||||
// Type Source Info
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // TypeLoc
|
||||
DeclFieldAbbrev = Stream.EmitAbbrev(Abv);
|
||||
|
||||
// Abbreviation for DECL_OBJC_IVAR
|
||||
Abv = new BitCodeAbbrev();
|
||||
Abv->Add(BitCodeAbbrevOp(serialization::DECL_OBJC_IVAR));
|
||||
// Decl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // DeclContext
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // LexicalDeclContext
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Location
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // isInvalidDecl (!?)
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // HasAttrs
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // isImplicit
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // isUsed
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // isReferenced
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 2)); // AccessSpecifier
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // PCH level
|
||||
// NamedDecl
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // NameKind = Identifier
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Name
|
||||
// ValueDecl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Type
|
||||
// DeclaratorDecl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // InnerStartLoc
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // hasExtInfo
|
||||
// FieldDecl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // isMutable
|
||||
Abv->Add(BitCodeAbbrevOp(0)); //getBitWidth
|
||||
// ObjC Ivar
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // getAccessControl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // getSynthesize
|
||||
// Type Source Info
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // TypeLoc
|
||||
DeclObjCIvarAbbrev = Stream.EmitAbbrev(Abv);
|
||||
|
||||
// Abbreviation for DECL_ENUM
|
||||
Abv = new BitCodeAbbrev();
|
||||
Abv->Add(BitCodeAbbrevOp(serialization::DECL_ENUM));
|
||||
// Decl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // DeclContext
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // LexicalDeclContext
|
||||
|
@ -1198,14 +1324,33 @@ void ASTWriter::WriteDeclsBlockAbbrevs() {
|
|||
// NamedDecl
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // NameKind = Identifier
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Name
|
||||
// ValueDecl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Type
|
||||
// EnumConstantDecl
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // getInitExpr
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //isUnsigned
|
||||
Abv->Add(BitCodeAbbrevOp(32)); // Bit Width
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Value
|
||||
EnumConstantDeclAbbrev = Stream.EmitAbbrev(Abv);
|
||||
// TypeDecl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Source Location
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Type Ref
|
||||
// Redeclarable
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // No redeclaration
|
||||
// TagDecl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // IdentifierNamespace
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // getTagKind
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // isDefinition
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // EmbeddedInDeclarator
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // SourceLocation
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // hasExtInfo
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // TypedefNameAnonDecl
|
||||
// EnumDecl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // AddTypeRef
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // IntegerType
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // getPromotionType
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // getNumPositiveBits
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // getNumNegativeBits
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // isScoped
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // isScopedUsingClassTag
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // isFixed
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // InstantiatedMembEnum
|
||||
// DC
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // LexicalOffset
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // VisibleOffset
|
||||
DeclEnumAbbrev = Stream.EmitAbbrev(Abv);
|
||||
|
||||
// Abbreviation for DECL_RECORD
|
||||
Abv = new BitCodeAbbrev();
|
||||
|
@ -1268,7 +1413,6 @@ void ASTWriter::WriteDeclsBlockAbbrevs() {
|
|||
// DeclaratorDecl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // InnerStartLoc
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // hasExtInfo
|
||||
Abv->Add(BitCodeAbbrevOp(serialization::PREDEF_TYPE_NULL_ID)); // InfoType
|
||||
// VarDecl
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // No redeclaration
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // StorageClass
|
||||
|
@ -1288,9 +1432,76 @@ void ASTWriter::WriteDeclsBlockAbbrevs() {
|
|||
Abv->Add(BitCodeAbbrevOp(0)); // KNRPromoted
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // HasInheritedDefaultArg
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // HasUninstantiatedDefaultArg
|
||||
ParmVarDeclAbbrev = Stream.EmitAbbrev(Abv);
|
||||
// Type Source Info
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // TypeLoc
|
||||
DeclParmVarAbbrev = Stream.EmitAbbrev(Abv);
|
||||
|
||||
// Abbreviation for EXPR_DECL_REF
|
||||
Abv = new BitCodeAbbrev();
|
||||
Abv->Add(BitCodeAbbrevOp(serialization::DECL_TYPEDEF));
|
||||
// Decl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // DeclContext
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // LexicalDeclContext
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Location
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // isInvalidDecl (!?)
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // HasAttrs
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // isImplicit
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // isUsed
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // isReferenced
|
||||
Abv->Add(BitCodeAbbrevOp(AS_none)); // C++ AccessSpecifier
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // PCH level
|
||||
// NamedDecl
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // NameKind = Identifier
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Name
|
||||
// TypeDecl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Source Location
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Type Ref
|
||||
// TypedefDecl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // TypeLoc
|
||||
DeclTypedefAbbrev = Stream.EmitAbbrev(Abv);
|
||||
|
||||
Abv = new BitCodeAbbrev();
|
||||
Abv->Add(BitCodeAbbrevOp(serialization::DECL_VAR));
|
||||
// Decl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // DeclContext
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // LexicalDeclContext
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Location
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // isInvalidDecl (!?)
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // HasAttrs
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // isImplicit
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // isUsed
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // isReferenced
|
||||
Abv->Add(BitCodeAbbrevOp(AS_none)); // C++ AccessSpecifier
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // PCH level
|
||||
|
||||
// NamedDecl
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // NameKind = Identifier
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Name
|
||||
// ValueDecl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Type
|
||||
// DeclaratorDecl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // InnerStartLoc
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // hasExtInfo
|
||||
// VarDecl
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // No redeclaration
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // StorageClass
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // StorageClassAsWritten
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // isThreadSpecified
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // CXXDirectInitializer
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // isExceptionVariable
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // isNRVOVariable
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // isCXXForRangeDecl
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // HasInit
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // HasMemberSpecInfo
|
||||
// Type Source Info
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // TypeLoc
|
||||
DeclVarAbbrev = Stream.EmitAbbrev(Abv);
|
||||
|
||||
Abv = new BitCodeAbbrev();
|
||||
Abv->Add(BitCodeAbbrevOp(serialization::EXPR_DECL_REF));
|
||||
//Stmt
|
||||
|
|
Загрузка…
Ссылка в новой задаче