sammccall created this revision.
sammccall added a reviewer: kadircet.
Herald added subscribers: cfe-commits, usaxena95, arphaman.
Herald added a project: clang.
sammccall requested review of this revision.
Herald added subscribers: MaskRay, ilya-biryukov.
Seeing an implicit this in the AST is pretty confusing I think.
While here, also mention when `this` is const.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D91868
Files:
clang-tools-extra/clangd/DumpAST.cpp
clang-tools-extra/clangd/unittests/DumpASTTests.cpp
Index: clang-tools-extra/clangd/unittests/DumpASTTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/DumpASTTests.cpp
+++ clang-tools-extra/clangd/unittests/DumpASTTests.cpp
@@ -76,29 +76,32 @@
type: Record - S
)"},
{R"cpp(
-template <typename T> int root() {
- (void)root<unsigned>();
+namespace root {
+template <typename T> int tmpl() {
+ (void)tmpl<unsigned>();
return T::value;
+}
}
)cpp",
R"(
-declaration: FunctionTemplate - root
- declaration: TemplateTypeParm - T
- declaration: Function - root
- type: FunctionProto
- type: Builtin - int
- statement: Compound
- expression: CStyleCast - ToVoid
- type: Builtin - void
- expression: Call
- expression: ImplicitCast - FunctionToPointerDecay
- expression: DeclRef - root
- template argument: Type
- type: Builtin - unsigned int
- statement: Return
- expression: DependentScopeDeclRef - value
- specifier: TypeSpec
- type: TemplateTypeParm - T
+declaration: Namespace - root
+ declaration: FunctionTemplate - tmpl
+ declaration: TemplateTypeParm - T
+ declaration: Function - tmpl
+ type: FunctionProto
+ type: Builtin - int
+ statement: Compound
+ expression: CStyleCast - ToVoid
+ type: Builtin - void
+ expression: Call
+ expression: ImplicitCast - FunctionToPointerDecay
+ expression: DeclRef - tmpl
+ template argument: Type
+ type: Builtin - unsigned int
+ statement: Return
+ expression: DependentScopeDeclRef - value
+ specifier: TypeSpec
+ type: TemplateTypeParm - T
)"},
{R"cpp(
struct Foo { char operator+(int); };
@@ -116,10 +119,28 @@
type: Record - Foo
expression: IntegerLiteral - 42
)"},
+ {R"cpp(
+struct Bar {
+ int x;
+ int root() const {
+ return x;
+ }
+};
+ )cpp",
+ R"(
+declaration: CXXMethod - root
+ type: FunctionProto
+ type: Builtin - int
+ statement: Compound
+ statement: Return
+ expression: ImplicitCast - LValueToRValue
+ expression: Member - x
+ expression: CXXThis - const, implicit
+ )"},
};
for (const auto &Case : Cases) {
ParsedAST AST = TestTU::withCode(Case.first).build();
- auto Node = dumpAST(DynTypedNode::create(findDecl(AST, "root")),
+ auto Node = dumpAST(DynTypedNode::create(findUnqualifiedDecl(AST, "root")),
AST.getTokens(), AST.getASTContext());
EXPECT_EQ(llvm::StringRef(Case.second).trim(),
llvm::StringRef(llvm::to_string(Node)).trim());
Index: clang-tools-extra/clangd/DumpAST.cpp
===================================================================
--- clang-tools-extra/clangd/DumpAST.cpp
+++ clang-tools-extra/clangd/DumpAST.cpp
@@ -230,6 +230,13 @@
return UnaryOperator::getOpcodeStr(UO->getOpcode()).str();
if (const auto *CCO = dyn_cast<CXXConstructExpr>(S))
return CCO->getConstructor()->getNameAsString();
+ if (const auto *CTE = dyn_cast<CXXThisExpr>(S)) {
+ bool Const = CTE->getType()->getPointeeType().isLocalConstQualified();
+ if (CTE->isImplicit())
+ return Const ? "const, implicit" : "implicit";
+ if (Const)
+ return "const";
+ }
if (isa<IntegerLiteral>(S) || isa<FloatingLiteral>(S) ||
isa<FixedPointLiteral>(S) || isa<CharacterLiteral>(S) ||
isa<ImaginaryLiteral>(S) || isa<CXXBoolLiteralExpr>(S))
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits