*** empty log message ***
[libfirm] / testprograms / oo_program_example.c
index 8339fa1..835d8be 100644 (file)
@@ -1,10 +1,14 @@
-/* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
-** All rights reserved.
-**
-** Authors: Goetz Lindenmaier
-**
-** testprogram.
-*/
+/*
+ * Project:     libFIRM
+ * File name:   testprograms/oo_program_example.c
+ * Purpose:     A complex example.
+ * 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 <stdio.h>
 # include <string.h>
 # include "irdump.h"
 # include "firm.h"
 
-/**  This file constructs the IR for the following program:
-***
-***  class PRIMA {
-***    a: int;
-***
-***    int c(d: int) {
-***      return (d + self.a);
-***    }
-***
-***    void set_a(e:int) {
-***      self.a = e;
-***    }
-***
-***  }
-***
-***  int main() {
-***    o: PRIMA;
-***    o = new PRIMA;
-***    o.set_a(2);
-***    return o.c(5);
-***  };
-***
+/**
+*
+*  class PRIMA {
+*    a: int;
+*
+*    int c(d: int) {
+*      return (d + self.a);
+*    }
+*
+*    void set_a(e:int) {
+*      self.a = e;
+*    }
+*
+*  }
+*
+*  int main() {
+*    o: PRIMA;
+*    o = new PRIMA;
+*    o.set_a(2);
+*    return o.c(5);
+*  };
+*
 **/
 
 int
@@ -55,7 +59,7 @@ main(void)
 
   int i;
 
-  init_firm ();
+  init_firm (NULL);
 
   set_opt_constant_folding(1);
   set_opt_cse(1);
@@ -94,12 +98,12 @@ main(void)
      owner is the global type. */
   owner = get_glob_type();
   /* Main has zero parameters and one result. */
-  proc_main = new_type_method(id_from_str("main", 4), 0, 1);
+  proc_main = new_type_method(id_from_str("OO_PROGRAM_EXAMPLE_main", 23), 0, 1);
   /* The result type is int. */
   set_method_res_type(proc_main, 0, prim_t_int);
 
   /* The entity for main. */
-  proc_main_e = new_entity (owner, id_from_str ("main", 4), proc_main);
+  proc_main_e = new_entity (owner, id_from_str ("OO_PROGRAM_EXAMPLE_main", 23), proc_main);
 
   /** Build code for procedure main. **/
   /* We need one local variable (for "o"). */
@@ -110,12 +114,13 @@ main(void)
   set_irp_main_irg(main_irg);
 
   /* Make the constants.  They are independent of a block. */
-  c2 = new_Const (mode_Is, tarval_from_long (mode_Is, 2));
-  c5 = new_Const (mode_Is, tarval_from_long (mode_Is, 5));
+  c2 = new_Const (mode_Is, new_tarval_from_long (2, mode_Is));
+  c5 = new_Const (mode_Is, new_tarval_from_long (5, mode_Is));
 
   /* There is only one block in main, it contains the allocation and the calls. */
   /* Allocate the defined object and generate the type information. */
-  obj_size = new_SymConst((type_or_id_p)class_prima, size);
+  symconst_symbol sym = {class_prima};
+  obj_size = new_SymConst(sym, symconst_size);
   obj_o    = new_Alloc(get_store(), obj_size, class_prima, heap_alloc);
   set_store(new_Proj(obj_o, mode_M, 0));  /* make the changed memory visible */
   obj_o    = new_Proj(obj_o, mode_P, 2);  /* remember the pointer to the object */
@@ -240,9 +245,32 @@ main(void)
   }
 
   printf("Dumping graphs of all procedures and a type graph.\n");
+  /* Touch ld names to distinguish names from oo_inline names. */
+  get_entity_ld_ident(proc_set_a_e);
+  get_entity_ld_ident(proc_c_e);
+
+  dump_consts_local(1);
+  turn_off_edge_labels();
+
+  dump_all_ir_graphs(dump_ir_graph);
   dump_all_ir_graphs(dump_ir_block_graph);
+  dump_all_ir_graphs(dump_ir_graph_w_types);
   dump_all_ir_graphs(dump_ir_block_graph_w_types);
+  dump_all_ir_graphs(dump_type_graph);
   dump_all_types();
+  dump_class_hierarchy (true);
+
+  entity **free_methods;
+  int arr_len;
+  cgana(&arr_len, &free_methods, 0);
+  cg_construct(arr_len, free_methods);
+
+  interprocedural_view = 1;
+  dump_ir_graph(main_irg);
+  dump_ir_block_graph(main_irg);
+  dump_ir_graph_w_types(main_irg);
+  dump_ir_block_graph_w_types(main_irg);
+  dump_all_cg_block_graph();
 
   printf("Use xvcg to view these graphs:\n");
   printf("/ben/goetz/bin/xvcg GRAPHNAME\n\n");