This revision was automatically updated to reflect the committed changes. sammccall marked an inline comment as done. Closed by commit rG9e83d0bcdfe8: [clangd] Mention when CXXThis is implicit in exposed AST. (authored by sammccall).
Changed prior to commit: https://reviews.llvm.org/D91868?vs=306681&id=307363#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D91868/new/ 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 @@ -234,6 +234,14 @@ 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"; + return ""; + } if (isa<IntegerLiteral>(S) || isa<FloatingLiteral>(S) || isa<FixedPointLiteral>(S) || isa<CharacterLiteral>(S) || isa<ImaginaryLiteral>(S) || isa<CXXBoolLiteralExpr>(S))
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits