libFirm
Class

If the type opcode is set to type_class the type represents class types. More...

Macros

#define INVALID_MEMBER_INDEX   ((size_t)-1)
 Special index returned when get_class_member_index() cannot find a member.

Functions

ir_typenew_type_class (ident *name)
 Creates a new class type.
ir_typenew_d_type_class (ident *name, type_dbg_info *db)
 Creates a new class type with debug information.
identget_class_ident (const ir_type *clss)
 Returns identifier of the class type.
const char * get_class_name (const ir_type *clss)
 Returns identifier of the class type.
size_t get_class_n_members (const ir_type *clss)
 Returns the number of members of this class.
ir_entityget_class_member (const ir_type *clss, size_t pos)
 Returns the member at position pos, 0 <= pos < n_member.
size_t get_class_member_index (const ir_type *clss, ir_entity *mem)
 Returns index of mem in clss, INVALID_MEMBER_INDEX if not contained.
ir_entityget_class_member_by_name (ir_type *clss, ident *name)
 Finds the member with name 'name'.
void add_class_subtype (ir_type *clss, ir_type *subtype)
 Adds subtype as subtype to clss.
size_t get_class_n_subtypes (const ir_type *clss)
 Returns the number of subtypes.
ir_typeget_class_subtype (ir_type *clss, size_t pos)
 Returns the subtype at position pos, 0 <= pos < n_subtype.
size_t get_class_subtype_index (ir_type *clss, const ir_type *subclass)
 Returns the index to access subclass as subtype of class.
void set_class_subtype (ir_type *clss, ir_type *subtype, size_t pos)
 Sets the subtype at position pos, 0 <= pos < n_subtype.
void remove_class_subtype (ir_type *clss, ir_type *subtype)
 Finds subtype in the list of subtypes and removes it.
void add_class_supertype (ir_type *clss, ir_type *supertype)
 Adds supertype as supertype to class.
size_t get_class_n_supertypes (const ir_type *clss)
 Returns the number of supertypes.
size_t get_class_supertype_index (ir_type *clss, ir_type *super_clss)
 Returns the index to access superclass as supertype of class.
ir_typeget_class_supertype (ir_type *clss, size_t pos)
 Returns the supertype at position pos, 0 <= pos < n_supertype.
void set_class_supertype (ir_type *clss, ir_type *supertype, size_t pos)
 Sets the supertype at position pos, 0 <= pos < n_supertype.
void remove_class_supertype (ir_type *clss, ir_type *supertype)
 Finds supertype in the list of supertypes and removes it.
ir_entityget_class_type_info (const ir_type *clss)
 Returns the type info entity of a class.
void set_class_type_info (ir_type *clss, ir_entity *ent)
 Sets a type info entity for the class.
unsigned get_class_vtable_size (const ir_type *clss)
 Returns the size of the virtual function table.
void set_class_vtable_size (ir_type *clss, unsigned size)
 Sets a new size of the virtual function table.
int is_class_final (const ir_type *clss)
 Returns non-zero if a class is final.
void set_class_final (ir_type *clss, int flag)
 Sets the class final flag.
int is_class_interface (const ir_type *clss)
 Returns non-zero if a class is an interface.
void set_class_interface (ir_type *clss, int flag)
 Sets the class interface flag.
int is_class_abstract (const ir_type *clss)
 Returns non-zero if a class is an abstract class.
void set_class_abstract (ir_type *clss, int flag)
 Sets the class abstract flag.
int is_Class_type (const ir_type *clss)
 Returns true if a type is a class type.
const tp_opget_tpop_class (void)
 Returns type opcode for class type.

Variables

const tp_optype_class
 This type opcode marks that the corresponding type is a class type.

Detailed Description

If the type opcode is set to type_class the type represents class types.

A list of fields and methods is associated with a class. Further a class can inherit from and bequest to other classes.

The following attributes are private to this type kind:

The following two are dynamic lists that can be grown with an "add_" function, but not shrinked:

Macro Definition Documentation

#define INVALID_MEMBER_INDEX   ((size_t)-1)

Special index returned when get_class_member_index() cannot find a member.

This index is never used for actual members.

Definition at line 1360 of file typerep.h.

Function Documentation

