Revert r336591 "[libclang] NFC, simplify clang_Cursor_Evaluate"
This change is blocking r336590 which is being reverted due to memory leaks. llvm-svn: 336715
This commit is contained in:
parent
f90ad5b327
commit
9b8714961d
|
@ -3889,32 +3889,33 @@ static const ExprEvalResult* evaluateExpr(Expr *expr, CXCursor C) {
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
static const Expr *evaluateDeclExpr(const Decl *D) {
|
||||
if (!D)
|
||||
return nullptr;
|
||||
if (auto *Var = dyn_cast<VarDecl>(D))
|
||||
return Var->getInit();
|
||||
else if (auto *Field = dyn_cast<FieldDecl>(D))
|
||||
return Field->getInClassInitializer();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
static const Expr *evaluateCompoundStmtExpr(const CompoundStmt *CS) {
|
||||
assert(CS && "invalid compound statement");
|
||||
for (auto *bodyIterator : CS->body()) {
|
||||
if (const auto *E = dyn_cast<Expr>(bodyIterator))
|
||||
return E;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
CXEvalResult clang_Cursor_Evaluate(CXCursor C) {
|
||||
if (const Expr *E =
|
||||
clang_getCursorKind(C) == CXCursor_CompoundStmt
|
||||
? evaluateCompoundStmtExpr(cast<CompoundStmt>(getCursorStmt(C)))
|
||||
: evaluateDeclExpr(getCursorDecl(C)))
|
||||
return const_cast<CXEvalResult>(
|
||||
reinterpret_cast<const void *>(evaluateExpr(const_cast<Expr *>(E), C)));
|
||||
if (clang_getCursorKind(C) == CXCursor_CompoundStmt) {
|
||||
const CompoundStmt *compoundStmt = cast<CompoundStmt>(getCursorStmt(C));
|
||||
Expr *expr = nullptr;
|
||||
for (auto *bodyIterator : compoundStmt->body()) {
|
||||
if ((expr = dyn_cast<Expr>(bodyIterator))) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (expr)
|
||||
return const_cast<CXEvalResult>(
|
||||
reinterpret_cast<const void *>(evaluateExpr(expr, C)));
|
||||
}
|
||||
|
||||
const Decl *D = getCursorDecl(C);
|
||||
if (D) {
|
||||
const Expr *expr = nullptr;
|
||||
if (auto *Var = dyn_cast<VarDecl>(D)) {
|
||||
expr = Var->getInit();
|
||||
} else if (auto *Field = dyn_cast<FieldDecl>(D)) {
|
||||
expr = Field->getInClassInitializer();
|
||||
}
|
||||
if (expr)
|
||||
return const_cast<CXEvalResult>(reinterpret_cast<const void *>(
|
||||
evaluateExpr(const_cast<Expr *>(expr), C)));
|
||||
return nullptr;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue