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