X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Ftr%2Ftpop.h;h=3166a963fe3abe513dde2ac0cf650d33c653c2cb;hb=ec68b2aaadb9504d101e6cbc4a58c69f3897f489;hp=52c3b70125732beae08b6135a11b172bd2d23d74;hpb=df83e37827032795585d3b25776c465870672901;p=libfirm diff --git a/ir/tr/tpop.h b/ir/tr/tpop.h index 52c3b7012..3166a963f 100644 --- a/ir/tr/tpop.h +++ b/ir/tr/tpop.h @@ -1,5 +1,26 @@ - -/* $Id$ */ +/** + * + * @file tpop.h + * + * Project: libFIRM + * File name: ir/tr/tpop.h + * Purpose: Opcode of types. + * Author: Goetz Lindenmaier + * Modified by: + * Created: + * Copyright: (c) 2001-2003 Universität Karlsruhe + * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE. + * CVS-ID: $Id$ + * + * This module specifies the kinds of types available in firm. + * + * They are called type opcodes. These include classes, structs, methods, unions, + * arrays, enumerations, pointers and primitive types. + * Special types with own opcodes are the id type, a type representing an unknown + * type and a type used to specify that something has no type. + * + * @see type.h + */ # ifndef _TYPEOP_H_ # define _TYPEOP_H_ @@ -7,21 +28,11 @@ #include "ident.h" /** - * - * file tpop.h - * (C) 2001 by Universitaet Karlsruhe - * Goetz Lindenmaier - * This module specifies the kinds of types available in firm. They are - * called type opcodes. These include classes, structs, methods, unions, - * arrays, enumerations, pointers and primitive types. - */ - -/** - * - * - an enum for the type kinds + * An enum for the type kinds. * For each type kind exists a typecode to identify it. */ typedef enum { + tpo_uninitialized = 0, /* not a type opcode */ tpo_class, tpo_struct, tpo_method, @@ -30,51 +41,50 @@ typedef enum { tpo_enumeration, tpo_pointer, tpo_primitive, - tpo_id + tpo_id, + tpo_none, + tpo_unknown, + tpo_max /* not a type opcode */ } tp_opcode; /** - * - * a structure containing information about a kind of type. + * A structure containing information about a kind of type. * A structure containing information about a kind of type. So far * this is only the kind name, an enum for case-switching and some * internal values. - * @see get_tpop_name, get_tpop_code, get_tpop_ident + * + * @see get_tpop_name(), get_tpop_code(), get_tpop_ident() */ typedef struct tp_op tp_op; /** - * * Returns the string for the type opcode. - * @param op - The type opcode to get the string from. - * @return a string. (@@@ Null terminated???) * + * @param op The type opcode to get the string from. + * @return a string. (@todo Null terminated???) */ -const char *get_tpop_name (tp_op *op); +const char *get_tpop_name (const tp_op *op); /** - * * Returns an enum for the type opcode. - * @param op - The type opcode to get the enum from. - * @return the enum. * + * @param op The type opcode to get the enum from. + * @return the enum. */ -tp_opcode get_tpop_code (tp_op *op); +tp_opcode get_tpop_code (const tp_op *op); /** - * * Returns the ident for the type opcode. - * @param op - The type opcode to get the ident from. - * @return The ident. * + * @param op The type opcode to get the ident from. + * @return The ident. */ -ident *get_tpop_ident (tp_op *op); +ident *get_tpop_ident (const tp_op *op); /** - * - * * 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. * @@@ value class or not??? @@ -82,97 +92,91 @@ ident *get_tpop_ident (tp_op *op); * of the library. */ extern tp_op *type_class; -tp_op *get_type_class(); +tp_op *get_tpop_class(void); /** - * - * type_struct * This type opcode marks that the corresponding type is a compound type - * as a struct in C. Consequently the type refers to a list of entities + * as a struct in C. + * + * Consequently the type refers to a list of entities * which may not be methods (but pointers to methods). * This struct is dynamically allocated but constant for the lifetime * of the library. */ extern tp_op *type_struct; -tp_op *get_type_struct(); +tp_op *get_tpop_struct(void); /** - * - * type_method * This type opcode marks that the corresponding type is a method type. + * * Consequently it refers to a list of arguments and results. * This struct is dynamically allocated but constant for the lifetime * of the library. */ extern tp_op *type_method; -tp_op *get_type_method(); +tp_op *get_tpop_method(void); /** - * - * type_union * This type opcode marks that the corresponding type is a union type. + * * Consequently it refers to a list of unioned types. * This struct is dynamically allocated but constant for the lifetime * of the library. */ extern tp_op *type_union; -tp_op *get_type_union(); +tp_op *get_tpop_union(void); /** - * - * type_array * This type opcode marks that the corresponding type is an array type. + * * Consequently it contains a list of dimensions (lower and upper bounds) * and an element type. * This struct is dynamically allocated but constant for the lifetime * of the library. */ extern tp_op *type_array; -tp_op *get_type_array(); +tp_op *get_tpop_array(void); /** - * - * type_enumeration * This type opcode marks that the corresponding type is an enumeration type. + * * Consequently it contains a list of idents for the enumeration identifiers - * and a list of tarbet values that are the constants used to implement + * and a list of target values that are the constants used to implement * the enumerators. * This struct is dynamically allocated but constant for the lifetime * of the library. */ extern tp_op *type_enumeration; -tp_op *get_type_enumeration(); +tp_op *get_tpop_enumeration(void); /** - * - * type_pointer * This type opcode marks that the corresponding type is a pointer type. + * * It contains a reference to the type the pointer points to. * This struct is dynamically allocated but constant for the lifetime * of the library. */ extern tp_op *type_pointer; -tp_op *get_type_pointer(); +tp_op *get_tpop_pointer(void); /** - * - * type_primitive * This type opcode marks that the corresponding type is a primitive type. + * * Primitive types are types that are directly mapped to target machine * modes. * This struct is dynamically allocated but constant for the lifetime * of the library. */ extern tp_op *type_primitive; -tp_op *get_type_primitive(); +tp_op *get_tpop_primitive(void); /** - * - * type_id * This type opcode is an auxiliary opcode dedicated to support transformations - * of the type structure. If a type is changed to another type with another + * of the type structure. + * + * If a type is changed to another type with another * opcode the new type will be allocated with new memory. All nodes refering - * to the old type need to be changed to refer the new one. This is simplified + * to the old type need to be changed to refer to the new one. This is simplified * by turning the old type into an id type that merely forwards to the new type * that now replaces the old one. * type_ids should never be visible out of the type module. All access routines @@ -184,6 +188,28 @@ tp_op *get_type_primitive(); * of the library. */ extern tp_op *type_id; -tp_op *get_type_id(); +tp_op *get_tpop_id(void); + +/** + * This type opcode is an auxiliary opcode dedicated to support type analyses. + * + * Types with this opcode represents that there is no type. + * The type can be used to initialize fields of the type* that actually can not + * contain a type or that are initialized for an analysis. There exists exactly + * one type with this opcode. + */ +extern tp_op *tpop_none; +tp_op *get_tpop_none(void); + +/** + * This type opcode is an auxiliary opcode dedicated to support type analyses. + * + * Types with this opcode represents that there could be a type, but it is not + * known. This type can be used to initialize fields before an analysis (not known + * yet) or to represent the top of a lattice (could not be determined). There exists + * exactly one type with this opcode. + */ +extern tp_op *tpop_unknown; +tp_op *get_tpop_unknown(void); # endif /*_TYPEOP_H_ */