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

📄 del.c

📁 CFront1.0的源代码,第一代C++编译器的思想...
💻 C
字号:
/* @(#) del.c 1.3 1/27/86 17:48:46 */ /*ident	"@(#)cfront:src/del.c	1.3" *//************************************************************	C++ source for cfront, the C++ compiler front-end	written in the computer science research center of Bell Labs	Copyright (c) 1984 AT&T Technologies, Inc. All rights Reserved	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T, INC.	del.c:	walk the trees to reclaim storage**************************************************************/#include "cfront.h"void name.del(){/*fprintf(stderr,"%d->name.del: %s %d\n",this,(string)?string:"?",base);fflush(stderr);*/	Pexpr i = n_initializer;	NFn++;	DEL(tp);	if(i && i!=(Pexpr)1) DEL(i);	n_tbl_list = name_free;	name_free = this;}void type.del(){//fprintf(stderr,"DEL(type=%d %d)\n",this,base);	permanent = 3;	/* do not delete twice */	switch (base) {	case TNAME:	case NAME:		error('i',"%d->T.del():N %s %d",this,((Pname)this)->string,base);	case TYPE:	{	Pbase b = (Pbase)this;		break;	}	case FCT:	{	Pfct f = (Pfct) this;		DEL(f->returns);		/*DEL(f->argtype);*/		break;	}	case VEC:	{	Pvec v = (Pvec) this;		DEL(v->dim);		DEL(v->typ);		break;	}	case PTR:	case RPTR:	{	Pptr p = (Pptr) this;		DEL(p->typ);		break;	}/*	case CLASS:	{	Pclass cl = (Pclass)this;		memtbl.del();		break;	}	case ENUM:	case OVERLOAD:		break;*/	}	delete this;}void expr.del(){//fprintf(stderr,"DEL(expr=%d: %d %d %d)\n",this,base,e1,e2); fflush(stderr);	permanent = 3;	switch (base) {	case IVAL:		if (this == one) return;	case ICON:	case FCON:	case CCON:	case THIS:	case STRING:	case TEXT:	case FVAL:		goto dd;	case DUMMY:	case ZERO:	case NAME:		return;	case CAST:	case SIZEOF:	case NEW:	case VALUE:		DEL(tp2);		break;	case REF:	case DOT:		DEL(e1);		DEL(mem);		goto dd;	case QUEST:		DEL(cond);		break;	case ICALL:		delete il;		goto dd;	}	DEL(e1);	DEL(e2);/*	DEL(tp);*/dd:	e1 = expr_free;	expr_free = this;	NFe++;}void stmt.del(){//fprintf(stderr,"DEL(stmt %d %s)\n",this,keys[base]); fflush(stderr);	permanent = 3;	switch (base) {	case SM:	case WHILE:	case DO:	case RETURN:	case CASE:	case SWITCH:		DEL(e);		break;	case PAIR:		DEL(s2);		break;	case BLOCK:		DEL(d);		DEL(s);		if (own_tbl) DEL(memtbl);		DEL(s_list);		goto dd;	case FOR:		DEL(e);		DEL(e2);		DEL(for_init);		break;	case IF:		DEL(e);		DEL(else_stmt);		break;	}	DEL(s);	DEL(s_list);dd:	s_list = stmt_free;	stmt_free = this;	NFs++;}void table.del(){	register i;/*fprintf(stderr,"tbl.del %s %d size=%d used=%d)\n", (t_name)?t_name->string:"?", this, size, free_slot-1); fflush(stderr);*/	for (i=1; i<free_slot; i++) {		Pname n = entries[i];		if (n==0) error('i',"table.del(0)");		if (n->n_stclass == STATIC) continue;		switch (n->n_scope) {		case ARG:		case ARGT:			break;		default:		{	char* s = n->string;			if (s && (s[0]!='_' || s[1]!='X')) delete s;			/* delete n; */			n->del();		}		}	}	delete entries;	delete hashtbl;	delete this;}

⌨️ 快捷键说明

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