syntactic changes for jni generator / crecoder
[libfirm] / ir / tr / entity.h
index e70924c..e6c2cd2 100644 (file)
@@ -50,6 +50,7 @@
 
 # include "ident.h"
 # include "type.h"
+# include "dbginfo.h"
 
 /*******************************************************************/
 /** general                                                       **/
@@ -62,9 +63,9 @@ 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
 
@@ -103,7 +104,7 @@ typedef struct ir_graph ir_graph;
  *              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 entity_visited.
+ *   visited   visited flag.  Master flag is type_visited.
  *
  *  These fields can only be accessed via access functions.
  *
@@ -112,9 +113,9 @@ typedef struct ir_graph ir_graph;
  * SOURCE
  */
 
+/* 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
 
@@ -125,7 +126,8 @@ typedef struct entity entity;
    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);
+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. */
@@ -151,20 +153,25 @@ void        set_entity_ld_ident (entity *ent, ident *ld_ident);
 const char *get_entity_ld_name (entity *end);
 
 type       *get_entity_owner (entity *ent);
-/* Sets the owner field in entity to owner. */
+/* Sets the owner field in entity to owner.  Don't forget to add
+   ent to owner!! */
 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);
@@ -189,7 +196,7 @@ void           set_entity_visibility (entity *ent, ent_visibility vis);
 /* 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
+  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
                       are constant.  The others are uninitialized.  Those members
@@ -247,6 +254,7 @@ int      get_compound_ent_n_values(entity *ent);
 ir_node *get_compound_ent_value(entity *ent, int pos);
 entity  *get_compound_ent_value_member(entity *ent, int pos);
 void     set_compound_ent_value(entity *ent, ir_node *val, entity *member, int pos);
+void     remove_compound_ent_value(entity *ent, entity *value_ent);
 /* Inits the entity ent witch must be of a one dimensional
    array type with the values given in the values array.
    The array must have a lower and an upper bound.  Keeps the
@@ -290,31 +298,12 @@ 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);
+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 *entity);
+void        mark_entity_visited(entity *ent);
 
 
 /*****/
 
-
-/****v* entity/visited
- *
- * NAME
- *   entity_visited -  visited flag to traverse the entity information
- * PURPOSE
- *   Increase this flag by one before traversing the entity information.
- *   Mark entity nodes as visited by set_entity_visited(entity, value) or
- *   mark_entity_visited.
- *   Check whether node was already visited by comparing get_entity_visited(entity)
- *   and entity_visited.
- *   Or use the function to walk all entities.
- * SEE ALSO
- * SOURCE
- */
-extern unsigned long entity_visited;
-/*****/
-
-
 # endif /* _ENTITY_H_ */