brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · 5e66a9d Raw
77 lines · python
1# This file provides common utility functions for the test suite.2 3from clang.cindex import Cursor, TranslationUnit4 5 6def get_tu(source, lang="c", all_warnings=False, flags=[]):7    """Obtain a translation unit from source and language.8 9    By default, the translation unit is created from source file "t.<ext>"10    where <ext> is the default file extension for the specified language. By11    default it is C, so "t.c" is the default file name.12 13    Supported languages are {c, cpp, objc}.14 15    all_warnings is a convenience argument to enable all compiler warnings.16    """17    args = list(flags)18    name = "t.c"19    if lang == "cpp":20        name = "t.cpp"21        args.append("-std=c++11")22    elif lang == "objc":23        name = "t.m"24    elif lang != "c":25        raise Exception("Unknown language: %s" % lang)26 27    if all_warnings:28        args += ["-Wall", "-Wextra"]29 30    return TranslationUnit.from_source(name, args, unsaved_files=[(name, source)])31 32 33def get_cursor(source, spelling):34    """Obtain a cursor from a source object.35 36    This provides a convenient search mechanism to find a cursor with specific37    spelling within a source. The first argument can be either a38    TranslationUnit or Cursor instance.39 40    If the cursor is not found, None is returned.41    """42    # Convenience for calling on a TU.43    root_cursor = source if isinstance(source, Cursor) else source.cursor44 45    for cursor in root_cursor.walk_preorder():46        if cursor.spelling == spelling:47            return cursor48 49    return None50 51 52def get_cursors(source, spelling):53    """Obtain all cursors from a source object with a specific spelling.54 55    This provides a convenient search mechanism to find all cursors with56    specific spelling within a source. The first argument can be either a57    TranslationUnit or Cursor instance.58 59    If no cursors are found, an empty list is returned.60    """61    # Convenience for calling on a TU.62    root_cursor = source if isinstance(source, Cursor) else source.cursor63 64    cursors = []65    for cursor in root_cursor.walk_preorder():66        if cursor.spelling == spelling:67            cursors.append(cursor)68 69    return cursors70 71 72__all__ = [73    "get_cursor",74    "get_cursors",75    "get_tu",76]77