X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Ftr%2Fentity_t.h;h=fafbfeb8ff81a720ceedab7e06a6571a10689974;hb=823a3abad1ab22cc4db2073410bf8f0e200441bc;hp=570c4b7e99f0f6d88d3f32e525b3129d33e81853;hpb=7fe7a673936552cc45d7ffeb03ecaa511844e337;p=libfirm diff --git a/ir/tr/entity_t.h b/ir/tr/entity_t.h index 570c4b7e9..fafbfeb8f 100644 --- a/ir/tr/entity_t.h +++ b/ir/tr/entity_t.h @@ -1,60 +1,85 @@ -/* -** 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. -** +/*10 2002/03/19 13:08:33 +* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe +* All rights reserved. */ +/** +* @file entity_t.h +* +* entity.h: entities represent all program known objects. +* +* @author Martin Trapp, Christian Schaefer, 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. +*/ + +/* $Id$ */ + # ifndef _ENTITY_T_H_ # define _ENTITY_T_H_ -# include "ident.h" -# include "type.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 +# include "entity.h" +/** the type of an entity */ struct entity { - firm_kind kind; - ident *name; /* name of this entity */ - ident *ld_name; /* Unique name of this entity, i.e., the mangled - name. E.g., for a class `A' with field `a' this + firm_kind kind; /**< dynamic type tag for entity. */ + ident *name; /**< name of this entity */ + ident *ld_name; /**< Unique name of this entity, i.e., the mangled + name. If the field is read before written a default + magling is applies. The name of the owner is prepended + to the name of the entity, separated by a underscore. + 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 + 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. */ - /* for methods */ - ir_graph *irg; /* If (type == method_type) this is the corresponding irg. + type *owner; /**< The compound type (e.g. class type) this entity belongs to. */ + ent_allocation allocation; /**< Distinguishes static and dynamically allocated + entities and some further cases. */ + ent_visibility visibility; /**< Specifies visibility to external program + fragments */ + ent_variability variability; /**< Specifies variability of entities content */ + ent_volatility volatility; /**< Specifies volatility of entities content */ + int offset; /**< Offset in byte for this entity. Fixed when layout + of owner is determined. */ + void *link; /**< To store some intermediate information */ + unsigned long visit; /**< visited counter for walks of the type information */ + struct dbg_info* dbi; /**< A pointer to information for debug support. */ + + /* ------------- fields for atomic entities ---------------*/ + ir_node *value; /**< value if entity is not of variability uninitialized. + Only for atomic entities. */ + + /* ------------- fields for compound entities ---------------*/ + ir_node **values; /**< constant values of compound entities. Only available if + variablility not uninitialized. Must be set for variability constant + */ + entity **val_ents; /**< entities corresponding to constant values. Only available if + variablility not uninitialized. Must be set for variability constant */ + + /* ------------- fields for entities owned by a class type ---------------*/ + entity **overwrites; /**< A list of entities this entity overwrites. */ + entity **overwrittenby; /**< A list of entities that overwrite this entity. */ + + /* ------------- fields for methods ---------------*/ + enum peculiarity peculiarity; + ir_graph *irg; /**< If (type == method_type) this is the corresponding irg. The ir_graph constructor automatically sets this field. - @@@ Does this go here, or should it be in type_method, - or should Call have an attribute ent?? */ - /* Do we need to remember the initializer of fields? */ - unsigned long visit; /* visited counter for walks of the type information */ + Yes, it must be here. */ };