[PATCH] D88106: [SyntaxTree] Provide iterator-like functions for Lists
Eduardo Caldas via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 26 09:27:00 PDT 2020
eduucaldas abandoned this revision.
eduucaldas added inline comments.
================
Comment at: clang/include/clang/Tooling/Syntax/Tree.h:252
+ Kind = IteratorKind::NotSentinel;
+ if (isElement(Begin))
+ Current = getWithDelimiter(cast<ElementType>(Begin));
----------------
Since `NodeRole` is forward declared, we cannot access `NodeRole::ListElement` within the header, this is my work-around.
Another possibility would be to not forward declare and put `NodeRole` definition here. I think this is a bad choice because most roles are linked to syntax.
I declare `isElement` as a static private member function of `List` from lack of better place, I accept suggestions.
================
Comment at: clang/include/clang/Tooling/Syntax/Tree.h:390
+
+ ElementAndDelimiterIterator<Node> getBeforeBeginNode();
+ ElementAndDelimiterIterator<Node> getBeginNode();
----------------
I have a hard time finding a name that is expressive enough and concise enough. The current one seems to imply that we're getting a node...
Alternatives:
* `getBeforeBeginWithElementAsNode`
* `getBeforeBeginWithNodes`
* `getBeforeBeginBase`
* `getBeforeBeginNodeAndDelimiter`
================
Comment at: clang/include/clang/Tooling/Syntax/Tree.h:241-242
/// "a; b; c" <=> [("a" , ";"), ("b" , ";" ), ("c" , null)]
+ template <typename ElementType>
+ class ElementAndDelimiterIterator
+ : public llvm::iterator_facade_base<
----------------
eduucaldas wrote:
> Since we're gonna provide strongly-typed iterators, I make the Iterator a class template.
>
> I keep the base functions as they were, `getElementAndDelimiterAfter...`, but I cast their result using `castToElementType`.
>
> Another option would be to make the base functions also templated and not perform any casting.
>
> We'll use `castToElementType` to provide the strongly-typed iterators as well.
Ignore comment above
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D88106/new/
https://reviews.llvm.org/D88106
More information about the cfe-commits
mailing list