Lines Matching refs:D
49 void Visit(Decl *D);
51 void VisitDecl(Decl *D);
52 void VisitTranslationUnitDecl(TranslationUnitDecl *D);
53 void VisitNamedDecl(NamedDecl *D);
55 void VisitNamespaceDecl(NamespaceDecl *D);
56 void VisitUsingDirectiveDecl(UsingDirectiveDecl *D);
57 void VisitNamespaceAliasDecl(NamespaceAliasDecl *D);
58 void VisitTypeDecl(TypeDecl *D);
59 void VisitTypedefNameDecl(TypedefNameDecl *D);
60 void VisitTypedefDecl(TypedefDecl *D);
61 void VisitTypeAliasDecl(TypeAliasDecl *D);
62 void VisitUnresolvedUsingTypenameDecl(UnresolvedUsingTypenameDecl *D);
63 void VisitTagDecl(TagDecl *D);
64 void VisitEnumDecl(EnumDecl *D);
65 void VisitRecordDecl(RecordDecl *D);
66 void VisitCXXRecordDecl(CXXRecordDecl *D);
68 ClassTemplateSpecializationDecl *D);
70 ClassTemplatePartialSpecializationDecl *D);
72 ClassScopeFunctionSpecializationDecl *D);
73 void VisitTemplateTypeParmDecl(TemplateTypeParmDecl *D);
74 void VisitValueDecl(ValueDecl *D);
75 void VisitEnumConstantDecl(EnumConstantDecl *D);
76 void VisitUnresolvedUsingValueDecl(UnresolvedUsingValueDecl *D);
77 void VisitDeclaratorDecl(DeclaratorDecl *D);
78 void VisitFunctionDecl(FunctionDecl *D);
79 void VisitCXXMethodDecl(CXXMethodDecl *D);
80 void VisitCXXConstructorDecl(CXXConstructorDecl *D);
81 void VisitCXXDestructorDecl(CXXDestructorDecl *D);
82 void VisitCXXConversionDecl(CXXConversionDecl *D);
83 void VisitFieldDecl(FieldDecl *D);
84 void VisitIndirectFieldDecl(IndirectFieldDecl *D);
85 void VisitVarDecl(VarDecl *D);
86 void VisitImplicitParamDecl(ImplicitParamDecl *D);
87 void VisitParmVarDecl(ParmVarDecl *D);
88 void VisitNonTypeTemplateParmDecl(NonTypeTemplateParmDecl *D);
89 void VisitTemplateDecl(TemplateDecl *D);
90 void VisitRedeclarableTemplateDecl(RedeclarableTemplateDecl *D);
91 void VisitClassTemplateDecl(ClassTemplateDecl *D);
92 void VisitFunctionTemplateDecl(FunctionTemplateDecl *D);
93 void VisitTemplateTemplateParmDecl(TemplateTemplateParmDecl *D);
94 void VisitTypeAliasTemplateDecl(TypeAliasTemplateDecl *D);
95 void VisitUsingDecl(UsingDecl *D);
96 void VisitUsingShadowDecl(UsingShadowDecl *D);
97 void VisitLinkageSpecDecl(LinkageSpecDecl *D);
98 void VisitFileScopeAsmDecl(FileScopeAsmDecl *D);
99 void VisitImportDecl(ImportDecl *D);
100 void VisitAccessSpecDecl(AccessSpecDecl *D);
101 void VisitFriendDecl(FriendDecl *D);
102 void VisitFriendTemplateDecl(FriendTemplateDecl *D);
103 void VisitStaticAssertDecl(StaticAssertDecl *D);
104 void VisitBlockDecl(BlockDecl *D);
108 template <typename T> void VisitRedeclarable(Redeclarable<T> *D);
112 void VisitObjCMethodDecl(ObjCMethodDecl *D);
113 void VisitObjCContainerDecl(ObjCContainerDecl *D);
114 void VisitObjCInterfaceDecl(ObjCInterfaceDecl *D);
115 void VisitObjCIvarDecl(ObjCIvarDecl *D);
116 void VisitObjCProtocolDecl(ObjCProtocolDecl *D);
117 void VisitObjCAtDefsFieldDecl(ObjCAtDefsFieldDecl *D);
118 void VisitObjCCategoryDecl(ObjCCategoryDecl *D);
119 void VisitObjCImplDecl(ObjCImplDecl *D);
120 void VisitObjCCategoryImplDecl(ObjCCategoryImplDecl *D);
121 void VisitObjCImplementationDecl(ObjCImplementationDecl *D);
122 void VisitObjCCompatibleAliasDecl(ObjCCompatibleAliasDecl *D);
123 void VisitObjCPropertyDecl(ObjCPropertyDecl *D);
124 void VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D);
128 void ASTDeclWriter::Visit(Decl *D) { in Visit() argument
129 DeclVisitor<ASTDeclWriter>::Visit(D); in Visit()
134 if (DeclaratorDecl *DD = dyn_cast<DeclaratorDecl>(D)){ in Visit()
141 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { in Visit()
148 void ASTDeclWriter::VisitDecl(Decl *D) { in VisitDecl() argument
149 Writer.AddDeclRef(cast_or_null<Decl>(D->getDeclContext()), Record); in VisitDecl()
150 Writer.AddDeclRef(cast_or_null<Decl>(D->getLexicalDeclContext()), Record); in VisitDecl()
151 Record.push_back(D->isInvalidDecl()); in VisitDecl()
152 Record.push_back(D->hasAttrs()); in VisitDecl()
153 if (D->hasAttrs()) in VisitDecl()
154 Writer.WriteAttributes(D->getAttrs(), Record); in VisitDecl()
155 Record.push_back(D->isImplicit()); in VisitDecl()
156 Record.push_back(D->isUsed(false)); in VisitDecl()
157 Record.push_back(D->isReferenced()); in VisitDecl()
158 Record.push_back(D->isTopLevelDeclInObjCContainer()); in VisitDecl()
159 Record.push_back(D->getAccess()); in VisitDecl()
160 Record.push_back(D->isModulePrivate()); in VisitDecl()
161 Record.push_back(Writer.inferSubmoduleIDFromLocation(D->getLocation())); in VisitDecl()
164 void ASTDeclWriter::VisitTranslationUnitDecl(TranslationUnitDecl *D) { in VisitTranslationUnitDecl() argument
168 void ASTDeclWriter::VisitNamedDecl(NamedDecl *D) { in VisitNamedDecl() argument
169 VisitDecl(D); in VisitNamedDecl()
170 Writer.AddDeclarationName(D->getDeclName(), Record); in VisitNamedDecl()
173 void ASTDeclWriter::VisitTypeDecl(TypeDecl *D) { in VisitTypeDecl() argument
174 VisitNamedDecl(D); in VisitTypeDecl()
175 Writer.AddSourceLocation(D->getLocStart(), Record); in VisitTypeDecl()
176 Writer.AddTypeRef(QualType(D->getTypeForDecl(), 0), Record); in VisitTypeDecl()
179 void ASTDeclWriter::VisitTypedefNameDecl(TypedefNameDecl *D) { in VisitTypedefNameDecl() argument
180 VisitRedeclarable(D); in VisitTypedefNameDecl()
181 VisitTypeDecl(D); in VisitTypedefNameDecl()
182 Writer.AddTypeSourceInfo(D->getTypeSourceInfo(), Record); in VisitTypedefNameDecl()
185 void ASTDeclWriter::VisitTypedefDecl(TypedefDecl *D) { in VisitTypedefDecl() argument
186 VisitTypedefNameDecl(D); in VisitTypedefDecl()
187 if (!D->hasAttrs() && in VisitTypedefDecl()
188 !D->isImplicit() && in VisitTypedefDecl()
189 !D->isUsed(false) && in VisitTypedefDecl()
190 D->getFirstDeclaration() == D->getMostRecentDecl() && in VisitTypedefDecl()
191 !D->isInvalidDecl() && in VisitTypedefDecl()
192 !D->isReferenced() && in VisitTypedefDecl()
193 !D->isTopLevelDeclInObjCContainer() && in VisitTypedefDecl()
194 D->getAccess() == AS_none && in VisitTypedefDecl()
195 !D->isModulePrivate() && in VisitTypedefDecl()
196 D->getDeclName().getNameKind() == DeclarationName::Identifier) in VisitTypedefDecl()
202 void ASTDeclWriter::VisitTypeAliasDecl(TypeAliasDecl *D) { in VisitTypeAliasDecl() argument
203 VisitTypedefNameDecl(D); in VisitTypeAliasDecl()
207 void ASTDeclWriter::VisitTagDecl(TagDecl *D) { in VisitTagDecl() argument
208 VisitRedeclarable(D); in VisitTagDecl()
209 VisitTypeDecl(D); in VisitTagDecl()
210 Record.push_back(D->getIdentifierNamespace()); in VisitTagDecl()
211 Record.push_back((unsigned)D->getTagKind()); // FIXME: stable encoding in VisitTagDecl()
212 Record.push_back(D->isCompleteDefinition()); in VisitTagDecl()
213 Record.push_back(D->isEmbeddedInDeclarator()); in VisitTagDecl()
214 Record.push_back(D->isFreeStanding()); in VisitTagDecl()
215 Writer.AddSourceLocation(D->getRBraceLoc(), Record); in VisitTagDecl()
216 Record.push_back(D->hasExtInfo()); in VisitTagDecl()
217 if (D->hasExtInfo()) in VisitTagDecl()
218 Writer.AddQualifierInfo(*D->getExtInfo(), Record); in VisitTagDecl()
220 Writer.AddDeclRef(D->getTypedefNameForAnonDecl(), Record); in VisitTagDecl()
223 void ASTDeclWriter::VisitEnumDecl(EnumDecl *D) { in VisitEnumDecl() argument
224 VisitTagDecl(D); in VisitEnumDecl()
225 Writer.AddTypeSourceInfo(D->getIntegerTypeSourceInfo(), Record); in VisitEnumDecl()
226 if (!D->getIntegerTypeSourceInfo()) in VisitEnumDecl()
227 Writer.AddTypeRef(D->getIntegerType(), Record); in VisitEnumDecl()
228 Writer.AddTypeRef(D->getPromotionType(), Record); in VisitEnumDecl()
229 Record.push_back(D->getNumPositiveBits()); in VisitEnumDecl()
230 Record.push_back(D->getNumNegativeBits()); in VisitEnumDecl()
231 Record.push_back(D->isScoped()); in VisitEnumDecl()
232 Record.push_back(D->isScopedUsingClassTag()); in VisitEnumDecl()
233 Record.push_back(D->isFixed()); in VisitEnumDecl()
234 if (MemberSpecializationInfo *MemberInfo = D->getMemberSpecializationInfo()) { in VisitEnumDecl()
242 if (!D->hasAttrs() && in VisitEnumDecl()
243 !D->isImplicit() && in VisitEnumDecl()
244 !D->isUsed(false) && in VisitEnumDecl()
245 !D->hasExtInfo() && in VisitEnumDecl()
246 D->getFirstDeclaration() == D->getMostRecentDecl() && in VisitEnumDecl()
247 !D->isInvalidDecl() && in VisitEnumDecl()
248 !D->isReferenced() && in VisitEnumDecl()
249 !D->isTopLevelDeclInObjCContainer() && in VisitEnumDecl()
250 D->getAccess() == AS_none && in VisitEnumDecl()
251 !D->isModulePrivate() && in VisitEnumDecl()
252 !CXXRecordDecl::classofKind(D->getKind()) && in VisitEnumDecl()
253 !D->getIntegerTypeSourceInfo() && in VisitEnumDecl()
254 D->getDeclName().getNameKind() == DeclarationName::Identifier) in VisitEnumDecl()
260 void ASTDeclWriter::VisitRecordDecl(RecordDecl *D) { in VisitRecordDecl() argument
261 VisitTagDecl(D); in VisitRecordDecl()
262 Record.push_back(D->hasFlexibleArrayMember()); in VisitRecordDecl()
263 Record.push_back(D->isAnonymousStructOrUnion()); in VisitRecordDecl()
264 Record.push_back(D->hasObjectMember()); in VisitRecordDecl()
266 if (!D->hasAttrs() && in VisitRecordDecl()
267 !D->isImplicit() && in VisitRecordDecl()
268 !D->isUsed(false) && in VisitRecordDecl()
269 !D->hasExtInfo() && in VisitRecordDecl()
270 D->getFirstDeclaration() == D->getMostRecentDecl() && in VisitRecordDecl()
271 !D->isInvalidDecl() && in VisitRecordDecl()
272 !D->isReferenced() && in VisitRecordDecl()
273 !D->isTopLevelDeclInObjCContainer() && in VisitRecordDecl()
274 D->getAccess() == AS_none && in VisitRecordDecl()
275 !D->isModulePrivate() && in VisitRecordDecl()
276 !CXXRecordDecl::classofKind(D->getKind()) && in VisitRecordDecl()
277 D->getDeclName().getNameKind() == DeclarationName::Identifier) in VisitRecordDecl()
283 void ASTDeclWriter::VisitValueDecl(ValueDecl *D) { in VisitValueDecl() argument
284 VisitNamedDecl(D); in VisitValueDecl()
285 Writer.AddTypeRef(D->getType(), Record); in VisitValueDecl()
288 void ASTDeclWriter::VisitEnumConstantDecl(EnumConstantDecl *D) { in VisitEnumConstantDecl() argument
289 VisitValueDecl(D); in VisitEnumConstantDecl()
290 Record.push_back(D->getInitExpr()? 1 : 0); in VisitEnumConstantDecl()
291 if (D->getInitExpr()) in VisitEnumConstantDecl()
292 Writer.AddStmt(D->getInitExpr()); in VisitEnumConstantDecl()
293 Writer.AddAPSInt(D->getInitVal(), Record); in VisitEnumConstantDecl()
298 void ASTDeclWriter::VisitDeclaratorDecl(DeclaratorDecl *D) { in VisitDeclaratorDecl() argument
299 VisitValueDecl(D); in VisitDeclaratorDecl()
300 Writer.AddSourceLocation(D->getInnerLocStart(), Record); in VisitDeclaratorDecl()
301 Record.push_back(D->hasExtInfo()); in VisitDeclaratorDecl()
302 if (D->hasExtInfo()) in VisitDeclaratorDecl()
303 Writer.AddQualifierInfo(*D->getExtInfo(), Record); in VisitDeclaratorDecl()
306 void ASTDeclWriter::VisitFunctionDecl(FunctionDecl *D) { in VisitFunctionDecl() argument
307 VisitRedeclarable(D); in VisitFunctionDecl()
308 VisitDeclaratorDecl(D); in VisitFunctionDecl()
310 Writer.AddDeclarationNameLoc(D->DNLoc, D->getDeclName(), Record); in VisitFunctionDecl()
311 Record.push_back(D->getIdentifierNamespace()); in VisitFunctionDecl()
316 Record.push_back(D->getStorageClass()); // FIXME: stable encoding in VisitFunctionDecl()
317 Record.push_back(D->getStorageClassAsWritten()); in VisitFunctionDecl()
318 Record.push_back(D->IsInline); in VisitFunctionDecl()
319 Record.push_back(D->isInlineSpecified()); in VisitFunctionDecl()
320 Record.push_back(D->isVirtualAsWritten()); in VisitFunctionDecl()
321 Record.push_back(D->isPure()); in VisitFunctionDecl()
322 Record.push_back(D->hasInheritedPrototype()); in VisitFunctionDecl()
323 Record.push_back(D->hasWrittenPrototype()); in VisitFunctionDecl()
324 Record.push_back(D->isDeletedAsWritten()); in VisitFunctionDecl()
325 Record.push_back(D->isTrivial()); in VisitFunctionDecl()
326 Record.push_back(D->isDefaulted()); in VisitFunctionDecl()
327 Record.push_back(D->isExplicitlyDefaulted()); in VisitFunctionDecl()
328 Record.push_back(D->hasImplicitReturnZero()); in VisitFunctionDecl()
329 Record.push_back(D->isConstexpr()); in VisitFunctionDecl()
330 Writer.AddSourceLocation(D->getLocEnd(), Record); in VisitFunctionDecl()
332 Record.push_back(D->getTemplatedKind()); in VisitFunctionDecl()
333 switch (D->getTemplatedKind()) { in VisitFunctionDecl()
337 Writer.AddDeclRef(D->getDescribedFunctionTemplate(), Record); in VisitFunctionDecl()
340 MemberSpecializationInfo *MemberInfo = D->getMemberSpecializationInfo(); in VisitFunctionDecl()
348 FTSInfo = D->getTemplateSpecializationInfo(); in VisitFunctionDecl()
371 if (D->isCanonicalDecl()) { in VisitFunctionDecl()
380 DFTSInfo = D->getDependentSpecializationInfo(); in VisitFunctionDecl()
397 Record.push_back(D->param_size()); in VisitFunctionDecl()
398 for (FunctionDecl::param_iterator P = D->param_begin(), PEnd = D->param_end(); in VisitFunctionDecl()
404 void ASTDeclWriter::VisitObjCMethodDecl(ObjCMethodDecl *D) { in VisitObjCMethodDecl() argument
405 VisitNamedDecl(D); in VisitObjCMethodDecl()
408 bool HasBodyStuff = D->getBody() != 0 || in VisitObjCMethodDecl()
409 D->getSelfDecl() != 0 || D->getCmdDecl() != 0; in VisitObjCMethodDecl()
412 Writer.AddStmt(D->getBody()); in VisitObjCMethodDecl()
413 Writer.AddDeclRef(D->getSelfDecl(), Record); in VisitObjCMethodDecl()
414 Writer.AddDeclRef(D->getCmdDecl(), Record); in VisitObjCMethodDecl()
416 Record.push_back(D->isInstanceMethod()); in VisitObjCMethodDecl()
417 Record.push_back(D->isVariadic()); in VisitObjCMethodDecl()
418 Record.push_back(D->isSynthesized()); in VisitObjCMethodDecl()
419 Record.push_back(D->isDefined()); in VisitObjCMethodDecl()
421 Record.push_back(D->IsRedeclaration); in VisitObjCMethodDecl()
422 Record.push_back(D->HasRedeclaration); in VisitObjCMethodDecl()
423 if (D->HasRedeclaration) { in VisitObjCMethodDecl()
424 assert(Context.getObjCMethodRedeclaration(D)); in VisitObjCMethodDecl()
425 Writer.AddDeclRef(Context.getObjCMethodRedeclaration(D), Record); in VisitObjCMethodDecl()
429 Record.push_back(D->getImplementationControl()); in VisitObjCMethodDecl()
431 Record.push_back(D->getObjCDeclQualifier()); in VisitObjCMethodDecl()
432 Record.push_back(D->hasRelatedResultType()); in VisitObjCMethodDecl()
433 Writer.AddTypeRef(D->getResultType(), Record); in VisitObjCMethodDecl()
434 Writer.AddTypeSourceInfo(D->getResultTypeSourceInfo(), Record); in VisitObjCMethodDecl()
435 Writer.AddSourceLocation(D->getLocEnd(), Record); in VisitObjCMethodDecl()
436 Record.push_back(D->param_size()); in VisitObjCMethodDecl()
437 for (ObjCMethodDecl::param_iterator P = D->param_begin(), in VisitObjCMethodDecl()
438 PEnd = D->param_end(); P != PEnd; ++P) in VisitObjCMethodDecl()
441 Record.push_back(D->SelLocsKind); in VisitObjCMethodDecl()
442 unsigned NumStoredSelLocs = D->getNumStoredSelLocs(); in VisitObjCMethodDecl()
443 SourceLocation *SelLocs = D->getStoredSelLocs(); in VisitObjCMethodDecl()
451 void ASTDeclWriter::VisitObjCContainerDecl(ObjCContainerDecl *D) { in VisitObjCContainerDecl() argument
452 VisitNamedDecl(D); in VisitObjCContainerDecl()
453 Writer.AddSourceLocation(D->getAtStartLoc(), Record); in VisitObjCContainerDecl()
454 Writer.AddSourceRange(D->getAtEndRange(), Record); in VisitObjCContainerDecl()
458 void ASTDeclWriter::VisitObjCInterfaceDecl(ObjCInterfaceDecl *D) { in VisitObjCInterfaceDecl() argument
459 VisitRedeclarable(D); in VisitObjCInterfaceDecl()
460 VisitObjCContainerDecl(D); in VisitObjCInterfaceDecl()
461 Writer.AddTypeRef(QualType(D->getTypeForDecl(), 0), Record); in VisitObjCInterfaceDecl()
463 Record.push_back(D->isThisDeclarationADefinition()); in VisitObjCInterfaceDecl()
464 if (D->isThisDeclarationADefinition()) { in VisitObjCInterfaceDecl()
466 ObjCInterfaceDecl::DefinitionData &Data = D->data(); in VisitObjCInterfaceDecl()
468 Writer.AddDeclRef(D->getSuperClass(), Record); in VisitObjCInterfaceDecl()
469 Writer.AddSourceLocation(D->getSuperClassLoc(), Record); in VisitObjCInterfaceDecl()
470 Writer.AddSourceLocation(D->getEndOfDefinitionLoc(), Record); in VisitObjCInterfaceDecl()
474 for (ObjCInterfaceDecl::protocol_iterator P = D->protocol_begin(), in VisitObjCInterfaceDecl()
475 PEnd = D->protocol_end(); in VisitObjCInterfaceDecl()
478 for (ObjCInterfaceDecl::protocol_loc_iterator PL = D->protocol_loc_begin(), in VisitObjCInterfaceDecl()
479 PLEnd = D->protocol_loc_end(); in VisitObjCInterfaceDecl()
491 if (ObjCCategoryDecl *Cat = D->getCategoryList()) { in VisitObjCInterfaceDecl()
493 Writer.ObjCClassesWithCategories.insert(D); in VisitObjCInterfaceDecl()
504 void ASTDeclWriter::VisitObjCIvarDecl(ObjCIvarDecl *D) { in VisitObjCIvarDecl() argument
505 VisitFieldDecl(D); in VisitObjCIvarDecl()
507 Record.push_back(D->getAccessControl()); in VisitObjCIvarDecl()
508 Record.push_back(D->getSynthesize()); in VisitObjCIvarDecl()
510 if (!D->hasAttrs() && in VisitObjCIvarDecl()
511 !D->isImplicit() && in VisitObjCIvarDecl()
512 !D->isUsed(false) && in VisitObjCIvarDecl()
513 !D->isInvalidDecl() && in VisitObjCIvarDecl()
514 !D->isReferenced() && in VisitObjCIvarDecl()
515 !D->isModulePrivate() && in VisitObjCIvarDecl()
516 !D->getBitWidth() && in VisitObjCIvarDecl()
517 !D->hasExtInfo() && in VisitObjCIvarDecl()
518 D->getDeclName()) in VisitObjCIvarDecl()
524 void ASTDeclWriter::VisitObjCProtocolDecl(ObjCProtocolDecl *D) { in VisitObjCProtocolDecl() argument
525 VisitRedeclarable(D); in VisitObjCProtocolDecl()
526 VisitObjCContainerDecl(D); in VisitObjCProtocolDecl()
528 Record.push_back(D->isThisDeclarationADefinition()); in VisitObjCProtocolDecl()
529 if (D->isThisDeclarationADefinition()) { in VisitObjCProtocolDecl()
530 Record.push_back(D->protocol_size()); in VisitObjCProtocolDecl()
532 I = D->protocol_begin(), IEnd = D->protocol_end(); I != IEnd; ++I) in VisitObjCProtocolDecl()
534 for (ObjCProtocolDecl::protocol_loc_iterator PL = D->protocol_loc_begin(), in VisitObjCProtocolDecl()
535 PLEnd = D->protocol_loc_end(); in VisitObjCProtocolDecl()
543 void ASTDeclWriter::VisitObjCAtDefsFieldDecl(ObjCAtDefsFieldDecl *D) { in VisitObjCAtDefsFieldDecl() argument
544 VisitFieldDecl(D); in VisitObjCAtDefsFieldDecl()
548 void ASTDeclWriter::VisitObjCCategoryDecl(ObjCCategoryDecl *D) { in VisitObjCCategoryDecl() argument
549 VisitObjCContainerDecl(D); in VisitObjCCategoryDecl()
550 Writer.AddSourceLocation(D->getCategoryNameLoc(), Record); in VisitObjCCategoryDecl()
551 Writer.AddSourceLocation(D->getIvarLBraceLoc(), Record); in VisitObjCCategoryDecl()
552 Writer.AddSourceLocation(D->getIvarRBraceLoc(), Record); in VisitObjCCategoryDecl()
553 Writer.AddDeclRef(D->getClassInterface(), Record); in VisitObjCCategoryDecl()
554 Record.push_back(D->protocol_size()); in VisitObjCCategoryDecl()
556 I = D->protocol_begin(), IEnd = D->protocol_end(); I != IEnd; ++I) in VisitObjCCategoryDecl()
559 PL = D->protocol_loc_begin(), PLEnd = D->protocol_loc_end(); in VisitObjCCategoryDecl()
562 Record.push_back(D->hasSynthBitfield()); in VisitObjCCategoryDecl()
566 void ASTDeclWriter::VisitObjCCompatibleAliasDecl(ObjCCompatibleAliasDecl *D) { in VisitObjCCompatibleAliasDecl() argument
567 VisitNamedDecl(D); in VisitObjCCompatibleAliasDecl()
568 Writer.AddDeclRef(D->getClassInterface(), Record); in VisitObjCCompatibleAliasDecl()
572 void ASTDeclWriter::VisitObjCPropertyDecl(ObjCPropertyDecl *D) { in VisitObjCPropertyDecl() argument
573 VisitNamedDecl(D); in VisitObjCPropertyDecl()
574 Writer.AddSourceLocation(D->getAtLoc(), Record); in VisitObjCPropertyDecl()
575 Writer.AddSourceLocation(D->getLParenLoc(), Record); in VisitObjCPropertyDecl()
576 Writer.AddTypeSourceInfo(D->getTypeSourceInfo(), Record); in VisitObjCPropertyDecl()
578 Record.push_back((unsigned)D->getPropertyAttributes()); in VisitObjCPropertyDecl()
579 Record.push_back((unsigned)D->getPropertyAttributesAsWritten()); in VisitObjCPropertyDecl()
581 Record.push_back((unsigned)D->getPropertyImplementation()); in VisitObjCPropertyDecl()
582 Writer.AddDeclarationName(D->getGetterName(), Record); in VisitObjCPropertyDecl()
583 Writer.AddDeclarationName(D->getSetterName(), Record); in VisitObjCPropertyDecl()
584 Writer.AddDeclRef(D->getGetterMethodDecl(), Record); in VisitObjCPropertyDecl()
585 Writer.AddDeclRef(D->getSetterMethodDecl(), Record); in VisitObjCPropertyDecl()
586 Writer.AddDeclRef(D->getPropertyIvarDecl(), Record); in VisitObjCPropertyDecl()
590 void ASTDeclWriter::VisitObjCImplDecl(ObjCImplDecl *D) { in VisitObjCImplDecl() argument
591 VisitObjCContainerDecl(D); in VisitObjCImplDecl()
592 Writer.AddDeclRef(D->getClassInterface(), Record); in VisitObjCImplDecl()
596 void ASTDeclWriter::VisitObjCCategoryImplDecl(ObjCCategoryImplDecl *D) { in VisitObjCCategoryImplDecl() argument
597 VisitObjCImplDecl(D); in VisitObjCCategoryImplDecl()
598 Writer.AddIdentifierRef(D->getIdentifier(), Record); in VisitObjCCategoryImplDecl()
599 Writer.AddSourceLocation(D->getCategoryNameLoc(), Record); in VisitObjCCategoryImplDecl()
603 void ASTDeclWriter::VisitObjCImplementationDecl(ObjCImplementationDecl *D) { in VisitObjCImplementationDecl() argument
604 VisitObjCImplDecl(D); in VisitObjCImplementationDecl()
605 Writer.AddDeclRef(D->getSuperClass(), Record); in VisitObjCImplementationDecl()
606 Writer.AddSourceLocation(D->getIvarLBraceLoc(), Record); in VisitObjCImplementationDecl()
607 Writer.AddSourceLocation(D->getIvarRBraceLoc(), Record); in VisitObjCImplementationDecl()
608 Writer.AddCXXCtorInitializers(D->IvarInitializers, D->NumIvarInitializers, in VisitObjCImplementationDecl()
610 Record.push_back(D->hasSynthBitfield()); in VisitObjCImplementationDecl()
614 void ASTDeclWriter::VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D) { in VisitObjCPropertyImplDecl() argument
615 VisitDecl(D); in VisitObjCPropertyImplDecl()
616 Writer.AddSourceLocation(D->getLocStart(), Record); in VisitObjCPropertyImplDecl()
617 Writer.AddDeclRef(D->getPropertyDecl(), Record); in VisitObjCPropertyImplDecl()
618 Writer.AddDeclRef(D->getPropertyIvarDecl(), Record); in VisitObjCPropertyImplDecl()
619 Writer.AddSourceLocation(D->getPropertyIvarDeclLoc(), Record); in VisitObjCPropertyImplDecl()
620 Writer.AddStmt(D->getGetterCXXConstructor()); in VisitObjCPropertyImplDecl()
621 Writer.AddStmt(D->getSetterCXXAssignment()); in VisitObjCPropertyImplDecl()
625 void ASTDeclWriter::VisitFieldDecl(FieldDecl *D) { in VisitFieldDecl() argument
626 VisitDeclaratorDecl(D); in VisitFieldDecl()
627 Record.push_back(D->isMutable()); in VisitFieldDecl()
628 Record.push_back(D->getBitWidth()? 1 : D->hasInClassInitializer() ? 2 : 0); in VisitFieldDecl()
629 if (D->getBitWidth()) in VisitFieldDecl()
630 Writer.AddStmt(D->getBitWidth()); in VisitFieldDecl()
631 else if (D->hasInClassInitializer()) in VisitFieldDecl()
632 Writer.AddStmt(D->getInClassInitializer()); in VisitFieldDecl()
633 if (!D->getDeclName()) in VisitFieldDecl()
634 Writer.AddDeclRef(Context.getInstantiatedFromUnnamedFieldDecl(D), Record); in VisitFieldDecl()
636 if (!D->hasAttrs() && in VisitFieldDecl()
637 !D->isImplicit() && in VisitFieldDecl()
638 !D->isUsed(false) && in VisitFieldDecl()
639 !D->isInvalidDecl() && in VisitFieldDecl()
640 !D->isReferenced() && in VisitFieldDecl()
641 !D->isTopLevelDeclInObjCContainer() && in VisitFieldDecl()
642 !D->isModulePrivate() && in VisitFieldDecl()
643 !D->getBitWidth() && in VisitFieldDecl()
644 !D->hasInClassInitializer() && in VisitFieldDecl()
645 !D->hasExtInfo() && in VisitFieldDecl()
646 !ObjCIvarDecl::classofKind(D->getKind()) && in VisitFieldDecl()
647 !ObjCAtDefsFieldDecl::classofKind(D->getKind()) && in VisitFieldDecl()
648 D->getDeclName()) in VisitFieldDecl()
654 void ASTDeclWriter::VisitIndirectFieldDecl(IndirectFieldDecl *D) { in VisitIndirectFieldDecl() argument
655 VisitValueDecl(D); in VisitIndirectFieldDecl()
656 Record.push_back(D->getChainingSize()); in VisitIndirectFieldDecl()
659 P = D->chain_begin(), in VisitIndirectFieldDecl()
660 PEnd = D->chain_end(); P != PEnd; ++P) in VisitIndirectFieldDecl()
665 void ASTDeclWriter::VisitVarDecl(VarDecl *D) { in VisitVarDecl() argument
666 VisitRedeclarable(D); in VisitVarDecl()
667 VisitDeclaratorDecl(D); in VisitVarDecl()
668 Record.push_back(D->getStorageClass()); // FIXME: stable encoding in VisitVarDecl()
669 Record.push_back(D->getStorageClassAsWritten()); in VisitVarDecl()
670 Record.push_back(D->isThreadSpecified()); in VisitVarDecl()
671 Record.push_back(D->getInitStyle()); in VisitVarDecl()
672 Record.push_back(D->isExceptionVariable()); in VisitVarDecl()
673 Record.push_back(D->isNRVOVariable()); in VisitVarDecl()
674 Record.push_back(D->isCXXForRangeDecl()); in VisitVarDecl()
675 Record.push_back(D->isARCPseudoStrong()); in VisitVarDecl()
676 if (D->getInit()) { in VisitVarDecl()
677 Record.push_back(!D->isInitKnownICE() ? 1 : (D->isInitICE() ? 3 : 2)); in VisitVarDecl()
678 Writer.AddStmt(D->getInit()); in VisitVarDecl()
684 = D->isStaticDataMember() ? D->getMemberSpecializationInfo() : 0; in VisitVarDecl()
692 if (!D->hasAttrs() && in VisitVarDecl()
693 !D->isImplicit() && in VisitVarDecl()
694 !D->isUsed(false) && in VisitVarDecl()
695 !D->isInvalidDecl() && in VisitVarDecl()
696 !D->isReferenced() && in VisitVarDecl()
697 !D->isTopLevelDeclInObjCContainer() && in VisitVarDecl()
698 D->getAccess() == AS_none && in VisitVarDecl()
699 !D->isModulePrivate() && in VisitVarDecl()
700 D->getDeclName().getNameKind() == DeclarationName::Identifier && in VisitVarDecl()
701 !D->hasExtInfo() && in VisitVarDecl()
702 D->getFirstDeclaration() == D->getMostRecentDecl() && in VisitVarDecl()
703 D->getInitStyle() == VarDecl::CInit && in VisitVarDecl()
704 D->getInit() == 0 && in VisitVarDecl()
705 !isa<ParmVarDecl>(D) && in VisitVarDecl()
712 void ASTDeclWriter::VisitImplicitParamDecl(ImplicitParamDecl *D) { in VisitImplicitParamDecl() argument
713 VisitVarDecl(D); in VisitImplicitParamDecl()
717 void ASTDeclWriter::VisitParmVarDecl(ParmVarDecl *D) { in VisitParmVarDecl() argument
718 VisitVarDecl(D); in VisitParmVarDecl()
719 Record.push_back(D->isObjCMethodParameter()); in VisitParmVarDecl()
720 Record.push_back(D->getFunctionScopeDepth()); in VisitParmVarDecl()
721 Record.push_back(D->getFunctionScopeIndex()); in VisitParmVarDecl()
722 Record.push_back(D->getObjCDeclQualifier()); // FIXME: stable encoding in VisitParmVarDecl()
723 Record.push_back(D->isKNRPromoted()); in VisitParmVarDecl()
724 Record.push_back(D->hasInheritedDefaultArg()); in VisitParmVarDecl()
725 Record.push_back(D->hasUninstantiatedDefaultArg()); in VisitParmVarDecl()
726 if (D->hasUninstantiatedDefaultArg()) in VisitParmVarDecl()
727 Writer.AddStmt(D->getUninstantiatedDefaultArg()); in VisitParmVarDecl()
730 assert(!D->isARCPseudoStrong()); // can be true of ImplicitParamDecl in VisitParmVarDecl()
735 if (!D->hasAttrs() && in VisitParmVarDecl()
736 !D->hasExtInfo() && in VisitParmVarDecl()
737 !D->isImplicit() && in VisitParmVarDecl()
738 !D->isUsed(false) && in VisitParmVarDecl()
739 !D->isInvalidDecl() && in VisitParmVarDecl()
740 !D->isReferenced() && in VisitParmVarDecl()
741 D->getAccess() == AS_none && in VisitParmVarDecl()
742 !D->isModulePrivate() && in VisitParmVarDecl()
743 D->getStorageClass() == 0 && in VisitParmVarDecl()
744 D->getInitStyle() == VarDecl::CInit && // Can params have anything else? in VisitParmVarDecl()
745 D->getFunctionScopeDepth() == 0 && in VisitParmVarDecl()
746 D->getObjCDeclQualifier() == 0 && in VisitParmVarDecl()
747 !D->isKNRPromoted() && in VisitParmVarDecl()
748 !D->hasInheritedDefaultArg() && in VisitParmVarDecl()
749 D->getInit() == 0 && in VisitParmVarDecl()
750 !D->hasUninstantiatedDefaultArg()) // No default expr. in VisitParmVarDecl()
755 assert(!D->isThreadSpecified() && "PARM_VAR_DECL can't be __thread"); in VisitParmVarDecl()
756 assert(D->getAccess() == AS_none && "PARM_VAR_DECL can't be public/private"); in VisitParmVarDecl()
757 assert(!D->isExceptionVariable() && "PARM_VAR_DECL can't be exception var"); in VisitParmVarDecl()
758 assert(D->getPreviousDecl() == 0 && "PARM_VAR_DECL can't be redecl"); in VisitParmVarDecl()
759 assert(!D->isStaticDataMember() && in VisitParmVarDecl()
763 void ASTDeclWriter::VisitFileScopeAsmDecl(FileScopeAsmDecl *D) { in VisitFileScopeAsmDecl() argument
764 VisitDecl(D); in VisitFileScopeAsmDecl()
765 Writer.AddStmt(D->getAsmString()); in VisitFileScopeAsmDecl()
766 Writer.AddSourceLocation(D->getRParenLoc(), Record); in VisitFileScopeAsmDecl()
770 void ASTDeclWriter::VisitBlockDecl(BlockDecl *D) { in VisitBlockDecl() argument
771 VisitDecl(D); in VisitBlockDecl()
772 Writer.AddStmt(D->getBody()); in VisitBlockDecl()
773 Writer.AddTypeSourceInfo(D->getSignatureAsWritten(), Record); in VisitBlockDecl()
774 Record.push_back(D->param_size()); in VisitBlockDecl()
775 for (FunctionDecl::param_iterator P = D->param_begin(), PEnd = D->param_end(); in VisitBlockDecl()
778 Record.push_back(D->isVariadic()); in VisitBlockDecl()
779 Record.push_back(D->blockMissingReturnType()); in VisitBlockDecl()
780 Record.push_back(D->isConversionFromLambda()); in VisitBlockDecl()
781 Record.push_back(D->capturesCXXThis()); in VisitBlockDecl()
782 Record.push_back(D->getNumCaptures()); in VisitBlockDecl()
784 i = D->capture_begin(), e = D->capture_end(); i != e; ++i) { in VisitBlockDecl()
800 void ASTDeclWriter::VisitLinkageSpecDecl(LinkageSpecDecl *D) { in VisitLinkageSpecDecl() argument
801 VisitDecl(D); in VisitLinkageSpecDecl()
802 Record.push_back(D->getLanguage()); in VisitLinkageSpecDecl()
803 Writer.AddSourceLocation(D->getExternLoc(), Record); in VisitLinkageSpecDecl()
804 Writer.AddSourceLocation(D->getRBraceLoc(), Record); in VisitLinkageSpecDecl()
808 void ASTDeclWriter::VisitLabelDecl(LabelDecl *D) { in VisitLabelDecl() argument
809 VisitNamedDecl(D); in VisitLabelDecl()
810 Writer.AddSourceLocation(D->getLocStart(), Record); in VisitLabelDecl()
815 void ASTDeclWriter::VisitNamespaceDecl(NamespaceDecl *D) { in VisitNamespaceDecl() argument
816 VisitRedeclarable(D); in VisitNamespaceDecl()
817 VisitNamedDecl(D); in VisitNamespaceDecl()
818 Record.push_back(D->isInline()); in VisitNamespaceDecl()
819 Writer.AddSourceLocation(D->getLocStart(), Record); in VisitNamespaceDecl()
820 Writer.AddSourceLocation(D->getRBraceLoc(), Record); in VisitNamespaceDecl()
822 if (D->isOriginalNamespace()) in VisitNamespaceDecl()
823 Writer.AddDeclRef(D->getAnonymousNamespace(), Record); in VisitNamespaceDecl()
826 if (Writer.hasChain() && !D->isOriginalNamespace() && in VisitNamespaceDecl()
827 D->getOriginalNamespace()->isFromASTFile()) { in VisitNamespaceDecl()
828 NamespaceDecl *NS = D->getOriginalNamespace(); in VisitNamespaceDecl()
833 for (StoredDeclsMap::iterator D = Map->begin(), DEnd = Map->end(); in VisitNamespaceDecl() local
834 D != DEnd; ++D) { in VisitNamespaceDecl()
835 DeclContext::lookup_result Result = D->second.getLookupResult(); in VisitNamespaceDecl()
844 if (Writer.hasChain() && D->isAnonymousNamespace() && in VisitNamespaceDecl()
845 D == D->getMostRecentDecl()) { in VisitNamespaceDecl()
851 D->getParent()->getRedeclContext()->getPrimaryContext()); in VisitNamespaceDecl()
855 Writer.AddDeclRef(D, Record); in VisitNamespaceDecl()
860 void ASTDeclWriter::VisitNamespaceAliasDecl(NamespaceAliasDecl *D) { in VisitNamespaceAliasDecl() argument
861 VisitNamedDecl(D); in VisitNamespaceAliasDecl()
862 Writer.AddSourceLocation(D->getNamespaceLoc(), Record); in VisitNamespaceAliasDecl()
863 Writer.AddSourceLocation(D->getTargetNameLoc(), Record); in VisitNamespaceAliasDecl()
864 Writer.AddNestedNameSpecifierLoc(D->getQualifierLoc(), Record); in VisitNamespaceAliasDecl()
865 Writer.AddDeclRef(D->getNamespace(), Record); in VisitNamespaceAliasDecl()
869 void ASTDeclWriter::VisitUsingDecl(UsingDecl *D) { in VisitUsingDecl() argument
870 VisitNamedDecl(D); in VisitUsingDecl()
871 Writer.AddSourceLocation(D->getUsingLocation(), Record); in VisitUsingDecl()
872 Writer.AddNestedNameSpecifierLoc(D->getQualifierLoc(), Record); in VisitUsingDecl()
873 Writer.AddDeclarationNameLoc(D->DNLoc, D->getDeclName(), Record); in VisitUsingDecl()
874 Writer.AddDeclRef(D->FirstUsingShadow.getPointer(), Record); in VisitUsingDecl()
875 Record.push_back(D->isTypeName()); in VisitUsingDecl()
876 Writer.AddDeclRef(Context.getInstantiatedFromUsingDecl(D), Record); in VisitUsingDecl()
880 void ASTDeclWriter::VisitUsingShadowDecl(UsingShadowDecl *D) { in VisitUsingShadowDecl() argument
881 VisitNamedDecl(D); in VisitUsingShadowDecl()
882 Writer.AddDeclRef(D->getTargetDecl(), Record); in VisitUsingShadowDecl()
883 Writer.AddDeclRef(D->UsingOrNextShadow, Record); in VisitUsingShadowDecl()
884 Writer.AddDeclRef(Context.getInstantiatedFromUsingShadowDecl(D), Record); in VisitUsingShadowDecl()
888 void ASTDeclWriter::VisitUsingDirectiveDecl(UsingDirectiveDecl *D) { in VisitUsingDirectiveDecl() argument
889 VisitNamedDecl(D); in VisitUsingDirectiveDecl()
890 Writer.AddSourceLocation(D->getUsingLoc(), Record); in VisitUsingDirectiveDecl()
891 Writer.AddSourceLocation(D->getNamespaceKeyLocation(), Record); in VisitUsingDirectiveDecl()
892 Writer.AddNestedNameSpecifierLoc(D->getQualifierLoc(), Record); in VisitUsingDirectiveDecl()
893 Writer.AddDeclRef(D->getNominatedNamespace(), Record); in VisitUsingDirectiveDecl()
894 Writer.AddDeclRef(dyn_cast<Decl>(D->getCommonAncestor()), Record); in VisitUsingDirectiveDecl()
898 void ASTDeclWriter::VisitUnresolvedUsingValueDecl(UnresolvedUsingValueDecl *D) { in VisitUnresolvedUsingValueDecl() argument
899 VisitValueDecl(D); in VisitUnresolvedUsingValueDecl()
900 Writer.AddSourceLocation(D->getUsingLoc(), Record); in VisitUnresolvedUsingValueDecl()
901 Writer.AddNestedNameSpecifierLoc(D->getQualifierLoc(), Record); in VisitUnresolvedUsingValueDecl()
902 Writer.AddDeclarationNameLoc(D->DNLoc, D->getDeclName(), Record); in VisitUnresolvedUsingValueDecl()
907 UnresolvedUsingTypenameDecl *D) { in VisitUnresolvedUsingTypenameDecl() argument
908 VisitTypeDecl(D); in VisitUnresolvedUsingTypenameDecl()
909 Writer.AddSourceLocation(D->getTypenameLoc(), Record); in VisitUnresolvedUsingTypenameDecl()
910 Writer.AddNestedNameSpecifierLoc(D->getQualifierLoc(), Record); in VisitUnresolvedUsingTypenameDecl()
914 void ASTDeclWriter::VisitCXXRecordDecl(CXXRecordDecl *D) { in VisitCXXRecordDecl() argument
915 VisitRecordDecl(D); in VisitCXXRecordDecl()
916 Record.push_back(D->isThisDeclarationADefinition()); in VisitCXXRecordDecl()
917 if (D->isThisDeclarationADefinition()) in VisitCXXRecordDecl()
918 Writer.AddCXXDefinitionData(D, Record); in VisitCXXRecordDecl()
923 if (ClassTemplateDecl *TemplD = D->getDescribedClassTemplate()) { in VisitCXXRecordDecl()
927 = D->getMemberSpecializationInfo()) { in VisitCXXRecordDecl()
938 if (D->IsCompleteDefinition) in VisitCXXRecordDecl()
939 Writer.AddDeclRef(Context.getKeyFunction(D), Record); in VisitCXXRecordDecl()
944 void ASTDeclWriter::VisitCXXMethodDecl(CXXMethodDecl *D) { in VisitCXXMethodDecl() argument
945 VisitFunctionDecl(D); in VisitCXXMethodDecl()
946 Record.push_back(D->size_overridden_methods()); in VisitCXXMethodDecl()
948 I = D->begin_overridden_methods(), E = D->end_overridden_methods(); in VisitCXXMethodDecl()
954 void ASTDeclWriter::VisitCXXConstructorDecl(CXXConstructorDecl *D) { in VisitCXXConstructorDecl() argument
955 VisitCXXMethodDecl(D); in VisitCXXConstructorDecl()
957 Record.push_back(D->IsExplicitSpecified); in VisitCXXConstructorDecl()
958 Record.push_back(D->ImplicitlyDefined); in VisitCXXConstructorDecl()
959 Writer.AddCXXCtorInitializers(D->CtorInitializers, D->NumCtorInitializers, in VisitCXXConstructorDecl()
965 void ASTDeclWriter::VisitCXXDestructorDecl(CXXDestructorDecl *D) { in VisitCXXDestructorDecl() argument
966 VisitCXXMethodDecl(D); in VisitCXXDestructorDecl()
968 Record.push_back(D->ImplicitlyDefined); in VisitCXXDestructorDecl()
969 Writer.AddDeclRef(D->OperatorDelete, Record); in VisitCXXDestructorDecl()
974 void ASTDeclWriter::VisitCXXConversionDecl(CXXConversionDecl *D) { in VisitCXXConversionDecl() argument
975 VisitCXXMethodDecl(D); in VisitCXXConversionDecl()
976 Record.push_back(D->IsExplicitSpecified); in VisitCXXConversionDecl()
980 void ASTDeclWriter::VisitImportDecl(ImportDecl *D) { in VisitImportDecl() argument
981 VisitDecl(D); in VisitImportDecl()
982 ArrayRef<SourceLocation> IdentifierLocs = D->getIdentifierLocs(); in VisitImportDecl()
985 Writer.AddSourceLocation(D->getLocEnd(), Record); in VisitImportDecl()
997 void ASTDeclWriter::VisitAccessSpecDecl(AccessSpecDecl *D) { in VisitAccessSpecDecl() argument
998 VisitDecl(D); in VisitAccessSpecDecl()
999 Writer.AddSourceLocation(D->getColonLoc(), Record); in VisitAccessSpecDecl()
1003 void ASTDeclWriter::VisitFriendDecl(FriendDecl *D) { in VisitFriendDecl() argument
1004 VisitDecl(D); in VisitFriendDecl()
1005 Record.push_back(D->Friend.is<TypeSourceInfo*>()); in VisitFriendDecl()
1006 if (D->Friend.is<TypeSourceInfo*>()) in VisitFriendDecl()
1007 Writer.AddTypeSourceInfo(D->Friend.get<TypeSourceInfo*>(), Record); in VisitFriendDecl()
1009 Writer.AddDeclRef(D->Friend.get<NamedDecl*>(), Record); in VisitFriendDecl()
1010 Writer.AddDeclRef(D->getNextFriend(), Record); in VisitFriendDecl()
1011 Record.push_back(D->UnsupportedFriend); in VisitFriendDecl()
1012 Writer.AddSourceLocation(D->FriendLoc, Record); in VisitFriendDecl()
1016 void ASTDeclWriter::VisitFriendTemplateDecl(FriendTemplateDecl *D) { in VisitFriendTemplateDecl() argument
1017 VisitDecl(D); in VisitFriendTemplateDecl()
1018 Record.push_back(D->getNumTemplateParameters()); in VisitFriendTemplateDecl()
1019 for (unsigned i = 0, e = D->getNumTemplateParameters(); i != e; ++i) in VisitFriendTemplateDecl()
1020 Writer.AddTemplateParameterList(D->getTemplateParameterList(i), Record); in VisitFriendTemplateDecl()
1021 Record.push_back(D->getFriendDecl() != 0); in VisitFriendTemplateDecl()
1022 if (D->getFriendDecl()) in VisitFriendTemplateDecl()
1023 Writer.AddDeclRef(D->getFriendDecl(), Record); in VisitFriendTemplateDecl()
1025 Writer.AddTypeSourceInfo(D->getFriendType(), Record); in VisitFriendTemplateDecl()
1026 Writer.AddSourceLocation(D->getFriendLoc(), Record); in VisitFriendTemplateDecl()
1030 void ASTDeclWriter::VisitTemplateDecl(TemplateDecl *D) { in VisitTemplateDecl() argument
1031 VisitNamedDecl(D); in VisitTemplateDecl()
1033 Writer.AddDeclRef(D->getTemplatedDecl(), Record); in VisitTemplateDecl()
1034 Writer.AddTemplateParameterList(D->getTemplateParameters(), Record); in VisitTemplateDecl()
1037 void ASTDeclWriter::VisitRedeclarableTemplateDecl(RedeclarableTemplateDecl *D) { in VisitRedeclarableTemplateDecl() argument
1038 VisitRedeclarable(D); in VisitRedeclarableTemplateDecl()
1042 if (D->isFirstDeclaration()) { in VisitRedeclarableTemplateDecl()
1044 Writer.AddDeclRef(D->getInstantiatedFromMemberTemplate(), Record); in VisitRedeclarableTemplateDecl()
1045 if (D->getInstantiatedFromMemberTemplate()) in VisitRedeclarableTemplateDecl()
1046 Record.push_back(D->isMemberSpecialization()); in VisitRedeclarableTemplateDecl()
1049 VisitTemplateDecl(D); in VisitRedeclarableTemplateDecl()
1050 Record.push_back(D->getIdentifierNamespace()); in VisitRedeclarableTemplateDecl()
1053 void ASTDeclWriter::VisitClassTemplateDecl(ClassTemplateDecl *D) { in VisitClassTemplateDecl() argument
1054 VisitRedeclarableTemplateDecl(D); in VisitClassTemplateDecl()
1056 if (D->isFirstDeclaration()) { in VisitClassTemplateDecl()
1058 CTSDSetTy &CTSDSet = D->getSpecializations(); in VisitClassTemplateDecl()
1066 CTPSDSetTy &CTPSDSet = D->getPartialSpecializations(); in VisitClassTemplateDecl()
1079 ClassTemplateSpecializationDecl *D) { in VisitClassTemplateSpecializationDecl() argument
1080 VisitCXXRecordDecl(D); in VisitClassTemplateSpecializationDecl()
1084 = D->getSpecializedTemplateOrPartial(); in VisitClassTemplateSpecializationDecl()
1090 Writer.AddTemplateArgumentList(&D->getTemplateInstantiationArgs(), Record); in VisitClassTemplateSpecializationDecl()
1094 Writer.AddTypeSourceInfo(D->getTypeAsWritten(), Record); in VisitClassTemplateSpecializationDecl()
1095 if (D->getTypeAsWritten()) { in VisitClassTemplateSpecializationDecl()
1096 Writer.AddSourceLocation(D->getExternLoc(), Record); in VisitClassTemplateSpecializationDecl()
1097 Writer.AddSourceLocation(D->getTemplateKeywordLoc(), Record); in VisitClassTemplateSpecializationDecl()
1100 Writer.AddTemplateArgumentList(&D->getTemplateArgs(), Record); in VisitClassTemplateSpecializationDecl()
1101 Writer.AddSourceLocation(D->getPointOfInstantiation(), Record); in VisitClassTemplateSpecializationDecl()
1102 Record.push_back(D->getSpecializationKind()); in VisitClassTemplateSpecializationDecl()
1104 if (D->isCanonicalDecl()) { in VisitClassTemplateSpecializationDecl()
1106 Writer.AddDeclRef(D->getSpecializedTemplate()->getCanonicalDecl(), Record); in VisitClassTemplateSpecializationDecl()
1113 ClassTemplatePartialSpecializationDecl *D) { in VisitClassTemplatePartialSpecializationDecl() argument
1114 VisitClassTemplateSpecializationDecl(D); in VisitClassTemplatePartialSpecializationDecl()
1116 Writer.AddTemplateParameterList(D->getTemplateParameters(), Record); in VisitClassTemplatePartialSpecializationDecl()
1118 Record.push_back(D->getNumTemplateArgsAsWritten()); in VisitClassTemplatePartialSpecializationDecl()
1119 for (int i = 0, e = D->getNumTemplateArgsAsWritten(); i != e; ++i) in VisitClassTemplatePartialSpecializationDecl()
1120 Writer.AddTemplateArgumentLoc(D->getTemplateArgsAsWritten()[i], Record); in VisitClassTemplatePartialSpecializationDecl()
1122 Record.push_back(D->getSequenceNumber()); in VisitClassTemplatePartialSpecializationDecl()
1125 if (D->getPreviousDecl() == 0) { in VisitClassTemplatePartialSpecializationDecl()
1126 Writer.AddDeclRef(D->getInstantiatedFromMember(), Record); in VisitClassTemplatePartialSpecializationDecl()
1127 Record.push_back(D->isMemberSpecialization()); in VisitClassTemplatePartialSpecializationDecl()
1134 ClassScopeFunctionSpecializationDecl *D) { in VisitClassScopeFunctionSpecializationDecl() argument
1135 VisitDecl(D); in VisitClassScopeFunctionSpecializationDecl()
1136 Writer.AddDeclRef(D->getSpecialization(), Record); in VisitClassScopeFunctionSpecializationDecl()
1141 void ASTDeclWriter::VisitFunctionTemplateDecl(FunctionTemplateDecl *D) { in VisitFunctionTemplateDecl() argument
1142 VisitRedeclarableTemplateDecl(D); in VisitFunctionTemplateDecl()
1144 if (D->isFirstDeclaration()) { in VisitFunctionTemplateDecl()
1148 Record.push_back(D->getSpecializations().size()); in VisitFunctionTemplateDecl()
1150 I = D->getSpecializations().begin(), in VisitFunctionTemplateDecl()
1151 E = D->getSpecializations().end() ; I != E; ++I) { in VisitFunctionTemplateDecl()
1160 void ASTDeclWriter::VisitTemplateTypeParmDecl(TemplateTypeParmDecl *D) { in VisitTemplateTypeParmDecl() argument
1161 VisitTypeDecl(D); in VisitTemplateTypeParmDecl()
1163 Record.push_back(D->wasDeclaredWithTypename()); in VisitTemplateTypeParmDecl()
1164 Record.push_back(D->defaultArgumentWasInherited()); in VisitTemplateTypeParmDecl()
1165 Writer.AddTypeSourceInfo(D->getDefaultArgumentInfo(), Record); in VisitTemplateTypeParmDecl()
1170 void ASTDeclWriter::VisitNonTypeTemplateParmDecl(NonTypeTemplateParmDecl *D) { in VisitNonTypeTemplateParmDecl() argument
1173 if (D->isExpandedParameterPack()) in VisitNonTypeTemplateParmDecl()
1174 Record.push_back(D->getNumExpansionTypes()); in VisitNonTypeTemplateParmDecl()
1176 VisitDeclaratorDecl(D); in VisitNonTypeTemplateParmDecl()
1178 Record.push_back(D->getDepth()); in VisitNonTypeTemplateParmDecl()
1179 Record.push_back(D->getPosition()); in VisitNonTypeTemplateParmDecl()
1181 if (D->isExpandedParameterPack()) { in VisitNonTypeTemplateParmDecl()
1182 for (unsigned I = 0, N = D->getNumExpansionTypes(); I != N; ++I) { in VisitNonTypeTemplateParmDecl()
1183 Writer.AddTypeRef(D->getExpansionType(I), Record); in VisitNonTypeTemplateParmDecl()
1184 Writer.AddTypeSourceInfo(D->getExpansionTypeSourceInfo(I), Record); in VisitNonTypeTemplateParmDecl()
1190 Record.push_back(D->isParameterPack()); in VisitNonTypeTemplateParmDecl()
1191 Record.push_back(D->getDefaultArgument() != 0); in VisitNonTypeTemplateParmDecl()
1192 if (D->getDefaultArgument()) { in VisitNonTypeTemplateParmDecl()
1193 Writer.AddStmt(D->getDefaultArgument()); in VisitNonTypeTemplateParmDecl()
1194 Record.push_back(D->defaultArgumentWasInherited()); in VisitNonTypeTemplateParmDecl()
1200 void ASTDeclWriter::VisitTemplateTemplateParmDecl(TemplateTemplateParmDecl *D) { in VisitTemplateTemplateParmDecl() argument
1201 VisitTemplateDecl(D); in VisitTemplateTemplateParmDecl()
1203 Record.push_back(D->getDepth()); in VisitTemplateTemplateParmDecl()
1204 Record.push_back(D->getPosition()); in VisitTemplateTemplateParmDecl()
1206 Writer.AddTemplateArgumentLoc(D->getDefaultArgument(), Record); in VisitTemplateTemplateParmDecl()
1207 Record.push_back(D->defaultArgumentWasInherited()); in VisitTemplateTemplateParmDecl()
1208 Record.push_back(D->isParameterPack()); in VisitTemplateTemplateParmDecl()
1212 void ASTDeclWriter::VisitTypeAliasTemplateDecl(TypeAliasTemplateDecl *D) { in VisitTypeAliasTemplateDecl() argument
1213 VisitRedeclarableTemplateDecl(D); in VisitTypeAliasTemplateDecl()
1217 void ASTDeclWriter::VisitStaticAssertDecl(StaticAssertDecl *D) { in VisitStaticAssertDecl() argument
1218 VisitDecl(D); in VisitStaticAssertDecl()
1219 Writer.AddStmt(D->getAssertExpr()); in VisitStaticAssertDecl()
1220 Writer.AddStmt(D->getMessage()); in VisitStaticAssertDecl()
1221 Writer.AddSourceLocation(D->getRParenLoc(), Record); in VisitStaticAssertDecl()
1243 void ASTDeclWriter::VisitRedeclarable(Redeclarable<T> *D) { in VisitRedeclarable() argument
1244 T *First = D->getFirstDeclaration(); in VisitRedeclarable()
1254 (void)Writer.GetDeclRef(D->getPreviousDecl()); in VisitRedeclarable()
1629 static bool isRequiredDecl(const Decl *D, ASTContext &Context) { in isRequiredDecl() argument
1634 if (isa<FileScopeAsmDecl>(D) || isa<ObjCImplDecl>(D)) in isRequiredDecl()
1637 return Context.DeclMustBeEmitted(D); in isRequiredDecl()
1640 void ASTWriter::WriteDecl(ASTContext &Context, Decl *D) { in WriteDecl() argument
1649 if (D->isFromASTFile()) in WriteDecl()
1650 ID = getDeclID(D); in WriteDecl()
1652 serialization::DeclID &IDR = DeclIDs[D]; in WriteDecl()
1668 DeclContext *DC = dyn_cast<DeclContext>(D); in WriteDecl()
1685 D->getLocation())); in WriteDecl()
1690 SourceLocation Loc = D->getLocation(); in WriteDecl()
1701 associateDeclWithFile(D, ID); in WriteDecl()
1708 W.Visit(D); in WriteDecl()
1713 D->getDeclKindName() + "'"); in WriteDecl()
1726 if (isRequiredDecl(D, Context)) in WriteDecl()