*** empty log message ***
[libfirm] / ir / tr / typewalk.h
index 6b023f6..76d3e1a 100644 (file)
@@ -10,6 +10,8 @@
 ** - execute the post function after recursion
 */
 
+/* $Id$ */
+
 
 /* walk over all type information reachable from the ir graph. */
 
 # include "type_or_entity.h"
 
 
-/** dumps all type information reachable from global roots **/
+/** Walks over all type information reachable from global roots.
+    Touches every type and entity in unspecified order.  If new
+    types/entities are created during the traversal these will
+    be visited, too. **/
 void type_walk(void (pre)(type_or_ent*, void*),
               void (post)(type_or_ent*, void*),
               void *env);
 
-/** dumps all type information reachable from irg **/
+/** walks over all type information reachable from irg **/
 void type_walk_irg(ir_graph *irg,
                   void (pre)(type_or_ent*, void*),
                   void (post)(type_or_ent*, void*),
                   void *env);
 
+/** Walks over all type information reachable from global roots.
+    Touches every class in specified order:
+    - first the super class
+    - second the class itself
+    - third the sub classes.  If new classes are created
+    during the traversal these will be visited, too. **/
+/** @@@ should be named class-walk **/
+/*  @@@ will be removed? */
+void type_walk_super2sub(void (pre)(type_or_ent*, void*),
+                        void (post)(type_or_ent*, void*),
+                        void *env);
+
+/** Walks over all type information reachable from global roots.
+    Touches every class in specified order:
+    - first the super class
+    - second the class itself
+    If new classes are created during the traversal these
+    will be visited, too. **/
+void type_walk_super(void (pre)(type_or_ent*, void*),
+                    void (post)(type_or_ent*, void*),
+                    void *env);
 
+/* Same as type_walk_super2sub, but visits only class types.
+   Executes pre for a class if all superclasses have been visited.
+   Then iterates to subclasses.  Executes post after return from
+   subclass.
+   Does not visit global type, frame types.
+*/
+/* @@@ ?? something is wrong with this. */
+void class_walk_super2sub(void (pre)(type*, void*),
+                         void (post)(type*, void*),
+                         void *env);
 #endif /* _TYPEWALK_H_ */