11f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc# This file provides common utility functions for the test suite. 21f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc 31f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorcfrom clang.cindex import Cursor 4fbf620bc2b7812e826f04befa31d3a48a86210baGregory Szorcfrom clang.cindex import TranslationUnit 51f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc 6411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisdef get_tu(source, lang='c', all_warnings=False, flags=[]): 71f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc """Obtain a translation unit from source and language. 81f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc 91f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc By default, the translation unit is created from source file "t.<ext>" 101f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc where <ext> is the default file extension for the specified language. By 111f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc default it is C, so "t.c" is the default file name. 121f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc 131f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc Supported languages are {c, cpp, objc}. 141f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc 151f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc all_warnings is a convenience argument to enable all compiler warnings. 161f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc """ 17411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis args = list(flags) 181f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc name = 't.c' 191f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc if lang == 'cpp': 201f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc name = 't.cpp' 215b82b9606d9e36134724d5638efbc9d60fc8be90Anders Waldenborg args.append('-std=c++11') 221f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc elif lang == 'objc': 231f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc name = 't.m' 241f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc elif lang != 'c': 251f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc raise Exception('Unknown language: %s' % lang) 261f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc 271f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc if all_warnings: 285b82b9606d9e36134724d5638efbc9d60fc8be90Anders Waldenborg args += ['-Wall', '-Wextra'] 291f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc 30fbf620bc2b7812e826f04befa31d3a48a86210baGregory Szorc return TranslationUnit.from_source(name, args, unsaved_files=[(name, 31fbf620bc2b7812e826f04befa31d3a48a86210baGregory Szorc source)]) 321f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc 331f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorcdef get_cursor(source, spelling): 341f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc """Obtain a cursor from a source object. 351f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc 361f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc This provides a convenient search mechanism to find a cursor with specific 371f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc spelling within a source. The first argument can be either a 381f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc TranslationUnit or Cursor instance. 391f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc 401f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc If the cursor is not found, None is returned. 411f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc """ 42ef8225444452a1486bd721f3285301fe84643b00Stephen Hines # Convenience for calling on a TU. 43ef8225444452a1486bd721f3285301fe84643b00Stephen Hines root_cursor = source if isinstance(source, Cursor) else source.cursor 44ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 45ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for cursor in root_cursor.walk_preorder(): 461f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc if cursor.spelling == spelling: 471f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc return cursor 481f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc 491f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc return None 50ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 51667fd80de4c3b7b143ba98a3b73e9b9b200f6af0Manuel Klimekdef get_cursors(source, spelling): 52667fd80de4c3b7b143ba98a3b73e9b9b200f6af0Manuel Klimek """Obtain all cursors from a source object with a specific spelling. 531f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc 54ef8225444452a1486bd721f3285301fe84643b00Stephen Hines This provides a convenient search mechanism to find all cursors with 55ef8225444452a1486bd721f3285301fe84643b00Stephen Hines specific spelling within a source. The first argument can be either a 56667fd80de4c3b7b143ba98a3b73e9b9b200f6af0Manuel Klimek TranslationUnit or Cursor instance. 57667fd80de4c3b7b143ba98a3b73e9b9b200f6af0Manuel Klimek 58667fd80de4c3b7b143ba98a3b73e9b9b200f6af0Manuel Klimek If no cursors are found, an empty list is returned. 59667fd80de4c3b7b143ba98a3b73e9b9b200f6af0Manuel Klimek """ 60ef8225444452a1486bd721f3285301fe84643b00Stephen Hines # Convenience for calling on a TU. 61ef8225444452a1486bd721f3285301fe84643b00Stephen Hines root_cursor = source if isinstance(source, Cursor) else source.cursor 62ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 63667fd80de4c3b7b143ba98a3b73e9b9b200f6af0Manuel Klimek cursors = [] 64ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for cursor in root_cursor.walk_preorder(): 65667fd80de4c3b7b143ba98a3b73e9b9b200f6af0Manuel Klimek if cursor.spelling == spelling: 66667fd80de4c3b7b143ba98a3b73e9b9b200f6af0Manuel Klimek cursors.append(cursor) 67667fd80de4c3b7b143ba98a3b73e9b9b200f6af0Manuel Klimek 68667fd80de4c3b7b143ba98a3b73e9b9b200f6af0Manuel Klimek return cursors 69667fd80de4c3b7b143ba98a3b73e9b9b200f6af0Manuel Klimek 701f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc 711f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc__all__ = [ 721f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc 'get_cursor', 73667fd80de4c3b7b143ba98a3b73e9b9b200f6af0Manuel Klimek 'get_cursors', 741f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc 'get_tu', 751f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc] 76