fixed doxygen comments
[libfirm] / ir / tr / entity.h
index c1cbb7b..d7e69bd 100644 (file)
@@ -1,46 +1,51 @@
 /*
-**  Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
-**  All rights reserved.
-**
-**  Authors: Martin Trapp, Christian Schaefer,
-**           Goetz Lindenmaier
-**
-**  entity.h:  entities represent all program known objects.
-**
-**  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 byte 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.
+*  Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
+*  All rights reserved.
+*
+*/
+
+/**
+*  @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 byte 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.
 */
 
 /* $Id$ */
 
 # include "ident.h"
 # include "type.h"
+# include "dbginfo.h"
 
 /*******************************************************************/
 /** general                                                       **/
 /*******************************************************************/
 
-/* initalize entity module */
+/** initalize entity module */
 void init_entity (void);
 
 /*******************************************************************/
 /** ENTITY                                                        **/
 /*******************************************************************/
 
+/* to resolve recursion between entity.h and irgraph.h */
 #ifndef _IR_GRAPH_TYPEDEF_
 #define _IR_GRAPH_TYPEDEF_
-/* to resolve recursion between entity.h and irgraph.h */
 typedef struct ir_graph ir_graph;
 #endif
 
-/****s* entity/entity
+/**
  *
- * NAME
- *   entity - An abstract data type to represent program entites.
- * NOTE
+ *   An abstract data type to represent program entites.
  *
- * ATTRIBUTES
- *   owner      A compound type this entity is a part of.
- *   type       The type of this entity.
- *   name       The string that represents this entity in the source program.
- *   allocation A flag saying whether the entity is dynamically or statically
+ *   @param owner      A compound type this entity is a part of.
+ *   @param type       The type of this entity.
+ *   @param name       The string that represents this entity in the source program.
+ *   @param allocation A flag saying whether the entity is dynamically or statically
  *              allocated (values: dynamic_allocated,  static_allocated,
  *              automatic_allocated).
- *   visibility A flag indicating the visibility of this entity (values: local,
+ *   @param visibility A flag indicating the visibility of this entity (values: local,
  *              external_visible,  external_allocated)
- *   variability A flag indicating the variability of this entity (values:
+ *   @param variability A flag indicating the variability of this entity (values:
  *              uninitialized, initalized, part_constant, constant)
- *   volatility @@@
- *   offset     The offset of the entity within the compound object.  Only set
+ *   @param volatility @@@
+ *   @param offset     The offset of the entity within the compound object.  Only set
  *              if the owner in the state "layout_fixed".
- *   overwrites A list of entities overwritten by this entity.  This list is only
+ *   @param overwrites A list of entities overwritten by this entity.  This list is only
  *              existent if the owner of this entity is a class.  The members in
  *              this list must be entities of super classes.
- *   overwrittenby A list of entities that overwrite this entity.  This list is only
+ *   @param overwrittenby A list of entities that overwrite this entity.  This list is only
  *              existent if the owner of this entity is a class.  The members in
  *              this list must be entities of sub classes.
- *   link       A void* to associate some additional information with the entity.
- *   irg        If the entity is a method this is the ir graph that represents the
+ *   @param link       A void* to associate some additional information with the entity.
+ *   @param irg        If the entity is a method this is the ir graph that represents the
  *              code of the method.
- *   peculiarity The peculiarity of the entity.  If the entity is a method this
+ *   @param peculiarity The peculiarity of the entity.  If the entity is a method this
  *              indicates whether the entity represents
  *              a real method or whether it only exists to describe an interface.
  *              In that case there nowhere exists code for this entity and this entity
  *              is never dynamically used in the code.
  *              Values: description, existent.  Default: existent.
- *   visited   visited flag.  Master flag is type_visited.
+ *   @param visited   visited flag.  Master flag is type_visited.
  *
- *  These fields can only be accessed via access functions.
+ *  @param These fields can only be accessed via access functions.
  *
- * SEE ALSO
- *   type
- * SOURCE
+ * @see  type
  */
 
