Skip to content

Commit 849e453

Browse files
committed
gcc-c-api: add 'dereference' attribute to array_type, pointer_type, vector_type
1 parent 8f12142 commit 849e453

File tree

3 files changed

+38
-1
lines changed

3 files changed

+38
-1
lines changed

gcc-c-api/gcc-type.c

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@
2828
Types
2929
*/
3030

31+
GCC_IMPLEMENT_PRIVATE_API (gcc_type)
32+
gcc_private_make_type (tree inner)
33+
{
34+
struct gcc_type result;
35+
result.inner = inner;
36+
return result;
37+
}
38+
3139
GCC_IMPLEMENT_PRIVATE_API (gcc_pointer_type)
3240
gcc_private_make_pointer_type (tree inner)
3341
{
@@ -54,6 +62,12 @@ gcc_type_get_pointer (gcc_type node)
5462
/***************************************************************************
5563
gcc_array_type
5664
**************************************************************************/
65+
GCC_IMPLEMENT_PUBLIC_API(gcc_type)
66+
gcc_array_type_get_dereference(gcc_array_type node)
67+
{
68+
return gcc_private_make_type (TREE_TYPE (node.inner));
69+
}
70+
5771
/***************************************************************************
5872
gcc_boolean_type
5973
**************************************************************************/
@@ -147,6 +161,12 @@ gcc_private_make_integer_constant (tree inner)
147161
/***************************************************************************
148162
gcc_pointer_type
149163
**************************************************************************/
164+
GCC_IMPLEMENT_PUBLIC_API(gcc_type)
165+
gcc_pointer_type_get_dereference(gcc_pointer_type node)
166+
{
167+
return gcc_private_make_type (TREE_TYPE (node.inner));
168+
}
169+
150170
/***************************************************************************
151171
gcc_protocol_interface_type
152172
**************************************************************************/
@@ -198,6 +218,12 @@ gcc_real_type_get_precision (gcc_real_type node)
198218
/***************************************************************************
199219
gcc_vector_type
200220
**************************************************************************/
221+
GCC_IMPLEMENT_PUBLIC_API(gcc_type)
222+
gcc_vector_type_get_dereference(gcc_vector_type node)
223+
{
224+
return gcc_private_make_type (TREE_TYPE (node.inner));
225+
}
226+
201227
/***************************************************************************
202228
gcc_void_type
203229
**************************************************************************/

gcc-c-api/type.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
</type>
2828

2929
<type name="array_type" base="type">
30+
<attribute name="dereference" kind="type">
31+
<doc>The type that this type points to</doc>
32+
</attribute>
3033
</type>
3134

3235
<type name="boolean_type" base="type">
@@ -88,6 +91,9 @@
8891
</type>
8992

9093
<type name="pointer_type" base="type">
94+
<attribute name="dereference" kind="type">
95+
<doc>The type that this type points to</doc>
96+
</attribute>
9197
</type>
9298

9399
<type name="protocol_interface_type" base="type">
@@ -136,6 +142,9 @@
136142
</type>
137143

138144
<type name="vector_type" base="type">
145+
<attribute name="dereference" kind="type">
146+
<doc>The type that this type points to</doc>
147+
</attribute>
139148
</type>
140149

141150
<type name="void_type" base="type">

generate-tree-c.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -422,8 +422,10 @@ def add_complex_getter(name, doc):
422422
'The precision of this type in bits, as an int (e.g. 32)')
423423

424424
if tree_type.SYM in ('POINTER_TYPE', 'ARRAY_TYPE', 'VECTOR_TYPE'):
425+
prefix = 'gcc_%s' % tree_type.SYM.lower()
425426
add_simple_getter('dereference',
426-
'PyGccTree_New(gcc_private_make_tree(TREE_TYPE(self->t.inner)))',
427+
('PyGccTree_New(gcc_type_as_gcc_tree(%s_get_dereference(PyGccTree_as_%s(self))))'
428+
% (prefix, prefix)),
427429
"The gcc.Type that this type points to'")
428430

429431
if tree_type.SYM == 'POINTER_TYPE':

0 commit comments

Comments
 (0)