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

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

?? interp.c

?? 使用BorlandC++4.5編譯的一個MUD客戶端程序
?? C
字號:
/* interp.c: Execute linear compiled VTC code */
/* $Id: interp.c 2.1 1995/10/24 15:46:14 tsurace Release $ */

#include "vt.h"
#include "prmt.h"

#ifdef PROTOTYPES
static int pcall(Dframe *, int, int);
static void cpop(void);
static void cpop_normal(void);
static void abort_interp(void);
static void revise_cframes(Cframe *, int, Dframe *, Dframe *);
static void revise_estates(Estate *, Dframe *, Dframe *);
static void interp_context(Unode *, Unode *);
#else
static void revise_cframes(), revise_estates(), cpop(), cpop_normal();
static void abort_interp();
#endif

/* The data and call stacks */
#define INIT_SIZE 64
Dframe *dstack;				/* The data stack	    */
Cframe *cstack;				/* The call stack	    */
int dpos = 0, cpos = 0;			/* Positions in both stacks */
int dsize = INIT_SIZE;			/* Allocated space	    */
int curprmt;				/* Current prmt number	    */
static int csize = INIT_SIZE;
#define INIT_GVARS 100
Array *gvars;				/* Global variable values   */
extern int break_pending;
extern Unode *cur_rmt, *active_win;
extern Unode rmt_ring, win_ring;
extern Estate *events, *gen_read, *gen_high, *gen_low;

/* Short-cut for Cinstr */
static Instr *ins;

extern Prmt prmtab[];
int iwidth[] =
 { 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1 };

#define Ctop	(cstack[cpos - 1])
#define Cinstr	(Ctop.instr)
#define Cprog	(Ctop.prog)
#define Dtop	(dstack[dpos - 1])
#define Dextend if (1) { if (dpos == dsize) double_dstack(); dpos++; } else
#define Dextendn(n) if (1) { while (dpos + (n) > dsize) double_dstack(); } else
#define Dpush(df) if (1) { Dextend; Dtop = (df); } else
#define Dpop() deref_frame(&dstack[--dpos])
#define Ierror(x) if (1) { outputf x; finish_error(); \
			   abort_interp(); return; } else
#define Set_ins(x) if (1) { ins = (x); update = 0; } else

void init_interp()
{
	dstack = Newarray(Dframe, INIT_SIZE);
	cstack = Newarray(Cframe, INIT_SIZE);
	gvars = add_array(INIT_GVARS, dfalloc(INIT_GVARS), 1, 0, 0);
}

/* Interprets program on top of call stack until the highest detached
** frame finishes execution, or the program is aborted or suspended. */
void interp()
{
	Dframe *dp, df;
	Func *func;
	int update, val;

	ins = Cinstr;
    while (1) {
	if (break_pending) {
		abort_interp();
		return;
	}
	update = 1;
	switch(ins->type) {
	    case I_ICONST:
		Dextend;
		Dset_int(Dtop, ins[1].iconst);
	    Case I_SCONST:
		Dextend;
		Dset_sptr_ref(Dtop, istr_rs(ins[1].sconst), 0);
	    Case I_PCALL:
		if (!pcall(&df, ins[1].pc.argc, ins[1].pc.pnum))
			return;
		if (df.type != F_EXCEPT) {
			Dpush(df);
			move_frame_refs(&df, &Dtop);
		}
		update = 0;
	    Case I_FCALL:
		func = ins[2].func;
		if (!func->cmd || ins[1].argc < func->cmd->reqargs)
			Ierror((!func->cmd ? "Undefined function %s"
			       : "Not enough arguments to %s", func->name));
		Cinstr = ins + 3;
		cpush(func->cmd, ins[1].argc, 1, 0);
		Set_ins(Cinstr);
	    Case I_EXEC:
		dp = &dstack[dpos - ins[1].argc - 1];
		if (dp->type == F_PPTR) {
			if (!pcall(dp, ins[1].argc, dp->Dpnum))
				return;
		} else if (dp->type == F_FPTR) {
			if (ins[1].argc < dp->Dfunc->cmd->reqargs)
				Ierror(("Not enough arguments to %s",
				       dp->Dfunc->name));
			Cinstr = ins + 2;
			func = dp->Dfunc;
			move_frames_refs(ins[1].argc, dp + 1, dp);
			Copy(dp + 1, dp, ins[1].argc, Dframe);
			dpos--;
			cpush(func->cmd, ins[1].argc, 1, 0);
			ins = Cinstr;
		} else
			Ierror(("Invalid function call"));
		update = 0;
	    Case I_BOBJ:
		Dextend;
		Dset_elem(Dtop, F_BPTR, Dbobj, ins[1].bobj);
	    Case I_GVAR:
		Dextend;
		Dset_aptr(Dtop, gvars, ins[1].tnum);
	    Case I_AVAR:
		Dextend;
		Dset_aptr(Dtop, Ctop.avars, ins[1].tnum);
		add_fref(&Dtop.Darray->r.fr, &Dtop);
	    Case I_LVAR:
		Dextend;
		Dset_aptr(Dtop, Ctop.lvars, ins[1].tnum);
		add_fref(&Dtop.Darray->r.fr, &Dtop);
	    Case I_PPTR:
		Dextend;
		Dset_elem(Dtop, F_PPTR, Dpnum, ins[1].pnum);
	    Case I_FPTR:
		func = ins[1].func;
		if (!func->cmd)
			Ierror(("Undefined function %s", func->name));
		Dextend;
		Dset_elem(Dtop, F_FPTR, Dfunc, ins[1].func);
	    Case I_JMPF:
		if (Dffalse(Dtop))
			Set_ins(ins[1].loc);
		Dpop();
	    Case I_JMPT:
		if (Dftrue(Dtop))
			Set_ins(ins[1].loc);
		Dpop();
	    Case I_JMPPF:
		if (Dffalse(Dtop))
			Set_ins(ins[1].loc);
		else	
			Dpop();
	    Case I_JMPPT:
		if (Dftrue(Dtop))
			Set_ins(ins[1].loc);
		else
			Dpop();
	    Case I_JMP:
		Set_ins(ins[1].loc);
	    Case I_CVTB: /* Careful */
		dp = &Dtop;
		deref_frame(dp);
		dp->Dval = Dftrue(*dp);
		dp->type = F_INT;
	    Case I_EVAL:
		dp = &Dtop;
		if (dp->type == F_SPTR) {
			val = (unsigned char) Soelem(*dp);
			dec_ref_istr(dp->Distr);
			Dset_int(*dp, val);
		} else if (dp->type == F_APTR) {
			if (Ainbounds(*dp))
				df = dp->Darray->vals[dp->Dapos];
			else
				df.type = F_NULL;
			ref_frame(&df);
			deref_frame(dp);
			*dp = df;
			move_frame_refs(&df, dp);
		} else if (dp->type == F_BPTR) {
			dp->type = F_NULL;
			(*dp->Dbobj)(dp);
			ref_frame(dp);
		} else
			Ierror(("Invalid pointer dereferenced"));
	    Case I_NULL:
		Dextend;
		Dtop.type = F_NULL;
	    Case I_POP:
		Dpop();
	    Case I_DUP:
		Dextend;
		Dtop = dstack[dpos - 2];
		ref_frame(&Dtop);
	    Case I_STOP:
		if (Ctop.attached) {
			cpop_normal();
			ins = Cinstr;
			update = 0;
		} else {
			cpop_normal();
			Dpop();
			return;
		}
	}
	if (update)
		ins += iwidth[ins->type];
    }
}

static int pcall(dp, argc, pnum)
	Dframe *dp;
	int argc, pnum;
{
	Dframe *argv = &dstack[dpos - argc];
	int pargc = prmtab[pnum].argc;

	curprmt = pnum;
	Cinstr = ins + 2;
	if (pargc >= 0 && argc != pargc) {
		outputf("Too %s arguments to %s",
			argc < pargc ? "few" : "many", prmtab[pnum].name);
		finish_error();
		abort_interp();
		return 0;
	}
	dp->type = F_NULL;
	(*prmtab[pnum].func)(dp, argc, argv);
	ins = Cinstr;
	if (dp->type == F_EXCEPT) {
		if (dp->Dval == INTERP_ERROR)
			abort_interp();
		return dp->Dval == INTERP_NOFREE;
	}
	ref_frame(dp);
	deref_frames(argc, &dstack[dpos - argc]);
	dpos -= argc;
	return 1;
}

static void cpop()
{
	dec_ref_prog(Ctop.prog);
	destroy_pointers(Ctop.avars->r.fr);
	arfree(Ctop.avars);
	destroy_pointers(Ctop.lvars->r.fr);
	arfree(Ctop.lvars);
	cpos--;
}

static void cpop_normal()
{
	if (Ctop.dstart != dpos - 1) {
		deref_frames(dpos - Ctop.dstart - 1, &dstack[Ctop.dstart]);
		dstack[Ctop.dstart] = Dtop;
		move_frame_refs(&Dtop, &dstack[Ctop.dstart]);
		dpos = Ctop.dstart + 1;
	}
	cpop();
}

static void abort_interp()
{
	while (Ctop.attached)
		cpop();
	deref_frames(dpos - Ctop.dstart, &dstack[Ctop.dstart]);
	dpos = Ctop.dstart;
	cpop();
}

static void revise_cframes(cf, num, oldstack, newstack)
	Cframe *cf;
	int num;
	Dframe *oldstack, *newstack;
{
	while (num--) {
		cf->avars->vals = cf->avars->vals - oldstack + newstack;
		cf->lvars->vals = cf->lvars->vals - oldstack + newstack;
		cf++;
	}
}

static void revise_estates(es, oldstack, newstack)
	Estate *es;
	Dframe *oldstack, *newstack;
{
	for (; es; es = es->next)
		revise_cframes(es->cimage, es->cframes, oldstack, newstack);
}

void double_dstack()
{
	Dframe *new;
	Unode *un;

	new = Newarray(Dframe, dsize * 2);
	Copy(dstack, new, dpos, Dframe);
	move_frames_refs(dpos, dstack, new);
	revise_cframes(cstack, cpos, dstack, new);
	for (un = rmt_ring.next; !un->dummy; un = un->next)
		revise_estates(un->Rrstack, dstack, new);
	for (un = win_ring.next; !un->dummy; un = un->next) {
		revise_estates(un->Wghstack, dstack, new);
		revise_estates(un->Wglstack, dstack, new);
		revise_estates(un->Wrstack, dstack, new);
	}
	revise_estates(events, dstack, new);
	revise_estates(gen_read, dstack, new);
	revise_estates(gen_high, dstack, new);
	revise_estates(gen_low, dstack, new);
	Discardarray(dstack, Dframe, dsize);
	dstack = new;
	dsize *= 2;
}

void cpush(prog, argc, attached, progress)
	Prog *prog;
	int argc, attached, progress;
{
	Cframe *cf;
	int i, argc_alloc = max(argc, prog->avarc);

	if (cpos == csize)
		Double(cstack, Cframe, csize);
	Dextendn(prog->lvarc + argc_alloc - argc);
	cf = &cstack[cpos++];
	prog->refs++;
	cf->prog = prog;
	cf->instr = prog->code;
	cf->dstart = dpos - argc - progress;
	cf->attached = attached;
	for (i = 0; i < prog->lvarc + argc_alloc - argc; i++, dpos++)
		dstack[dpos].type = F_NULL;
	cf->avars = add_array(argc_alloc, &dstack[cf->dstart], 1, 1, 0);
	cf->lvars = add_array(prog->lvarc, &dstack[cf->dstart + argc_alloc],
			      1, 1, 0);
	cf->avars->r.fr = cf->lvars->r.fr = NULL;
	cf->uargc = argc;
	cf->uargv = 0;
}

/* Interface to interpreter */

/* Set up a cur_rmt and cur_win context and call interp() */
static void interp_context(win, rmt)
	Unode *win, *rmt;
{
	Unode *old_win, *old_rmt;
	int owin_id, ormt_id;

	old_win = cur_win;
	owin_id = cur_win ? cur_win->id : 0;
	old_rmt = cur_rmt;
	ormt_id = cur_rmt ? cur_rmt->id : 0;
	cur_win = win;
	cur_rmt = rmt;
	interp();
	cur_win = (old_win && old_win->id == owin_id) ? old_win : NULL;
	cur_rmt = (old_rmt && old_rmt->id == ormt_id) ? old_rmt : NULL;
}

/* Start up a program with no arguments */
void run_prog(prog)
	Prog *prog;
{
	if (prog->reqargs) {
		outputf("Function %s called with too few arguments\n",
			lookup_prog(prog));
		return;
	}
	cpush(prog, 0, 0, 0);
	interp();
}

