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:
Evgeniy Stepanov 2018-07-10 19:48:53 +00:00
parent f90ad5b327
commit 9b8714961d
1 changed files with 26 additions and 25 deletions

View File

@ -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;
}