1860576050b4d163a2f182cfdd67d8c5a48e32c08Gregory Szorcfrom clang.cindex import CursorKind 2860576050b4d163a2f182cfdd67d8c5a48e32c08Gregory Szorcfrom clang.cindex import TypeKind 3860576050b4d163a2f182cfdd67d8c5a48e32c08Gregory Szorcfrom nose.tools import raises 41f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorcfrom .util import get_cursor 51f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorcfrom .util import get_tu 62312f5f4df83f8f624765d9cb86fc8f0dc9c2659Argyrios Kyrtzidis 72312f5f4df83f8f624765d9cb86fc8f0dc9c2659Argyrios KyrtzidiskInput = """\ 82312f5f4df83f8f624765d9cb86fc8f0dc9c2659Argyrios Kyrtzidis 92312f5f4df83f8f624765d9cb86fc8f0dc9c2659Argyrios Kyrtzidistypedef int I; 102312f5f4df83f8f624765d9cb86fc8f0dc9c2659Argyrios Kyrtzidis 112312f5f4df83f8f624765d9cb86fc8f0dc9c2659Argyrios Kyrtzidisstruct teststruct { 122312f5f4df83f8f624765d9cb86fc8f0dc9c2659Argyrios Kyrtzidis int a; 132312f5f4df83f8f624765d9cb86fc8f0dc9c2659Argyrios Kyrtzidis I b; 142312f5f4df83f8f624765d9cb86fc8f0dc9c2659Argyrios Kyrtzidis long c; 152312f5f4df83f8f624765d9cb86fc8f0dc9c2659Argyrios Kyrtzidis unsigned long d; 162312f5f4df83f8f624765d9cb86fc8f0dc9c2659Argyrios Kyrtzidis signed long e; 172312f5f4df83f8f624765d9cb86fc8f0dc9c2659Argyrios Kyrtzidis const int f; 182312f5f4df83f8f624765d9cb86fc8f0dc9c2659Argyrios Kyrtzidis int *g; 192312f5f4df83f8f624765d9cb86fc8f0dc9c2659Argyrios Kyrtzidis int ***h; 202312f5f4df83f8f624765d9cb86fc8f0dc9c2659Argyrios Kyrtzidis}; 212312f5f4df83f8f624765d9cb86fc8f0dc9c2659Argyrios Kyrtzidis 222312f5f4df83f8f624765d9cb86fc8f0dc9c2659Argyrios Kyrtzidis""" 232312f5f4df83f8f624765d9cb86fc8f0dc9c2659Argyrios Kyrtzidis 24826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorcdef test_a_struct(): 25826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc tu = get_tu(kInput) 2638d2d5539e72ce3d92c4746b632f3a7c2e48b4a2Douglas Gregor 27826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc teststruct = get_cursor(tu, 'teststruct') 28826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert teststruct is not None, "Could not find teststruct." 29826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc fields = list(teststruct.get_children()) 30826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert all(x.kind == CursorKind.FIELD_DECL for x in fields) 31826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 32826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[0].spelling == 'a' 33826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert not fields[0].type.is_const_qualified() 34826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[0].type.kind == TypeKind.INT 35826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[0].type.get_canonical().kind == TypeKind.INT 36826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 37826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[1].spelling == 'b' 38826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert not fields[1].type.is_const_qualified() 39826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[1].type.kind == TypeKind.TYPEDEF 40826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[1].type.get_canonical().kind == TypeKind.INT 41826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[1].type.get_declaration().spelling == 'I' 42826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 43826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[2].spelling == 'c' 44826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert not fields[2].type.is_const_qualified() 45826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[2].type.kind == TypeKind.LONG 46826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[2].type.get_canonical().kind == TypeKind.LONG 47826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 48826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[3].spelling == 'd' 49826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert not fields[3].type.is_const_qualified() 50826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[3].type.kind == TypeKind.ULONG 51826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[3].type.get_canonical().kind == TypeKind.ULONG 52826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 53826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[4].spelling == 'e' 54826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert not fields[4].type.is_const_qualified() 55826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[4].type.kind == TypeKind.LONG 56826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[4].type.get_canonical().kind == TypeKind.LONG 57826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 58826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[5].spelling == 'f' 59826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[5].type.is_const_qualified() 60826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[5].type.kind == TypeKind.INT 61826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[5].type.get_canonical().kind == TypeKind.INT 62826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 63826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[6].spelling == 'g' 64826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert not fields[6].type.is_const_qualified() 65826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[6].type.kind == TypeKind.POINTER 66826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[6].type.get_pointee().kind == TypeKind.INT 67826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 68826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[7].spelling == 'h' 69826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert not fields[7].type.is_const_qualified() 70826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[7].type.kind == TypeKind.POINTER 71826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[7].type.get_pointee().kind == TypeKind.POINTER 72826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[7].type.get_pointee().get_pointee().kind == TypeKind.POINTER 73826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[7].type.get_pointee().get_pointee().get_pointee().kind == TypeKind.INT 7438d2d5539e72ce3d92c4746b632f3a7c2e48b4a2Douglas Gregor 7538d2d5539e72ce3d92c4746b632f3a7c2e48b4a2Douglas GregorconstarrayInput=""" 7638d2d5539e72ce3d92c4746b632f3a7c2e48b4a2Douglas Gregorstruct teststruct { 7738d2d5539e72ce3d92c4746b632f3a7c2e48b4a2Douglas Gregor void *A[2]; 7838d2d5539e72ce3d92c4746b632f3a7c2e48b4a2Douglas Gregor}; 7938d2d5539e72ce3d92c4746b632f3a7c2e48b4a2Douglas Gregor""" 8038d2d5539e72ce3d92c4746b632f3a7c2e48b4a2Douglas Gregordef testConstantArray(): 8131cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc tu = get_tu(constarrayInput) 8238d2d5539e72ce3d92c4746b632f3a7c2e48b4a2Douglas Gregor 83826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc teststruct = get_cursor(tu, 'teststruct') 84826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert teststruct is not None, "Didn't find teststruct??" 85826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc fields = list(teststruct.get_children()) 86826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[0].spelling == 'A' 87826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[0].type.kind == TypeKind.CONSTANTARRAY 88826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[0].type.get_array_element_type() is not None 89826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[0].type.get_array_element_type().kind == TypeKind.POINTER 90826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert fields[0].type.get_array_size() == 2 9196ad633771182c54b5b62fa4be23f866ed0beb15Gregory Szorc 927eb691a7b61ba895695bbbf92e944d98ef49390dGregory Szorcdef test_equal(): 937eb691a7b61ba895695bbbf92e944d98ef49390dGregory Szorc """Ensure equivalence operators work on Type.""" 947eb691a7b61ba895695bbbf92e944d98ef49390dGregory Szorc source = 'int a; int b; void *v;' 957eb691a7b61ba895695bbbf92e944d98ef49390dGregory Szorc tu = get_tu(source) 967eb691a7b61ba895695bbbf92e944d98ef49390dGregory Szorc 97826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc a = get_cursor(tu, 'a') 98826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc b = get_cursor(tu, 'b') 99826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc v = get_cursor(tu, 'v') 1007eb691a7b61ba895695bbbf92e944d98ef49390dGregory Szorc 1017eb691a7b61ba895695bbbf92e944d98ef49390dGregory Szorc assert a is not None 1027eb691a7b61ba895695bbbf92e944d98ef49390dGregory Szorc assert b is not None 1037eb691a7b61ba895695bbbf92e944d98ef49390dGregory Szorc assert v is not None 1047eb691a7b61ba895695bbbf92e944d98ef49390dGregory Szorc 1057eb691a7b61ba895695bbbf92e944d98ef49390dGregory Szorc assert a.type == b.type 1067eb691a7b61ba895695bbbf92e944d98ef49390dGregory Szorc assert a.type != v.type 1077eb691a7b61ba895695bbbf92e944d98ef49390dGregory Szorc 1087eb691a7b61ba895695bbbf92e944d98ef49390dGregory Szorc assert a.type != None 1097eb691a7b61ba895695bbbf92e944d98ef49390dGregory Szorc assert a.type != 'foo' 1107eb691a7b61ba895695bbbf92e944d98ef49390dGregory Szorc 1116e67eed3276f16edac4ab4ef5a36d2b896e18288Gregory Szorcdef test_typekind_spelling(): 1126e67eed3276f16edac4ab4ef5a36d2b896e18288Gregory Szorc """Ensure TypeKind.spelling works.""" 1136e67eed3276f16edac4ab4ef5a36d2b896e18288Gregory Szorc tu = get_tu('int a;') 1146e67eed3276f16edac4ab4ef5a36d2b896e18288Gregory Szorc a = get_cursor(tu, 'a') 1156e67eed3276f16edac4ab4ef5a36d2b896e18288Gregory Szorc 1166e67eed3276f16edac4ab4ef5a36d2b896e18288Gregory Szorc assert a is not None 1176e67eed3276f16edac4ab4ef5a36d2b896e18288Gregory Szorc assert a.type.kind.spelling == 'Int' 1186e67eed3276f16edac4ab4ef5a36d2b896e18288Gregory Szorc 119826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorcdef test_function_argument_types(): 120826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc """Ensure that Type.argument_types() works as expected.""" 121826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc tu = get_tu('void f(int, int);') 122826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc f = get_cursor(tu, 'f') 123826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert f is not None 124826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 125826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc args = f.type.argument_types() 126826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert args is not None 127826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert len(args) == 2 128826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 129826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc t0 = args[0] 130826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert t0 is not None 131826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert t0.kind == TypeKind.INT 132826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 133826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc t1 = args[1] 134826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert t1 is not None 135826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert t1.kind == TypeKind.INT 136826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 137826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc args2 = list(args) 138826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert len(args2) == 2 139826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert t0 == args2[0] 140826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert t1 == args2[1] 141826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 142826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc@raises(TypeError) 143826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorcdef test_argument_types_string_key(): 144826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc """Ensure that non-int keys raise a TypeError.""" 145826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc tu = get_tu('void f(int, int);') 146826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc f = get_cursor(tu, 'f') 147826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert f is not None 148826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 149826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc args = f.type.argument_types() 150826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert len(args) == 2 151826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 152826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc args['foo'] 153826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 154826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc@raises(IndexError) 155826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorcdef test_argument_types_negative_index(): 156826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc """Ensure that negative indexes on argument_types Raises an IndexError.""" 157826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc tu = get_tu('void f(int, int);') 158826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc f = get_cursor(tu, 'f') 159826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc args = f.type.argument_types() 160826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 161826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc args[-1] 162826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 163826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc@raises(IndexError) 164826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorcdef test_argument_types_overflow_index(): 165826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc """Ensure that indexes beyond the length of Type.argument_types() raise.""" 166826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc tu = get_tu('void f(int, int);') 167826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc f = get_cursor(tu, 'f') 168826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc args = f.type.argument_types() 169826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 170826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc args[2] 171826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 172826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc@raises(Exception) 173826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorcdef test_argument_types_invalid_type(): 174826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc """Ensure that obtaining argument_types on a Type without them raises.""" 175826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc tu = get_tu('int i;') 176826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc i = get_cursor(tu, 'i') 177826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc assert i is not None 178826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 179826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc i.type.argument_types() 180826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc 18196ad633771182c54b5b62fa4be23f866ed0beb15Gregory Szorcdef test_is_pod(): 1828261345a32e58dfb5f4269ed92e1608a4ec3379aGregory Szorc """Ensure Type.is_pod() works.""" 18331cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc tu = get_tu('int i; void f();') 184826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc i = get_cursor(tu, 'i') 185826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc f = get_cursor(tu, 'f') 18696ad633771182c54b5b62fa4be23f866ed0beb15Gregory Szorc 18796ad633771182c54b5b62fa4be23f866ed0beb15Gregory Szorc assert i is not None 18896ad633771182c54b5b62fa4be23f866ed0beb15Gregory Szorc assert f is not None 18996ad633771182c54b5b62fa4be23f866ed0beb15Gregory Szorc 19096ad633771182c54b5b62fa4be23f866ed0beb15Gregory Szorc assert i.type.is_pod() 19196ad633771182c54b5b62fa4be23f866ed0beb15Gregory Szorc assert not f.type.is_pod() 192860576050b4d163a2f182cfdd67d8c5a48e32c08Gregory Szorc 19331cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorcdef test_function_variadic(): 19431cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc """Ensure Type.is_function_variadic works.""" 19531cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc 19631cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc source =""" 19731cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc#include <stdarg.h> 19831cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc 19931cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorcvoid foo(int a, ...); 20031cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorcvoid bar(int a, int b); 20131cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc""" 20231cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc 20331cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc tu = get_tu(source) 204826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc foo = get_cursor(tu, 'foo') 205826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc bar = get_cursor(tu, 'bar') 20631cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc 20731cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc assert foo is not None 20831cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc assert bar is not None 209860576050b4d163a2f182cfdd67d8c5a48e32c08Gregory Szorc 21031cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc assert isinstance(foo.type.is_function_variadic(), bool) 21131cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc assert foo.type.is_function_variadic() 21231cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc assert not bar.type.is_function_variadic() 21331cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc 21431cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorcdef test_element_type(): 2158261345a32e58dfb5f4269ed92e1608a4ec3379aGregory Szorc """Ensure Type.element_type works.""" 21631cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc tu = get_tu('int i[5];') 217826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc i = get_cursor(tu, 'i') 21831cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc assert i is not None 21931cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc 220860576050b4d163a2f182cfdd67d8c5a48e32c08Gregory Szorc assert i.type.kind == TypeKind.CONSTANTARRAY 221860576050b4d163a2f182cfdd67d8c5a48e32c08Gregory Szorc assert i.type.element_type.kind == TypeKind.INT 222860576050b4d163a2f182cfdd67d8c5a48e32c08Gregory Szorc 223860576050b4d163a2f182cfdd67d8c5a48e32c08Gregory Szorc@raises(Exception) 224860576050b4d163a2f182cfdd67d8c5a48e32c08Gregory Szorcdef test_invalid_element_type(): 225860576050b4d163a2f182cfdd67d8c5a48e32c08Gregory Szorc """Ensure Type.element_type raises if type doesn't have elements.""" 22631cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc tu = get_tu('int i;') 227826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc i = get_cursor(tu, 'i') 22831cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc assert i is not None 229860576050b4d163a2f182cfdd67d8c5a48e32c08Gregory Szorc i.element_type 230bf8ca0049ea4faa7b089001e837e0ebbaec2ac6dGregory Szorc 231bf8ca0049ea4faa7b089001e837e0ebbaec2ac6dGregory Szorcdef test_element_count(): 2328261345a32e58dfb5f4269ed92e1608a4ec3379aGregory Szorc """Ensure Type.element_count works.""" 23331cc38cb76317bfe50aadbc625d6ff67f727607aGregory Szorc tu = get_tu('int i[5]; int j;') 234826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc i = get_cursor(tu, 'i') 235826fce53d64e0ca8fdcfdd11f4e9aab6c8be224fGregory Szorc j = get_cursor(tu, 'j') 236bf8ca0049ea4faa7b089001e837e0ebbaec2ac6dGregory Szorc 237bf8ca0049ea4faa7b089001e837e0ebbaec2ac6dGregory Szorc assert i is not None 238bf8ca0049ea4faa7b089001e837e0ebbaec2ac6dGregory Szorc assert j is not None 239bf8ca0049ea4faa7b089001e837e0ebbaec2ac6dGregory Szorc 240bf8ca0049ea4faa7b089001e837e0ebbaec2ac6dGregory Szorc assert i.type.element_count == 5 241bf8ca0049ea4faa7b089001e837e0ebbaec2ac6dGregory Szorc 242bf8ca0049ea4faa7b089001e837e0ebbaec2ac6dGregory Szorc try: 243bf8ca0049ea4faa7b089001e837e0ebbaec2ac6dGregory Szorc j.type.element_count 244bf8ca0049ea4faa7b089001e837e0ebbaec2ac6dGregory Szorc assert False 245bf8ca0049ea4faa7b089001e837e0ebbaec2ac6dGregory Szorc except: 246bf8ca0049ea4faa7b089001e837e0ebbaec2ac6dGregory Szorc assert True 2470e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc 2480e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorcdef test_is_volatile_qualified(): 2490e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc """Ensure Type.is_volatile_qualified works.""" 2500e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc 2510e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc tu = get_tu('volatile int i = 4; int j = 2;') 2520e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc 2530e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc i = get_cursor(tu, 'i') 2540e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc j = get_cursor(tu, 'j') 2550e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc 2560e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc assert i is not None 2570e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc assert j is not None 2580e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc 2590e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc assert isinstance(i.type.is_volatile_qualified(), bool) 2600e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc assert i.type.is_volatile_qualified() 2610e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc assert not j.type.is_volatile_qualified() 2620e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc 2630e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorcdef test_is_restrict_qualified(): 2640e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc """Ensure Type.is_restrict_qualified works.""" 2650e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc 2660e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc tu = get_tu('struct s { void * restrict i; void * j };') 2670e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc 2680e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc i = get_cursor(tu, 'i') 2690e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc j = get_cursor(tu, 'j') 2700e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc 2710e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc assert i is not None 2720e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc assert j is not None 2730e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc 2740e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc assert isinstance(i.type.is_restrict_qualified(), bool) 2750e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc assert i.type.is_restrict_qualified() 2760e1f4f8de57b4462f8d41c64de1427c5c1cf7e8fGregory Szorc assert not j.type.is_restrict_qualified() 277