| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- # 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',
- ]
|