void run_prog_istr(prog, is, win, rmt)
	Prog *prog;
	Istr *is;
	Unode *win, *rmt;
{
	Dframe df;

	if (prog->reqargs > 1) {
		outputf("Function %s called with too few arguments\n",
			lookup_prog(prog));
		return;
	}
	Dset_sptr(df, is, 0);
	is->refs++;
	Dpush(df);
	cpush(prog, 1, 0, 0);
	interp_context(win, rmt);
}

/* Suspend execution and return an image of it */
Estate *suspend(argc)
	int argc;
{
	Estate *es;
	Cframe *cp;
	int nf;

	deref_frames(argc, &dstack[dpos - argc]);
	dpos -= argc;
	es = New(Estate);
	for (cp = &Ctop; cp->attached; cp--);
	es->dframes = nf = dpos - cp->dstart;
	es->dimage = Newarray(Dframe, nf);
	Copy(&dstack[cp->dstart], es->dimage, nf, Dframe);
	move_frames_refs(nf, &dstack[cp->dstart], es->dimage);
	dpos = cp->dstart;
	es->cframes = nf = cstack + cpos - cp;
	es->cimage = Newarray(Cframe, nf);
	Copy(cp, es->cimage, nf, Cframe);
	cpos = cp - cstack;
	es->win = cur_win;
	es->wid = cur_win ? cur_win->id : 0;
	es->rmt = cur_rmt;
	es->rid = cur_rmt ? cur_rmt->id : 0;
	return es;
}

/* Free up the information in an image deleted by the console */
void discard_estate(eptr)
	Estate **eptr;
{
	Estate *es = *eptr;
	int i;
	Cframe *cf;

	*eptr = es->next;
	deref_frames(es->dframes, es->dimage);
	Discardarray(es->dimage, Dframe, es->dframes);
	for (cf = es->cimage, i = 0; i < es->cframes; i++) {
		destroy_pointers(cf[i].avars->r.fr);
		arfree(cf[i].avars);
		destroy_pointers(cf[i].lvars->r.fr);
		arfree(cf[i].lvars);
	}
	Discardarray(es->cimage, Cframe, es->cframes);
	Discard(es, Estate);
}

/* Resume a suspended program */
void resume(eptr, dp)
	Estate **eptr;
	Dframe *dp;
{
	Estate *es = *eptr;
	int adjust, i;

	*eptr = es->next;
	if (dpos + es->dframes >= dsize)
		double_dstack();
	if (cpos + es->cframes >= csize)
		Double(cstack, Cframe, csize);
	adjust = es->cimage[0].dstart - dpos;
	if (adjust) {
		for (i = 0; i < es->cframes; i++) {
			es->cimage[i].dstart -= adjust;
			es->cimage[i].avars->vals -= adjust;
			es->cimage[i].lvars->vals -= adjust;
		}
	}
	Copy(es->dimage, &dstack[dpos], es->dframes, Dframe);
	move_frames_refs(es->dframes, es->dimage, &dstack[dpos]);
	Discardarray(es->dimage, Dframe, es->dframes);
	dpos += es->dframes;
	Copy(es->cimage, &cstack[cpos], es->cframes, Cframe);
	Discardarray(es->cimage, Cframe, es->cframes);
	cpos += es->cframes;
	Dpush(*dp);
	interp_context((es->win && es->wid == es->win->id) ? es->win : NULL,
		       (es->rmt && es->rid == es->rmt->id) ? es->rmt : NULL);
	Discard(es, Estate);
}

void resume_istr(eptr, is)
	Estate **eptr;
	Istr *is;
{
	Dframe df;

	Dset_sptr_ref(df, is, 0);
	is->refs++;
	resume(eptr, &df);
}

void resume_int(eptr, num)
	Estate **eptr;
	int num;
{
	Dframe df;

	Dset_int(df, num);
	resume(eptr, &df);
}

void destroy_pipe(elist)
	Estate *elist;
{
	while (elist)
		discard_estate(&elist);
}

void break_pipe(elist)
	Estate *elist;
{
	Dframe null;

	null.type = F_NULL;
	while (elist)
		resume(&elist, &null);
}

/* General routines for dealing with data frames */

void ref_frame(df)
	Dframe *df;
{
	switch (df->type) {
	    case F_WIN:
	    case F_RMT:
	    case F_KEY:
	    case F_FILE:
		add_fref(&df->Dunode->frefs, df);
	    Case F_SPTR:
		df->Distr->refs++;
	    Case F_APTR:
		if (df->Darray->fixed)
			add_fref(&df->Darray->r.fr, df);
		else if (df->Darray->isp)
			df->Darray->r.plist->refs++;
		else if (!df->Darray->intern)
			df->Darray->r.refs++;
	    Case F_REG:
		df->Dreg->refs++;
	    Case F_PLIST:
		df->Dplist->refs++;
	}
}

