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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? run.c

?? 對軟件進行可達性測試的軟件
?? C
字號:
/***** spin: run.c *****//* Copyright (c) 1989-2003 by Lucent Technologies, Bell Laboratories.     *//* All Rights Reserved.  This software is for educational purposes only.  *//* No guarantee whatsoever is expressed or implied by the distribution of *//* this code.  Permission is given to distribute this code provided that  *//* this introductory message is not removed and no monies are exchanged.  *//* Software written by Gerard J. Holzmann.  For tool documentation see:   *//*             http://spinroot.com/                                       *//* Send all bug-reports and/or questions to: bugs@spinroot.com            */#include <stdlib.h>#include "spin.h"#include "y.tab.h"extern RunList	*X, *run;extern Symbol	*Fname;extern Element	*LastStep;extern int	Rvous, lineno, Tval, interactive, MadeChoice;extern int	TstOnly, verbose, s_trail, xspin, jumpsteps, depth;extern int	nproc, nstop, no_print, like_java;static long	Seed = 1;static int	E_Check = 0, Escape_Check = 0;static int	eval_sync(Element *);static int	pc_enabled(Lextok *n);extern void	sr_buf(int, int);voidSrand(unsigned int s){	Seed = s;}longRand(void){	/* CACM 31(10), Oct 1988 */	Seed = 16807*(Seed%127773) - 2836*(Seed/127773);	if (Seed <= 0) Seed += 2147483647;	return Seed;}Element *rev_escape(SeqList *e){	Element *r;	if (!e)		return (Element *) 0;	if ((r = rev_escape(e->nxt)) != ZE) /* reversed order */		return r;	return eval_sub(e->this->frst);		}Element *eval_sub(Element *e){	Element *f, *g;	SeqList *z;	int i, j, k;	if (!e || !e->n)		return ZE;#ifdef DEBUG	printf("\n\teval_sub(%d %s: line %d) ",		e->Seqno, e->esc?"+esc":"", e->n?e->n->ln:0);	comment(stdout, e->n, 0);	printf("\n");#endif	if (e->n->ntyp == GOTO)	{	if (Rvous) return ZE;		LastStep = e;		f = get_lab(e->n, 1);		cross_dsteps(e->n, f->n);		return f;	}	if (e->n->ntyp == UNLESS)	{	/* escapes were distributed into sequence */		return eval_sub(e->sub->this->frst);	} else if (e->sub)	/* true for IF, DO, and UNLESS */	{	Element *has_else = ZE;		Element *bas_else = ZE;		int nr_else = 0, nr_choices = 0;		if (interactive		&& !MadeChoice && !E_Check		&& !Escape_Check		&& !(e->status&(D_ATOM))		&& depth >= jumpsteps)		{	printf("Select stmnt (");			whoruns(0); printf(")\n");			if (nproc-nstop > 1)			printf("\tchoice 0: other process\n");		}		for (z = e->sub, j=0; z; z = z->nxt)		{	j++;			if (interactive			&& !MadeChoice && !E_Check			&& !Escape_Check			&& !(e->status&(D_ATOM))			&& depth >= jumpsteps			&& z->this->frst			&& (xspin || (verbose&32) || Enabled0(z->this->frst)))			{	if (z->this->frst->n->ntyp == ELSE)				{	has_else = (Rvous)?ZE:z->this->frst->nxt;					nr_else = j;					continue;				}				printf("\tchoice %d: ", j);#if 0				if (z->this->frst->n)					printf("line %d, ", z->this->frst->n->ln);#endif				if (!Enabled0(z->this->frst))					printf("unexecutable, ");				else					nr_choices++;				comment(stdout, z->this->frst->n, 0);				printf("\n");		}	}		if (nr_choices == 0 && has_else)			printf("\tchoice %d: (else)\n", nr_else);		if (interactive && depth >= jumpsteps		&& !Escape_Check		&& !(e->status&(D_ATOM))		&& !E_Check)		{	if (!MadeChoice)			{	char buf[256];				if (xspin)					printf("Make Selection %d\n\n", j);				else					printf("Select [0-%d]: ", j);				fflush(stdout);				scanf("%64s", buf);				if (isdigit(buf[0]))					k = atoi(buf);				else				{	if (buf[0] == 'q')						alldone(0);					k = -1;				}			} else			{	k = MadeChoice;				MadeChoice = 0;			}			if (k < 1 || k > j)			{	if (k != 0) printf("\tchoice outside range\n");				return ZE;			}			k--;		} else		{	if (e->n && e->n->indstep >= 0)				k = 0;	/* select 1st executable guard */			else				k = Rand()%j;	/* nondeterminism */		}		has_else = ZE;		bas_else = ZE;		for (i = 0, z = e->sub; i < j+k; i++)		{	if (z->this->frst			&&  z->this->frst->n->ntyp == ELSE)			{	bas_else = z->this->frst;				has_else = (Rvous)?ZE:bas_else->nxt;				if (!interactive || depth < jumpsteps				|| Escape_Check				|| (e->status&(D_ATOM)))				{	z = (z->nxt)?z->nxt:e->sub;					continue;				}			}			if (z->this->frst			&&  ((z->this->frst->n->ntyp == ATOMIC			  ||  z->this->frst->n->ntyp == D_STEP)			  &&  z->this->frst->n->sl->this->frst->n->ntyp == ELSE))			{	bas_else = z->this->frst->n->sl->this->frst;				has_else = (Rvous)?ZE:bas_else->nxt;				if (!interactive || depth < jumpsteps				|| Escape_Check				|| (e->status&(D_ATOM)))				{	z = (z->nxt)?z->nxt:e->sub;					continue;				}			}			if (i >= k)			{	if ((f = eval_sub(z->this->frst)) != ZE)					return f;				else if (interactive && depth >= jumpsteps				&& !(e->status&(D_ATOM)))				{	if (!E_Check && !Escape_Check)						printf("\tunexecutable\n");					return ZE;			}	}			z = (z->nxt)?z->nxt:e->sub;		}		LastStep = bas_else;		return has_else;	} else	{	if (e->n->ntyp == ATOMIC		||  e->n->ntyp == D_STEP)		{	f = e->n->sl->this->frst;			g = e->n->sl->this->last;			g->nxt = e->nxt;			if (!(g = eval_sub(f)))	/* atomic guard */				return ZE;			return g;		} else if (e->n->ntyp == NON_ATOMIC)		{	f = e->n->sl->this->frst;			g = e->n->sl->this->last;			g->nxt = e->nxt;		/* close it */			return eval_sub(f);		} else if (e->n->ntyp == '.')		{	if (!Rvous) return e->nxt;			return eval_sub(e->nxt);		} else		{	SeqList *x;			if (!(e->status & (D_ATOM))			&&  e->esc && verbose&32)			{	printf("Stmnt [");				comment(stdout, e->n, 0);				printf("] has escape(s): ");				for (x = e->esc; x; x = x->nxt)				{	printf("[");					g = x->this->frst;					if (g->n->ntyp == ATOMIC					||  g->n->ntyp == NON_ATOMIC)						g = g->n->sl->this->frst;					comment(stdout, g->n, 0);					printf("] ");				}				printf("\n");			}#if 0			if (!(e->status & D_ATOM))	/* escapes don't reach inside d_steps */			/* 4.2.4: only the guard of a d_step can have an escape */#endif			{	Escape_Check++;				if (like_java)				{	if ((g = rev_escape(e->esc)) != ZE)					{	if (verbose&4)							printf("\tEscape taken\n");						Escape_Check--;						return g;					}				} else				{	for (x = e->esc; x; x = x->nxt)					{	if ((g = eval_sub(x->this->frst)) != ZE)						{	if (verbose&4)								printf("\tEscape taken\n");							Escape_Check--;							return g;				}	}	}				Escape_Check--;			}					switch (e->n->ntyp) {			case TIMEOUT: case RUN:			case PRINT: case PRINTM:			case C_CODE: case C_EXPR:			case ASGN: case ASSERT:			case 's': case 'r': case 'c':				/* toplevel statements only */				LastStep = e;			default:				break;			}			if (Rvous)			{				return (eval_sync(e))?e->nxt:ZE;			}			return (eval(e->n))?e->nxt:ZE;		}	}	return ZE; /* not reached */}static inteval_sync(Element *e){	/* allow only synchronous receives	   and related node types    */	Lextok *now = (e)?e->n:ZN;	if (!now	||  now->ntyp != 'r'	||  now->val >= 2	/* no rv with a poll */	||  !q_is_sync(now))	{		return 0;	}	LastStep = e;	return eval(now);}static intassign(Lextok *now){	int t;	if (TstOnly) return 1;	switch (now->rgt->ntyp) {	case FULL:	case NFULL:	case EMPTY:	case NEMPTY:	case RUN:	case LEN:		t = BYTE;		break;	default:		t = Sym_typ(now->rgt);		break;	}	typ_ck(Sym_typ(now->lft), t, "assignment"); 	return setval(now->lft, eval(now->rgt));}static intnonprogress(void)	/* np_ */{	RunList	*r;	for (r = run; r; r = r->nxt)	{	if (has_lab(r->pc, 4))	/* 4=progress */			return 0;	}	return 1;}inteval(Lextok *now){	if (now) {	lineno = now->ln;	Fname  = now->fn;#ifdef DEBUG	printf("eval ");	comment(stdout, now, 0);	printf("\n");#endif	switch (now->ntyp) {	case CONST: return now->val;	case   '!': return !eval(now->lft);	case  UMIN: return -eval(now->lft);	case   '~': return ~eval(now->lft);	case   '/': return (eval(now->lft) / eval(now->rgt));	case   '*': return (eval(now->lft) * eval(now->rgt));	case   '-': return (eval(now->lft) - eval(now->rgt));	case   '+': return (eval(now->lft) + eval(now->rgt));	case   '%': return (eval(now->lft) % eval(now->rgt));	case    LT: return (eval(now->lft) <  eval(now->rgt));	case    GT: return (eval(now->lft) >  eval(now->rgt));	case   '&': return (eval(now->lft) &  eval(now->rgt));	case   '^': return (eval(now->lft) ^  eval(now->rgt));	case   '|': return (eval(now->lft) |  eval(now->rgt));	case    LE: return (eval(now->lft) <= eval(now->rgt));	case    GE: return (eval(now->lft) >= eval(now->rgt));	case    NE: return (eval(now->lft) != eval(now->rgt));	case    EQ: return (eval(now->lft) == eval(now->rgt));	case    OR: return (eval(now->lft) || eval(now->rgt));	case   AND: return (eval(now->lft) && eval(now->rgt));	case LSHIFT: return (eval(now->lft) << eval(now->rgt));	case RSHIFT: return (eval(now->lft) >> eval(now->rgt));	case   '?': return (eval(now->lft) ? eval(now->rgt->lft)					   : eval(now->rgt->rgt));	case     'p': return remotevar(now);	/* _p for remote reference */	case     'q': return remotelab(now);	case     'R': return qrecv(now, 0);	/* test only    */	case     LEN: return qlen(now);	case    FULL: return (qfull(now));	case   EMPTY: return (qlen(now)==0);	case   NFULL: return (!qfull(now));	case  NEMPTY: return (qlen(now)>0);	case ENABLED: if (s_trail) return 1;		      return pc_enabled(now->lft);	case    EVAL: return eval(now->lft);	case  PC_VAL: return pc_value(now->lft);	case NONPROGRESS: return nonprogress();	case    NAME: return getval(now);	case TIMEOUT: return Tval;	case     RUN: return TstOnly?1:enable(now);	case   's': return qsend(now);		/* send         */	case   'r': return qrecv(now, 1);	/* receive or poll */	case   'c': return eval(now->lft);	/* condition    */	case PRINT: return TstOnly?1:interprint(stdout, now);	case PRINTM: return TstOnly?1:printm(stdout, now);	case  ASGN: return assign(now);	case C_CODE: printf("%s:\t", now->sym->name);		     plunk_inline(stdout, now->sym->name, 0);		     return 1; /* uninterpreted */	case C_EXPR: printf("%s:\t", now->sym->name);		     plunk_expr(stdout, now->sym->name);		     printf("\n");		     return 1; /* uninterpreted */	case ASSERT: if (TstOnly || eval(now->lft)) return 1;		     non_fatal("assertion violated", (char *) 0);			printf("spin: text of failed assertion: assert(");			comment(stdout, now->lft, 0);			printf(")\n");		     if (s_trail && !xspin) return 1;		     wrapup(1); /* doesn't return */	case  IF: case DO: case BREAK: case UNLESS:	/* compound */	case   '.': return 1;	/* return label for compound */	case   '@': return 0;	/* stop state */	case  ELSE: return 1;	/* only hit here in guided trails */	default   : printf("spin: bad node type %d (run)\n", now->ntyp);		    if (s_trail) printf("spin: trail file doesn't match spec?\n");		    fatal("aborting", 0);	}}	return 0;}intprintm(FILE *fd, Lextok *n){	extern char Buf[];	int j;	Buf[0] = '\0';	if (!no_print)	if (!s_trail || depth >= jumpsteps) {		if (n->lft->ismtyp)			j = n->lft->val;		else			j = eval(n->lft);		sr_buf(j, 1);		dotag(fd, Buf);	}	return 1;}intinterprint(FILE *fd, Lextok *n){	Lextok *tmp = n->lft;	char c, *s = n->sym->name;	int i, j; char lbuf[512]; /* matches value in sr_buf() */	extern char Buf[];	/* global, size 4096 */	char tBuf[4096];	/* match size of global Buf[] */	Buf[0] = '\0';	if (!no_print)	if (!s_trail || depth >= jumpsteps) {	for (i = 0; i < (int) strlen(s); i++)		switch (s[i]) {		case '\"': break; /* ignore */		case '\\':			 switch(s[++i]) {			 case 't': strcat(Buf, "\t"); break;			 case 'n': strcat(Buf, "\n"); break;			 default:  goto onechar;			 }			 break;		case  '%':			 if ((c = s[++i]) == '%')			 {	strcat(Buf, "%"); /* literal */				break;			 }			 if (!tmp)			 {	non_fatal("too few print args %s", s);				break;			 }			 j = eval(tmp->lft);			 tmp = tmp->rgt;			 switch(c) {			 case 'c': sprintf(lbuf, "%c", j); break;			 case 'd': sprintf(lbuf, "%d", j); break;			 case 'e': strcpy(tBuf, Buf);	/* event name */				   Buf[0] = '\0';				   sr_buf(j, 1);				   strcpy(lbuf, Buf);				   strcpy(Buf, tBuf);				   break;			 case 'o': sprintf(lbuf, "%o", j); break;			 case 'u': sprintf(lbuf, "%u", (unsigned) j); break;			 case 'x': sprintf(lbuf, "%x", j); break;			 default:  non_fatal("bad print cmd: '%s'", &s[i-1]);				   lbuf[0] = '\0'; break;			 }			 goto append;		default:onechar:		 lbuf[0] = s[i]; lbuf[1] = '\0';append:			 strcat(Buf, lbuf);			 break;		}		dotag(fd, Buf);	}	if (strlen(Buf) >= 4096) fatal("printf string too long", 0);	return 1;}static intEnabled1(Lextok *n){	int i; int v = verbose;	if (n)	switch (n->ntyp) {	case 'c':		if (has_typ(n->lft, RUN))			return 1;	/* conservative */		/* else fall through */	default:	/* side-effect free */		verbose = 0;		E_Check++;		i = eval(n);		E_Check--;		verbose = v;		return i;	case C_CODE: case C_EXPR:	case PRINT: case PRINTM:	case   ASGN: case ASSERT:		return 1;	case 's':		if (q_is_sync(n))		{	if (Rvous) return 0;			TstOnly = 1; verbose = 0;			E_Check++;			i = eval(n);			E_Check--;			TstOnly = 0; verbose = v;			return i;		}		return (!qfull(n));	case 'r':		if (q_is_sync(n))			return 0;	/* it's never a user-choice */		n->ntyp = 'R'; verbose = 0;		E_Check++;		i = eval(n);		E_Check--;		n->ntyp = 'r'; verbose = v;		return i;	}	return 0;}intEnabled0(Element *e){	SeqList *z;	if (!e || !e->n)		return 0;	switch (e->n->ntyp) {	case '@':		return X->pid == (nproc-nstop-1);	case '.':		return 1;	case GOTO:		if (Rvous) return 0;		return 1;	case UNLESS:		return Enabled0(e->sub->this->frst);	case ATOMIC:	case D_STEP:	case NON_ATOMIC:		return Enabled0(e->n->sl->this->frst);	}	if (e->sub)	/* true for IF, DO, and UNLESS */	{	for (z = e->sub; z; z = z->nxt)			if (Enabled0(z->this->frst))				return 1;		return 0;	}	for (z = e->esc; z; z = z->nxt)	{	if (Enabled0(z->this->frst))			return 1;	}#if 0	printf("enabled1 ");	comment(stdout, e->n, 0);	printf(" ==> %s\n", Enabled1(e->n)?"yes":"nope");#endif	return Enabled1(e->n);}intpc_enabled(Lextok *n){	int i = nproc - nstop;	int pid = eval(n);	int result = 0;	RunList *Y, *oX;	if (pid == X->pid)		fatal("used: enabled(pid=thisproc) [%s]", X->n->name);	for (Y = run; Y; Y = Y->nxt)		if (--i == pid)		{	oX = X; X = Y;			result = Enabled0(Y->pc);			X = oX;			break;		}	return result;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品乱码久久久久久黑人 | 国产精品自在在线| 91精品国产综合久久国产大片| 亚洲va韩国va欧美va精品| 欧美三级三级三级爽爽爽| 午夜精品久久久久| 日韩欧美国产一区在线观看| 狠狠色综合播放一区二区| 一区二区三区免费在线观看| 日本精品一级二级| 天堂资源在线中文精品| 欧美不卡一区二区三区| 国产福利一区二区三区在线视频| 中文字幕一区在线观看视频| 91福利资源站| 麻豆成人av在线| 中文字幕不卡一区| 欧美日韩高清在线播放| 激情文学综合网| 中文字幕字幕中文在线中不卡视频| 色94色欧美sute亚洲线路一久| 日韩精品一区第一页| 2021久久国产精品不只是精品| 成人免费毛片a| 亚洲午夜久久久久久久久电影网| 制服丝袜日韩国产| 国产精品 日产精品 欧美精品| 亚洲码国产岛国毛片在线| 欧美裸体bbwbbwbbw| 国产精品亚洲第一区在线暖暖韩国| 亚洲精品免费看| 精品日本一线二线三线不卡| 91丨九色丨蝌蚪丨老版| 麻豆成人久久精品二区三区红| 综合分类小说区另类春色亚洲小说欧美| 欧美日韩一区中文字幕| 国产一区二区精品久久91| 亚洲欧美日韩国产另类专区| 精品国产a毛片| 欧美三级三级三级| 国产综合一区二区| 亚洲高清三级视频| 国产精品视频在线看| 91精品黄色片免费大全| 91污片在线观看| 国产一区二区伦理片| 亚洲成人一区二区| 亚洲一区中文日韩| 中文字幕 久热精品 视频在线 | 青青草97国产精品免费观看无弹窗版 | 国产美女一区二区三区| 亚洲综合在线免费观看| 国产视频911| 欧美不卡一二三| 欧美精品高清视频| 91蜜桃在线观看| 国产+成+人+亚洲欧洲自线| 免费看日韩a级影片| 亚洲高清免费视频| 一区二区三区四区激情| 亚洲欧美另类在线| 国产精品天干天干在线综合| 欧美不卡一二三| 日韩视频国产视频| 欧美一卡二卡三卡| 欧美在线观看一区| 色噜噜狠狠一区二区三区果冻| 国产成人综合在线观看| 精彩视频一区二区三区| 亚洲第一激情av| 一区二区日韩av| 亚洲一区二区三区四区五区黄| 亚洲国产精品成人久久综合一区| 久久综合九色综合欧美就去吻| 91精品国产综合久久福利| 在线观看欧美日本| 在线观看av不卡| 在线播放亚洲一区| 日韩免费视频一区| 精品久久久久99| 国产午夜三级一区二区三| 久久久久高清精品| 国产精品污www在线观看| 中文字幕国产一区二区| 国产精品福利在线播放| 午夜精品视频在线观看| 亚洲一二三专区| 亚洲国产cao| 天天爽夜夜爽夜夜爽精品视频| 日韩黄色免费电影| 久久成人av少妇免费| 国产一区美女在线| 丁香婷婷综合激情五月色| a美女胸又www黄视频久久| 97精品久久久久中文字幕 | 国产成人精品亚洲日本在线桃色 | 亚洲美女免费在线| 亚洲综合在线五月| 蜜臀av在线播放一区二区三区| 日本系列欧美系列| 麻豆精品视频在线观看视频| 国产一区二区三区蝌蚪| 99久久精品国产观看| 欧美日韩大陆在线| 久久久蜜臀国产一区二区| 久久精品无码一区二区三区| 国产精品久久久久久久久果冻传媒| 亚洲欧洲综合另类| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产精品2024| 色诱亚洲精品久久久久久| 欧美日韩国产免费一区二区| 精品三级在线观看| 伊人开心综合网| 国产在线精品不卡| 91精品91久久久中77777| 日韩免费观看高清完整版 | 亚洲日本免费电影| 免费观看91视频大全| 成人理论电影网| 91精品国产综合久久小美女| 国产精品免费视频观看| 天堂成人国产精品一区| 成人小视频免费观看| 6080日韩午夜伦伦午夜伦| 国产女人水真多18毛片18精品视频| 伊人色综合久久天天| 国产高清精品网站| 中文av一区特黄| 免费一级片91| 91福利视频在线| 国产精品久久久久婷婷二区次| 亚洲国产成人高清精品| 成人一区二区三区视频在线观看 | 欧美白人最猛性xxxxx69交| 亚洲蜜臀av乱码久久精品| 国产一区二区0| 欧美一级理论片| 亚洲综合免费观看高清完整版| 国产成人一区在线| 欧美成人高清电影在线| 亚洲成av人片一区二区三区| 91视频xxxx| 国产精品网曝门| 国产精品一区二区三区乱码| 日韩一级二级三级| 日韩精品国产欧美| 欧美性xxxxxx少妇| 亚洲精品乱码久久久久久| 成人免费视频一区| 久久久精品tv| 国产在线精品一区二区三区不卡 | 亚洲国产精品一区二区www| www.色精品| 中文字幕av一区 二区| 国产成人av一区二区三区在线| 日韩欧美的一区二区| 日韩不卡手机在线v区| 91.成人天堂一区| 视频在线观看国产精品| 欧美性色综合网| 亚洲综合视频在线| 欧美综合欧美视频| 亚洲一区二区三区四区在线观看| 91免费国产在线观看| 亚洲欧美日韩国产综合| 91看片淫黄大片一级在线观看| 中文字幕免费一区| 91在线视频网址| 亚洲精品va在线观看| 色94色欧美sute亚洲线路一ni| 亚洲桃色在线一区| 91福利视频网站| 日精品一区二区| 欧美一区二区三区四区在线观看 | 亚洲3atv精品一区二区三区| 欧美色精品天天在线观看视频| 亚洲尤物视频在线| 欧美日韩三级在线| 美国三级日本三级久久99| 精品欧美一区二区久久| 国产一区 二区| 国产精品国产三级国产专播品爱网| www.日韩大片| 亚洲成人激情自拍| 欧美大肚乱孕交hd孕妇| 国产成人亚洲综合色影视| 国产精品久久久一区麻豆最新章节| 成人爽a毛片一区二区免费| 亚洲美女电影在线| 日韩午夜小视频| 国产激情一区二区三区| 亚洲精品久久嫩草网站秘色| 88在线观看91蜜桃国自产| 国产在线不卡一区| 亚洲欧美一区二区三区孕妇| 在线不卡的av| 不卡的电影网站| 亚洲国产精品视频| 久久久久9999亚洲精品|