+/* to resolve recursion between entity.h and type.h */
 #ifndef _ENTITY_TYPEDEF_
 #define _ENTITY_TYPEDEF_
-/* to resolve recursion between entity.h and type.h */
 typedef struct entity entity;
 #endif
 
 
-/* Creates a new entity.
+/** Creates a new entity.
    Automatically inserts the entity as a member of owner.
    Entity is automatic_allocated and uninitialize except if the type
    is type_method, then it is static_allocated and constant.  The constant
    value is a pointer to the method.
    Visibility is local, offset -1, and it is not volatile. */
-entity     *new_entity (type *owner, ident *name, type *type);
-/* Copies the entity if the new_owner is different from the
+entity     *new_entity (type *owner, ident *name, type *tp);
+entity     *new_d_entity (type *owner, ident *name, type *tp, dbg_info *db);
+/** Copies the entity if the new_owner is different from the
    owner of the old entity.  Else returns the old entity.
-   Automatically inserts the new entity as a member of owner. */
+   Automatically inserts the new entity as a member of owner.
+   Resets the overwrites/overwritten_by fields. */
 entity     *copy_entity_own (entity *old, type *new_owner);
-/* Copies the entity if the new_name is different from the
+/** Copies the entity if the new_name is different from the
    name of the old entity.  Else returns the old entity.
    Automatically inserts the new entity as a member of owner.
    The mangled name ld_name is set to NULL. */
 entity     *copy_entity_name (entity *old, ident *new_name);
-/* Frees the entity.  The owner will still contain the pointer to this
+/** Frees the entity.  The owner will still contain the pointer to this
    entity, as well as all other references! */
 void        free_entity (entity *ent);
 
@@ -157,15 +160,19 @@ void        set_entity_owner (entity *ent, type *owner);
 INLINE void assert_legal_owner_of_ent(type *owner);
 
 type     *get_entity_type (entity *ent);
-void      set_entity_type (entity *ent, type *type);
+void      set_entity_type (entity *ent, type *tp);
 
 typedef enum {
-  automatic_allocated,/* The entity is allocated during runtime, implicitly
-                        as component of a compound type.   This is the default. */
-  dynamic_allocated,  /* The entity is allocated during runtime, explicitly
-                        by an Alloc node. */
-  static_allocated    /* The entity is allocated statically.  We can use a
-                         SymConst(?) as address of the entity. */
+  automatic_allocated, /**< The entity is allocated during runtime, implicitly
+                         as component of a compound type.   This is the default. */
+  parameter_allocated, /**< The entity is a parameter.  It is also automatic allocated.
+                         We distinguish the allocation of paramters from the allocation
+                         of local variables as their placement depends on the calling
+                         conventions. */
+  dynamic_allocated,   /**< The entity is allocated during runtime, explicitly
+                         by an Alloc node. */
+  static_allocated     /**< The entity is allocated statically.  We can use a
+                          SymConst(?) as address of the entity. */
 } ent_allocation;
 
 ent_allocation get_entity_allocation (entity *ent);
