[llvm-branch-commits] [cfe-branch] r119631 - /cfe/branches/Apple/whitney/tools/libclang/CIndex.cpp
Daniel Dunbar
daniel at zuster.org
Wed Nov 17 18:36:48 PST 2010
Author: ddunbar
Date: Wed Nov 17 20:36:48 2010
New Revision: 119631
URL: http://llvm.org/viewvc/llvm-project?rev=119631&view=rev
Log:
Merge r118928:
--
Author: Ted Kremenek <kremenek at apple.com>
Date: Fri Nov 12 21:34:12 2010 +0000
CursorVisitor: migrate CompoundLiteralExpr over to data-recursion algorithm.
Modified:
cfe/branches/Apple/whitney/tools/libclang/CIndex.cpp
Modified: cfe/branches/Apple/whitney/tools/libclang/CIndex.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/Apple/whitney/tools/libclang/CIndex.cpp?rev=119631&r1=119630&r2=119631&view=diff
==============================================================================
--- cfe/branches/Apple/whitney/tools/libclang/CIndex.cpp (original)
+++ cfe/branches/Apple/whitney/tools/libclang/CIndex.cpp Wed Nov 17 20:36:48 2010
@@ -136,12 +136,15 @@
class VisitorJob {
public:
- enum Kind { DeclVisitKind, StmtVisitKind, MemberExprPartsKind };
+ enum Kind { DeclVisitKind, StmtVisitKind, MemberExprPartsKind,
+ TypeLocVisitKind };
protected:
- void *data;
+ void *dataA;
+ void *dataB;
CXCursor parent;
Kind K;
- VisitorJob(void *d, CXCursor C, Kind k) : data(d), parent(C), K(k) {}
+ VisitorJob(CXCursor C, Kind k, void *d1, void *d2 = 0)
+ : dataA(d1), dataB(d2), parent(C), K(k) {}
public:
Kind getKind() const { return K; }
const CXCursor &getParent() const { return parent; }
@@ -153,9 +156,9 @@
#define DEF_JOB(NAME, DATA, KIND)\
class NAME : public VisitorJob {\
public:\
- NAME(DATA *d, CXCursor parent) : VisitorJob(d, parent, VisitorJob::KIND) {}\
+ NAME(DATA *d, CXCursor parent) : VisitorJob(parent, VisitorJob::KIND, d) {} \
static bool classof(const VisitorJob *VJ) { return VJ->getKind() == KIND; }\
- DATA *get() const { return static_cast<DATA*>(data); }\
+ DATA *get() const { return static_cast<DATA*>(dataA); }\
};
DEF_JOB(DeclVisit, Decl, DeclVisitKind)
@@ -163,6 +166,22 @@
DEF_JOB(MemberExprParts, MemberExpr, MemberExprPartsKind)
#undef DEF_JOB
+class TypeLocVisit : public VisitorJob {
+public:
+ TypeLocVisit(TypeLoc tl, CXCursor parent) :
+ VisitorJob(parent, VisitorJob::TypeLocVisitKind,
+ tl.getType().getAsOpaquePtr(), tl.getOpaqueData()) {}
+
+ static bool classof(const VisitorJob *VJ) {
+ return VJ->getKind() == TypeLocVisitKind;
+ }
+
+ TypeLoc get() {
+ QualType T = QualType::getFromOpaquePtr(dataA);
+ return TypeLoc(T, dataB);
+ }
+};
+
static inline void WLAddStmt(VisitorWorkList &WL, CXCursor Parent, Stmt *S) {
if (S)
WL.push_back(StmtVisit(S, Parent));
@@ -171,6 +190,11 @@
if (D)
WL.push_back(DeclVisit(D, Parent));
}
+static inline void WLAddTypeLoc(VisitorWorkList &WL, CXCursor Parent,
+ TypeSourceInfo *TI) {
+ if (TI)
+ WL.push_back(TypeLocVisit(TI->getTypeLoc(), Parent));
+}
// Cursor visitor.
class CursorVisitor : public DeclVisitor<CursorVisitor, bool>,
@@ -348,7 +372,6 @@
// Expression visitors
bool VisitDeclRefExpr(DeclRefExpr *E);
bool VisitBlockExpr(BlockExpr *B);
- bool VisitCompoundLiteralExpr(CompoundLiteralExpr *E);
bool VisitExplicitCastExpr(ExplicitCastExpr *E);
bool VisitObjCMessageExpr(ObjCMessageExpr *E);
bool VisitObjCEncodeExpr(ObjCEncodeExpr *E);
@@ -375,6 +398,7 @@
#define DATA_RECURSIVE_VISIT(NAME)\
bool Visit##NAME(NAME *S) { return VisitDataRecursive(S); }
DATA_RECURSIVE_VISIT(BinaryOperator)
+ DATA_RECURSIVE_VISIT(CompoundLiteralExpr)
DATA_RECURSIVE_VISIT(CXXMemberCallExpr)
DATA_RECURSIVE_VISIT(CXXOperatorCallExpr)
DATA_RECURSIVE_VISIT(DoStmt)
@@ -1578,14 +1602,6 @@
return VisitCastExpr(E);
}
-bool CursorVisitor::VisitCompoundLiteralExpr(CompoundLiteralExpr *E) {
- if (TypeSourceInfo *TSInfo = E->getTypeSourceInfo())
- if (Visit(TSInfo->getTypeLoc()))
- return true;
-
- return VisitExpr(E);
-}
-
bool CursorVisitor::VisitAddrLabelExpr(AddrLabelExpr *E) {
return Visit(MakeCursorLabelRef(E->getLabel(), E->getLabelLoc(), TU));
}
@@ -1868,6 +1884,12 @@
default:
EnqueueChildren(WL, C, S);
break;
+ case Stmt::CompoundLiteralExprClass: {
+ CompoundLiteralExpr *CL = cast<CompoundLiteralExpr>(S);
+ EnqueueChildren(WL, C, CL);
+ WLAddTypeLoc(WL, C, CL->getTypeSourceInfo());
+ break;
+ }
case Stmt::CXXOperatorCallExprClass: {
CXXOperatorCallExpr *CE = cast<CXXOperatorCallExpr>(S);
// Note that we enqueue things in reverse order so that
@@ -1966,6 +1988,12 @@
continue;
}
+ case VisitorJob::TypeLocVisitKind: {
+ // Perform default visitation for TypeLocs.
+ if (Visit(cast<TypeLocVisit>(LI).get()))
+ return true;
+ continue;
+ }
case VisitorJob::StmtVisitKind: {
Stmt *S = cast<StmtVisit>(LI).get();
if (!S)
@@ -1984,6 +2012,7 @@
case Stmt::BinaryOperatorClass:
case Stmt::CallExprClass:
case Stmt::CaseStmtClass:
+ case Stmt::CompoundLiteralExprClass:
case Stmt::CompoundStmtClass:
case Stmt::CXXMemberCallExprClass:
case Stmt::CXXOperatorCallExprClass:
More information about the llvm-branch-commits
mailing list