X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Ftr%2Ftypewalk.h;h=e5524733eacadfaa5d490174df954facd4531453;hb=d0d85962ef52c14950db90e5981a7bea36023ab3;hp=e9e1ebf801d8c45bb8beac2b411e7198d937aeeb;hpb=677f67f9b487e35b983148f48b933d54ee383db6;p=libfirm diff --git a/ir/tr/typewalk.h b/ir/tr/typewalk.h index e9e1ebf80..e5524733e 100644 --- a/ir/tr/typewalk.h +++ b/ir/tr/typewalk.h @@ -1,79 +1,126 @@ -/* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe - -** 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 -*/ - -/* $Id$ */ - +/* + * Project: libFIRM + * File name: ir/tr/typewalk.h + * Purpose: Traverse the type information. + * 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. + */ -/* walk over all type information reachable from the ir graph. */ +/** + * @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 + */ #ifndef _TYPEWALK_H_ #define _TYPEWALK_H_ -# include "type_or_entity.h" +#include "type.h" +#include "type_or_entity.h" +#include "irgraph.h" -typedef void (type_walk_func)(type_or_ent *, void *); +/** 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); -/** 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(type_walk_func *pre, - type_walk_func *post, - void *env); +/** The class walk function + * + * @param clss points to the visited class + * @param env free environment pointer + */ +typedef void class_walk_func(ir_type *clss, void *env); -/** walks over all type information reachable from irg **/ +/** 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. + * + * Walks over all type information reachable from irg, i.e., starts a + * 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); -/** 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? */ + 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); + 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. **/ +/** 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. +/** 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(type_walk_func *pre, - type_walk_func *post, - void *env); +void class_walk_super2sub(class_walk_func *pre, + class_walk_func *post, + void *env); + +/** + * the entity walk function. A function type for entity walkers. + * + * @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, will be passed to the walker function + */ +void walk_types_entities(ir_type *tp, + entity_walk_func *doit, + void *env); -/* Walks over all entities in the type */ -typedef void (entity_walk_func)(entity *, void *); -void walk_types_entities(type *tp, - entity_walk_func *doit, - void *env); #endif /* _TYPEWALK_H_ */