Lines Matching +full:auto +full:- +full:range
1 //===- BuildTree.cpp ------------------------------------------*- C++ -*-=====//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
54 if (auto *C = dyn_cast<CXXConstructExpr>(E)) { in IgnoreImplicitConstructorSingleStep()
55 auto NumArgs = C->getNumArgs(); in IgnoreImplicitConstructorSingleStep()
56 if (NumArgs == 1 || (NumArgs > 1 && isa<CXXDefaultArgExpr>(C->getArg(1)))) { in IgnoreImplicitConstructorSingleStep()
57 Expr *A = C->getArg(0); in IgnoreImplicitConstructorSingleStep()
58 if (C->getParenOrBraceRange().isInvalid()) in IgnoreImplicitConstructorSingleStep()
73 if (auto *F = dyn_cast<CXXFunctionalCastExpr>(E)) { in IgnoreCXXFunctionalCastExprWrappingConstructor()
74 if (F->getCastKind() == CK_ConstructorConversion) in IgnoreCXXFunctionalCastExprWrappingConstructor()
75 return F->getSubExpr(); in IgnoreCXXFunctionalCastExprWrappingConstructor()
98 /// It is non-trivial to get the start location because TypeLocs are stored
104 auto L = Visit(T.getInnerLoc()); in VisitParenTypeLoc()
136 auto N = T.getNextTypeLoc(); in VisitTypeLoc()
143 if (T.getTypePtr()->hasTrailingReturn()) in VisitFunctionProtoTypeLoc()
150 auto L = Visit(T.getPointeeLoc()); in HandlePointer()
159 auto FirstDefaultArg = in dropDefaultArgs()
160 llvm::find_if(Args, [](auto It) { return isa<CXXDefaultArgExpr>(It); }); in dropDefaultArgs()
254 auto DN = D->getDeclName(); in getQualifiedNameStart()
259 if (const auto *DD = dyn_cast<DeclaratorDecl>(D)) { in getQualifiedNameStart()
260 if (DD->getQualifierLoc()) { in getQualifiedNameStart()
261 return DD->getQualifierLoc().getBeginLoc(); in getQualifiedNameStart()
265 return D->getLocation(); in getQualifiedNameStart()
268 /// Gets the range of the initializer inside an init-declarator C++ [dcl.decl].
269 /// `int a;` -> range of ``,
270 /// `int *a = nullptr` -> range of `= nullptr`.
271 /// `int a{}` -> range of `{}`.
272 /// `int a()` -> range of `()`.
274 if (auto *V = dyn_cast<VarDecl>(D)) { in getInitializerRange()
275 auto *I = V->getInit(); in getInitializerRange()
276 // Initializers in range-based-for are not part of the declarator in getInitializerRange()
277 if (I && !V->isCXXForRangeDecl()) in getInitializerRange()
278 return I->getSourceRange(); in getInitializerRange()
284 /// Gets the range of declarator as defined by the C++ grammar. E.g.
285 /// `int a;` -> range of `a`,
286 /// `int *a;` -> range of `*a`,
287 /// `int a[10];` -> range of `a[10]`,
288 /// `int a[1][2][3];` -> range of `a[1][2][3]`,
289 /// `int *a = nullptr` -> range of `*a = nullptr`.
290 /// `int S::f(){}` -> range of `S::f()`.
291 /// FIXME: \p Name must be a source range.
306 auto InitializerEnd = Initializer.getEnd(); in getDeclaratorRange()
358 /// - create a corresponding syntax node,
359 /// - assign roles to all pending child nodes with 'markChild' and
361 /// - replace the child nodes with the new syntax node in the pending list
373 for (const auto &T : TBTM.tokenBuffer().expandedTokens()) in TreeBuilder()
383 /// Range.
384 void foldNode(ArrayRef<syntax::Token> Range, syntax::Tree *New, ASTPtr From) { in foldNode() argument
386 Pending.foldChildren(TBTM.tokenBuffer(), Range, New); in foldNode()
391 void foldNode(ArrayRef<syntax::Token> Range, syntax::Tree *New, TypeLoc L) { in foldNode() argument
393 foldNode(Range, New, nullptr); in foldNode()
396 void foldNode(llvm::ArrayRef<syntax::Token> Range, syntax::Tree *New, in foldNode() argument
399 Pending.foldChildren(TBTM.tokenBuffer(), Range, New); in foldNode()
409 auto ListRange = Pending.shrinkToFitList(SuperRange); in foldList()
416 /// token range of \p D.
424 /// Should be called for expressions in non-statement position to avoid
441 auto Tokens = TBTM.tokenBuffer().expandedTokens(); in finalize()
449 auto *TU = cast<syntax::TranslationUnit>(std::move(Pending).finalize()); in finalize()
450 TU->assertInvariantsRecursive(); in finalize()
458 ArrayRef<syntax::Token> getRange(SourceRange Range) const { in getRange()
459 assert(Range.isValid()); in getRange()
460 return getRange(Range.getBegin(), Range.getEnd()); in getRange()
477 auto Tokens = getRange(D->getSourceRange()); in getTemplateRange()
487 const Decl *Next = D->getNextDeclInContext(); in isResponsibleForCreatingDeclaration()
495 if (D->getKind() != Next->getKind()) { in isResponsibleForCreatingDeclaration()
500 if (Next->getBeginLoc() != D->getBeginLoc()) { in isResponsibleForCreatingDeclaration()
512 if (const auto *S = dyn_cast<TagDecl>(D)) in getDeclarationRange()
513 Tokens = getRange(S->TypeDecl::getBeginLoc(), S->getEndLoc()); in getDeclarationRange()
515 Tokens = getRange(D->getSourceRange()); in getDeclarationRange()
520 return getRange(E->getSourceRange()); in getExprRange()
523 /// Find the adjusted range for the statement, consuming the trailing
526 auto Tokens = getRange(S->getSourceRange()); in getStmtRange()
554 if (Tokens.back().kind() != tok::semi && Tokens.end()->kind() == tok::semi) in withTrailingSemicolon()
560 assert(N->getRole() == NodeRole::Detached); in setRole()
561 N->setRole(R); in setRole()
576 for (const auto &T : TB.expandedTokens().drop_back()) { in Forest()
577 auto *L = new (A.getAllocator()) in Forest()
579 L->Original = true; in Forest()
580 L->CanModify = TB.spelledForExpanded(T).has_value(); in Forest()
585 void assignRole(ArrayRef<syntax::Token> Range, syntax::NodeRole Role) { in assignRole()
586 assert(!Range.empty()); in assignRole()
587 auto It = Trees.lower_bound(Range.begin()); in assignRole()
589 assert(It->first == Range.begin() && "no child with the specified range"); in assignRole()
591 std::next(It)->first == Range.end()) && in assignRole()
592 "no child with the specified range"); in assignRole()
593 assert(It->second->getRole() == NodeRole::Detached && in assignRole()
594 "re-assigning role for a child"); in assignRole()
595 It->second->setRole(Role); in assignRole()
598 /// Shrink \p Range to a subrange that only contains tokens of a list.
600 ArrayRef<syntax::Token> shrinkToFitList(ArrayRef<syntax::Token> Range) { in shrinkToFitList()
601 auto BeginChildren = Trees.lower_bound(Range.begin()); in shrinkToFitList()
603 BeginChildren->first == Range.begin()) && in shrinkToFitList()
604 "Range crosses boundaries of existing subtrees"); in shrinkToFitList()
606 auto EndChildren = Trees.lower_bound(Range.end()); in shrinkToFitList()
608 (EndChildren == Trees.end() || EndChildren->first == Range.end()) && in shrinkToFitList()
609 "Range crosses boundaries of existing subtrees"); in shrinkToFitList()
611 auto BelongsToList = [](decltype(Trees)::value_type KV) { in shrinkToFitList()
612 auto Role = KV.second->getRole(); in shrinkToFitList()
617 auto BeginListChildren = in shrinkToFitList()
620 auto EndListChildren = in shrinkToFitList()
623 return ArrayRef<syntax::Token>(BeginListChildren->first, in shrinkToFitList()
624 EndListChildren->first); in shrinkToFitList()
631 assert(Node->getFirstChild() == nullptr && "node already has children"); in foldChildren()
633 auto *FirstToken = Tokens.begin(); in foldChildren()
634 auto BeginChildren = Trees.lower_bound(FirstToken); in foldChildren()
637 BeginChildren->first == FirstToken) && in foldChildren()
639 auto EndChildren = Trees.lower_bound(Tokens.end()); in foldChildren()
641 (EndChildren == Trees.end() || EndChildren->first == Tokens.end()) && in foldChildren()
644 for (auto It = BeginChildren; It != EndChildren; ++It) { in foldChildren()
645 auto *C = It->second; in foldChildren()
646 if (C->getRole() == NodeRole::Detached) in foldChildren()
647 C->setRole(NodeRole::Unknown); in foldChildren()
648 Node->appendChildLowLevel(C); in foldChildren()
652 Node->Original = true; in foldChildren()
653 Node->CanModify = in foldChildren()
663 auto *Root = Trees.begin()->second; in finalize()
670 for (auto It = Trees.begin(); It != Trees.end(); ++It) { in str()
673 ? (std::next(It)->first - It->first) in str()
674 : STM.tokenBuffer().expandedTokens().end() - It->first; in str()
677 formatv("- '{0}' covers '{1}'+{2} tokens\n", It->second->getKind(), in str()
678 It->first->text(STM.sourceManager()), CoveredTokens)); in str()
679 R += It->second->dump(STM); in str()
720 assert(!D->isImplicit()); in VisitDecl()
733 if (C->isExplicitSpecialization()) in TraverseClassTemplateSpecializationDecl()
735 auto *Declaration = in TraverseClassTemplateSpecializationDecl()
739 Builder.findToken(C->getExternKeywordLoc()), in TraverseClassTemplateSpecializationDecl()
740 Builder.findToken(C->getTemplateKeywordLoc()), Declaration, C); in TraverseClassTemplateSpecializationDecl()
747 Builder.findToken(S->getTemplateParameters()->getTemplateLoc()), in WalkUpFromTemplateDecl()
748 Builder.getDeclarationRange(S->getTemplatedDecl()), S); in WalkUpFromTemplateDecl()
754 if (!C->isFreeStanding()) { in WalkUpFromTagDecl()
755 assert(C->getNumTemplateParameterLists() == 0); in WalkUpFromTagDecl()
763 assert(C->isFreeStanding()); in handleFreeStandingTagDecl()
765 auto DeclarationRange = Builder.getDeclarationRange(C); in handleFreeStandingTagDecl()
770 auto ConsumeTemplateParameters = [&](const TemplateParameterList &L) { in handleFreeStandingTagDecl()
771 const auto *TemplateKW = Builder.findToken(L.getTemplateLoc()); in handleFreeStandingTagDecl()
772 auto R = llvm::ArrayRef(TemplateKW, DeclarationRange.end()); in handleFreeStandingTagDecl()
777 if (auto *S = dyn_cast<ClassTemplatePartialSpecializationDecl>(C)) in handleFreeStandingTagDecl()
778 ConsumeTemplateParameters(*S->getTemplateParameters()); in handleFreeStandingTagDecl()
779 for (unsigned I = C->getNumTemplateParameterLists(); 0 < I; --I) in handleFreeStandingTagDecl()
780 ConsumeTemplateParameters(*C->getTemplateParameterList(I - 1)); in handleFreeStandingTagDecl()
793 Builder.markChildToken(S->getLBracLoc(), NodeRole::OpenParen); in WalkUpFromCompoundStmt()
794 for (auto *Child : S->body()) in WalkUpFromCompoundStmt()
796 Builder.markChildToken(S->getRBracLoc(), NodeRole::CloseParen); in WalkUpFromCompoundStmt()
812 if (S->getInit() && !TraverseStmt(S->getInit())) { in TraverseIfStmt()
818 if (S->hasVarStorage()) { in TraverseIfStmt()
819 if (!TraverseStmt(S->getConditionVariableDeclStmt())) in TraverseIfStmt()
821 } else if (S->getCond() && !TraverseStmt(S->getCond())) in TraverseIfStmt()
824 if (S->getThen() && !TraverseStmt(S->getThen())) in TraverseIfStmt()
826 if (S->getElse() && !TraverseStmt(S->getElse())) in TraverseIfStmt()
835 // We override to traverse range initializer as VarDecl. in TraverseCXXForRangeStmt()
840 if (S->getInit() && !TraverseStmt(S->getInit())) in TraverseCXXForRangeStmt()
842 if (S->getLoopVariable() && !TraverseDecl(S->getLoopVariable())) in TraverseCXXForRangeStmt()
844 if (S->getRangeInit() && !TraverseStmt(S->getRangeInit())) in TraverseCXXForRangeStmt()
846 if (S->getBody() && !TraverseStmt(S->getBody())) in TraverseCXXForRangeStmt()
855 if (auto *DS = dyn_cast_or_null<DeclStmt>(S)) { in TraverseStmt()
857 for (auto *D : DS->decls()) in TraverseStmt()
859 } else if (auto *E = dyn_cast_or_null<Expr>(S)) { in TraverseStmt()
889 switch (S->getLiteralOperatorKind()) { in buildUserDefinedLiteral()
904 auto TokLoc = S->getBeginLoc(); in buildUserDefinedLiteral()
905 auto TokSpelling = in buildUserDefinedLiteral()
906 Builder.findToken(TokLoc)->text(Context.getSourceManager()); in buildUserDefinedLiteral()
907 auto Literal = in buildUserDefinedLiteral()
922 Builder.markChildToken(S->getBeginLoc(), syntax::NodeRole::LiteralToken); in WalkUpFromUserDefinedLiteral()
929 /// Given a nested-name-specifier return the range for the last name
934 auto SR = NNSLoc.getLocalSourceRange(); in getLocalSourceRange()
941 if (auto TL = NNSLoc.getTypeLoc()) { in getLocalSourceRange()
942 if (auto DependentTL = in getLocalSourceRange()
965 const auto *NNSType = NNS.getAsType(); in getNameSpecifierKind()
984 auto NameSpecifierTokens = in buildNameSpecifier()
993 auto *NS = new (allocator()) syntax::IdentifierNameSpecifier; in buildNameSpecifier()
1003 auto *NS = new (allocator()) syntax::SimpleTemplateNameSpecifier; in buildNameSpecifier()
1008 const auto TL = NNSLoc.getTypeLoc().castAs<DecltypeTypeLoc>(); in buildNameSpecifier()
1011 auto *NS = new (allocator()) syntax::DecltypeNameSpecifier; in buildNameSpecifier()
1031 for (auto It = QualifierLoc; It; It = It.getPrefix()) { in TraverseNestedNameSpecifierLoc()
1032 auto *NS = buildNameSpecifier(It); in TraverseNestedNameSpecifierLoc()
1055 auto *TheUnqualifiedId = new (allocator()) syntax::UnqualifiedId; in buildIdExpression()
1060 auto IdExpressionBeginLoc = in buildIdExpression()
1063 auto *TheIdExpression = new (allocator()) syntax::IdExpression; in buildIdExpression()
1072 // For `MemberExpr` with implicit `this->` we generate a simple in WalkUpFromMemberExpr()
1073 // `id-expression` syntax node, beacuse an implicit `member-expression` is in WalkUpFromMemberExpr()
1074 // syntactically undistinguishable from an `id-expression` in WalkUpFromMemberExpr()
1075 if (S->isImplicitAccess()) { in WalkUpFromMemberExpr()
1076 buildIdExpression(S->getQualifierLoc(), S->getTemplateKeywordLoc(), in WalkUpFromMemberExpr()
1077 SourceRange(S->getMemberLoc(), S->getEndLoc()), S); in WalkUpFromMemberExpr()
1081 auto *TheIdExpression = buildIdExpression( in WalkUpFromMemberExpr()
1082 S->getQualifierLoc(), S->getTemplateKeywordLoc(), in WalkUpFromMemberExpr()
1083 SourceRange(S->getMemberLoc(), S->getEndLoc()), nullptr); in WalkUpFromMemberExpr()
1087 Builder.markExprChild(S->getBase(), syntax::NodeRole::Object); in WalkUpFromMemberExpr()
1088 Builder.markChildToken(S->getOperatorLoc(), syntax::NodeRole::AccessToken); in WalkUpFromMemberExpr()
1096 buildIdExpression(S->getQualifierLoc(), S->getTemplateKeywordLoc(), in WalkUpFromDeclRefExpr()
1097 SourceRange(S->getLocation(), S->getEndLoc()), S); in WalkUpFromDeclRefExpr()
1104 buildIdExpression(S->getQualifierLoc(), S->getTemplateKeywordLoc(), in WalkUpFromDependentScopeDeclRefExpr()
1105 SourceRange(S->getLocation(), S->getEndLoc()), S); in WalkUpFromDependentScopeDeclRefExpr()
1111 if (!S->isImplicit()) { in WalkUpFromCXXThisExpr()
1112 Builder.markChildToken(S->getLocation(), in WalkUpFromCXXThisExpr()
1121 Builder.markChildToken(S->getLParen(), syntax::NodeRole::OpenParen); in WalkUpFromParenExpr()
1122 Builder.markExprChild(S->getSubExpr(), syntax::NodeRole::SubExpression); in WalkUpFromParenExpr()
1123 Builder.markChildToken(S->getRParen(), syntax::NodeRole::CloseParen); in WalkUpFromParenExpr()
1130 Builder.markChildToken(S->getLocation(), syntax::NodeRole::LiteralToken); in WalkUpFromIntegerLiteral()
1137 Builder.markChildToken(S->getLocation(), syntax::NodeRole::LiteralToken); in WalkUpFromCharacterLiteral()
1144 Builder.markChildToken(S->getLocation(), syntax::NodeRole::LiteralToken); in WalkUpFromFloatingLiteral()
1151 Builder.markChildToken(S->getBeginLoc(), syntax::NodeRole::LiteralToken); in WalkUpFromStringLiteral()
1158 Builder.markChildToken(S->getLocation(), syntax::NodeRole::LiteralToken); in WalkUpFromCXXBoolLiteralExpr()
1165 Builder.markChildToken(S->getLocation(), syntax::NodeRole::LiteralToken); in WalkUpFromCXXNullPtrLiteralExpr()
1172 Builder.markChildToken(S->getOperatorLoc(), in WalkUpFromUnaryOperator()
1174 Builder.markExprChild(S->getSubExpr(), syntax::NodeRole::Operand); in WalkUpFromUnaryOperator()
1176 if (S->isPostfix()) in WalkUpFromUnaryOperator()
1189 Builder.markExprChild(S->getLHS(), syntax::NodeRole::LeftHandSide); in WalkUpFromBinaryOperator()
1190 Builder.markChildToken(S->getOperatorLoc(), in WalkUpFromBinaryOperator()
1192 Builder.markExprChild(S->getRHS(), syntax::NodeRole::RightHandSide); in WalkUpFromBinaryOperator()
1202 auto Args = dropDefaultArgs(ArgsAndDefaultArgs); in buildCallArguments()
1203 for (auto *Arg : Args) { in buildCallArguments()
1205 const auto *DelimiterToken = in buildCallArguments()
1206 std::next(Builder.findToken(Arg->getEndLoc())); in buildCallArguments()
1207 if (DelimiterToken->kind() == clang::tok::TokenKind::comma) in buildCallArguments()
1211 auto *Arguments = new (allocator()) syntax::CallArguments; in buildCallArguments()
1213 Builder.foldNode(Builder.getRange((*Args.begin())->getBeginLoc(), in buildCallArguments()
1214 (*(Args.end() - 1))->getEndLoc()), in buildCallArguments()
1221 Builder.markExprChild(S->getCallee(), syntax::NodeRole::Callee); in WalkUpFromCallExpr()
1223 const auto *LParenToken = in WalkUpFromCallExpr()
1224 std::next(Builder.findToken(S->getCallee()->getEndLoc())); in WalkUpFromCallExpr()
1227 if (LParenToken->kind() == clang::tok::l_paren) in WalkUpFromCallExpr()
1230 Builder.markChild(buildCallArguments(S->arguments()), in WalkUpFromCallExpr()
1233 Builder.markChildToken(S->getRParenLoc(), syntax::NodeRole::CloseParen); in WalkUpFromCallExpr()
1235 Builder.foldNode(Builder.getRange(S->getSourceRange()), in WalkUpFromCallExpr()
1242 if ((S->getNumArgs() == 0 || isa<CXXDefaultArgExpr>(S->getArg(0))) && in WalkUpFromCXXConstructExpr()
1243 S->getParenOrBraceRange().isInvalid()) in WalkUpFromCXXConstructExpr()
1249 // To construct a syntax tree of the same shape for calls to built-in and in TraverseCXXOperatorCallExpr()
1250 // user-defined operators, ignore the `DeclRefExpr` that refers to the in TraverseCXXOperatorCallExpr()
1253 for (auto *child : S->arguments()) { in TraverseCXXOperatorCallExpr()
1260 if (child->getSourceRange().isInvalid()) { in TraverseCXXOperatorCallExpr()
1274 Builder.markExprChild(S->getArg(0), syntax::NodeRole::LeftHandSide); in WalkUpFromCXXOperatorCallExpr()
1275 Builder.markChildToken(S->getOperatorLoc(), in WalkUpFromCXXOperatorCallExpr()
1277 Builder.markExprChild(S->getArg(1), syntax::NodeRole::RightHandSide); in WalkUpFromCXXOperatorCallExpr()
1282 Builder.markChildToken(S->getOperatorLoc(), in WalkUpFromCXXOperatorCallExpr()
1284 Builder.markExprChild(S->getArg(0), syntax::NodeRole::Operand); in WalkUpFromCXXOperatorCallExpr()
1290 Builder.markChildToken(S->getOperatorLoc(), in WalkUpFromCXXOperatorCallExpr()
1292 Builder.markExprChild(S->getArg(0), syntax::NodeRole::Operand); in WalkUpFromCXXOperatorCallExpr()
1298 Builder.markExprChild(S->getArg(0), syntax::NodeRole::Callee); in WalkUpFromCXXOperatorCallExpr()
1300 const auto *LParenToken = in WalkUpFromCXXOperatorCallExpr()
1301 std::next(Builder.findToken(S->getArg(0)->getEndLoc())); in WalkUpFromCXXOperatorCallExpr()
1304 if (LParenToken->kind() == clang::tok::l_paren) in WalkUpFromCXXOperatorCallExpr()
1308 S->arg_begin() + 1, S->arg_end())), in WalkUpFromCXXOperatorCallExpr()
1311 Builder.markChildToken(S->getRParenLoc(), syntax::NodeRole::CloseParen); in WalkUpFromCXXOperatorCallExpr()
1313 Builder.foldNode(Builder.getRange(S->getSourceRange()), in WalkUpFromCXXOperatorCallExpr()
1327 auto Tokens = Builder.getDeclarationRange(S); in WalkUpFromNamespaceDecl()
1367 for (auto *P : Params) { in buildParameterDeclarationList()
1369 const auto *DelimiterToken = std::next(Builder.findToken(P->getEndLoc())); in buildParameterDeclarationList()
1370 if (DelimiterToken->kind() == clang::tok::TokenKind::comma) in buildParameterDeclarationList()
1373 auto *Parameters = new (allocator()) syntax::ParameterDeclarationList; in buildParameterDeclarationList()
1375 Builder.foldNode(Builder.getRange(Params.front()->getBeginLoc(), in buildParameterDeclarationList()
1376 Params.back()->getEndLoc()), in buildParameterDeclarationList()
1394 if (!L.getTypePtr()->hasTrailingReturn()) in WalkUpFromFunctionProtoTypeLoc()
1397 auto *TrailingReturnTokens = buildTrailingReturn(L); in WalkUpFromFunctionProtoTypeLoc()
1414 auto SR = L.getLocalSourceRange(); in WalkUpFromMemberPointerTypeLoc()
1436 Builder.markChildToken(S->getSwitchLoc(), in WalkUpFromSwitchStmt()
1438 Builder.markStmtChild(S->getBody(), syntax::NodeRole::BodyStatement); in WalkUpFromSwitchStmt()
1445 Builder.markChildToken(S->getKeywordLoc(), in WalkUpFromCaseStmt()
1447 Builder.markExprChild(S->getLHS(), syntax::NodeRole::CaseValue); in WalkUpFromCaseStmt()
1448 Builder.markStmtChild(S->getSubStmt(), syntax::NodeRole::BodyStatement); in WalkUpFromCaseStmt()
1455 Builder.markChildToken(S->getKeywordLoc(), in WalkUpFromDefaultStmt()
1457 Builder.markStmtChild(S->getSubStmt(), syntax::NodeRole::BodyStatement); in WalkUpFromDefaultStmt()
1464 Builder.markChildToken(S->getIfLoc(), syntax::NodeRole::IntroducerKeyword); in WalkUpFromIfStmt()
1465 Stmt *ConditionStatement = S->getCond(); in WalkUpFromIfStmt()
1466 if (S->hasVarStorage()) in WalkUpFromIfStmt()
1467 ConditionStatement = S->getConditionVariableDeclStmt(); in WalkUpFromIfStmt()
1469 Builder.markStmtChild(S->getThen(), syntax::NodeRole::ThenStatement); in WalkUpFromIfStmt()
1470 Builder.markChildToken(S->getElseLoc(), syntax::NodeRole::ElseKeyword); in WalkUpFromIfStmt()
1471 Builder.markStmtChild(S->getElse(), syntax::NodeRole::ElseStatement); in WalkUpFromIfStmt()
1478 Builder.markChildToken(S->getForLoc(), syntax::NodeRole::IntroducerKeyword); in WalkUpFromForStmt()
1479 Builder.markStmtChild(S->getBody(), syntax::NodeRole::BodyStatement); in WalkUpFromForStmt()
1486 Builder.markChildToken(S->getWhileLoc(), in WalkUpFromWhileStmt()
1488 Builder.markStmtChild(S->getBody(), syntax::NodeRole::BodyStatement); in WalkUpFromWhileStmt()
1495 Builder.markChildToken(S->getContinueLoc(), in WalkUpFromContinueStmt()
1503 Builder.markChildToken(S->getBreakLoc(), in WalkUpFromBreakStmt()
1511 Builder.markChildToken(S->getReturnLoc(), in WalkUpFromReturnStmt()
1513 Builder.markExprChild(S->getRetValue(), syntax::NodeRole::ReturnValue); in WalkUpFromReturnStmt()
1520 Builder.markChildToken(S->getForLoc(), syntax::NodeRole::IntroducerKeyword); in WalkUpFromCXXForRangeStmt()
1521 Builder.markStmtChild(S->getBody(), syntax::NodeRole::BodyStatement); in WalkUpFromCXXForRangeStmt()
1534 Builder.markExprChild(S->getAssertExpr(), syntax::NodeRole::Condition); in WalkUpFromStaticAssertDecl()
1535 Builder.markExprChild(S->getMessage(), syntax::NodeRole::Message); in WalkUpFromStaticAssertDecl()
1588 auto Range = getDeclaratorRange( in processDeclaratorAndDeclaration() local
1589 Builder.sourceManager(), D->getTypeSourceInfo()->getTypeLoc(), in processDeclaratorAndDeclaration()
1594 if (!Range.getBegin().isValid()) { in processDeclaratorAndDeclaration()
1602 auto *N = new (allocator()) syntax::SimpleDeclarator; in processDeclaratorAndDeclaration()
1603 Builder.foldNode(Builder.getRange(Range), N, nullptr); in processDeclaratorAndDeclaration()
1609 const auto *DelimiterToken = std::next(Builder.findToken(Range.getEnd())); in processDeclaratorAndDeclaration()
1610 if (DelimiterToken->kind() == clang::tok::TokenKind::comma) in processDeclaratorAndDeclaration()
1613 auto *DL = new (allocator()) syntax::DeclaratorList; in processDeclaratorAndDeclaration()
1614 auto DeclarationRange = Builder.getDeclarationRange(D); in processDeclaratorAndDeclaration()
1624 /// Returns the range of the built node.
1626 assert(L.getTypePtr()->hasTrailingReturn()); in buildTrailingReturn()
1628 auto ReturnedType = L.getReturnLoc(); in buildTrailingReturn()
1630 auto ReturnDeclaratorRange = SourceRange(GetStartLoc().Visit(ReturnedType), in buildTrailingReturn()
1640 auto Return = Builder.getRange(ReturnedType.getSourceRange()); in buildTrailingReturn()
1641 const auto *Arrow = Return.begin() - 1; in buildTrailingReturn()
1642 assert(Arrow->kind() == tok::arrow); in buildTrailingReturn()
1643 auto Tokens = llvm::ArrayRef(Arrow, Return.end()); in buildTrailingReturn()
1647 auto *R = new (allocator()) syntax::TrailingReturnType; in buildTrailingReturn()
1653 ArrayRef<syntax::Token> Range, const syntax::Token *ExternKW, in foldExplicitTemplateInstantiation() argument
1656 assert(!ExternKW || ExternKW->kind() == tok::kw_extern); in foldExplicitTemplateInstantiation()
1657 assert(TemplateKW && TemplateKW->kind() == tok::kw_template); in foldExplicitTemplateInstantiation()
1662 Range, new (allocator()) syntax::ExplicitTemplateInstantiation, From); in foldExplicitTemplateInstantiation()
1666 ArrayRef<syntax::Token> Range, const syntax::Token *TemplateKW, in foldTemplateDeclaration() argument
1668 assert(TemplateKW && TemplateKW->kind() == tok::kw_template); in foldTemplateDeclaration()
1671 auto *N = new (allocator()) syntax::TemplateDeclaration; in foldTemplateDeclaration()
1672 Builder.foldNode(Range, N, From); in foldTemplateDeclaration()
1707 auto *SN = Mapping.find(N); in markChild()
1712 auto *SN = Mapping.find(NNSLoc); in markChild()
1749 auto It = LocationToToken.find(L); in findToken()
1751 return It->second; in findToken()