X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=testprograms%2Fconst_ent_example.c;h=ad8801c870c35ac5fbae501604bd5b38a8d3a432;hb=9e5fa4a2392161aba6ee694de1093ff4516cbefa;hp=928dbe928817232ad4f39a2ceded2852ab3332cf;hpb=13588bfa29b57530c70851264dd5ea05184b9486;p=libfirm diff --git a/testprograms/const_ent_example.c b/testprograms/const_ent_example.c index 928dbe928..ad8801c87 100644 --- a/testprograms/const_ent_example.c +++ b/testprograms/const_ent_example.c @@ -1,12 +1,17 @@ -/* Copyright (C) 2000 by Universitaet Karlsruhe -* All rights reserved. -* -* Author: Goetz Lindenmaier -* -* testprogram. -*/ - -#include +/* + * Project: libFIRM + * File name: testprograms/const_ent_example.c + * Purpose: Shows how to construct type information for constant entities. + * Author: Goetz Lindenmaier + * Modified by: + * Created: + * CVS-ID: $Id$ + * Copyright: (c) 1999-2003 Universität Karlsruhe + * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE. + */ + + +# include # include # include "irvrfy.h" @@ -14,32 +19,32 @@ # include "firm.h" /** -* This file constructs type information for constant entities. -* -* It constructs the information for a class type with a dispatch -* table. The class has a field a, and two methods f and g. The -* class is represented by a class type with two entities for the -* field a and the reference to the dispatch table. This reference -* is a constant entity. Ther dispatch table is also represented -* by a class type that contains the two methods. There is one entity -* of the dispatch table which is constant. -* -* Further the example shows the representation of a constant global -* array. -* -* class C { -* int a; -* void f(); -* void g(int); -* } -* int[4] arre = (7, 2, 13, 92); -**/ + * This file constructs type information for constant entities. + * + * It constructs the information for a class type with a dispatch + * table. The class has a field a, and two methods f and g. The + * class is represented by a class type with two entities for the + * field a and the reference to the dispatch table. This reference + * is a constant entity. Ther dispatch table is also represented + * by a class type that contains the two methods. There is one entity + * of the dispatch table which is constant. + * + * Further the example shows the representation of a constant global + * array. + * + * class C { + * int a; + * void f(); + * void g(int); + * } + * int[4] arre = (7, 2, 13, 92); + **/ int main(int argc, char **argv) { ident *Ci, *ai, *fi, *fti, *gi, *gti, *inti, *dipti, *diptpi, *diptpei, *diptei; /* suffix i names identifiers */ - type *Ct, *intt, *at, *ft, *gt, *diptt, *diptpt; + type *Ct, *intt, *ft, *gt, *diptt, *diptpt; /* t names types */ entity *ae, *fe, *ge, *dipte, *diptpe; /* e names entities */ ir_node *n; @@ -51,17 +56,17 @@ int main(int argc, char **argv) init_firm (NULL); /** make idents for all used identifiers in the program. */ - Ci = id_from_str("C", strlen("C")); - ai = id_from_str("a", strlen("a")); - fi = id_from_str("f", strlen("f")); - fti = id_from_str("f_type", strlen("f_type")); - gi = id_from_str("g", strlen("g")); - gti = id_from_str("g_type", strlen("g_type")); - inti = id_from_str("int", strlen("int")); - dipti = id_from_str("C_dispatch_table_type", strlen("C_dispatch_table_type")); - diptei = id_from_str("C_dispatch_table", strlen("C_dispatch_table")); - diptpi = id_from_str("C_dispatch_table_p_type", strlen("C_dispatch_table_p_type")); - diptpei = id_from_str("C_dispatch_table_p", strlen("C_dispatch_table_p")); + Ci = new_id_from_chars("C", strlen("C")); + ai = new_id_from_chars("a", strlen("a")); + fi = new_id_from_chars("f", strlen("f")); + fti = new_id_from_chars("f_type", strlen("f_type")); + gi = new_id_from_chars("g", strlen("g")); + gti = new_id_from_chars("g_type", strlen("g_type")); + inti = new_id_from_chars("int", strlen("int")); + dipti = new_id_from_chars("C_dispatch_table_type", strlen("C_dispatch_table_type")); + diptei = new_id_from_chars("C_dispatch_table", strlen("C_dispatch_table")); + diptpi = new_id_from_chars("C_dispatch_table_p_type", strlen("C_dispatch_table_p_type")); + diptpei = new_id_from_chars("C_dispatch_table_p", strlen("C_dispatch_table_p")); /** make the type information needed */ @@ -73,7 +78,7 @@ int main(int argc, char **argv) gt = new_type_method(gti, 1, 0); /* 1 parameter, 0 results */ /* Compiler defined types: dispatch table and pointer to it */ diptt = new_type_class(dipti); - diptpt = new_type_pointer(diptpi, diptt); + diptpt = new_type_pointer(diptpi, diptt, mode_P); /** add structure to type graph **/ /* parameters of methods */ set_method_param_type(gt, 0, intt); @@ -89,16 +94,14 @@ int main(int argc, char **argv) current_ir_graph = get_const_code_irg(); /* The pointer to the dispatch table is constant. */ /* The constant is the address of the given entity */ -<<<<<<< const_ent_example.c - n = new_Const(mode_P, new_tarval_from_entity(dipte, mode_P)); -======= - n = new_Const(mode_P, tarval_P_from_entity(dipte)); ->>>>>>> 1.7 - set_entity_variability(diptpe, constant); + symconst_symbol sym; + sym.entity_p = dipte; + n = new_SymConst(sym, symconst_addr_ent); + set_entity_variability(diptpe, variability_constant); set_atomic_ent_value(diptpe, n); /* The entity representing the dispatch table is constant, too. */ - set_entity_variability(dipte, constant); + set_entity_variability(dipte, variability_constant); add_compound_ent_value(dipte, get_atomic_ent_value(fe), fe); add_compound_ent_value(dipte, get_atomic_ent_value(ge), ge); @@ -108,8 +111,8 @@ int main(int argc, char **argv) type *arrt; entity *arre, *arrelte; - arrei = id_from_str("arr", strlen("arr")); - arrti = id_from_str("arr_t", strlen("arr_t")); + arrei = new_id_from_chars("arr", strlen("arr")); + arrti = new_id_from_chars("arr_t", strlen("arr_t")); /** The array type **/ /* Don't reuse int type so that graph layout is better readable */ @@ -120,7 +123,7 @@ int main(int argc, char **argv) /** The constant array entity **/ arre = new_entity(get_glob_type(), arrei, arrt); - set_entity_variability(arre, constant); + set_entity_variability(arre, variability_constant); current_ir_graph = get_const_code_irg(); n = new_Const(mode_Is, new_tarval_from_long (7, mode_Is)); add_compound_ent_value(arre, n, arrelte); @@ -132,7 +135,7 @@ int main(int argc, char **argv) add_compound_ent_value(arre, n, arrelte); } printf("Done building the graph. Dumping it.\n"); - dump_all_types(); + dump_all_types(0); printf("use xvcg to view this graph:\n"); printf("/ben/goetz/bin/xvcg GRAPHNAME\n\n");