From 6c8959b71b10c9369fa13997bbc6d0772009f9a0 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Sat, 16 Jan 2010 14:00:32 +0000 Subject: Give CXCursor_ObjCSuperClassRef a sane encoding, which is only known to CXCursor.cpp. llvm-svn: 93634 --- clang/tools/CIndex/CIndex.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'clang/tools/CIndex/CIndex.cpp') diff --git a/clang/tools/CIndex/CIndex.cpp b/clang/tools/CIndex/CIndex.cpp index 0ecb54a86f4..e58a08a0d6c 100644 --- a/clang/tools/CIndex/CIndex.cpp +++ b/clang/tools/CIndex/CIndex.cpp @@ -209,6 +209,7 @@ class CDeclVisitor : public DeclVisitor { CXCursor C = { CK, { ND, 0, 0 } }; Callback(CDecl, C, CData); } + public: CDeclVisitor(CXDecl C, CXDeclIterator cback, CXClientData D, unsigned MaxPCHLevel) : @@ -276,7 +277,10 @@ void CDeclVisitor::VisitObjCImplementationDecl(ObjCImplementationDecl *D) { void CDeclVisitor::VisitObjCInterfaceDecl(ObjCInterfaceDecl *D) { // Issue callbacks for super class. if (D->getSuperClass()) - Call(CXCursor_ObjCSuperClassRef, D); + Callback(CDecl, + MakeCursorObjCSuperClassRef(D->getSuperClass(), + D->getSuperClassLoc()), + CData); for (ObjCProtocolDecl::protocol_iterator I = D->protocol_begin(), E = D->protocol_end(); I != E; ++I) @@ -340,11 +344,9 @@ static SourceLocation getLocationFromCursor(CXCursor C, assert(OID && "clang_getCursorLine(): Missing category decl"); return OID->getClassInterface()->getLocation(); } - case CXCursor_ObjCSuperClassRef: { - ObjCInterfaceDecl *OID = dyn_cast(ND); - assert(OID && "clang_getCursorLine(): Missing interface decl"); - return OID->getSuperClassLoc(); - } + case CXCursor_ObjCSuperClassRef: + return getCursorObjCSuperClassRef(C).second; + case CXCursor_ObjCProtocolRef: { ObjCProtocolDecl *OID = dyn_cast(ND); assert(OID && "clang_getCursorLine(): Missing protocol decl"); @@ -761,10 +763,8 @@ CXString clang_getCursorSpelling(CXCursor C) { if (clang_isReference(C.kind)) { switch (C.kind) { case CXCursor_ObjCSuperClassRef: { - ObjCInterfaceDecl *OID = dyn_cast(ND); - assert(OID && "clang_getCursorLine(): Missing interface decl"); - return CIndexer::createCXString(OID->getSuperClass()->getIdentifier() - ->getNameStart()); + ObjCInterfaceDecl *Super = getCursorObjCSuperClassRef(C).first; + return CIndexer::createCXString(Super->getIdentifier()->getNameStart()); } case CXCursor_ObjCClassRef: { if (ObjCInterfaceDecl *OID = dyn_cast(ND)) -- cgit v1.2.3