void ref_frames(num, frames)
	int num;
	Dframe *frames;
{
	while (num--)
		ref_frame(frames++);
}

void move_frame_refs(old, new)
	Dframe *old, *new;
{
	switch(old->type) {
	    case F_WIN:
	    case F_RMT:
	    case F_KEY:
	    case F_FILE:
		move_fref(old->Dunode->frefs, old, new);
	    Case F_APTR:
		if (old->Darray->fixed)
			move_fref(old->Darray->r.fr, old, new);
	}
}

void move_frames_refs(num, old, new)
	int num;
	Dframe *old, *new;
{
	while (num--)
		move_frame_refs(old++, new++);
}

void deref_frame(df)
	Dframe *df;
{
	switch(df->type) {
	    case F_WIN:
	    case F_RMT:
	    case F_KEY:
	    case F_FILE:
		elim_fref(&df->Dunode->frefs, df);
	    Case F_SPTR:
		dec_ref_istr(df->Distr);
	    Case F_APTR:
		if (df->Darray->fixed)
			elim_fref(&df->Darray->r.fr, df);
		else if (df->Darray->isp)
			dec_ref_plist(df->Darray->r.plist);
		else if (!df->Darray->intern)
			dec_ref_array(df->Darray);
	    Case F_REG:
		if (!--df->Dreg->refs) {
			if (df->Dreg->rs)
				dec_ref_rstr(df->Dreg->rs);
			free(df->Dreg);
		}
	    Case F_PLIST:
		dec_ref_plist(df->Dplist);
	}
}

