|
|
1.1 ! root 1: /* Copyright (c) 1982 Regents of the University of California */ ! 2: ! 3: static char sccsid[] = "@(#)tfree.c 1.1 1/18/82"; ! 4: ! 5: /* ! 6: * Free a tree; this is expensive but useful. ! 7: */ ! 8: ! 9: #include "defs.h" ! 10: #include "tree.h" ! 11: #include "sym.h" ! 12: #include "tree.rep" ! 13: ! 14: tfree(p) ! 15: register NODE *p; ! 16: { ! 17: if (p == NIL) { ! 18: return; ! 19: } ! 20: switch(degree(p->op)) { ! 21: case LEAF: ! 22: switch(p->op) { ! 23: case O_CALL: ! 24: tfree(p->left); ! 25: tfree(p->right); ! 26: break; ! 27: ! 28: case O_QLINE: ! 29: dispose(p->left->sconval); ! 30: dispose(p->left); ! 31: tfree(p->right); ! 32: break; ! 33: ! 34: case O_ALIAS: ! 35: dispose(p->left->sconval); ! 36: dispose(p->left); ! 37: dispose(p->right->sconval); ! 38: dispose(p->right); ! 39: break; ! 40: ! 41: case O_SCON: ! 42: unmkstring(p->nodetype); ! 43: free(p->nodetype); ! 44: free(p->sconval); ! 45: p->sconval = NIL; ! 46: break; ! 47: } ! 48: break; ! 49: ! 50: case BINARY: ! 51: tfree(p->right); ! 52: /* fall through */ ! 53: case UNARY: ! 54: tfree(p->left); ! 55: break; ! 56: ! 57: default: ! 58: panic("bad op %d in tfree", p->op); ! 59: } ! 60: dispose(p); ! 61: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.