[PATCH] D90240: [SyntaxTree] Add reverse links to syntax Nodes.

Sam McCall via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Oct 27 09:12:22 PDT 2020


sammccall added inline comments.


================
Comment at: clang/include/clang/Tooling/Syntax/Tree.h:109
   Node *getNextSibling() { return NextSibling; }
+  const Node *getPreviousSibling() const { return PreviousSibling; }
+  Node *getPreviousSibling() { return PreviousSibling; }
----------------
(Not something to change in this patch...)
Since adding the "get" prefixes, getNextSibling() and now getPreviousSibling() are pretty verbose, we might consider getNext()/getPrevious()


================
Comment at: clang/include/clang/Tooling/Syntax/Tree.h:189
   /// EXPECTS: Child->Role != Detached
   void prependChildLowLevel(Node *Child);
   friend class TreeBuilder;
----------------
gribozavr2 wrote:
> eduucaldas wrote:
> > Should we provide an `appendChildLowLevel` as well?
> > 
> > That has one use inside `foldChildren` in `BuildTree.cpp`. 
> > Currently this function does a reverse iteration prepending children. We could change that into a forward iteration appending. There is no impact in time-complexity. This change would just improve readability inside this function.
> There is some awkwardness in foldChildren because we can only go in reverse -- maybe append is indeed more natural.
Consider `insert(Node *Child, const Node *Before)` where Before=Null means append.

This is fairly ergonomic for common cases: 
 - append: `insert(N, null)`
 - prepend: `insert(N, N->firstChild())`
 - insert-before: `insert(N, M)`
 - insert-after: `insert(N, M->nextSibling())`

(Either before or after works fine, before matches STL insert better)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90240/new/

https://reviews.llvm.org/D90240



More information about the cfe-commits mailing list