X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Ftr%2Ftpop.h;h=3166a963fe3abe513dde2ac0cf650d33c653c2cb;hb=ff244fb7355c6120cf0f15ba7911b473bb91c64b;hp=63ffcb3006e8bce3876409c5b2d6f4fd05c7dc1f;hpb=7023ae0df14b6797bdb6fa22050cf7c1c12ab9df;p=libfirm diff --git a/ir/tr/tpop.h b/ir/tr/tpop.h index 63ffcb300..3166a963f 100644 --- a/ir/tr/tpop.h +++ b/ir/tr/tpop.h @@ -1,28 +1,38 @@ -/* (C) 2001 by Universitaet Karlsruhe */ - -/* $Id$ */ - -# ifndef _TYPEOP_H_ -# define _TYPEOP_H_ - -#include "ident.h" - /** - * @file tpop.h * - * This module specifies the kinds of types available in firm. + * @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$ * - * @author 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. + * 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_ + +#include "ident.h" + /** - * 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, @@ -31,7 +41,10 @@ typedef enum { tpo_enumeration, tpo_pointer, tpo_primitive, - tpo_id + tpo_id, + tpo_none, + tpo_unknown, + tpo_max /* not a type opcode */ } tp_opcode; /** @@ -51,7 +64,7 @@ typedef struct tp_op tp_op; * @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. @@ -59,7 +72,7 @@ const char *get_tpop_name (tp_op *op); * @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. @@ -67,7 +80,7 @@ tp_opcode get_tpop_code (tp_op *op); * @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. @@ -79,7 +92,7 @@ ident *get_tpop_ident (tp_op *op); * of the library. */ extern tp_op *type_class; -tp_op *get_type_class(void); +tp_op *get_tpop_class(void); /** * This type opcode marks that the corresponding type is a compound type @@ -91,7 +104,7 @@ tp_op *get_type_class(void); * of the library. */ extern tp_op *type_struct; -tp_op *get_type_struct(void); +tp_op *get_tpop_struct(void); /** * This type opcode marks that the corresponding type is a method type. @@ -101,7 +114,7 @@ tp_op *get_type_struct(void); * of the library. */ extern tp_op *type_method; -tp_op *get_type_method(void); +tp_op *get_tpop_method(void); /** * This type opcode marks that the corresponding type is a union type. @@ -111,7 +124,7 @@ tp_op *get_type_method(void); * of the library. */ extern tp_op *type_union; -tp_op *get_type_union(void); +tp_op *get_tpop_union(void); /** * This type opcode marks that the corresponding type is an array type. @@ -122,19 +135,19 @@ tp_op *get_type_union(void); * of the library. */ extern tp_op *type_array; -tp_op *get_type_array(void); +tp_op *get_tpop_array(void); /** * 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(void); +tp_op *get_tpop_enumeration(void); /** * This type opcode marks that the corresponding type is a pointer type. @@ -144,7 +157,7 @@ tp_op *get_type_enumeration(void); * of the library. */ extern tp_op *type_pointer; -tp_op *get_type_pointer(void); +tp_op *get_tpop_pointer(void); /** * This type opcode marks that the corresponding type is a primitive type. @@ -155,7 +168,7 @@ tp_op *get_type_pointer(void); * of the library. */ extern tp_op *type_primitive; -tp_op *get_type_primitive(void); +tp_op *get_tpop_primitive(void); /** * This type opcode is an auxiliary opcode dedicated to support transformations @@ -163,7 +176,7 @@ tp_op *get_type_primitive(void); * * 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 @@ -175,6 +188,28 @@ tp_op *get_type_primitive(void); * of the library. */ extern tp_op *type_id; -tp_op *get_type_id(void); +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_ */