X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Ftr%2Fentity.h;h=7c227774cb4c27d94d8756594cb8364e8a01dba0;hb=86f99a523c52d0bee752bb015137811bf8e750ca;hp=b848c56d25e39a032d9919e56941be8de37163b2;hpb=5496f8d79b51ffee7f8e91953e957a59c93f473e;p=libfirm diff --git a/ir/tr/entity.h b/ir/tr/entity.h index b848c56d2..7c227774c 100644 --- a/ir/tr/entity.h +++ b/ir/tr/entity.h @@ -11,76 +11,67 @@ */ /** -* @file entity.h -* -* Entities represent all program known objects. -* -* @author Martin Trapp, Christian Schaefer -* @author Goetz Lindenmaier -* -* An entity is the representation of program known objects in Firm. -* The primary concept of entities is to represent members of complex -* types, i.e., fields and methods of classes. As not all programming -* language model all variables and methods as members of some class, -* the concept of entities is extended to cover also local and global -* variables, and arbitrary procedures. -* -* An entity always specifies the type of the object it represents and -* the type of the object it is a part of, the owner of the entity. -* Originally this is the type of the class of which the entity is a -* member. -* The owner of local variables is the procedure they are defined in. -* The owner of global variables and procedures visible in the whole -* program is a universally defined class type "GlobalType". The owner -* of procedures defined in the scope of an other procedure is the -* enclosing procedure. -* -* In detail the datastructure entity has the following fields: -* -* - ident *name: Name of this entity as specified in the source code. -* Only unequivocal in conjuction with scope. -* - ident *ld_name: Unique name of this entity, i.e., the mangled -* name. E.g., for a class `A' with field `a' this -* is the ident for `A_a'. -* - type *type: The type of this entity, e.g., a method type, a -* basic type of the language or a class itself. -* - type *owner: The class this entity belongs to. In case of local -* variables the method they are defined in. -* - int offset: Offset in bits for this entity. Fixed when layout -* of owner is determined. -* - ir_graph *irg: If (type == method_type) this is the corresponding irg. -* The ir_graph constructor automatically sets this field. -* If (type != method_type) access of this field will cause -* an assertion. -* - unsigned irg_add_properties: -* If (type == method_type) this mirrors the additional flags -* of the corresponding irg if set or is an own set for -* this entity. This construction allows to specify these -* flags even if no graph is available. -* If (type != method_type) access of this field will cause -* an assertion. -*/ - -# ifndef _ENTITY_H_ -# define _ENTITY_H_ + * @file entity.h + * + * Entities represent all program known objects. + * + * @author Martin Trapp, Christian Schaefer + * @author Goetz Lindenmaier + * + * An entity is the representation of program known objects in Firm. + * The primary concept of entities is to represent members of complex + * types, i.e., fields and methods of classes. As not all programming + * language model all variables and methods as members of some class, + * the concept of entities is extended to cover also local and global + * variables, and arbitrary procedures. + * + * An entity always specifies the type of the object it represents and + * the type of the object it is a part of, the owner of the entity. + * Originally this is the type of the class of which the entity is a + * member. + * The owner of local variables is the procedure they are defined in. + * The owner of global variables and procedures visible in the whole + * program is a universally defined class type "GlobalType". The owner + * of procedures defined in the scope of an other procedure is the + * enclosing procedure. + * + * In detail the datastructure entity has the following fields: + * + * - ident *name: Name of this entity as specified in the source code. + * Only unequivocal in conjuction with scope. + * - ident *ld_name: Unique name of this entity, i.e., the mangled + * name. E.g., for a class `A' with field `a' this + * is the ident for `A_a'. + * - type *type: The type of this entity, e.g., a method type, a + * basic type of the language or a class itself. + * - type *owner: The class this entity belongs to. In case of local + * variables the method they are defined in. + * - int offset: Offset in bits for this entity. Fixed when layout + * of owner is determined. + * - ir_graph *irg: If (type == method_type) this is the corresponding irg. + * The ir_graph constructor automatically sets this field. + * If (type != method_type) access of this field will cause + * an assertion. + * - unsigned irg_add_properties: + * If (type == method_type) this mirrors the additional flags + * of the corresponding irg if set or is an own set for + * this entity. This construction allows to specify these + * flags even if no graph is available. + * If (type != method_type) access of this field will cause + * an assertion. + */ +#ifndef _ENTITY_H_ +#define _ENTITY_H_ -# include "ident.h" -# include "type.h" -# include "dbginfo.h" -# include "irgraph.h" +#include "firm_types.h" +#include "dbginfo.h" -# include "tr_inheritance.h" +#include "tr_inheritance.h" /*-----------------------------------------------------------------*/ /* ENTITY */ /*-----------------------------------------------------------------*/ -/* to resolve recursion between entity.h and irgraph.h */ -#ifndef _IR_GRAPH_TYPEDEF_ -#define _IR_GRAPH_TYPEDEF_ -typedef struct ir_graph ir_graph; -#endif - /** * * An abstract data type to represent program entities. @@ -345,7 +336,7 @@ int is_irn_const_expression(ir_node *n); * Copies a firm subgraph that complies to the restrictions for * constant expressions to current_block in current_ir_graph. */ -ir_node *copy_const_value(ir_node *n); +ir_node *copy_const_value(dbg_info *dbg, ir_node *n); /* Set has no effect for existent entities of type method. */ ir_node *get_atomic_ent_value(entity *ent); @@ -380,7 +371,7 @@ int get_compound_graph_path_array_index(compound_graph_path *gr, int pos); void set_compound_graph_path_array_index(compound_graph_path *gr, int pos, int index); /** Checks whether the path up to pos is correct. If the path contains a NULL, - * assumes the path is not complete and returns 'true'. */ + * assumes the path is not complete and returns non-zero. */ int is_proper_compound_graph_path(compound_graph_path *gr, int pos); /* A value of a compound entity is a pair of a value and the description of the @@ -455,7 +446,7 @@ int get_compound_ent_value_offset_bytes(entity *ent, int pos); * have an open upper bound. If there are several open bounds, we do * nothing. There must be initializer elements for all array * elements. Uses the link field in the array element entities. The - * array bounds must be representable as ints. + * array bounds must be representable as integers. * * @param ent Any entity. */ @@ -513,12 +504,12 @@ int is_atomic_entity(entity *ent); array or union type. */ int is_compound_entity(entity *ent); -/** Returns true if ent1 and ent2 have are equal except for their owner. +/** Returns non-zero if ent1 and ent2 have are equal except for their owner. Two entities are equal if - they have the same type (the same C-struct) - ...? */ -bool equal_entity(entity *ent1, entity *ent2); +int equal_entity(entity *ent1, entity *ent2); /** Outputs a unique number for this entity if libfirm is compiled for debugging, (configure with --enable-debug) else returns 0. */ @@ -539,20 +530,20 @@ int entity_visited(entity *ent); /** Returns true if this entity was not visited. */ int entity_not_visited(entity *ent); -/** Returns the mask of the additional graph properties. */ -unsigned get_entity_additional_properties(const entity *ent); +/** + * Returns the mask of the additional entity properties. + * The properties are automatically inherited from the irg if available + * or from the method type if they were not set using + * set_entity_additional_properties() or + * set_entity_additional_property(). + */ +unsigned get_entity_additional_properties(entity *ent); /** Sets the mask of the additional graph properties. */ void set_entity_additional_properties(entity *ent, unsigned property_mask); /** Sets one additional graph property. */ -void set_entity_additional_property(entity *ent, unsigned flag); - -/** Returns the calling convention of an entities graph. */ -unsigned get_entity_calling_convention(const entity *ent); - -/** Sets the calling convention of an entities graph. */ -void set_entity_calling_convention(entity *ent, unsigned cc_mask); +void set_entity_additional_property(entity *ent, mtp_additional_property flag); /** * @page unknown_entity @@ -596,4 +587,15 @@ extern entity *unknown_entity; /** Returns the unknown entity */ entity *get_unknown_entity(void); -# endif /* _ENTITY_H_ */ +/** Encodes how a pointer parameter is accessed. */ +/** Encodes how a pointer parameter is accessed. */ +typedef enum acc_bits { + ptr_access_none = 0, /**< no access */ + ptr_access_read = 1, /**< read access */ + ptr_access_write = 2, /**< write access */ + ptr_access_rw = ptr_access_read|ptr_access_write, /**< read AND write access */ + ptr_access_store = 4, /**< the pointer is stored */ + ptr_access_all = ptr_access_rw|ptr_access_store /**< all possible access */ +} ptr_access_kind; + +#endif /* _ENTITY_H_ */