亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? types.c

?? 非常好的源碼
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
	case C: return chartype;
	case S: return shorttype;
	case I: return inttype;
	case U: return unsignedtype;
	case P: return voidptype;
	case L: return longlongtype;
	}
	assert(0); return 0;
}
int hasproto(Type ty)
{
	if (ty == 0)
		return 1;
	switch (ty->op) {
	case CONST: case VOLATILE: case CONST+VOLATILE: case POINTER:
	case STDCALL:
	case ARRAY:
		return hasproto(ty->type);
	case FUNCTION:
		return hasproto(ty->type) && ty->u.f.proto;
	case STRUCT: case UNION:
	case CHAR:   case SHORT: case INT:  case DOUBLE:
	case VOID:   case FLOAT: case ENUM: case UNSIGNED: case LONGLONG:
		return 1;
	}
	assert(0); return 0;
}
/* check - check ty for ambiguous inherited fields, return augmented field set */
static Field check(Type ty,Type top,Field inherited,int off)
{
	Field p;

	for (p = ty->u.sym->u.s.flist; p; p = p->link)
		if (p->name && isfield(p->name, inherited))
			error(StrTab[29], p->name, top, ty);// <ambiguous field `%s' of `%t' from `%t'\n>
		else if (p->name && !isfield(p->name, top->u.sym->u.s.flist)) {
			Field new;
			NEW(new, FUNC);
			*new = *p;
			new->offset = off + p->offset;
			new->link = inherited;
			inherited = new;
		}
	for (p = ty->u.sym->u.s.flist; p; p = p->link)
		if (p->name == 0)
			inherited = check(p->type, top, inherited,
				off + p->offset);
	return inherited;
}

/* checkfields - check for ambiguous inherited fields in struct/union ty */
void checkfields(Type ty)
{
	Field p, inherited = 0;

	for (p = ty->u.sym->u.s.flist; p; p = p->link)
		if (p->name == 0)
			inherited = check(p->type, ty, inherited, p->offset);
}

/* extends - if ty extends fty, return a pointer to field structure */
Field extends(Type ty,Type fty)
{
	Field p, q;

	for (p = unqual(ty)->u.sym->u.s.flist; p; p = p->link)
		if (p->name == 0 && unqual(p->type) == unqual(fty))
			return p;
		else if (p->name == 0 && (q = extends(p->type, fty)) != NULL) {
			static struct field f;
			f = *q;
			f.offset = p->offset + q->offset;
			return &f;
		}
	return 0;
}

/* fieldlist - construct a flat list of fields in type ty */
Field fieldlist(Type ty)
{
	Field p, q, t, inherited = 0, *r;

	ty = unqual(ty);
	for (p = ty->u.sym->u.s.flist; p; p = p->link)
		if (p->name == 0)
			inherited = check(p->type, ty, inherited, p->offset);
	if (inherited == 0)
		return ty->u.sym->u.s.flist;
	for (q = 0, p = inherited; p; q = p, p = t) {
		t = p->link;
		p->link = q;
	}
	for (r = &inherited, p = ty->u.sym->u.s.flist; p && q; )
		if (p->name == 0)
			p = p->link;
		else if (p->offset <= q->offset) {
			NEW(*r, FUNC);
			**r = *p;
			r = &(*r)->link;
			p = p->link;
		} else {
			*r = q;
			r = &q->link;
			q = q->link;
		}
	for ( ; p; p = p->link)
		if (p->name) {
			NEW(*r, FUNC);
			**r = *p;
			r = &(*r)->link;
		}
	*r = q;
	return inherited;
}

/* fieldref - find field name of type ty, return entry */
Field fieldref(char *name, Type ty)
{
	Field p;

	if ((p = isfield(name, unqual(ty)->u.sym->u.s.flist)) != NULL) {
		if (xref) {
			Symbol q;
			assert(unqual(ty)->u.sym->u.s.ftab);
			q = lookup(name, unqual(ty)->u.sym->u.s.ftab);
			assert(q);
			use(q, src);
		}
		return p;
	}
	if (Xflag)
		for (p = unqual(ty)->u.sym->u.s.flist; p; p = p->link) {
			Field q;
			if (p->name == NULL && isstruct(p->type)
			&& (q = fieldref(name, p->type)) != NULL) {
				static struct field f;
				f = *q;
				f.offset = p->offset + q->offset;
				return &f;
			}
		}
	return 0;
}

/* ftype - return a function type for rty function (ty,...)' */
Type ftype(Type rty,Type ty)
{
	List list = append(ty, NULL);

	list = append(voidtype, list);
	return func(rty, ltov(&list, PERM), 0);
}

/* isfield - if name is a field in flist, return pointer to the field structure */
static Field isfield(char *name,Field flist)
{
	for ( ; flist; flist = flist->link)
		if (flist->name == name)
			break;
	return flist;
}

