Reference
1 Plugin Events
gcc.register_callback(event, f)
Registers the function
f
for the given plugin event.The following plugin events are supported:
gcc.PLUGIN_START_UNIT
Event triggered before a translation unit is parsed.
The callback function receives no arguments.
gcc.PLUGIN_PRE_GENERICIZE
Event triggered after a function definition has been parsed.
The callback function receives a function_decl node as its first argument.
gcc.PLUGIN_FINISH_DECL
Event triggered after a declaration has been parsed.
The callback function receives a node of the class declaration as its first argument.
This event is available with GCC 4.7 or later.
gcc.PLUGIN_FINISH_TYPE
Event triggered after a struct or union type has been parsed.
The callback function receives a node of the class type as its first argument.
gcc.PLUGIN_FINISH_UNIT
Event triggered after a translation unit has been parsed.
The callback function receives no arguments.
2 Globals
gcc.get_asm_file_name()
Returns assembly output filename.
gcc.set_asm_file_name(filename)
Sets assembly output filename.
gcc.HOST_BIT_BUCKET
Filename of a device that discards data written to it, for example “/dev/null”.
gcc.get_main_input_basename()
Returns main input filename with any leading directory components removed.
This function is available with GCC 4.6 or later.
gcc.get_main_input_filename()
Returns main input filename.
gcc.get_translation_units()
Returns translation units as a sequence of translation_unit_decl nodes.
This function is available with GCC 4.6 or later.
gcc.get_functions()
Returns function declarations in translation unit as a reverse sequence of function_decl nodes.
gcc.get_variables()
Returns variable declarations in current translation unit as a reverse sequence of var_decl nodes.
gcc.get_identifier(s)
Returns identifier for given string as an identifier_node node.
gcc.define_macro(s)
Defines preprocessor macro.
gcc.GCC_VERSION
A number corresponding to the GCC version the plugin was built for, e.g., 4008 for GCC 4.8.
3 Tree Nodes
Any tree node provides the following methods:
node:class()
Returns tree code class as a string.
node:code()
Returns tree code as a string.
3.1 Declarations
This tree code class is used for declarations.
declaration
The class provides the following methods:
node:align()
Returns alignment in bits.
node:align_unit()
Returns alignment in bytes.
node:assembler_name()
Returns tree node of assembler name.
node:artificial()
Returns true if declaration is a compiler-generated entity, or false otherwise.
node:attributes()
Returns tree node of attributes.
node:chain()
Returns tree node of next declaration.
node:name()
Returns name as an identifier_node node.
node:location()
Returns source filename and line number.
With GCC 4.8 or later, further returns column number.
node:size()
Returns size in bits.
node:size_unit()
Returns size in bytes.
node:type()
Returns tree node of type of declaration.
node:uid()
Returns unique number.
node:user_align()
Returns true if declaration has user-defined alignment, or false otherwise.
The following tree codes provide further methods:
const_decl
C enum value.
node:initial()
Returns tree node of constant value.
field_decl
C struct or union field.
node:bit_field()
Returns true if field is a bitfield, or false otherwise.
node:bit_field_type()
Returns tree node of type specified for a bitfield.
node:initial()
Returns initial value.
function_decl
Function declaration.
node:args()
Returns tree node of argument declarations.
node:body()
Returns tree node of body expression.
node:external()
Returns true if function refers to definition elsewhere, or false otherwise.
node:public()
Returns true if function is accessible outside translation unit, or false otherwise.
translation_unit_decl
Translation unit.
node:block()
Returns tree node of block.
node:language()
Returns language of translation unit.
This function is available with GCC 4.6 or later.
type_decl
Type declaration.
node:public()
Returns true if type is accessible outside translation unit, or false otherwise.
var_decl
Variable declaration.
node:external()
Returns true if variable refers to definition elsewhere, or false otherwise.
node:initial()
Returns tree node of initial value.
node:public()
Returns true if variable is accessible outside translation unit, or false otherwise.
3.2 Types
This tree code class is used for type objects.
type
The class provides the following methods:
node:align()
Returns alignment in bits.
node:align_unit()
Returns alignment in bytes.
node:attributes()
Returns tree node of attributes.
node:canonical()
Returns tree node of canonical type.
The canonical type includes qualifiers.
node:const()
Returns true if type has
const
qualifier, or false otherwise.node:main_variant()
Returns tree node of main variant of type.
The main variant excludes qualifiers.
node:mode()
Returns machine mode as a string.
node:name()
Returns tree node of type name.
node:packed()
Returns true if type has attribute
packed
.node:restrict()
Returns true if type has
restrict
qualifier, or false otherwise.node:size()
Returns size of type in bits.
node:size_unit()
Returns size of type in bytes.
node:stub_decl()
Returns stub declaration as a type_decl node.
node:user_align()
Returns true if type has user-defined alignment, or false otherwise.
node:volatile()
Returns true if type has
volatile
qualifier, or false otherwise.
The following tree codes provide further methods:
array_type
Array type.
node:domain()
Returns tree node of lower and upper array bounds.
node:type()
Returns type of array elements.
enumeral_type
C enum.
node:values()
Returns tree node of enum values.
The following methods are available with the C++ frontend.
node:anonymous()
Returns true if enum is unnamed, or false otherwise.
function_type
Function type.
node:args()
Returns tree node of argument types.
node:type()
Returns tree node of return type.
integer_type
Integer type.
node:max()
Returns tree node of maximum value.
node:min()
Returns tree node of minimum value.
node:unsigned()
Returns true if type is unsigned, or false otherwise.
pointer_type
Pointer type.
node:type()
Returns tree node of pointed type.
node:unsigned()
Returns true if type is unsigned, or false otherwise.
record_type
C struct.
node:fields()
Returns tree node of struct fields.
The following methods are available with the C++ frontend.
node:anonymous()
Returns true if struct is unnamed, or false otherwise.
reference_type
Reference type.
node:type()
Returns tree node of referenced type.
union_type
C union.
node:fields()
Returns tree node of union fields.
The following methods are available with the C++ frontend.
node:anonymous()
Returns true if union is unnamed, or false otherwise.
vector_type
GCC vector type.
node:type()
Returns tree node of vector element type.
node:units()
Returns number of vector elements.
3.3 Constants
This tree code class is used for constant values.
constant
The class provides the following methods:
node:type()
Returns tree node of type of constant.
The following tree codes provide further methods:
integer_cst
Integer constant.
node:value()
Returns value as a number.
real_cst
Floating-point constant.
node:value()
Returns value as a number.
string_cst
String constant.
node:value()
Returns value as a string.
3.4 Unary expressions
This tree code class is used for unary arithmetic expressions.
unary
The class provides the following methods:
node:operand()
Returns tree node of operand.
node:type()
Returns tree node of type of expression.
3.5 Binary expressions
This tree code class is used for binary arithmetic expressions.
binary
The class provides the following methods:
node:operand()
Returns tree nodes of operands.
node:type()
Returns tree node of type of expression.
3.6 Statement expressions
This tree code class is used for statement expressions.
statement
The following tree codes provide further methods:
return_expr
Return statement.
node:operand()
Returns tree node of return value.
3.7 Variable-length expressions
This tree code class is used for function calls, and expressions with a variable number of operands.
vl_exp
The class provides the following methods:
node:type()
Returns tree node of type of expression.
The following tree codes provide further methods:
call_expr
Call expression.
node:function()
Returns tree node of function declaration.
node:args()
Returns tree nodes of arguments.
3.8 Other expressions
This tree code class is used for other expressions.
expression
The class provides the following methods:
node:operand()
Returns tree nodes of operands of expression.
node:type()
Returns tree node of type of expression.
The following tree codes provide further methods:
bind_expr
Bind expression of local variables.
node:block()
Returns tree node of block corresponding to bind expression.
node:body()
Returns tree node of expression computed using the variables.
node:vars()
Returns tree node of chain of declarations.
3.9 Exceptional codes
This tree code class is used for codes that fit no other category.
exceptional
The following tree codes provide further methods:
block
Symbol-binding block.
node:vars()
Returns tree node of chain of declarations.
constructor
Array or struct initializer list.
node:elements()
Returns sequence of tree nodes of constructor elements.
identifier_node
Identifier.
node:value()
Returns identifier string.
statement_list
Statement list.
node:statements()
Returns sequence of tree nodes of statements.
tree_list
Singly-linked list of key-value pairs.
node:chain()
Returns tree node of next element in list.
node:purpose()
Returns tree node of key.
node:value()
Returns tree node of value.