⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 free.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
字号:
#include "defs"cleanst(){register ptr p, q;ptr pjunk;int i;register struct stentry *s;struct stentry **hp;TEST fprintf(diagfile, "\n");clcomm();for(hp = hashtab ; hp<hashend ; ++hp)    while( s = *hp )	{	if( q = s->varp )		{		if( q->blklevel > 0 )			{			TEST fprintf(diagfile, "remove %s from st\n", s->namep);			switch(q->tag)				{				case TNAME:					frvar(q);					break;				case TSTRUCT:					frtype(q);					break;				case TDEFINE:					frdef(q);					break;				case TLABEL:					cfree(q);					break;				default:					sprintf(msg, "cleanst: illegal entry tag %d, ptr %o, name %s.",						q->tag, q, s->namep);					fatal(msg);				}			}		else if( q->tag == TNAME )			{			q->vdcldone = 0;			q->vnamedone = 0;			q->vextbase = 0;			for(i = 0 ; i<NFTNTYPES ; ++i)				q->vbase[i] = 0;			}		}	if(s->blklevel > 0)		name(s->namep,-1);	else	break;	}for(p = gonelist ; p ; p = p->nextp)	frvar(p->datap);frchain(&gonelist);if(hidlist) fatal("cleanst: hidlist not empty");for(p = hidlist ; p ; p = p->nextp)	frvar(p->datap);frchain(&hidlist);for(p = tempvarlist ; p ; p = p->nextp)	frvar(p->datap);frchain(&tempvarlist);for(p = temptypelist ; p ; p = p->nextp)	if(p->datap->blklevel > 0)		frtype(p->datap);frchain(&temptypelist);q = &arrays;for(p = arrays ; p ; p = q->nextp)	if(p->datap == 0)		{		q->nextp = p->nextp;		p->nextp = 0;		pjunk = p;		frchain(&pjunk);		}	else	q = p;}frvar(p)register ptr p;{register ptr q, qn;if(p==0) return;switch(p->tag)	{	case TSTRUCT:		frtype(p);		return;	case TDEFINE:		frdef(p);		return;	case TNAME:	case TTEMP:		if(q = p->vdim)		    for(q = q->datap ; q ; q = qn)			{			if(q->lowerb) frexpr(q->lowerb);			frexpr(q->upperb);			qn = q->nextp;			cfree(q);			}				if(p->vdim)			p->vdim->datap = 0;		if(p->vtype == TYCHAR)			frexpr(p->vtypep);		frexpblock(p);		return;	default:		badtag("frvar",p->tag);	}}frtype(p)register ptr p;{register ptr q;if(p==0 || p->tag!=TSTRUCT)	fatal("frtype: bad argument");for(q = p->strdesc ; q; q = q->nextp)	frvar(q->datap);frchain( &(p->strdesc) );cfree(p);}frdef(p)ptr p;{cfree(p->valp);cfree(p);}frexpr(p)register ptr p;{register ptr q;if(p == 0) return;switch(p->tag)	{	case TAROP:	case TRELOP:	case TLOGOP:	case TASGNOP:	case TREPOP:	case TCALL:		frexpr(p->rightp);	case TNOTOP:	case TNEGOP:		frexpr(p->leftp);		break;	case TCONST:		cfree(p->leftp);		if(p->vtype == TYCHAR)			frexpr(p->vtypep);		if(p->rightp)			cfree(p->rightp);		break;	case TLIST:		for(q = p->leftp ; q ; q = q->nextp)			frexpr(q->datap);		frchain( &(p->leftp) );		break;	case TTEMP:	case TNAME:	case TFTNBLOCK:		if(p->vsubs)			frexpr(p->vsubs);		if(p->voffset)			frexpr(p->voffset);	case TERROR:/*debug*/ case TIOSTAT:		break;	default:		badtag("frexpr", p->tag);	}frexpblock(p);}clcomm()	/* clean up common lists */{ptr p, oldp, q;for(oldp = &commonlist ; p = oldp->nextp ;  )	{	q = p->datap;	if(q->blklevel > 0)		{		frchain( &(q->comchain) );		cfree(q);		oldp->nextp = p->nextp;		cfree(p);		}	else   oldp = p;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -