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.
.define_macro("TURTLES") gcc.define_macro("PI=3") gcc.define_macro("SIN(x)=x") gcc
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.