diff options
author | Erick Velez <erickvelez7@gmail.com> | 2023-08-02 13:23:08 -0700 |
---|---|---|
committer | Erick Velez <erickvelez7@gmail.com> | 2023-08-02 13:23:45 -0700 |
commit | 20f7cc0df3c1520d874849609a8d74faa668775a (patch) | |
tree | 1836aaa4d2988b454b924b3dd57028f12ecf19b0 /clang/lib/ExtractAPI/DeclarationFragments.cpp | |
parent | e77e891d8953b487f5f06bf69225a61ef537f766 (diff) | |
download | llvm-20f7cc0df3c1520d874849609a8d74faa668775a.zip llvm-20f7cc0df3c1520d874849609a8d74faa668775a.tar.gz llvm-20f7cc0df3c1520d874849609a8d74faa668775a.tar.bz2 |
Revert "[clang][ExtractAPI] Add support for C++ classes"
This reverts commit 8b76b44e46ac5b4efbf8cb3702f09d353af2a112.
Diffstat (limited to 'clang/lib/ExtractAPI/DeclarationFragments.cpp')
-rw-r--r-- | clang/lib/ExtractAPI/DeclarationFragments.cpp | 257 |
1 files changed, 21 insertions, 236 deletions
diff --git a/clang/lib/ExtractAPI/DeclarationFragments.cpp b/clang/lib/ExtractAPI/DeclarationFragments.cpp index 375bdfbb..2033576 100644 --- a/clang/lib/ExtractAPI/DeclarationFragments.cpp +++ b/clang/lib/ExtractAPI/DeclarationFragments.cpp @@ -12,12 +12,8 @@ //===----------------------------------------------------------------------===// #include "clang/ExtractAPI/DeclarationFragments.h" -#include "clang/AST/Decl.h" -#include "clang/AST/DeclCXX.h" -#include "clang/Basic/OperatorKinds.h" #include "clang/ExtractAPI/TypedefUnderlyingTypeResolver.h" #include "clang/Index/USRGeneration.h" -#include "clang/Parse/Parser.h" #include "llvm/ADT/StringSwitch.h" using namespace clang::extractapi; @@ -88,59 +84,6 @@ DeclarationFragments::parseFragmentKindFromString(StringRef S) { .Default(DeclarationFragments::FragmentKind::None); } -DeclarationFragments DeclarationFragments::getExceptionSpecificationString( - ExceptionSpecificationType ExceptionSpec) { - DeclarationFragments Fragments; - switch (ExceptionSpec) { - case ExceptionSpecificationType::EST_None: - return Fragments; - case ExceptionSpecificationType::EST_DynamicNone: - return Fragments.append(" ", DeclarationFragments::FragmentKind::Text) - .append("throw", DeclarationFragments::FragmentKind::Keyword) - .append("(", DeclarationFragments::FragmentKind::Text) - .append(")", DeclarationFragments::FragmentKind::Text); - case ExceptionSpecificationType::EST_Dynamic: - // FIXME: throw(int), get types of inner expression - return Fragments; - case ExceptionSpecificationType::EST_BasicNoexcept: - - return Fragments.append(" ", DeclarationFragments::FragmentKind::Text) - .append("noexcept", DeclarationFragments::FragmentKind::Keyword); - case ExceptionSpecificationType::EST_DependentNoexcept: - // FIXME: throw(conditional-expression), get expression - break; - case ExceptionSpecificationType::EST_NoexceptFalse: - return Fragments.append(" ", DeclarationFragments::FragmentKind::Text) - .append("noexcept", DeclarationFragments::FragmentKind::Keyword) - .append("(", DeclarationFragments::FragmentKind::Text) - .append("false", DeclarationFragments::FragmentKind::Keyword) - .append(")", DeclarationFragments::FragmentKind::Text); - case ExceptionSpecificationType::EST_NoexceptTrue: - return Fragments.append(" ", DeclarationFragments::FragmentKind::Text) - .append("noexcept", DeclarationFragments::FragmentKind::Keyword) - .append("(", DeclarationFragments::FragmentKind::Text) - .append("true", DeclarationFragments::FragmentKind::Keyword) - .append(")", DeclarationFragments::FragmentKind::Text); - default: - return Fragments; - } - - llvm_unreachable("Unhandled exception specification"); -} - -DeclarationFragments -DeclarationFragments::getStructureTypeFragment(const RecordDecl *Record) { - DeclarationFragments Fragments; - if (Record->isStruct()) - Fragments.append("struct", DeclarationFragments::FragmentKind::Keyword); - else if (Record->isUnion()) - Fragments.append("union", DeclarationFragments::FragmentKind::Keyword); - else - Fragments.append("class", DeclarationFragments::FragmentKind::Keyword); - - return Fragments; -} - // NNS stores C++ nested name specifiers, which are prefixes to qualified names. // Build declaration fragments for NNS recursively so that we have the USR for // every part in a qualified name, and also leaves the actual underlying type @@ -426,9 +369,6 @@ DeclarationFragments DeclarationFragmentsBuilder::getFragmentsForType( DeclarationFragments DeclarationFragmentsBuilder::getFragmentsForVar(const VarDecl *Var) { DeclarationFragments Fragments; - if (Var->isConstexpr()) - Fragments.append("constexpr ", DeclarationFragments::FragmentKind::Keyword); - StorageClass SC = Var->getStorageClass(); if (SC != SC_None) Fragments @@ -498,10 +438,7 @@ DeclarationFragmentsBuilder::getFragmentsForFunction(const FunctionDecl *Func) { case SC_Register: llvm_unreachable("invalid for functions"); } - if (Func->isConsteval()) // if consteval, it is also constexpr - Fragments.append("consteval ", DeclarationFragments::FragmentKind::Keyword); - else if (Func->isConstexpr()) - Fragments.append("constexpr ", DeclarationFragments::FragmentKind::Keyword); + // FIXME: Handle C++ function specifiers: constexpr, consteval, explicit, etc. // FIXME: Is `after` actually needed here? DeclarationFragments After; @@ -520,9 +457,6 @@ DeclarationFragmentsBuilder::getFragmentsForFunction(const FunctionDecl *Func) { } Fragments.append(")", DeclarationFragments::FragmentKind::Text); - Fragments.append(DeclarationFragments::getExceptionSpecificationString( - Func->getExceptionSpecType())); - // FIXME: Handle exception specifiers: throw, noexcept return Fragments.append(";", DeclarationFragments::FragmentKind::Text); } @@ -559,13 +493,7 @@ DeclarationFragmentsBuilder::getFragmentsForEnum(const EnumDecl *EnumDecl) { DeclarationFragments DeclarationFragmentsBuilder::getFragmentsForField(const FieldDecl *Field) { DeclarationFragments After; - DeclarationFragments Fragments; - if (Field->isMutable()) - Fragments.append("mutable", DeclarationFragments::FragmentKind::Keyword) - .appendSpace(); - return Fragments - .append( - getFragmentsForType(Field->getType(), Field->getASTContext(), After)) + return getFragmentsForType(Field->getType(), Field->getASTContext(), After) .appendSpace() .append(Field->getName(), DeclarationFragments::FragmentKind::Identifier) .append(std::move(After)) @@ -587,156 +515,6 @@ DeclarationFragmentsBuilder::getFragmentsForStruct(const RecordDecl *Record) { return Fragments.append(";", DeclarationFragments::FragmentKind::Text); } -DeclarationFragments DeclarationFragmentsBuilder::getFragmentsForCXXClass( - const CXXRecordDecl *Record) { - if (const auto *TypedefNameDecl = Record->getTypedefNameForAnonDecl()) - return getFragmentsForTypedef(TypedefNameDecl); - - DeclarationFragments Fragments; - Fragments.append(DeclarationFragments::getStructureTypeFragment(Record)); - - if (!Record->getName().empty()) - Fragments.appendSpace().append( - Record->getName(), DeclarationFragments::FragmentKind::Identifier); - - return Fragments.append(";", DeclarationFragments::FragmentKind::Text); -} - -DeclarationFragments -DeclarationFragmentsBuilder::getFragmentsForSpecialCXXMethod( - const CXXMethodDecl *Method) { - DeclarationFragments Fragments; - std::string Name; - if (isa<CXXConstructorDecl>(Method)) { - auto *Constructor = dyn_cast<CXXConstructorDecl>(Method); - Name = cast<CXXRecordDecl>(Constructor->getDeclContext())->getName(); - if (Constructor->isExplicit()) - Fragments.append("explicit", DeclarationFragments::FragmentKind::Keyword) - .appendSpace(); - } else if (isa<CXXDestructorDecl>(Method)) - Name = Method->getNameAsString(); - - DeclarationFragments After; - Fragments.append(Name, DeclarationFragments::FragmentKind::Identifier) - .append(std::move(After)); - Fragments.append("(", DeclarationFragments::FragmentKind::Text); - for (unsigned i = 0, end = Method->getNumParams(); i != end; ++i) { - if (i) - Fragments.append(", ", DeclarationFragments::FragmentKind::Text); - Fragments.append(getFragmentsForParam(Method->getParamDecl(i))); - } - Fragments.append(")", DeclarationFragments::FragmentKind::Text); - - Fragments.append(DeclarationFragments::getExceptionSpecificationString( - Method->getExceptionSpecType())); - - return Fragments.append(";", DeclarationFragments::FragmentKind::Text); -} - -DeclarationFragments DeclarationFragmentsBuilder::getFragmentsForCXXMethod( - const CXXMethodDecl *Method) { - DeclarationFragments Fragments; - StringRef Name; - Name = Method->getName(); - if (Method->isStatic()) - Fragments.append("static", DeclarationFragments::FragmentKind::Keyword) - .appendSpace(); - if (Method->isConstexpr()) - Fragments.append("constexpr", DeclarationFragments::FragmentKind::Keyword) - .appendSpace(); - if (Method->isVolatile()) - Fragments.append("volatile", DeclarationFragments::FragmentKind::Keyword) - .appendSpace(); - - // Build return type - DeclarationFragments After; - Fragments - .append(getFragmentsForType(Method->getReturnType(), - Method->getASTContext(), After)) - .appendSpace() - .append(Name, DeclarationFragments::FragmentKind::Identifier) - .append(std::move(After)); - Fragments.append("(", DeclarationFragments::FragmentKind::Text); - for (unsigned i = 0, end = Method->getNumParams(); i != end; ++i) { - if (i) - Fragments.append(", ", DeclarationFragments::FragmentKind::Text); - Fragments.append(getFragmentsForParam(Method->getParamDecl(i))); - } - Fragments.append(")", DeclarationFragments::FragmentKind::Text); - - if (Method->isConst()) - Fragments.appendSpace().append("const", - DeclarationFragments::FragmentKind::Keyword); - - Fragments.append(DeclarationFragments::getExceptionSpecificationString( - Method->getExceptionSpecType())); - - return Fragments.append(";", DeclarationFragments::FragmentKind::Text); -} - -DeclarationFragments -DeclarationFragmentsBuilder::getFragmentsForConversionFunction( - const CXXConversionDecl *ConversionFunction) { - DeclarationFragments Fragments; - - if (ConversionFunction->isExplicit()) - Fragments.append("explicit", DeclarationFragments::FragmentKind::Keyword) - .appendSpace(); - - Fragments.append("operator", DeclarationFragments::FragmentKind::Keyword) - .appendSpace(); - - Fragments - .append(ConversionFunction->getConversionType().getAsString(), - DeclarationFragments::FragmentKind::TypeIdentifier) - .append("(", DeclarationFragments::FragmentKind::Text); - for (unsigned i = 0, end = ConversionFunction->getNumParams(); i != end; - ++i) { - if (i) - Fragments.append(", ", DeclarationFragments::FragmentKind::Text); - Fragments.append(getFragmentsForParam(ConversionFunction->getParamDecl(i))); - } - Fragments.append(")", DeclarationFragments::FragmentKind::Text); - - if (ConversionFunction->isConst()) - Fragments.appendSpace().append("const", - DeclarationFragments::FragmentKind::Keyword); - - return Fragments.append(";", DeclarationFragments::FragmentKind::Text); -} - -DeclarationFragments -DeclarationFragmentsBuilder::getFragmentsForOverloadedOperator( - const CXXMethodDecl *Method) { - DeclarationFragments Fragments; - - // Build return type - DeclarationFragments After; - Fragments - .append(getFragmentsForType(Method->getReturnType(), - Method->getASTContext(), After)) - .appendSpace() - .append(Method->getNameAsString(), - DeclarationFragments::FragmentKind::Identifier) - .append(std::move(After)); - Fragments.append("(", DeclarationFragments::FragmentKind::Text); - for (unsigned i = 0, end = Method->getNumParams(); i != end; ++i) { - if (i) - Fragments.append(", ", DeclarationFragments::FragmentKind::Text); - Fragments.append(getFragmentsForParam(Method->getParamDecl(i))); - } - Fragments.append(")", DeclarationFragments::FragmentKind::Text); - - if (Method->isConst()) - Fragments.appendSpace().append("const", - DeclarationFragments::FragmentKind::Keyword); - - Fragments.append(DeclarationFragments::getExceptionSpecificationString( - Method->getExceptionSpecType())); - - return Fragments.append(";", DeclarationFragments::FragmentKind::Text); -} - DeclarationFragments DeclarationFragmentsBuilder::getFragmentsForMacro(StringRef Name, const MacroDirective *MD) { @@ -987,6 +765,24 @@ DeclarationFragments DeclarationFragmentsBuilder::getFragmentsForTypedef( return Fragments.append(";", DeclarationFragments::FragmentKind::Text); } +template <typename FunctionT> +FunctionSignature +DeclarationFragmentsBuilder::getFunctionSignature(const FunctionT *Function) { + FunctionSignature Signature; + + DeclarationFragments ReturnType, After; + ReturnType + .append(getFragmentsForType(Function->getReturnType(), + Function->getASTContext(), After)) + .append(std::move(After)); + Signature.setReturnType(ReturnType); + + for (const auto *Param : Function->parameters()) + Signature.addParameter(Param->getName(), getFragmentsForParam(Param)); + + return Signature; +} + // Instantiate template for FunctionDecl. template FunctionSignature DeclarationFragmentsBuilder::getFunctionSignature(const FunctionDecl *); @@ -999,18 +795,7 @@ DeclarationFragmentsBuilder::getFunctionSignature(const ObjCMethodDecl *); DeclarationFragments DeclarationFragmentsBuilder::getSubHeading(const NamedDecl *Decl) { DeclarationFragments Fragments; - if (isa<CXXConstructorDecl>(Decl) || isa<CXXDestructorDecl>(Decl)) - Fragments.append(cast<CXXRecordDecl>(Decl->getDeclContext())->getName(), - DeclarationFragments::FragmentKind::Identifier); - else if (isa<CXXConversionDecl>(Decl)) { - Fragments.append( - cast<CXXConversionDecl>(Decl)->getConversionType().getAsString(), - DeclarationFragments::FragmentKind::Identifier); - } else if (isa<CXXMethodDecl>(Decl) && - cast<CXXMethodDecl>(Decl)->isOverloadedOperator()) { - Fragments.append(Decl->getNameAsString(), - DeclarationFragments::FragmentKind::Identifier); - } else if (!Decl->getName().empty()) + if (!Decl->getName().empty()) Fragments.append(Decl->getName(), DeclarationFragments::FragmentKind::Identifier); return Fragments; |