@@ -174,11 +181,11 @@ void           set_entity_allocation (entity *ent, ent_allocation al);
 /* This enumeration flags the visibility of entities.  This is necessary
    for partial compilation. */
 typedef enum {
-  local,              /* The entity is only visible locally.  This is the default. */
-  external_visible,   /* The entity is visible to other external program parts, but
+  local,              /**< The entity is only visible locally.  This is the default. */
+  external_visible,   /**< The entity is visible to other external program parts, but
                         it is defined here.  It may not be optimized away.  The entity must
                         be static_allocated. */
-  external_allocated  /* The entity is defined and allocated externally.  This compilation
+  external_allocated  /**< The entity is defined and allocated externally.  This compilation
                         must not allocate memory for this entity. The entity must
                         be static_allocated.  This can also be an external defined
                         method. */
@@ -187,24 +194,24 @@ typedef enum {
 ent_visibility get_entity_visibility (entity *ent);
 void           set_entity_visibility (entity *ent, ent_visibility vis);
 
-/* This enumeration flags the variability of entities. */
+/** This enumeration flags the variability of entities. */
 typedef enum {
-  uninitialized,    /* The content of the entity is completely unknown. */
-  initialized,       /* After allocation the entity is initalized with the
+  uninitialized,    /**< The content of the entity is completely unknown. */
+  initialized,      /**< After allocation the entity is initalized with the
                       value given somewhere in the entity. */
-  part_constant,    /* For entities of compound types.  Some members of the entity
+  part_constant,    /**< For entities of compound types.  Some members of the entity
                       are constant.  The others are uninitialized.  Those members
                       given a value for are constant. */
-  constant          /* The entity is constant. */
+  constant          /**< The entity is constant. */
 } ent_variability;
 
 ent_variability get_entity_variability (entity *ent);
 void            set_entity_variability (entity *ent, ent_variability var);
 
-/* This enumeration flags the volatility of entities. */
+/** This enumeration flags the volatility of entities. */
 typedef enum {
-  non_volatile,    /* The entity is not volatile */
-  is_volatile      /* The entity is volatile */
+  non_volatile,    /**< The entity is not volatile */
+  is_volatile      /**< The entity is volatile */
 } ent_volatility;
 
 ent_volatility get_entity_volatility (entity *ent);
@@ -269,22 +276,36 @@ void set_array_entity_values(entity *ent, tarval **values, int num_vals);
    both relations, they only differ in the order of arguments. */
 void    add_entity_overwrites   (entity *ent, entity *overwritten);
 int     get_entity_n_overwrites (entity *ent);
+int     get_entity_overwrites_index(entity *ent, entity *overwritten);
 entity *get_entity_overwrites   (entity *ent, int pos);
 void    set_entity_overwrites   (entity *ent, int pos, entity *overwritten);
+void    remove_entity_overwrites(entity *ent, entity *overwritten);
 
 void    add_entity_overwrittenby   (entity *ent, entity *overwrites);
 int     get_entity_n_overwrittenby (entity *ent);
+int     get_entity_overwrittenby_index(entity *ent, entity *overwrites);
 entity *get_entity_overwrittenby   (entity *ent, int pos);
 void    set_entity_overwrittenby   (entity *ent, int pos, entity *overwrites);
+void    remove_entity_overwrittenby(entity *ent, entity *overwrites);
+
+/**
+ *   Checks whether a pointer points to an entity.
+ *
+ *   @param thing     an arbitrary pointer
+ *
+ *   @return
+ *       true if the thing is an entity, else false
+ */
+int is_entity (void *thing);
 
-/* Returns true if the type of the entity is a primitive, pointer
+/** Returns true if the type of the entity is a primitive, pointer
    enumeration or method type. */
 int is_atomic_entity(entity *ent);
-/* Returns true if the type of the entity is a class, structure,
+/** Returns true if the type of the entity is a class, structure,
    array or union type. */
 int is_compound_entity(entity *ent);
 
-/* Returns true if ent1 and ent2 have are equal except for their owner.
+/** Returns true 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)
     - ...?
@@ -292,12 +313,14 @@ int is_compound_entity(entity *ent);
 bool equal_entity(entity *ent1, entity *ent2);
 
 
-unsigned long get_entity_visited(entity *entity);
-void        set_entity_visited(entity *entity, unsigned long num);
-/* Sets visited field in entity to entity_visited. */
-void        mark_entity_visited(entity *entity);
+unsigned long get_entity_visited(entity *ent);
+void        set_entity_visited(entity *ent, unsigned long num);
+/** Sets visited field in entity to entity_visited. */
+void        mark_entity_visited(entity *ent);
+bool        entity_visited(entity *ent);
+bool        entity_not_visited(entity *ent);
+
 
 
-/*****/
 
 # endif /* _ENTITY_H_ */