void add_class_subtype ( ir_type clss,
ir_type subtype 
)

Adds subtype as subtype to clss.

Checks whether clss is a supertype of subtype. If not adds also clss as supertype to subtype.

void add_class_supertype ( ir_type clss,
ir_type supertype 
)

Adds supertype as supertype to class.

Checks whether clss is a subtype of supertype. If not adds also clss as subtype to supertype.

ident* get_class_ident ( const ir_type clss)

Returns identifier of the class type.

ir_entity* get_class_member ( const ir_type clss,
size_t  pos 
)

Returns the member at position pos, 0 <= pos < n_member.

ir_entity* get_class_member_by_name ( ir_type clss,
ident name 
)

Finds the member with name 'name'.

If several members with the same name returns one of them. Returns NULL if no member found.

size_t get_class_member_index ( const ir_type clss,
ir_entity mem 
)

Returns index of mem in clss, INVALID_MEMBER_INDEX if not contained.

size_t get_class_n_members ( const ir_type clss)

Returns the number of members of this class.

size_t get_class_n_subtypes ( const ir_type clss)

Returns the number of subtypes.

size_t get_class_n_supertypes ( const ir_type clss)

Returns the number of supertypes.

const char* get_class_name ( const ir_type clss)

Returns identifier of the class type.

ir_type* get_class_subtype ( ir_type clss,
size_t  pos 
)

Returns the subtype at position pos, 0 <= pos < n_subtype.

size_t get_class_subtype_index ( ir_type clss,
const ir_type subclass 
)

Returns the index to access subclass as subtype of class.

If subclass is no direct subtype of class returns -1.

ir_type* get_class_supertype ( ir_type clss,
size_t  pos 
)

Returns the supertype at position pos, 0 <= pos < n_supertype.

size_t get_class_supertype_index ( ir_type clss,
ir_type super_clss 
)

Returns the index to access superclass as supertype of class.

If superclass is no direct supertype of class returns -1.

ir_entity* get_class_type_info ( const ir_type clss)

Returns the type info entity of a class.

unsigned get_class_vtable_size ( const ir_type clss)

Returns the size of the virtual function table.

const tp_op* get_tpop_class ( void  )

Returns type opcode for class type.

See Also
type_class
int is_class_abstract ( const ir_type clss)

Returns non-zero if a class is an abstract class.

int is_class_final ( const ir_type clss)

Returns non-zero if a class is final.

int is_class_interface ( const ir_type clss)

Returns non-zero if a class is an interface.

int is_Class_type ( const ir_type clss)

Returns true if a type is a class type.

ir_type* new_d_type_class ( ident name,
type_dbg_info db 
)

Creates a new class type with debug information.

ir_type* new_type_class ( ident name)

Creates a new class type.

void remove_class_subtype ( ir_type clss,
ir_type subtype 
)

Finds subtype in the list of subtypes and removes it.

void remove_class_supertype ( ir_type clss,
ir_type supertype 
)

Finds supertype in the list of supertypes and removes it.

void set_class_abstract ( ir_type clss,
int  flag 
)

Sets the class abstract flag.

void set_class_final ( ir_type clss,
int  flag 
)

Sets the class final flag.

void set_class_interface ( ir_type clss,
int  flag 
)

Sets the class interface flag.

void set_class_subtype ( ir_type clss,
ir_type subtype,
size_t  pos 
)

Sets the subtype at position pos, 0 <= pos < n_subtype.

Does not set the corresponding supertype relation for subtype: this might be a different position!

void set_class_supertype ( ir_type clss,
ir_type supertype,
size_t  pos 
)

Sets the supertype at position pos, 0 <= pos < n_supertype.

Does not set the corresponding subtype relation for supertype: this might be at a different position!

void set_class_type_info ( ir_type clss,
ir_entity ent 
)

Sets a type info entity for the class.

void set_class_vtable_size ( ir_type clss,
unsigned  size 
)

Sets a new size of the virtual function table.

Variable Documentation

const tp_op* type_class

This type opcode marks that the corresponding type is a class type.

Consequently the type refers to supertypes, subtypes and entities. Entities can be any fields, but also methods. This struct is dynamically allocated but constant for the lifetime of the library.

Definition at line 1464 of file typerep.h.