[cfe-commits] r161753 - in /cfe/trunk: test/Tooling/clang-check-ast-dump.cpp tools/clang-check/ClangCheck.cpp
Alexander Kornienko
alexfh at google.com
Mon Aug 13 03:50:08 PDT 2012
Author: alexfh
Date: Mon Aug 13 05:50:08 2012
New Revision: 161753
URL: http://llvm.org/viewvc/llvm-project?rev=161753&view=rev
Log:
Implemented -ast-dump, -ast-print, -ast-dump-filter options in clang-check
Added:
cfe/trunk/test/Tooling/clang-check-ast-dump.cpp
Modified:
cfe/trunk/tools/clang-check/ClangCheck.cpp
Added: cfe/trunk/test/Tooling/clang-check-ast-dump.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Tooling/clang-check-ast-dump.cpp?rev=161753&view=auto
==============================================================================
--- cfe/trunk/test/Tooling/clang-check-ast-dump.cpp (added)
+++ cfe/trunk/test/Tooling/clang-check-ast-dump.cpp Mon Aug 13 05:50:08 2012
@@ -0,0 +1,35 @@
+// RUN: clang-check -ast-dump "%s" -- 2>&1 | FileCheck %s
+// CHECK: namespace test_namespace
+// CHECK-NEXT: class TheClass
+// CHECK: int theMethod(int x) (CompoundStmt
+// CHECK-NEXT: (ReturnStmt
+// CHECK-NEXT: (BinaryOperator
+//
+// RUN: clang-check -ast-dump -ast-dump-filter test_namespace::TheClass::theMethod "%s" -- 2>&1 | FileCheck -check-prefix CHECK-FILTER %s
+// CHECK-FILTER-NOT: namespace test_namespace
+// CHECK-FILTER-NOT: class TheClass
+// CHECK-FILTER: int theMethod(int x) (CompoundStmt
+// CHECK-FILTER-NEXT: (ReturnStmt
+// CHECK-FILTER-NEXT: (BinaryOperator
+//
+// RUN: clang-check -ast-print "%s" -- 2>&1 | FileCheck -check-prefix CHECK-PRINT %s
+// CHECK-PRINT: namespace test_namespace
+// CHECK-PRINT: class TheClass
+// CHECK-PRINT: int theMethod(int x)
+//
+// RUN: clang-check -ast-list "%s" -- 2>&1 | FileCheck -check-prefix CHECK-LIST %s
+// CHECK-LIST: test_namespace
+// CHECK-LIST-NEXT: test_namespace::TheClass
+// CHECK-LIST-NEXT: test_namespace::TheClass::theMethod
+// CHECK-LIST-NEXT: x
+
+namespace test_namespace {
+
+class TheClass {
+public:
+ int theMethod(int x) {
+ return x + x;
+ }
+};
+
+}
Modified: cfe/trunk/tools/clang-check/ClangCheck.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-check/ClangCheck.cpp?rev=161753&r1=161752&r2=161753&view=diff
==============================================================================
--- cfe/trunk/tools/clang-check/ClangCheck.cpp (original)
+++ cfe/trunk/tools/clang-check/ClangCheck.cpp Mon Aug 13 05:50:08 2012
@@ -17,10 +17,15 @@
//===----------------------------------------------------------------------===//
#include "llvm/Support/CommandLine.h"
+#include "clang/AST/ASTConsumer.h"
+#include "clang/Driver/OptTable.h"
+#include "clang/Driver/Options.h"
+#include "clang/Frontend/ASTConsumers.h"
#include "clang/Frontend/FrontendActions.h"
#include "clang/Tooling/CommandLineClangTool.h"
#include "clang/Tooling/Tooling.h"
+using namespace clang::driver;
using namespace clang::tooling;
using namespace llvm;
@@ -38,9 +43,46 @@
"\trules described above.\n"
"\n";
+namespace {
+class ActionFactory {
+public:
+ ActionFactory()
+ : Options(createDriverOptTable()),
+ ASTDump(
+ "ast-dump",
+ cl::desc(Options->getOptionHelpText(options::OPT_ast_dump))),
+ ASTList(
+ "ast-list",
+ cl::desc(Options->getOptionHelpText(options::OPT_ast_list))),
+ ASTPrint(
+ "ast-print",
+ cl::desc(Options->getOptionHelpText(options::OPT_ast_print))),
+ ASTDumpFilter(
+ "ast-dump-filter",
+ cl::desc(Options->getOptionHelpText(options::OPT_ast_dump_filter))) {}
+
+ clang::ASTConsumer *newASTConsumer() {
+ if (ASTList)
+ return clang::CreateASTDeclNodeLister();
+ if (ASTDump)
+ return clang::CreateASTDumper(ASTDumpFilter);
+ if (ASTPrint)
+ return clang::CreateASTPrinter(&llvm::outs(), ASTDumpFilter);
+ return new clang::ASTConsumer();
+ }
+private:
+ OwningPtr<OptTable> Options;
+ cl::opt<bool> ASTDump;
+ cl::opt<bool> ASTList;
+ cl::opt<bool> ASTPrint;
+ cl::opt<std::string> ASTDumpFilter;
+};
+}
+
int main(int argc, const char **argv) {
+ ActionFactory Factory;
CommandLineClangTool Tool;
cl::extrahelp MoreHelp(MoreHelpText);
Tool.initialize(argc, argv);
- return Tool.run(newFrontendActionFactory<clang::SyntaxOnlyAction>());
+ return Tool.run(newFrontendActionFactory(&Factory));
}
More information about the cfe-commits
mailing list