/* outtype - output type ty */
void outtype(Type ty)
{
	switch (ty->op) {
	case CONST+VOLATILE:
		print("%k %k %t", CONST, VOLATILE, ty->type);
		break;
	case CONST: case VOLATILE:
		print("%k %t", ty->op, ty->type);
		break;
	case STRUCT: case UNION: case ENUM:
		assert(ty->u.sym);
		if (ty->size == 0)
			print(StrTab[30]);// <incomplete >
		assert(ty->u.sym->name);
		if (*ty->u.sym->name >= '1' && *ty->u.sym->name <= '9') {
			Symbol p = findtype(ty);
			if (p == 0)
				print(StrTab[31], ty->op, &ty->u.sym->src);// <%k defined at %w>
			else
				print(p->name);
		} else {
			print("%k %s", ty->op, ty->u.sym->name);
			if (ty->size == 0)
				print(StrTab[32], &ty->u.sym->src);// < defined at %w>
		}
		break;
	case VOID: case FLOAT: case DOUBLE:
	case CHAR: case SHORT: case INT: case UNSIGNED:
		print(ty->u.sym->name);
		break;
	case POINTER:
		print(StrTab[33], ty->type);// <pointer to %t>
		break;
	case FUNCTION:
		print(StrTab[34], ty->type);// <%t function>
		if (ty->u.f.proto && ty->u.f.proto[0]) {
			int i;
			print("(%t", ty->u.f.proto[0]);
			for (i = 1; ty->u.f.proto[i]; i++)
				if (ty->u.f.proto[i] == voidtype)
					print(",...");
				else
					print(",%t", ty->u.f.proto[i]);
			print(")");
		} else if (ty->u.f.proto && ty->u.f.proto[0] == 0)
			print("(void)");

		break;
	case ARRAY:
		if (ty->size > 0 && ty->type && ty->type->size > 0) {
			print("array %d", ty->size/ty->type->size);
			while (ty->type && isarray(ty->type) && ty->type->type->size > 0) {
				ty = ty->type;
				print(",%d", ty->size/ty->type->size);
			}
		} else
			print(StrTab[35]);// <incomplete array>
		if (ty->type)
			print(StrTab[36], ty->type);// < of %t>
		break;
	case STDCALL:
		print(StrTab[37],ty->type);// <%t _stdcall >
		break;
	case LONGLONG:
		print(StrTab[38]);// <long long >
		break;
	default: assert(0);
	}
}

/* printdecl - output a C declaration for symbol p of type ty */
void printdecl(Symbol p, Type ty)
{
	switch (p->sclass) {
	case AUTO:
		fprint(2, StrTab[39], typestring(ty, p->name));// <%s;\n>
		break;
	case STATIC: case EXTERN:
		fprint(2, StrTab[40], p->sclass, typestring(ty, p->name));// <%k %s;\n>
		break;
	case TYPEDEF: case ENUM:
		break;
	default: assert(0);
	}
}

/* printproto - output a prototype declaration for function p */
void printproto(Symbol p,Symbol callee[])
{
	if (p->type->u.f.proto)
		printdecl(p, p->type);
	else {
		int i;
		List list = 0;
		if (callee[0] == 0)
			list = append(voidtype, list);
		else
			for (i = 0; callee[i]; i++)
				list = append(callee[i]->type, list);
		printdecl(p, func(freturn(p->type), ltov(&list, PERM), 0));
	}
}

/* printtype - print details of type ty on fd */
void printtype(Type ty,int fd)
{
	switch (ty->op) {
	case STRUCT: case UNION: {
		Field p;
		fprint(fd, StrTab[41], ty->op, ty->u.sym->name, ty->size);// <%k %s size=%d {\n>
		for (p = ty->u.sym->u.s.flist; p; p = p->link) {
			fprint(fd, StrTab[42], p->name, p->offset);// <field %s: offset=%d>
			if (p->lsb)
				fprint(fd, StrTab[43],// < bits=%d..%d>
					fieldsize(p) + fieldright(p), fieldright(p));
			fprint(fd, StrTab[44], p->type);// < type=%t>
		}
		fprint(fd, StrTab[45]);// <}\n>
		break;
		}
	case ENUM: {
		int i;
		Symbol p;
		fprint(fd, StrTab[46], ty->u.sym->name);// <enum %s {>
		for (i = 0; (p = ty->u.sym->u.idlist[i]) != NULL; i++) {
			if (i > 0)
				fprint(fd, StrTab[47]);// <,>
			fprint(fd, StrTab[48], p->name, p->u.value);// <%s=%d>
		}
		fprint(fd, StrTab[49]);// <}\n>
		break;
		}
	default:
		fprint(fd, StrTab[50], ty);// <%t\n>
	}
}