void deref_frames(num, frames)
	int num;
	Dframe *frames;
{
	while (num--)
		deref_frame(frames++);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一卡二卡三卡日韩欧美| 岛国精品在线播放| 精品久久久久久最新网址| 欧洲国内综合视频| www.日韩大片| 国产另类ts人妖一区二区| 丝袜美腿亚洲综合| 亚洲国产va精品久久久不卡综合| 欧美激情中文不卡| 国产精品国产三级国产aⅴ中文 | 色婷婷综合久久久久中文| 国产成人免费视频网站高清观看视频 | 日韩欧美一级在线播放| 91黄色免费看| 欧美亚洲一区三区| 欧美日韩久久不卡| 欧美一级xxx| 欧美激情综合在线| 懂色一区二区三区免费观看| 欧美v国产在线一区二区三区| 欧美一区二区免费视频| 国产欧美一区二区三区在线看蜜臀| 高清成人在线观看| 亚洲综合色婷婷| 欧美日韩国产精品成人| 国产一区二区三区在线观看免费视频| 国产日韩欧美制服另类| 欧洲亚洲国产日韩| 国产乱子伦一区二区三区国色天香| 国产精品久久毛片a| 91精品欧美综合在线观看最新| 国产一区二区按摩在线观看| 亚洲婷婷综合色高清在线| 678五月天丁香亚洲综合网| 国产精品亚洲专一区二区三区 | 麻豆久久一区二区| 亚洲欧洲美洲综合色网| 日韩精品在线看片z| 色婷婷综合久久久久中文一区二区| 爽爽淫人综合网网站| 国产欧美日韩精品a在线观看| 555夜色666亚洲国产免| 97精品超碰一区二区三区| 黄色成人免费在线| 日韩国产欧美在线观看| 欧美激情一区不卡| 精品国产免费一区二区三区四区| 在线观看亚洲成人| caoporn国产一区二区| 精品一区二区三区久久| 日韩综合小视频| 亚洲婷婷综合色高清在线| 精品久久久久av影院| 欧美日韩视频在线一区二区| 91免费小视频| 成人综合在线网站| 久久国产日韩欧美精品| 天堂久久久久va久久久久| 亚洲综合区在线| 亚洲人123区| 欧美国产一区二区在线观看| 日韩欧美一级精品久久| 777午夜精品视频在线播放| 欧美亚洲一区二区在线| 在线精品国精品国产尤物884a| 懂色av一区二区三区免费观看| 美女视频黄免费的久久| 日本欧美在线观看| 日韩精品一级中文字幕精品视频免费观看| 亚洲免费观看视频| 亚洲视频一二三| 亚洲私人影院在线观看| 亚洲精品欧美激情| 亚洲精品视频观看| 成人一区二区三区在线观看| 国产成人免费视频网站| 国产成人精品亚洲777人妖| 国产一区二区视频在线| 国产激情91久久精品导航| 国产成人综合精品三级| 懂色av一区二区三区免费看| 丰满少妇在线播放bd日韩电影| 风间由美一区二区av101| 99re热视频精品| 日本高清不卡在线观看| 欧美三电影在线| 欧美一区二区三区视频在线观看| 欧美一区二区三区系列电影| 欧美一级理论性理论a| 26uuu欧美| 国产精品美女久久久久av爽李琼| 中文字幕一区二区三区在线观看 | 亚洲制服丝袜av| 亚洲一区二区黄色| 蜜桃一区二区三区在线| 国产高清不卡一区二区| 91丨porny丨在线| 宅男噜噜噜66一区二区66| 久久综合五月天婷婷伊人| 国产精品久久久久久久久搜平片| 欧美成va人片在线观看| 亚洲欧洲日韩一区二区三区| 亚洲大片在线观看| 色综合久久久久久久久| 久久久www成人免费无遮挡大片| 亚洲综合激情网| 在线观看亚洲a| 捆绑调教美女网站视频一区| 91精品国产免费久久综合| 久久99国产精品免费| 日本高清免费不卡视频| ...中文天堂在线一区| 亚洲精品高清在线观看| 884aa四虎影成人精品一区| 麻豆国产欧美一区二区三区| 欧美日本在线视频| 蜜臀久久久久久久| 亚洲国产高清aⅴ视频| 日韩午夜激情电影| 91麻豆免费看片| 亚洲色大成网站www久久九九| 欧美区视频在线观看| 韩国女主播一区| 久久亚洲私人国产精品va媚药| 亚洲夂夂婷婷色拍ww47| 国产日产亚洲精品系列| 亚洲国产精品自拍| 成人福利视频在线| 91精品国产一区二区人妖| 国产精品嫩草影院com| 日韩综合小视频| 日韩欧美一级片| 亚洲精品免费在线| 成人精品鲁一区一区二区| 欧美一区二区三区日韩视频| 亚洲精品自拍动漫在线| 国产精品123| 欧美一级精品大片| 亚洲影院理伦片| www.成人在线| 国产欧美日韩视频一区二区 | 日本欧美一区二区| 99vv1com这只有精品| 久久久久久免费网| 久久99国产精品麻豆| 欧美电影在哪看比较好| 亚洲免费观看高清完整版在线观看| 国产一区二区精品久久91| 日韩三级av在线播放| 亚洲国产欧美在线| 色婷婷久久久久swag精品| 欧美国产日韩在线观看| 国产精品影视在线观看| 欧美sm美女调教| 美女免费视频一区| 欧美一区二区三区喷汁尤物| 日韩影院免费视频| 欧美肥胖老妇做爰| 五月开心婷婷久久| 欧美日韩1234| 全国精品久久少妇| 欧美久久高跟鞋激| 日本中文在线一区| 欧美一区二区三区在线| 污片在线观看一区二区| 欧美三级在线看| 香蕉成人伊视频在线观看| 欧美丝袜丝交足nylons| 午夜免费久久看| 欧美日韩国产小视频| 青青草一区二区三区| 日韩欧美的一区二区| 久久不见久久见中文字幕免费| 精品伦理精品一区| 国产福利一区在线观看| 国产精品久久久久久久久晋中| 99精品视频在线观看免费| 亚洲视频免费在线| 欧美另类z0zxhd电影| 久久99久国产精品黄毛片色诱| 精品少妇一区二区三区日产乱码| 国内精品国产三级国产a久久| 欧美激情一区二区三区不卡 | 国产成人99久久亚洲综合精品| 中日韩av电影| 中文字幕亚洲在| 香蕉久久夜色精品国产使用方法| 久久综合九色综合97婷婷| 国产日韩成人精品| 91精品国产综合久久小美女| 欧美一个色资源| 日韩一区二区高清| 欧美人动与zoxxxx乱| 91成人网在线| 欧美日韩国产成人在线免费| 欧日韩精品视频| 在线看国产日韩| 久久精品夜夜夜夜久久| 视频一区二区中文字幕| 色婷婷久久99综合精品jk白丝|