diff options
Diffstat (limited to 'gnu/llvm/tools/clang/bindings/python/tests/cindex/util.py')
| -rw-r--r-- | gnu/llvm/tools/clang/bindings/python/tests/cindex/util.py | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/gnu/llvm/tools/clang/bindings/python/tests/cindex/util.py b/gnu/llvm/tools/clang/bindings/python/tests/cindex/util.py new file mode 100644 index 00000000000..c53ba7c81bd --- /dev/null +++ b/gnu/llvm/tools/clang/bindings/python/tests/cindex/util.py @@ -0,0 +1,75 @@ +# This file provides common utility functions for the test suite. + +from clang.cindex import Cursor +from clang.cindex import TranslationUnit + +def get_tu(source, lang='c', all_warnings=False, flags=[]): + """Obtain a translation unit from source and language. + + By default, the translation unit is created from source file "t.<ext>" + where <ext> is the default file extension for the specified language. By + default it is C, so "t.c" is the default file name. + + Supported languages are {c, cpp, objc}. + + all_warnings is a convenience argument to enable all compiler warnings. + """ + args = list(flags) + name = 't.c' + if lang == 'cpp': + name = 't.cpp' + args.append('-std=c++11') + elif lang == 'objc': + name = 't.m' + elif lang != 'c': + raise Exception('Unknown language: %s' % lang) + + if all_warnings: + args += ['-Wall', '-Wextra'] + + return TranslationUnit.from_source(name, args, unsaved_files=[(name, + source)]) + +def get_cursor(source, spelling): + """Obtain a cursor from a source object. + + This provides a convenient search mechanism to find a cursor with specific + spelling within a source. The first argument can be either a + TranslationUnit or Cursor instance. + + If the cursor is not found, None is returned. + """ + # Convenience for calling on a TU. + root_cursor = source if isinstance(source, Cursor) else source.cursor + + for cursor in root_cursor.walk_preorder(): + if cursor.spelling == spelling: + return cursor + + return None + +def get_cursors(source, spelling): + """Obtain all cursors from a source object with a specific spelling. + + This provides a convenient search mechanism to find all cursors with + specific spelling within a source. The first argument can be either a + TranslationUnit or Cursor instance. + + If no cursors are found, an empty list is returned. + """ + # Convenience for calling on a TU. + root_cursor = source if isinstance(source, Cursor) else source.cursor + + cursors = [] + for cursor in root_cursor.walk_preorder(): + if cursor.spelling == spelling: + cursors.append(cursor) + + return cursors + + +__all__ = [ + 'get_cursor', + 'get_cursors', + 'get_tu', +] |
