|
|
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.