/* typestring - return ty as C declaration for str, which may be "" */
char *typestring(Type ty,char *str)
{
	for ( ; ty; ty = ty->type) {
		Symbol p;
		switch (ty->op) {
		case CONST+VOLATILE:
			if (isptr(ty->type))
				str = stringf("%k %k %s", CONST, VOLATILE, str);
			else
				return stringf("%k %k %s", CONST, VOLATILE, typestring(ty->type, str));
			break;
		case CONST: case VOLATILE:
			if (isptr(ty->type))
				str = stringf("%k %s", ty->op, str);
			else
				return stringf("%k %s", ty->op, typestring(ty->type, str));
			break;
		case STRUCT: case UNION: case ENUM:
			assert(ty->u.sym);
			if ((p = findtype(ty)) != NULL)
				return *str ? stringf("%s %s", p->name, str) : p->name;
			if (*ty->u.sym->name >= '1' && *ty->u.sym->name <= '9')
				warning(StrTab[51], ty->op);// <unnamed %k in prototype\n>
			if (*str)
				return stringf("%k %s %s", ty->op, ty->u.sym->name, str);
			else
				return stringf("%k %s", ty->op, ty->u.sym->name);
		case VOID: case FLOAT: case DOUBLE:
		case CHAR: case SHORT: case INT: case UNSIGNED:
			return *str ? stringf("%s %s", ty->u.sym->name, str) : ty->u.sym->name;
		case POINTER:
			if (unqual(ty->type)->op != CHAR && (p = findtype(ty)) != NULL)
				return *str ? stringf("%s %s", p->name, str) : p->name;
			str = stringf(isarray(ty->type) || isfunc(ty->type) ? "(*%s)" : "*%s", str);
			break;
		case FUNCTION:
			if ((p = findtype(ty)) != NULL)
				return *str ? stringf("%s %s", p->name, str) : p->name;
			if (ty->u.f.proto == 0)
				str = stringf("%s()", str);
			else if (ty->u.f.proto[0]) {
				int i;
				str = stringf("%s(%s", str, typestring(ty->u.f.proto[0], ""));
				for (i = 1; ty->u.f.proto[i]; i++)
					if (ty->u.f.proto[i] == voidtype)
						str = stringf("%s, ...", str);
					else
						str = stringf("%s, %s", str, typestring(ty->u.f.proto[i], ""));
				str = stringf("%s)", str);
			} else
				str = stringf("%s(void)", str);
			break;
		case ARRAY:
			if ((p = findtype(ty)) != NULL)
				return *str ? stringf("%s %s", p->name, str) : p->name;
			if (ty->type && ty->type->size > 0)
				str = stringf("%s[%d]", str, ty->size/ty->type->size);
			else
				str = stringf("%s[]", str);
			break;
		default: assert(0);
		}
	}
	assert(0); return 0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩免费福利电影在线观看| 一区二区三区四区视频精品免费| 337p日本欧洲亚洲大胆精品| 2020国产精品久久精品美国| 日本一区二区三级电影在线观看| 中文字幕欧美一区| 亚洲一区二区三区四区在线观看 | 国产精品免费网站在线观看| 日韩激情一二三区| 懂色av一区二区三区免费看| 欧美精品色综合| 欧美国产精品一区二区| 亚洲成人激情社区| 国产成人8x视频一区二区 | 久久精品一区二区三区不卡牛牛| 日韩一区欧美一区| 国产91露脸合集magnet| 一本色道亚洲精品aⅴ| 精品国产三级电影在线观看| 一区二区三区**美女毛片| 国产一区在线精品| 欧美年轻男男videosbes| 国产亚洲制服色| 日本三级韩国三级欧美三级| 成人精品亚洲人成在线| 制服.丝袜.亚洲.中文.综合| 日本一区二区三区免费乱视频| 免费一级片91| 欧美一区二区三区思思人| 天天综合网天天综合色| 91老师片黄在线观看| 亚洲欧美中日韩| 在线看日韩精品电影| 中文字幕一区二区三区在线播放| 国产自产2019最新不卡| 精品国产123| 国产精品一二三区| 国产精品污网站| 99视频在线精品| 亚洲国产综合色| 欧美人狂配大交3d怪物一区| 亚洲高清在线精品| 4438x成人网最大色成网站| 亚洲国产综合色| 56国语精品自产拍在线观看| 免费在线观看视频一区| 国产夜色精品一区二区av| 国产精品白丝av| 亚洲人成影院在线观看| 欧美体内she精视频| 麻豆传媒一区二区三区| 国产欧美日韩卡一| 色94色欧美sute亚洲线路二| 日韩高清在线观看| 精品粉嫩超白一线天av| 99国内精品久久| 日韩和欧美的一区| 国产日韩精品一区| 欧美精品粉嫩高潮一区二区| 久久国产人妖系列| 亚洲天堂中文字幕| 日韩欧美亚洲国产精品字幕久久久| 国产电影精品久久禁18| 亚洲成人免费在线观看| 久久综合色天天久久综合图片| heyzo一本久久综合| 美女一区二区三区在线观看| 国产精品成人免费| 精品免费99久久| 精品视频免费看| av综合在线播放| 国产精品亚洲视频| 日韩中文字幕av电影| 亚洲天堂2016| 国产精品免费观看视频| 精品福利av导航| 7777女厕盗摄久久久| 91免费观看在线| 成人一区二区三区视频| 老司机免费视频一区二区| 亚洲国产视频一区二区| 国产精品国产三级国产aⅴ中文| 日韩欧美亚洲另类制服综合在线| 欧美日韩一区二区三区四区五区 | 99r精品视频| 成人白浆超碰人人人人| 日韩一区二区三区精品视频| 欧美少妇性性性| 欧美色老头old∨ideo| 95精品视频在线| 色婷婷久久一区二区三区麻豆| 成人app在线观看| 99视频精品全部免费在线| av激情亚洲男人天堂| 成人免费视频一区| 成人av在线电影| 日本久久一区二区| 777精品伊人久久久久大香线蕉| 欧美精品在线观看播放| 欧美一二三四在线| 久久久久99精品国产片| 一区在线中文字幕| 亚洲一区国产视频| 麻豆精品一二三| 成人精品国产福利| 欧洲一区二区av| 欧美va亚洲va| 亚洲欧美综合在线精品| 天天操天天色综合| 激情久久久久久久久久久久久久久久| 国产麻豆精品视频| 色综合久久久久综合体| 欧美一区二区视频免费观看| 久久女同精品一区二区| 亚洲美女淫视频| 韩国av一区二区三区四区| av激情综合网| 日韩免费高清视频| 一区二区三区 在线观看视频| 久久国产生活片100| 精品国产一区二区在线观看| 欧美国产视频在线| 蜜桃av一区二区三区| 一本一本大道香蕉久在线精品| 日韩欧美成人午夜| 亚洲一本大道在线| 国产凹凸在线观看一区二区| 欧美日本一区二区三区四区| 国产精品欧美久久久久无广告| 国产黄色成人av| 精品少妇一区二区三区日产乱码 | 中文字幕二三区不卡| 蜜臀va亚洲va欧美va天堂| 色欧美片视频在线观看| 亚洲国产精品黑人久久久| 麻豆精品国产91久久久久久| 在线视频你懂得一区| 国产精品污污网站在线观看| 精品亚洲免费视频| 日韩欧美成人午夜| 激情五月婷婷综合网| 欧美变态凌虐bdsm| 激情图片小说一区| 久久免费偷拍视频| 国产激情精品久久久第一区二区| 久久久精品2019中文字幕之3| 久久精品国产精品亚洲红杏 | 欧美电影免费提供在线观看| 日韩国产精品久久久| 7799精品视频| 久久狠狠亚洲综合| 国产欧美一区二区精品仙草咪| 国产精品123| 亚洲丝袜另类动漫二区| 在线观看视频欧美| 偷窥国产亚洲免费视频| 欧美一区二区三区视频在线| 国内精品久久久久影院薰衣草 | 亚洲国产精品一区二区久久恐怖片| 欧美性猛片xxxx免费看久爱| 亚洲成av人片观看| 久久这里都是精品| 91尤物视频在线观看| 日韩在线观看一区二区| 久久久欧美精品sm网站| 色国产精品一区在线观看| 爽好多水快深点欧美视频| 久久只精品国产| 日本电影欧美片| 久久精品99国产精品日本| 国产精品网站导航| 欧美绝品在线观看成人午夜影视| 精品中文av资源站在线观看| 国产精品高潮久久久久无| 91 com成人网| 91麻豆自制传媒国产之光| 麻豆精品久久精品色综合| 亚洲欧洲精品一区二区三区| 欧美一级生活片| 欧美在线观看你懂的| 国产一区二区久久| 日韩精品一二区| 亚洲九九爱视频| 国产精品免费视频一区| 欧美成人一区二区三区片免费 | 婷婷亚洲久悠悠色悠在线播放| 中文一区在线播放| 久久亚洲精品国产精品紫薇| 欧美视频日韩视频| 欧美亚洲禁片免费| 99精品欧美一区二区三区综合在线| 韩国女主播成人在线| 久久精品国产第一区二区三区| 午夜久久久久久电影| 亚洲一区二区中文在线| 中文字幕一区二区三区在线不卡| 国产性天天综合网| 日本一区二区三区国色天香 | 天天影视网天天综合色在线播放| 一区二区三区色|