adding assertion to prevent recursive compound types
[libfirm] / ir / common / firmwalk.c
index efb05ad..30019c0 100644 (file)
  */
 
 #ifdef HAVE_CONFIG_H
-# include <config.h>
+# include "config.h"
 #endif
 
-#include <string.h>
+#ifdef HAVE_STRING_H
+# include <string.h>
+#endif
 
 #include "firmwalk.h"
 
@@ -469,7 +471,7 @@ void firm_walk(firm_walk_interface *wif)
 
       /*  call block as prefix ir node */
       if ((wif->do_node) &&
-          (wif->flags & FW_DUMP_BLOCK_AS_IRN & !FW_DUMP_IRN_IN_PREFIX))
+          (wif->flags & (FW_DUMP_BLOCK_AS_IRN | FW_DUMP_IRN_IN_PREFIX)))
         wif->do_node(block, wif->env);
 
       /*  do ir nodes in prefix or postfix order? */
@@ -490,18 +492,28 @@ void firm_walk(firm_walk_interface *wif)
       }
       /*  call block as postfix ir node */
       if ((wif->do_node) &&
-          (wif->flags & (FW_DUMP_BLOCK_AS_IRN | FW_DUMP_IRN_IN_PREFIX)))
+          ((wif->flags & (FW_DUMP_BLOCK_AS_IRN | FW_DUMP_IRN_IN_PREFIX))
+          == FW_DUMP_BLOCK_AS_IRN))
         wif->do_node(block, wif->env);
 
       /* wall over all block's ir nodes nested end =============== */
 
-      if (wif->do_block_finalize) wif->do_block_finalize(current_ir_graph, wif->env);
+      if(wif->do_block_post)
+       wif->do_block_post(block, wif->env);
+
     } /*  for each block */
 
+    if (wif->do_block_finalize)
+      wif->do_block_finalize(current_ir_graph, wif->env);
+
     /* walk over all irg's block nested end ====================== */
+    if(wif->do_graph_post)
+      wif->do_graph_post(current_ir_graph, wif->env);
 
   } /*  for each ir graph irg */
-  if (wif->do_graph_finalize) wif->do_graph_finalize(wif->env);
+
+  if(wif->do_graph_finalize)
+    wif->do_graph_finalize(wif->env);
 
   /** ### ToDo: Dump const_code_irg ?? No! Dump const code with entities, types etc. */