X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Ftr%2Ftypewalk.h;h=e00a36bb3bbe4fb9a0667b2ac7b56d9a1c55e377;hb=1fb376a0abbaa02759baf1df5374a30a14c0dcb3;hp=76d3e1a4a5531ee3e7699cc4ab2c3b5881d5c6ad;hpb=4737d89b7bb1c72382e66e40c6d4e6aa8abd95c8;p=libfirm diff --git a/ir/tr/typewalk.h b/ir/tr/typewalk.h index 76d3e1a4a..e00a36bb3 100644 --- a/ir/tr/typewalk.h +++ b/ir/tr/typewalk.h @@ -1,13 +1,18 @@ /* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe +* All rights reserved. +*/ -** All rights reserved. -** -** Author: Goetz Lindenmaier -** -** traverse the type information. The walker walks the whole ir graph -** to find the distinct type trees in the type graph forest. -** - execute the pre function before recursion -** - execute the post function after recursion +/** +* @file typewalk.h +* +* Traverse the type information. +* +* @author Goetz Lindenmaier +* +* The walker walks the whole ir graph +* to find the distinct type trees in the type graph forest. +* - execute the pre() function before recursion +* - execute the post() function after recursion */ /* $Id$ */ @@ -20,51 +25,89 @@ # include "type_or_entity.h" +/** + * the type walk function + * + * @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 + * + * @param clss points to the visited class + * @param env free environment pointer + */ +typedef void class_walk_func(type *clss, void *env); -/** 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*), + be visited, too. */ +void type_walk(type_walk_func *pre, + type_walk_func *post, void *env); -/** walks over 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*), + type_walk_func *pre, + type_walk_func *post, 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*), + during the traversal these will be visited, too. + + @todo should be named class-walk + + @deprecated will be removed? +*/ +void type_walk_super2sub(type_walk_func *pre, + type_walk_func *post, 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*), + will be visited, too. */ +void type_walk_super(type_walk_func *pre, + type_walk_func *post, void *env); -/* Same as type_walk_super2sub, but visits only class types. +/** 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. + + @bug ?? something is wrong with this. */ -/* @@@ ?? something is wrong with this. */ -void class_walk_super2sub(void (pre)(type*, void*), - void (post)(type*, void*), +void class_walk_super2sub(class_walk_func *pre, + class_walk_func *post, void *env); + +/** + * the entity walk function + * + * @param ent points to the visited entity + * @param env free environment pointer + */ +typedef void entity_walk_func(entity *ent, void *env); + +/** + * Walks over all entities in the type. + * + * @param tp the type + * @param doit the entity walker function + * @param env environment, wil be passed to the walker function + */ +void walk_types_entities(type *tp, + entity_walk_func *doit, + void *env); #endif /* _TYPEWALK_H_ */