Author: eugenis Date: Tue Jul 10 12:48:53 2018 New Revision: 336715 URL: http://llvm.org/viewvc/llvm-project?rev=336715&view=rev Log: Revert r336591 "[libclang] NFC, simplify clang_Cursor_Evaluate"
This change is blocking r336590 which is being reverted due to memory leaks. Modified: cfe/trunk/tools/libclang/CIndex.cpp Modified: cfe/trunk/tools/libclang/CIndex.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndex.cpp?rev=336715&r1=336714&r2=336715&view=diff ============================================================================== --- cfe/trunk/tools/libclang/CIndex.cpp (original) +++ cfe/trunk/tools/libclang/CIndex.cpp Tue Jul 10 12:48:53 2018 @@ -3889,32 +3889,33 @@ static const ExprEvalResult* evaluateExp 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; +CXEvalResult clang_Cursor_Evaluate(CXCursor 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))); } - 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))); + 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; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits