diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2017-06-09 01:20:48 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2017-06-09 01:20:48 +0000 |
commit | 4ed69c25ab95ef923b9917a3c3599665ca7bbda7 (patch) | |
tree | 952df9ebbe1e305b9f001b390ed07bf9f6a91b1a /tools/c-index-test | |
parent | 12bfbed8ef5bd7575f1880c93e50d9a1bee5ee8e (diff) |
[libclang] Introduce a new parsing option 'CXTranslationUnit_SingleFileParse' that puts preprocessor in a mode for parsing a single file only.
This is useful for parsing a single file, as a fast/inaccurate 'mode' that can still provide declarations from the file, like the classes and their methods.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@305044 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/c-index-test')
-rw-r--r-- | tools/c-index-test/c-index-test.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c index 31ad828a2f..d25ae117a6 100644 --- a/tools/c-index-test/c-index-test.c +++ b/tools/c-index-test/c-index-test.c @@ -1850,6 +1850,34 @@ int perform_test_reparse_source(int argc, const char **argv, int trials, return result; } +static int perform_single_file_parse(const char *filename) { + CXIndex Idx; + CXTranslationUnit TU; + enum CXErrorCode Err; + int result; + + Idx = clang_createIndex(/* excludeDeclsFromPCH */1, + /* displayDiagnostics=*/1); + + Err = clang_parseTranslationUnit2(Idx, filename, + /*command_line_args=*/NULL, + /*num_command_line_args=*/0, + /*unsaved_files=*/NULL, + /*num_unsaved_files=*/0, + CXTranslationUnit_SingleFileParse, &TU); + if (Err != CXError_Success) { + fprintf(stderr, "Unable to load translation unit!\n"); + describeLibclangFailure(Err); + clang_disposeIndex(Idx); + return 1; + } + + result = perform_test_load(Idx, TU, /*filter=*/"all", /*prefix=*/NULL, FilteredPrintingVisitor, /*PostVisit=*/NULL, + /*CommentSchemaFile=*/NULL); + clang_disposeIndex(Idx); + return result; +} + /******************************************************************************/ /* Logic for testing clang_getCursor(). */ /******************************************************************************/ @@ -4439,6 +4467,8 @@ int cindextest_main(int argc, const char **argv) { return perform_test_load_source(argc - 3, argv + 3, argv[2], I, postVisit); } + else if (argc >= 3 && strcmp(argv[1], "-single-file-parse") == 0) + return perform_single_file_parse(argv[2]); else if (argc >= 4 && strcmp(argv[1], "-test-file-scan") == 0) return perform_file_scan(argv[2], argv[3], argc >= 5 ? argv[4] : 0); |