diff options
Diffstat (limited to 'contrib/llvm-project/clang/lib/AST/JSONNodeDumper.cpp')
-rw-r--r-- | contrib/llvm-project/clang/lib/AST/JSONNodeDumper.cpp | 71 |
1 files changed, 57 insertions, 14 deletions
diff --git a/contrib/llvm-project/clang/lib/AST/JSONNodeDumper.cpp b/contrib/llvm-project/clang/lib/AST/JSONNodeDumper.cpp index 3c11b75d7472..eeb314b8d32b 100644 --- a/contrib/llvm-project/clang/lib/AST/JSONNodeDumper.cpp +++ b/contrib/llvm-project/clang/lib/AST/JSONNodeDumper.cpp @@ -77,7 +77,7 @@ void JSONNodeDumper::Visit(const Type *T) { return; JOS.attribute("kind", (llvm::Twine(T->getTypeClassName()) + "Type").str()); - JOS.attribute("type", createQualType(QualType(T, 0), /*Desugar*/ false)); + JOS.attribute("type", createQualType(QualType(T, 0), /*Desugar=*/false)); attributeOnlyIfTrue("containsErrors", T->containsErrors()); attributeOnlyIfTrue("isDependent", T->isDependentType()); attributeOnlyIfTrue("isInstantiationDependent", @@ -96,6 +96,21 @@ void JSONNodeDumper::Visit(QualType T) { JOS.attribute("qualifiers", T.split().Quals.getAsString()); } +void JSONNodeDumper::Visit(TypeLoc TL) { + if (TL.isNull()) + return; + JOS.attribute("kind", + (llvm::Twine(TL.getTypeLocClass() == TypeLoc::Qualified + ? "Qualified" + : TL.getTypePtr()->getTypeClassName()) + + "TypeLoc") + .str()); + JOS.attribute("type", + createQualType(QualType(TL.getType()), /*Desugar=*/false)); + JOS.attributeObject("range", + [TL, this] { writeSourceRange(TL.getSourceRange()); }); +} + void JSONNodeDumper::Visit(const Decl *D) { JOS.attribute("id", createPointerRepresentation(D)); @@ -172,6 +187,8 @@ void JSONNodeDumper::Visit(const CXXCtorInitializer *Init) { llvm_unreachable("Unknown initializer type"); } +void JSONNodeDumper::Visit(const OpenACCClause *C) {} + void JSONNodeDumper::Visit(const OMPClause *C) {} void JSONNodeDumper::Visit(const BlockDecl::Capture &C) { @@ -220,7 +237,23 @@ void JSONNodeDumper::Visit(const APValue &Value, QualType Ty) { std::string Str; llvm::raw_string_ostream OS(Str); Value.printPretty(OS, Ctx, Ty); - JOS.attribute("value", OS.str()); + JOS.attribute("value", Str); +} + +void JSONNodeDumper::Visit(const ConceptReference *CR) { + JOS.attribute("kind", "ConceptReference"); + JOS.attribute("id", createPointerRepresentation(CR->getNamedConcept())); + if (const auto *Args = CR->getTemplateArgsAsWritten()) { + JOS.attributeArray("templateArgsAsWritten", [Args, this] { + for (const TemplateArgumentLoc &TAL : Args->arguments()) + JOS.object( + [&TAL, this] { Visit(TAL.getArgument(), TAL.getSourceRange()); }); + }); + } + JOS.attributeObject("loc", + [CR, this] { writeSourceLocation(CR->getLocation()); }); + JOS.attributeObject("range", + [CR, this] { writeSourceRange(CR->getSourceRange()); }); } void JSONNodeDumper::writeIncludeStack(PresumedLoc Loc, bool JustFirst) { @@ -664,7 +697,7 @@ void JSONNodeDumper::VisitArrayType(const ArrayType *AT) { void JSONNodeDumper::VisitConstantArrayType(const ConstantArrayType *CAT) { // FIXME: this should use ZExt instead of SExt, but JSON doesn't allow a // narrowing conversion to int64_t so it cannot be expressed. - JOS.attribute("size", CAT->getSize().getSExtValue()); + JOS.attribute("size", CAT->getSExtSize()); VisitArrayType(CAT); } @@ -769,7 +802,7 @@ void JSONNodeDumper::VisitTemplateSpecializationType( std::string Str; llvm::raw_string_ostream OS(Str); TST->getTemplateName().print(OS, PrintPolicy); - JOS.attribute("templateName", OS.str()); + JOS.attribute("templateName", Str); } void JSONNodeDumper::VisitInjectedClassNameType( @@ -791,7 +824,7 @@ void JSONNodeDumper::VisitElaboratedType(const ElaboratedType *ET) { std::string Str; llvm::raw_string_ostream OS(Str); NNS->print(OS, PrintPolicy, /*ResolveTemplateArgs*/ true); - JOS.attribute("qualifier", OS.str()); + JOS.attribute("qualifier", Str); } if (const TagDecl *TD = ET->getOwnedTagDecl()) JOS.attribute("ownedTagDecl", createBareDeclRef(TD)); @@ -850,9 +883,8 @@ void JSONNodeDumper::VisitNamespaceDecl(const NamespaceDecl *ND) { VisitNamedDecl(ND); attributeOnlyIfTrue("isInline", ND->isInline()); attributeOnlyIfTrue("isNested", ND->isNested()); - if (!ND->isOriginalNamespace()) - JOS.attribute("originalNamespace", - createBareDeclRef(ND->getOriginalNamespace())); + if (!ND->isFirstDecl()) + JOS.attribute("originalNamespace", createBareDeclRef(ND->getFirstDecl())); } void JSONNodeDumper::VisitUsingDirectiveDecl(const UsingDirectiveDecl *UDD) { @@ -942,6 +974,9 @@ void JSONNodeDumper::VisitFunctionDecl(const FunctionDecl *FD) { if (FD->isDefaulted()) JOS.attribute("explicitlyDefaulted", FD->isDeleted() ? "deleted" : "default"); + + if (StringLiteral *Msg = FD->getDeletedMessage()) + JOS.attribute("deletedMessage", Msg->getString()); } void JSONNodeDumper::VisitEnumDecl(const EnumDecl *ED) { @@ -992,7 +1027,7 @@ void JSONNodeDumper::VisitTemplateTypeParmDecl(const TemplateTypeParmDecl *D) { if (D->hasDefaultArgument()) JOS.attributeObject("defaultArg", [=] { - Visit(D->getDefaultArgument(), SourceRange(), + Visit(D->getDefaultArgument().getArgument(), SourceRange(), D->getDefaultArgStorage().getInheritedFrom(), D->defaultArgumentWasInherited() ? "inherited from" : "previous"); }); @@ -1008,7 +1043,7 @@ void JSONNodeDumper::VisitNonTypeTemplateParmDecl( if (D->hasDefaultArgument()) JOS.attributeObject("defaultArg", [=] { - Visit(D->getDefaultArgument(), SourceRange(), + Visit(D->getDefaultArgument().getArgument(), SourceRange(), D->getDefaultArgStorage().getInheritedFrom(), D->defaultArgumentWasInherited() ? "inherited from" : "previous"); }); @@ -1210,7 +1245,7 @@ void JSONNodeDumper::VisitObjCMessageExpr(const ObjCMessageExpr *OME) { llvm::raw_string_ostream OS(Str); OME->getSelector().print(OS); - JOS.attribute("selector", OS.str()); + JOS.attribute("selector", Str); switch (OME->getReceiverKind()) { case ObjCMessageExpr::Instance: @@ -1241,7 +1276,7 @@ void JSONNodeDumper::VisitObjCBoxedExpr(const ObjCBoxedExpr *OBE) { llvm::raw_string_ostream OS(Str); MD->getSelector().print(OS); - JOS.attribute("selector", OS.str()); + JOS.attribute("selector", Str); } } @@ -1250,7 +1285,7 @@ void JSONNodeDumper::VisitObjCSelectorExpr(const ObjCSelectorExpr *OSE) { llvm::raw_string_ostream OS(Str); OSE->getSelector().print(OS); - JOS.attribute("selector", OS.str()); + JOS.attribute("selector", Str); } void JSONNodeDumper::VisitObjCProtocolExpr(const ObjCProtocolExpr *OPE) { @@ -1543,6 +1578,14 @@ void JSONNodeDumper::VisitMaterializeTemporaryExpr( attributeOnlyIfTrue("boundToLValueRef", MTE->isBoundToLvalueReference()); } +void JSONNodeDumper::VisitCXXDefaultArgExpr(const CXXDefaultArgExpr *Node) { + attributeOnlyIfTrue("hasRewrittenInit", Node->hasRewrittenInit()); +} + +void JSONNodeDumper::VisitCXXDefaultInitExpr(const CXXDefaultInitExpr *Node) { + attributeOnlyIfTrue("hasRewrittenInit", Node->hasRewrittenInit()); +} + void JSONNodeDumper::VisitCXXDependentScopeMemberExpr( const CXXDependentScopeMemberExpr *DSME) { JOS.attribute("isArrow", DSME->isArrow()); @@ -1590,7 +1633,7 @@ void JSONNodeDumper::VisitStringLiteral(const StringLiteral *SL) { std::string Buffer; llvm::raw_string_ostream SS(Buffer); SL->outputString(SS); - JOS.attribute("value", SS.str()); + JOS.attribute("value", Buffer); } void JSONNodeDumper::VisitCXXBoolLiteralExpr(const CXXBoolLiteralExpr *BLE) { JOS.attribute("value", BLE->getValue()); |