Annotation of researchv10no/cmd/cfront/ooptcfront/tree_copy.H, revision 1.1.1.1

1.1       root        1: /* -*- Mode: C -*- begin include file tree_copy.H 
                      2:    argument class for copying trees. */
                      3: 
                      4: #include <hash.H>
                      5: #include "tree_walk.H"
                      6: 
                      7: /* The copier procedure expects one of these as its 
                      8:     info pointer */
                      9: 
                     10: class tree_copy_info {
                     11:   public:
                     12: /* If non-zero, this procedure is called at each node.
                     13:    it returns an action. It cannot currently return
                     14:    a node of a different class and also return an
                     15:    action other than tna_stop, since the walker won't
                     16:    notice that the rug has been removed from beneath its feet. 
                     17:    The procedure must set the last argument to indicate whether
                     18:    or not to register the node in the hash table and use the
                     19:    replacement every future time it is encountered.
                     20: */
                     21: 
                     22:     void (* node_hook) (void * info, Pnode&, node_class, tree_node_action&,
                     23:                        int&);
                     24: 
                     25:     /* if this is nonzero it is used to allocate space for
                     26:        the copies. We don't run constructors since we always
                     27:        bit copy over the new copy. */
                     28:     char * (* malloc_hook) (void * info, size_t);
                     29:     void * hook_info;
                     30:     tree_copy_info ()
                     31:        {
                     32:            hook_info = 0;
                     33:            node_hook = 0;
                     34:            malloc_hook = 0;
                     35:        }; 
                     36:     char * malloc (size_t s) {
                     37:        return malloc_hook ? malloc_hook(hook_info, s) : ::malloc (s);
                     38:     };
                     39:     void check_node (Pnode& n,
                     40:                     node_class cl, 
                     41:                     tree_node_action& action, 
                     42:                     int& never_see_again) {
                     43:        if(node_hook)
                     44:            node_hook(hook_info, n, cl, action, never_see_again);
                     45:     };
                     46: };
                     47: 
                     48: void copy_tree (Pnode& n, tree_copy_info& tci, Hash * cht = 0);
                     49: 
                     50: /* End tree_copy.H */
                     51: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.