@@ -372,13 +372,6 @@ class ModelASTWalker : public ASTWalker {
372
372
friend class InactiveClauseRAII ;
373
373
bool inInactiveClause = false ;
374
374
375
- struct ParentArgsTy {
376
- Expr *Parent = nullptr ;
377
- llvm::DenseMap<Expr *, Argument> Args;
378
- };
379
- // / A mapping of argument expressions to their full argument info.
380
- SmallVector<ParentArgsTy, 4 > ParentArgs;
381
-
382
375
public:
383
376
SyntaxModelWalker &Walker;
384
377
ArrayRef<SyntaxNode> TokenNodes;
@@ -401,10 +394,7 @@ class ModelASTWalker : public ASTWalker {
401
394
402
395
void visitSourceFile (SourceFile &SrcFile, ArrayRef<SyntaxNode> Tokens);
403
396
404
- PreWalkResult<ArgumentList *>
405
- walkToArgumentListPre (ArgumentList *ArgList) override ;
406
- PostWalkResult<ArgumentList *>
407
- walkToArgumentListPost (ArgumentList *ArgList) override ;
397
+ PreWalkAction walkToArgumentPre (const Argument &Arg) override ;
408
398
409
399
PreWalkResult<Expr *> walkToExprPre (Expr *E) override ;
410
400
PostWalkResult<Expr *> walkToExprPost (Expr *E) override ;
@@ -544,69 +534,38 @@ static bool shouldTreatAsSingleToken(const SyntaxStructureNode &Node,
544
534
SM.getLineAndColumnInBuffer (Node.Range .getEnd ()).first ;
545
535
}
546
536
547
- ASTWalker::PreWalkResult<ArgumentList *>
548
- ModelASTWalker::walkToArgumentListPre (ArgumentList *ArgList) {
549
- Expr *ParentExpr = Parent.getAsExpr ();
550
- if (!ParentExpr)
551
- return Action::Continue (ArgList);
552
-
553
- ParentArgsTy Mapping;
554
- Mapping.Parent = ParentExpr;
555
- for (auto Arg : *ArgList) {
556
- auto res = Mapping.Args .try_emplace (Arg.getExpr (), Arg);
557
- assert (res.second && " Duplicate arguments?" );
558
- (void )res;
559
- }
560
- ParentArgs.push_back (std::move (Mapping));
561
- return Action::Continue (ArgList);
562
- }
537
+ ASTWalker::PreWalkAction
538
+ ModelASTWalker::walkToArgumentPre (const Argument &Arg) {
539
+ if (isVisitedBefore (Arg.getExpr ()))
540
+ return Action::SkipChildren ();
563
541
564
- ASTWalker::PostWalkResult<ArgumentList *>
565
- ModelASTWalker::walkToArgumentListPost (ArgumentList *ArgList) {
566
- if (Expr *ParentExpr = Parent.getAsExpr ()) {
567
- assert (ParentExpr == ParentArgs.back ().Parent &&
568
- " Unmatched walkToArgumentList(Pre|Post)" );
569
- ParentArgs.pop_back ();
542
+ auto *Elem = Arg.getExpr ();
543
+ if (isa<DefaultArgumentExpr>(Elem))
544
+ return Action::Continue ();
545
+
546
+ auto NL = Arg.getLabelLoc ();
547
+ auto Name = Arg.getLabel ();
548
+
549
+ SyntaxStructureNode SN;
550
+ SN.Kind = SyntaxStructureKind::Argument;
551
+ SN.BodyRange = charSourceRangeFromSourceRange (SM, Elem->getSourceRange ());
552
+ if (NL.isValid () && !Name.empty ()) {
553
+ SN.NameRange = CharSourceRange (NL, Name.getLength ());
554
+ SN.Range = charSourceRangeFromSourceRange (
555
+ SM, SourceRange (NL, Elem->getEndLoc ()));
556
+ passTokenNodesUntil (NL, ExcludeNodeAtLocation);
557
+ } else {
558
+ SN.Range = SN.BodyRange ;
570
559
}
571
- return Action::Continue (ArgList);
560
+
561
+ pushStructureNode (SN, Elem);
562
+ return Action::Continue ();
572
563
}
573
564
574
565
ASTWalker::PreWalkResult<Expr *> ModelASTWalker::walkToExprPre (Expr *E) {
575
566
if (isVisitedBefore (E))
576
567
return Action::SkipChildren (E);
577
568
578
- auto addCallArgExpr = [&](const Argument &Arg) {
579
- auto *Elem = Arg.getExpr ();
580
- if (isa<DefaultArgumentExpr>(Elem))
581
- return ;
582
-
583
- auto NL = Arg.getLabelLoc ();
584
- auto Name = Arg.getLabel ();
585
-
586
- SyntaxStructureNode SN;
587
- SN.Kind = SyntaxStructureKind::Argument;
588
- SN.BodyRange = charSourceRangeFromSourceRange (SM, Elem->getSourceRange ());
589
- if (NL.isValid () && !Name.empty ()) {
590
- SN.NameRange = CharSourceRange (NL, Name.getLength ());
591
- SN.Range = charSourceRangeFromSourceRange (
592
- SM, SourceRange (NL, Elem->getEndLoc ()));
593
- passTokenNodesUntil (NL, ExcludeNodeAtLocation);
594
- } else {
595
- SN.Range = SN.BodyRange ;
596
- }
597
-
598
- pushStructureNode (SN, Elem);
599
- };
600
-
601
- if (auto *ParentExpr = Parent.getAsExpr ()) {
602
- if (!ParentArgs.empty () && ParentArgs.back ().Parent == ParentExpr) {
603
- auto &ArgumentInfo = ParentArgs.back ().Args ;
604
- auto Arg = ArgumentInfo.find (E);
605
- if (Arg != ArgumentInfo.end ())
606
- addCallArgExpr (Arg->second );
607
- }
608
- }
609
-
610
569
if (E->isImplicit ())
611
570
return Action::Continue (E);
612
571
0 commit comments