#include "irgraph.h"
-/**
- * the type walk function
+/** Type of argument functions for type walkers.
*
* @param tore points to the visited type or entity
* @param env free environment pointer
*/
typedef void type_walk_func(type_or_ent *tore, void *env);
-/**
- * the class walk function
+/** The class walk function
*
* @param clss points to the visited class
* @param env free environment pointer
*/
-typedef void class_walk_func(type *clss, void *env);
+typedef void class_walk_func(ir_type *clss, void *env);
-/**
- 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(type_walk_func *pre,
- type_walk_func *post,
- void *env);
+/** Touches every type and entity in unspecified order. If new
+ * types/entities are created during the traversal these will
+ * be visited, too.
+ * Does not touch frame types or types for value params ... */
+void type_walk(type_walk_func *pre, type_walk_func *post, void *env);
/** Walks over all type information reachable from an ir graph.
*
* type walk at the irgs entity, the irgs frame type and all types and
* entities that are attributes to firm nodes. */
void type_walk_irg(ir_graph *irg,
- type_walk_func *pre,
- type_walk_func *post,
- void *env);
+ type_walk_func *pre,
+ type_walk_func *post,
+ void *env);
/**
Touches every class in specified order:
@deprecated will be removed?
*/
void type_walk_super2sub(type_walk_func *pre,
- type_walk_func *post,
- void *env);
+ type_walk_func *post,
+ void *env);
-/**
- 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. */
+/** Walker for class types in inheritance order.
+ *
+ * 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.
+ * Starts the walk at arbitrary classes.
+ * Executes pre when first visiting a class. Executes post after
+ * visiting all superclasses.
+ *
+ * The arguments pre, post, env may be NULL. */
void type_walk_super(type_walk_func *pre,
- type_walk_func *post,
- void *env);
+ type_walk_func *post,
+ void *env);
/** Same as type_walk_super2sub, but visits only class types.
Executes pre for a class if all superclasses have been visited.
@bug ?? something is wrong with this.
*/
void class_walk_super2sub(class_walk_func *pre,
- class_walk_func *post,
- void *env);
+ class_walk_func *post,
+ void *env);
/**
- * the entity walk function
+ * the entity walk function. A function type for entity walkers.
*
* @param ent points to the visited entity
* @param env free environment pointer
*
* @param tp the type
* @param doit the entity walker function
- * @param env environment, wil be passed to the walker function
+ * @param env environment, will be passed to the walker function
*/
-void walk_types_entities(type *tp,
- entity_walk_func *doit,
- void *env);
+void walk_types_entities(ir_type *tp,
+ entity_walk_func *doit,
+ void *env);
+
#endif /* _TYPEWALK_H_ */