Annotation of researchv10no/cmd/twig/trees.c, revision 1.1.1.1

1.1       root        1: #include "common.h"
                      2: #include "code.h"
                      3: #include "sym.h"
                      4: #include "mem.h"
                      5: 
                      6: struct _mem node_mem;
                      7: 
                      8: void
                      9: TreeFree(root)
                     10:        Node *root;
                     11: {
                     12:        if(root==NULL) return;
                     13:        TreeFree(root->children);
                     14:        TreeFree(root->siblings);
                     15:        free(root);
                     16: }
                     17: 
                     18: void
                     19: TreePrint(tree, flag)
                     20:        Node *tree;
                     21:        int flag;
                     22: {
                     23:        if(tree==NULL)
                     24:                return;
                     25:        printf("%s", (tree->sym)->name);
                     26:        putchar('(');
                     27:        TreePrint(tree->children, 0);
                     28:        putchar(')');
                     29:        if(tree->siblings!=NULL) {
                     30:                putchar(',');
                     31:                TreePrint(tree->siblings, 0);
                     32:        }
                     33:        if(flag) putchar('\n');
                     34: }
                     35: 
                     36: Node *
                     37: rev (sl, nl, nlleaves)
                     38:        Node *sl, *nl;
                     39:        int *nlleaves;
                     40: {
                     41:        Node *sl2;
                     42:        if(sl==NULL)
                     43:                return(nl);
                     44:        sl2 = sl->siblings;
                     45:        sl->siblings = nl;
                     46:        *nlleaves += sl->nlleaves;
                     47:        return (rev (sl2, sl, nlleaves));
                     48: }
                     49: 
                     50: Node *
                     51: TreeBuild (symp, children)
                     52:        SymbolEntry *symp;
                     53:        Node *children;
                     54: {
                     55:        Node *np = (struct node *) mem_get(&node_mem);
                     56:        np->sym = symp;
                     57:        np->nlleaves = symp->attr==A_LABEL ? 1 : 0;
                     58:        np->children = rev (children, NULL, &np->nlleaves);
                     59:        return(np);
                     60: }
                     61: 
                     62: TreeInit()
                     63: {
                     64:        mem_init(&node_mem, sizeof(struct node));
                     65: }
                     66: 
                     67: cntnodes(np)
                     68:        Node *np;
                     69: {
                     70:        if(np==NULL) return(0);
                     71:        else return(1+cntnodes(np->children)+cntnodes(np->siblings));
                     72: }

unix.superglobalmegacorp.com

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