[PATCH] D84348: WIP: Add complete id-expression support to syntax trees
Dmitri Gribenko via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Jul 24 12:10:29 PDT 2020
gribozavr2 added inline comments.
================
Comment at: clang/include/clang/Tooling/Syntax/Nodes.h:295
syntax::NestedNameSpecifier *qualifier();
- // TODO after expose `id-expression` from `DependentScopeDeclRefExpr`:
// Add accessor for `template_opt`.
+ syntax::Leaf *templateKeyword();
----------------
You can remove this todo now.
================
Comment at: clang/lib/Tooling/Syntax/BuildTree.cpp:748
+ bool isDecltype(const Type &T) {
+ return T.getTypeClass() == Type::TypeClass::Decltype;
+ }
----------------
Please use `isa<DecltypeType>(T)` and inline this expression into its only user.
================
Comment at: clang/lib/Tooling/Syntax/BuildTree.cpp:753
+ return T.getTypeClass() == Type::TypeClass::TemplateSpecialization ||
+ T.getTypeClass() == Type::TypeClass::DependentTemplateSpecialization;
+ }
----------------
Ditto, please use `isa` and inline into the only user.
================
Comment at: clang/lib/Tooling/Syntax/BuildTree.cpp:803
+ // The 'template' keyword is always present in dependent template
+ // specializations
+ SR.setBegin(DependentTL.getTemplateKeywordLoc());
----------------
... except in the case of incorrect code. Feel free to just add a TODO.
================
Comment at: clang/lib/Tooling/Syntax/BuildTree.cpp:819
+ auto *NS = BuildNameSpecifier(*NNS);
+ if (!syntax::GlobalNameSpecifier::classof(NS))
+ Builder.foldNode(Builder.getRange(getLocalSourceRange(it)), NS,
----------------
Please use `isa<GlobalNameSpecifier>(NS)`.
================
Comment at: clang/lib/Tooling/Syntax/BuildTree.cpp:821
+ Builder.foldNode(Builder.getRange(getLocalSourceRange(it)), NS,
+ nullptr);
+ Builder.markChild(NS, syntax::NodeRole::NestedNameSpecifier_specifier);
----------------
Could you add an overload for `foldNode` that takes a `NestedNameSpecifierLoc` but ignores it, just like we have an overload of `foldNode` that takes a `TypeLoc` but ignores it?
================
Comment at: clang/lib/Tooling/Syntax/BuildTree.cpp:834
+ // FIXME: I feel like this could be upstreamed.
+ SourceRange getUnqualifiedIdSourceRange(DeclRefExpr *S) {
+ if (S->hasExplicitTemplateArgs())
----------------
WDYM by "upstream"?
================
Comment at: clang/lib/Tooling/Syntax/BuildTree.cpp:844
+ if (auto TKL = S->getTemplateKeywordLoc(); TKL.isValid())
+ Builder.markChildToken(TKL, syntax::NodeRole::TemplateKeyword);
----------------
Please don't use C++17, Clang uses C++14 now.
================
Comment at: clang/unittests/Tooling/Syntax/TreeTest.cpp:873
template<typename T>
- static T f(){}
+ struct TS {
+ static void f();
----------------
TS => ST (struct template?)
================
Comment at: clang/unittests/Tooling/Syntax/TreeTest.cpp:879
+template<typename T>
+struct TS {
+ struct S {
----------------
ST
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D84348/new/
https://reviews.llvm.org/D84348
More information about the cfe-commits
mailing list