[cfe-commits] r86577 - /cfe/trunk/tools/CIndex/CIndex.cpp
steve naroff
snaroff at apple.com
Mon Nov 9 11:30:22 PST 2009
Thanks for the cleanup (looks nicer)...
snaroff
On Nov 9, 2009, at 2:13 PM, Benjamin Kramer wrote:
> Author: d0k
> Date: Mon Nov 9 13:13:48 2009
> New Revision: 86577
>
> URL: http://llvm.org/viewvc/llvm-project?rev=86577&view=rev
> Log:
> Factor CXString creation into a helper method.
>
> Modified:
> cfe/trunk/tools/CIndex/CIndex.cpp
>
> Modified: cfe/trunk/tools/CIndex/CIndex.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/CIndex/CIndex.cpp?rev=86577&r1=86576&r2=86577&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- cfe/trunk/tools/CIndex/CIndex.cpp (original)
> +++ cfe/trunk/tools/CIndex/CIndex.cpp Mon Nov 9 13:13:48 2009
> @@ -417,6 +417,18 @@
> }
> }
>
> +static CXString createCXString(const char *String, bool DupString =
> false) {
> + CXString Str;
> + if (DupString) {
> + Str.Spelling = strdup(String);
> + Str.MustFreeString = 1;
> + } else {
> + Str.Spelling = String;
> + Str.MustFreeString = 0;
> + }
> + return Str;
> +}
> +
> extern "C" {
>
> CXIndex clang_createIndex(int excludeDeclarationsFromPCH,
> @@ -545,10 +557,7 @@
> {
> assert(CTUnit && "Passed null CXTranslationUnit");
> ASTUnit *CXXUnit = static_cast<ASTUnit *>(CTUnit);
> - CXString string;
> - string.Spelling = strdup(CXXUnit-
> >getOriginalSourceFileName().c_str());
> - string.MustFreeString = 1;
> - return string;
> + return createCXString(CXXUnit-
> >getOriginalSourceFileName().c_str(), true);
> }
>
> void clang_loadTranslationUnit(CXTranslationUnit CTUnit,
> @@ -617,23 +626,20 @@
> {
> assert(AnonDecl && "Passed null CXDecl");
> NamedDecl *ND = static_cast<NamedDecl *>(AnonDecl);
> - CXString string;
>
> - string.MustFreeString = 0;
> - if (ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(ND)) {
> - string.Spelling = strdup(OMD-
> >getSelector().getAsString().c_str());
> - string.MustFreeString = 1;
> - }
> - else if (ObjCCategoryImplDecl *CIMP =
> dyn_cast<ObjCCategoryImplDecl>(ND))
> + if (ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(ND))
> + return createCXString(OMD->getSelector().getAsString().c_str(),
> true);
> +
> + if (ObjCCategoryImplDecl *CIMP =
> dyn_cast<ObjCCategoryImplDecl>(ND))
> // No, this isn't the same as the code below. getIdentifier() is
> non-virtual
> // and returns different names. NamedDecl returns the class name
> and
> // ObjCCategoryImplDecl returns the category name.
> - string.Spelling = CIMP->getIdentifier()->getNameStart();
> - else if (ND->getIdentifier())
> - string.Spelling = ND->getIdentifier()->getNameStart();
> - else
> - string.Spelling = "";
> - return string;
> + return createCXString(CIMP->getIdentifier()->getNameStart());
> +
> + if (ND->getIdentifier())
> + return createCXString(ND->getIdentifier()->getNameStart());
> +
> + return createCXString("");
> }
>
> unsigned clang_getDeclLine(CXDecl AnonDecl)
> @@ -697,38 +703,32 @@
> NamedDecl *ND = static_cast<NamedDecl *>(C.decl);
>
> if (clang_isReference(C.kind)) {
> - CXString string;
> - string.MustFreeString = 0;
> switch (C.kind) {
> case CXCursor_ObjCSuperClassRef: {
> ObjCInterfaceDecl *OID = dyn_cast<ObjCInterfaceDecl>(ND);
> assert(OID && "clang_getCursorLine(): Missing interface
> decl");
> - string.Spelling = OID->getSuperClass()->getIdentifier()-
> >getNameStart();
> - break;
> + return createCXString(OID->getSuperClass()->getIdentifier()
> + ->getNameStart());
> }
> case CXCursor_ObjCClassRef: {
> - if (ObjCInterfaceDecl *OID =
> dyn_cast<ObjCInterfaceDecl>(ND)) {
> - string.Spelling = OID->getIdentifier()->getNameStart();
> - } else {
> - ObjCCategoryDecl *OCD = dyn_cast<ObjCCategoryDecl>(ND);
> - assert(OCD && "clang_getCursorLine(): Missing category
> decl");
> - string.Spelling = OCD->getClassInterface()-
> >getIdentifier()->getNameStart();
> - }
> - break;
> + if (ObjCInterfaceDecl *OID = dyn_cast<ObjCInterfaceDecl>(ND))
> + return createCXString(OID->getIdentifier()-
> >getNameStart());
> +
> + ObjCCategoryDecl *OCD = dyn_cast<ObjCCategoryDecl>(ND);
> + assert(OCD && "clang_getCursorLine(): Missing category
> decl");
> + return createCXString(OCD->getClassInterface()-
> >getIdentifier()
> + ->getNameStart());
> }
> case CXCursor_ObjCProtocolRef: {
> ObjCProtocolDecl *OID = dyn_cast<ObjCProtocolDecl>(ND);
> assert(OID && "clang_getCursorLine(): Missing protocol decl");
> - string.Spelling = OID->getIdentifier()->getNameStart();
> - break;
> + return createCXString(OID->getIdentifier()->getNameStart());
> }
> case CXCursor_ObjCSelectorRef: {
> ObjCMessageExpr *OME = dyn_cast<ObjCMessageExpr>(
> static_cast<Stmt *>(C.stmt));
> assert(OME && "clang_getCursorLine(): Missing message expr");
> - string.Spelling = strdup(OME-
> >getSelector().getAsString().c_str());
> - string.MustFreeString = 1;
> - break;
> + return createCXString(OME-
> >getSelector().getAsString().c_str(), true);
> }
> case CXCursor_VarRef:
> case CXCursor_FunctionRef:
> @@ -736,14 +736,11 @@
> DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(
> static_cast<Stmt *>(C.stmt));
> assert(DRE && "clang_getCursorLine(): Missing decl ref expr");
> - string.Spelling = DRE->getDecl()->getIdentifier()-
> >getNameStart();
> - break;
> + return createCXString(DRE->getDecl()->getIdentifier()-
> >getNameStart());
> }
> default:
> - string.Spelling = "<not implemented>";
> - break;
> + return createCXString("<not implemented>");
> }
> - return string;
> }
> return clang_getDeclSpelling(C.decl);
> }
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list