日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【lua学习】7.环境

發布時間:2023/12/2 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【lua学习】7.环境 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • 1 最重要的兩個數據結構
    • 1.1 lua_State(Lua虛擬機/Lua協程)
    • 1.2 global_State(Lua全局狀態)
  • 2 環境相關的變量
    • 2.1 Global表
      • 2.1.1 Global表在lua_State結構中
      • 2.1.2 Global表在 f_luaopen 時被初始化
    • 2.2 env表
      • 2.2.1 env表在Closure結構中
      • 2.2.2 查找一個全局變量<=>在當前函數的env表中尋找
      • 2.2.3 lua函數的env表何時被設置
      • 2.2.4 C函數的env表何時被設置
      • 2.2.5 getfenv(讀取函數的環境)
      • 2.2.6 setfenv(強制設置函數的環境)
    • 2.3 registry表(注冊表)
    • 2.4 UpValue

1 最重要的兩個數據結構

1.1 lua_State(Lua虛擬機/Lua協程)

每個lua虛擬機(協程)對應一個lua_State結構體

(lstate.h) lua_State

struct lua_State {CommonHeader;//#define CommonHeader GCObject *next; lu_byte tt; lu_byte markedlu_byte status;//協程的狀態碼StkId top;//棧頂位置,“寄存器”第一個可用位置StkId base;//當前函數調用的棧基址global_State* l_G;//全局狀態機CallInfo* ci;//當前函數調用信息const Instruction* savedpc;//指令指針StkId stack_last;//“寄存器”最后一個可用位置StkId stack;//棧數組的起始位置CallInfo* end_ci;//函數調用信息數組的最后一個位置的下一個位置CallInfo* base_ci;//函數調用信息數組首地址int stacksize;//棧的大小int size_ci;//函數調用信息數組大小unsigned short nCcalls;//內嵌C調用的層數unsigned short baseCcalls;//喚醒協程時的內嵌C調用層數lu_byte hookmask;lu_byte allowhook;int basehookcount;int hookcount;lua_Hook hook;TValue l_gt;//Global表TValue env;//環境表的臨時位置GCObject* openupval;//棧上open狀態的uvaluesGCObject* gclist;struct lua_longjmp* errorJmp;//當前跳轉信息,實現try catch的關鍵結構ptrdiff_t errfunc;//當前錯誤處理函數相對于“寄存器數組首地址”的偏移地址 };

1.2 global_State(Lua全局狀態)

(lstate.h) global_State

typedef struct global_State {stringtable strt;//全局字符串表lua_Alloc freealloc;//內存重分配函數void* ud;//freealloc的輔助數據lu_byte currentwhite;//當前白色,見GC章節lu_byte gcstate;//GC狀態,見GC章節int sweepstrgc;//strt中GC掃描到的位置GCObject* rootgc;//所有可回收對象的鏈表GCObject** sweepgc;//rootgc中掃描到的位置GCObject* gray;//灰色對象鏈表GCObject* grayagain;//需要被原子性遍歷地對象鏈表GCObject* week;//弱表的鏈表GCObject* tmudata;//需要被GC的userdata的鏈表的最后一個元素Mbuffer* buff;//字符串連接操作用的臨時緩沖對象lu_mem GCthreshold;//觸發GC的邊界值,見GC章節lu_mem totalbytes;//當前分配的總字節數lu_mem estimate;//實際上使用的總字節數的估計值lu_mem gcdept;//在預定的回收字節數中,還欠多少字節沒有回收int gcpause;//連續的GC中的停頓步長相關值,見GC章節int gcstepmul;//GC的粒度lua_CFunction panic;//對于未捕獲異常,會調用這個函數TValue l_registry;//注冊表struct lua_State* mainthread;//主協程UpVal uvhead;//open狀態的upvalue雙鏈表的頭部struct Table* mt[NUM_TAGS];//存放 基本類型的元表 的數組TString* tmname[TM_N];//存放 元方法名字符串對象地址 的數組 }

2 環境相關的變量

2.1 Global表

Global表存放在lua_State結構體中,每個lua_State實例都有一個對應的Global表,對于一個lua_State這個表就是用來存放全局變量的。

2.1.1 Global表在lua_State結構中

struct lua_State {//..//TValue l_gt;//Global表//..// }

2.1.2 Global表在 f_luaopen 時被初始化

(lstate.c) f_luaopen (f_luaopen 又被 lua_newstate 調用)

static void f_luaopen(lua_State* L, void* ud) {//...//sethvalue(L, gt(L), luaH_new(L, 0, 2));//創建了一個arraysize=0, hashsize=2的表作為全局表//...// }

2.2 env表

env表存放在Closure結構體中,也就是每個函數都有自己獨立的環境

2.2.1 env表在Closure結構中

(lobject.h) Closure

#define ClosureHeader \CommonHeader; \lu_byte isC; \lu_byte nupvalues; \GCObject *gclist; \struct Table *env //函數的環境表地址typedef struct CClosure {ClosureHeader;lua_CFunction f;TValue upvalue[1]; } CClosure;typedef struct LClosure {ClosureHeader;struct Proto* p;UpVal* upvals[1]; } LClosure;typedef union Closure {CClosure c;LClosure l; } Closure;

2.2.2 查找一個全局變量<=>在當前函數的env表中尋找

(lvm.c) luaV_execute 模擬CPU,后續虛擬機章節細說

//我們暫且只關心 全局變量 的 查找或設置 void luaV_execute (lua_State *L, int nexeccalls) {LClosure* cl;StkId base;TValue* k;const Instruction* pc; reentry:pc = L->savedpc;cl = &clvalue(L->ci->func)->l;base = L->base;k = cl->p->k;//循環取指令,執行指令for (;;) {const Instruction i = *pc++;//取出當前指令i,pc指向下一個指令,完全符合CPU工作原理if ((L->hookmask & (LUA_MASKLINE | LUA_MASKCOUNT)) && (--L->hookcount == 0 || L->hookmask & LUA_MASKLINE)){traceexec(L, pc);//traceexec后面說if (L->status == LUA_YIELD){L->savedpc = pc - 1;return;}base = L->base;}StkId ra = RA(i);//#define RA(i) (base+GETARG_A(i))//#define GET_OPCODE(i) (cast(OpCode, ((i)>>POS_OP) & MASK1(SIZE_OP,0)))switch (GET_OPCODE(i)) {//..//case OP_GETGLOBAL: //OP_GETGLOBAL 指令格式A Bx 指令意義 R(A) := Gbl[Kst(Bx)]{TValue g;TValue* rb = KBx(i);//#define KBx(i) k+GETARG_Bx(i)sethvalue(L, &g, cl->env);//g設為去當前函數的env表Protect(luaV_gettable(L, &g, rb, ra));continue;}//..//case OP_SETGLOBAL:{TValue g;sethvalue(L, &g, cl->env);Protect(luaV_settable(L, &g, KBx(i), ra));continue;}//..//}} }

(lvm.c) Protect宏

  • 執行代碼x前 先將L->savedpc設為 下一步藥執行的指令地址pc (因為代碼x有異常的可能,所以記錄pc到L上以便從下一條指令繼續執行)
  • 執行代碼x
  • 執行代碼x后,再將 base設為 L->base(一位代碼x可能會觸發棧的重新分配內存)
#define Protect(x) { L->savedpc = pc; {x;}; base = L->base; }

2.2.3 lua函數的env表何時被設置

  • f_parser函數里,env被設置為&L->l_gt(lua_State的Global表)
  • luaV_execute的OP_CLOSURE指令分支,env被設置為&clvalue(L->ci->func)->l->env (當前調用信息對應的函數的env表)

(ldo.c) f_parser

static void f_parser(lua_State* L, void* ud) {struct SParser* p = cast(struct SParser*, ud);int c = luaZ_lookahead(p->z);luaC_checkGC(L);Proto* tf = ((c == LUA_SIGNATURE[0]) ? luaU_undump : luaY_parser)(L, p->z, &p->buff, p->name);//很顯然,在解析二進制或原文件時得到的lua函數,默認的env表時L的Global表Closure* cl = luaF_newLclosure(L, tf->nups, hvalue(gt(L)));cl->l.p = tf;for (i = 0; i < tf.nups; i++){cl->l.upvals[i] = luaF_newupval(L);}setclvalue(L, L->top, cl);incr_top(L); }

(lvm.c) luaV_execute

//我們暫且只關心 OP_CLOSURE 指令 void luaV_execute (lua_State *L, int nexeccalls) {LClosure* cl;StkId base;TValue* k;const Instruction* pc; reentry:pc = L->savedpc;cl = &clvalue(L->ci->func)->l;base = L->base;k = cl->p->k;//循環取指令,執行指令for (;;) {const Instruction i = *pc++;//取出當前指令i,pc指向下一個指令,完全符合CPU工作原理if ((L->hookmask & (LUA_MASKLINE | LUA_MASKCOUNT)) && (--L->hookcount == 0 || L->hookmask & LUA_MASKLINE)){traceexec(L, pc);//traceexec后面說if (L->status == LUA_YIELD){L->savedpc = pc - 1;return;}base = L->base;}StkId ra = RA(i);//#define RA(i) (base+GETARG_A(i))//#define GET_OPCODE(i) (cast(OpCode, ((i)>>POS_OP) & MASK1(SIZE_OP,0)))switch (GET_OPCODE(i)) {//..//case OP_CLOSURE:{//根據索引獲取當前函數的內嵌函數原型Proto* p = cl->p->p[GETARG_Bx(i)];//獲取內嵌函數的upvalue數量int nup = p->nups;//根據upvalue數量和env表創建內嵌函數CLosure* ncl = luaF_newLclosure(L, nup, cl->env);ncl->l.p = p;for (int j = 0; j < nup; j++, pc++){if (GET_OPCODE(*pc) == OP_GETUPVAL){ncl->l.upvals[j] = cl->upvals[GETARG_B(*pc)];}else{ncl->l.upvals[j] = luaF_findupval(L, base + GETARG_B(*pc));}}setclvalue(L, ra, ncl);Protect(luaC_checkGC(L));continue;}//..//}} }

(lfunc.c) luaF_newLclosure 創建一個新的lua函數(閉包)

Closure* luaF_newLclosure(lua_State* L, int nupvalues, Table* env) {//#define sizeLclosure(n) (cast(int, sizeof(LClosure)) + cast(int, sizeof(TValue *)*((n)-1))) Closure* cl = cast(Closure*, luaM_malloc(L, sizeLClosure(nupvalues)));luaC_link(L, obj2gco(cl), LUA_TFUNCTION);cl->l.isC = 0;cl->l.env = e;cl->l.nupvalues = cast_byte(nupvalues);while (nupvalues--){cl->l.upvals[nupvalues] = NULL;}return c; }

2.2.4 C函數的env表何時被設置

  • lua_pushcclosure函數里,env被設置為getcurrenv(L)
  • f_Ccall函數里,env被設置為getcurrenv(L)

(lapi.c) lua_pushcclosure 創建一個C閉包入棧

LUA_API void lua_pushcclosure(lua_State* L, lua_CFunction fn, int n) {luaC_checkGC(L);Closure* cl = luaF_newCclosure(L, n, getcurrentv(L));cl->c.f = fn;L->top -= n;while(n--){setobj2n(L, &cl->c.upvalue[n], L->top + n);}setclvalue(L, L->top, cl);api_incr_top(L);//#define api_incr_top(L) {api_check(L, L->top < L->ci->top); L->top++;} }

(lfunc.c) luaF_newCclosure 創建C閉包

Closure* luaF_newCclosure(lua_State* L, int nupvals, Table* env) {//#define sizeCclosure(n) (cast(int, sizeof(CClosure)) + cast(int, sizeof(TValue)*((n)-1)))Closure* c = cast(Closure*, luaM_malloc(L, sizeCclosure(nupvals)));luaC_link(L, obj2gco(c), LUA_TFUNCTION);c->c.isC = 1;c->c.env = env;c->c.nupvals = cast_byte(nupvals);return c; }

(lapi.c) getcurrentv 獲取當前的函數env表(獲取L->ci的env表,當然L->base_ci的env表就是Global表)

  • 若不是內嵌函數,則返回Global表
  • 若是內嵌函數,則返回母函數的env表
static Table* getcurrenv(lua_State* L) {if (L->ci == L->base_ci){return hvalue(gt(L));}Closure* func = curr_func(L);//#define curr_func(L) (clvalue(L->ci->func))return func->c.env; }

(lapi.c) f_Ccall 創建并調用一個C函數

static void f_Ccall(lua_State* L, void* ud) {struct CCallS* c = cast(struct CCallS*, ud);Closure* cl = luaF_newCclosure(L, 0, getcurrenv(L));cl->c.f = c->func;setclvalue(L, L->top, cl);api_incr_top(L);luaD_call(L, L->top - 2, 0); }

2.2.5 getfenv(讀取函數的環境)

(lbaselib.c) luaB_getfenv (若為C函數,則返回Global表;否則lua_getfenv)

static int luaB_getfenv(lua_State* L) {getfunc(L, 1);if (lua_iscfuntion(L, -1)){lua_pushvalue(L, LUA_GLOBALSINDEX);}else{lua_getfenv(L, -1);}return 1; }

2.2.6 setfenv(強制設置函數的環境)

(lbaselib.c) luaB_setfenv

static int luaB_setfenv(lua_State* L) {//檢查L->base+2-1處是不是table類型luaL_chechtype(L, 2, LUA_TTABLE);getfunc(L, 0);//把 L->base+2-1 處的值復制到 L->top 處,并L->top++lua_pushvalue(L, 2);//若level為0,則改變當前lua線程的環境if (lua_isnumber(L, 1) && lua_tonumber(L, 1) == 0){lua_pushthread(L);lua_insert(L, -2);lua_settenv(L, -2);return 0;}//若L->top-2 是C函數,或者給 L->top-2 設置env失敗,則報錯if (lua_iscfunction(L, -2) || lua_setfenv(L, -2) == 0){//#define LUA_QL(x) "'" x "'"luaL_error(L, LUA_QL("setfenv") " cannot change environment of given object");}return 1; }

(lauxlib.c) luaL_checktype 檢查類型是否滿足,否則報錯

LUALIB_API void luaL_checktype(lua_State* L, int narg, int t) {if (lua_type(L, narg) != t){tag_error(L, narg, t);} }

(lauxlib.c) tag_error 根據類型標識報錯

static void tag_error(lua_State* L, int narg, int tag) {luaL_typeerror(L, narg, lua_typename(L, tag)); }

(lauxlib.c) luaL_typeerror 根據類型名報錯

LUALIB_API int luaL_typeerror(lua_State* L, int narg, const char* tname) {const char* msg = lua_pushfstring(L, "%s expected, got %s", tname, luaL_typename(L, narg));return luaL_argerror(L, narg, msg);//luaL_argerror見異常章節 }

(lbaselib.c) getfunc (獲取L->base 處的函數,并壓入棧頂)

static void getfunc(lua_State* L, int opt) {//若L->base處是函數,則把L->base處的值復制到L->top處,L->top++if (lua_isfunction(L, 1)){lua_pushvalue(L, 1);return;}//#define luaL_optint(L,n,d) ((int)luaL_optinteger(L, (n), (d)))//#define luaL_checkint(L,n) ((int)luaL_checkinteger(L, (n)))//opt為非0時,對L->base處的值進行判斷,若為nil或none,則取默認值,否則執行整數轉換操作;若opt為0,則僅僅執行整數轉換操作int level = opt ? luaL_optint(L, 1, 1) : luaL_checkint(L, 1);//level必須為>=0luaL_argcheck(L, level >= 0, 1, "level must be non-negative");lua_Debug ar;if (lua_getstack(L, level, &ar) == 0){luaL_argerror(L, 1, "invalid level");}lua_getinfo(L, "f", &ar);if (lua_isnil(L, -1)){luaL_error(L, "no function environmnent for tail call at level %d", level);//luaL_error見異常章節} }

(lauxlib.c) luaL_optinteger

//不是數字類型且轉為整數后不是0,則報錯 LUALIB_API lua_chechinteger(lua_State* L, int narg) {lua_Integer d = lua_tointeger(L, narg);if (d == 0 && !lua_isnumber(L, narg)){tag_error(L, narg, LUA_TNUMBER);}return d; }LUALIB_API lua_Integer luaL_optinteger(lua_State* L, int narg, lua_Integer def) {//#define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n)))return luaL_opt(L, luaL_checkinteger, narg, def); }

(ldebug.c) lua_getstack 獲取指定層級的調試信息

LUA_API int lua_getstack(lua_State* L, int level, lua_Debug* ar) {for (CallInfo* ci = L->ci; level > 0 && ci > L->base_ci; ci--){level--;//若為lua函數,則跳過尾調用,//見函數章節if (f_isLua(ci)){level -= ci->tailcalls;//原文 /* skip lost tail calls */ 見函數章節}}int status;if (level == 0 && ci > L->base_ci){//找到了合適的levelstatus = 1;ar->i_ci = cast_int(ci - L->base_ci);}else if (level < 0){//原文 /* level is of a lost tail call? */ 見函數章節status = 1;ar->i_ci = 0;}else{status = 0;}return status; }

(ldebug.c) lua_getinfo 獲取debug信息

LUA_API int lua_getinfo(lua_State* L, const char* what, lua_Debug* ar) {Closure* f = NULL;if (*what == '>'){StdId func = L->top - 1;what++;f = clvalue(func);L->top--;//函數出棧}else if (ar->i_ci != 0)//沒有尾調用 //見函數章節{ci = L->base_ci + ar->i_ci;f = clvalue(ci->func);}int status = auxgetinfo(L, what, ar, f, ci);//auxgetinfo,見函數章節if (strchr(what, 'f')){if (f == NULL){setnilvalue(L->top);}else{setclvalue(L, L->top, f);}incr_top(L);}if (strchr(what, 'L')){collectvalidlines(L, f);//收集行號信息}return status; }

(ldebug.c) collectvalidlines 收集行號信息(獲得一個table<行號,true> 的結構,壓入棧頂)

static void collectvalidlines(lua_State* L, Closure* f) {if (f == NULL || f->c.isC){setnilvalue(L->top);}else{Table* t = luaH_new(L, 0, 0);int* lineinfo = f->l.p->lineinfo;for (int i = 0; i < f->l.p->sizelineinfo; i++){setbvalue(luaH_setnum(L, t, lineinfo[i]), 1);}sethvalue(L, L->top, t);}incr_top(L); }

2.3 registry表(注冊表)

  • 注冊表在global_State中,全局唯一,這個表可以被多個lua_State訪問
  • 注冊表只能被C代碼訪問,Lua代碼不能訪問

(lauxlib.h) lua_ref,lua_unref,lua_getref

#define LUA_NOREF (-2) #define LUA_REFNIL (-1)//往注冊表新增一個唯一key #define lua_ref(L,lock) ((lock) ? luaL_ref(L, LUA_REGISTRYINDEX) : \(lua_pushstring(L, "unlocked references are obsolete"), lua_error(L), 0)) //取消注冊表一個唯一key #define lua_unref(L,ref) luaL_unref(L, LUA_REGISTRYINDEX, (ref)) //獲取注冊表唯一key對應的值 #define lua_getref(L,ref) lua_rawgeti(L, LUA_REGISTRYINDEX, (ref))

(lauxlib.c) luaL_ref,luaL_unref

//對于棧頂的value,從表t中獲取一個可用key,來存value /* 表中的key=FREELIST_REF對應的value是 空閑的key的索引(而所謂的空閑的key是由于unref造成的結果)舉個例子來理解這個設計: 開始t={[FREELIST_REF]=nil} 存v1: ref=t[FREELIST_REF]=nil => ref=#t + 1 = 1, t[ref]=t[1]=v1 => t={[FREELIST_REF]=nil, [1]=v1} 存v2: ref=t[FREELIST_REF]=nil => ref=#t + 1 = 2, t[ref]=t[2]=v2 => t={[FREELIST_REF]=nil, [1]=v1, [2]=v2} unref(1): ref=1, t[ref]=t[FREELIST_REF]=nil, t[FREELIST_REF]=ref=1 => t={[FREELIST_REF]=1, [1]=nil, [2]=v2} unref(2): ref=2, t[ref=t[FREELIST_REF]=1, t[FREELIST_REF]=ref=2 => t={[FREELIST_REF]=2, [1]=nil, [2]=1} 存v3: t[FREELIST_REF]=2 => ref=2, t[FREELIST_REF]=t[ref]=1, t[ref]=v3 => t={[FREELIST_REF]=1, [1]=nil, [2]=v3} 存v4: t[FREELIST_REF]=1 => ref=1, t[FREELIST_REF]=t[ref]=nil, t[ref]=v4 => t={[FREELIST_REF]=nil, [1]=v4, [2]=v3}也就說t中的key分為2種狀態:空閑 和 非空閑。若為空閑,則其value是下一個空閑key的索引;若為非空閑,則其value是有意義的值。拓展討論: 開始t={[FREELIST_REF]=nil} 存v1: t[FREELIST_REF]=nil => ref=#t + 1 = 1, t[ref]=t[1]=v1 => t={[FREELIST_REF]=nil, [1]=v1} 存v2: t[FREELIST_REF]=nil => ref=#t + 1 = 2, t[ref]=t[2]=v2 => t={[FREELIST_REF]=nil, [1]=v1, [2]=v2} unref(1): ref=1, t[ref]=t[FREELIST_REF]=nil, t[FREELIST_REF]=ref=1 => t={[FREELIST_REF]=1, [1]=nil, [2]=v2} 再次unref(1): ref=1, t[ref]=t[FREELIST_REF]=1, t[FREELIST_REF]=ref=1 => t={[FREELIST_REF]=1, [1]=1, [2]=v2} unref(2): ref=2, t[ref]=t[FREELIST_REF]=1, t[FREELIST_REF]=ref=2 => t={[FREELIST_REF]=2, [1]=1, [2]=1} 再次unref(2): ref=2, t[ref]=t[FREELIST_REF]=2, t[FREELIST_REF]=ref=2 => t={[FREELIST_REF]=2, [1]=1, [2]=2} 存v3: t[FREELIST_REF]=2 => ref=2, t[FREELIST_REF]=t[ref]=2, t[ref]=v3 => t={[FREELIST_REF]=2, [1]=1, [2]=v3} 存v4: t[FREELIST_REF]=2 => ref=2, t[FREELIST_REF]=t[ref]=v3, t[ref]=v4 => t={[FREELIST_REF]=2, [1]=1, [2]=v4}//v3不見了,出問題了!!!*/ LUALIB_API int luaL_ref(lua_State* L, int t) {//假設棧頂的值為v//若v==nil,則返回-1if (lua_isnil(L, -1)){lua_pop(L, 1);return LUA_REFNIL;//#define LUA_REFNIL (-1)}t = abs_index(L, t);//#define abs_index(L, i) ((i) > 0 || (i) <= LUA_REGISTRYINDEX ? (i) : lua_gettop(L) + (i) + 1)lua_rawgeti(L, t, FREELIST_REF);//#define FREELIST_REF 0 /* free list of references *///ref=t[FREELIST_REF], 獲取一個空閑的keyint ref = (int)lua_tointeger(L, -1);lua_pop(L, -1);if (ref != 0)//ref!=0,說明有空閑key{lua_rawgeti(L, t, ref);lua_rawseti(L, t, FREELIST_REF);//t[FREELIST_REF] = t[ref]}else//ref==0,說明沒有空閑位置,需要新建key{ref = (int)lua_objlen(L, t);ref++;//創建一個新的引用}lua_rawseti(L, t, ref);//t[ref]=vreturn ref; }LUALIB_API void luaL_unref(lua_State* L, int t, int ref) {if (ref < 0){return;}t = abs_index(L, t);lua_rawgeti(L, t, FREELIST_REF);lua_rawseti(L, t, ref);//t[ref]=t[FREELIST_REF]lua_pushinteger(L, ref);lua_rawseti(L, t, FREELIST_REF);//t[FREELIST_REF]=ref }

(lapi.c) lua_objlen 獲取對象的長度

LUA_API size_t lua_objlen(lua_State* L, int idx) {StkId o = index2adr(L, idx);switch(ttype(o)){case LUA_TSTRING:{return tsvalue(o)->len;}case LUA_TUSERDATA:{return uvalue(o)->len;}case LUA_TTABLE:{return luaH_getn(hvalue(o));}case LUA_TNUMBER:{size_t l = luaV_tostring(L, o) ? tsvalue(o)->len : 0;return l;}default:{return 0;}} }

2.4 UpValue

registry表是全局變量的存儲,env表是函數內全局變量的存儲,UpValue則是函數內靜態變量的存儲
通過 index2adr(L, int idx) (其中idx<LUA_GLOBALSINDEX)獲取C閉包的upvalue地址
至于UpValue的一切,見函數章節。

總結

以上是生活随笔為你收集整理的【lua学习】7.环境的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久精品视频免费观看2 | 国产精品久久一 | 一区二区三区精品在线视频 | 久久艹艹 | 天天爽人人爽夜夜爽 | 中文字幕av在线免费 | 波多野结衣在线观看一区二区三区 | 国产v在线 | 中文字幕日韩国产 | 国产三级在线播放 | 中文字幕日韩免费视频 | 人人精品 | 丁香婷婷在线观看 | 在线免费观看羞羞视频 | 在线观看不卡视频 | 99在线精品视频 | 国产99久久久国产精品成人免费 | 国产一级片直播 | 久久精品精品电影网 | 天天在线免费视频 | www.色婷婷| 久久成人精品电影 | 天天躁日日躁狠狠躁av麻豆 | 国产高h视频 | 久久视频免费在线 | 蜜臀av性久久久久av蜜臀三区 | 99精品在线直播 | 在线观看黄网 | 日韩有码在线观看视频 | a极黄色片 | 欧美日韩在线第一页 | 一区二区三区在线观看免费 | 96香蕉视频 | 成人九九视频 | 欧美日韩高清一区二区 | 日韩电影在线一区 | 日韩视频www | 亚洲国产视频在线 | 日本99久久 | 婷婷去俺也去六月色 | 欧美男男tv网站 | 美女久久久久 | 国产成人免费网站 | 国产一区二区在线免费播放 | 91久久久久久久一区二区 | 欧美日韩国产一区二区三区 | 成人一区二区三区在线观看 | 激情电影影院 | 97超碰人人模人人人爽人人爱 | 色婷婷激情四射 | 久草视频免费在线观看 | 公开超碰在线 | 久久综合久久综合这里只有精品 | 在线黄色毛片 | 91九色视频观看 | 久久精品99国产精品酒店日本 | 日韩视频一| 国产区在线 | 99在线观看视频 | 亚洲在线国产 | 美女网站视频免费都是黄 | 天天操天天谢 | 日韩精品免费一线在线观看 | 五月婷婷丁香色 | 久草色在线观看 | 久久视频免费 | 免费精品国产 | 中文字幕日本电影 | 久久av伊人 | 国产高清av在线播放 | 色吊丝在线永久观看最新版本 | 国产精品第52页 | 五月开心色 | 日韩欧美黄色网址 | 天天弄天天操 | 人人插人人爱 | 欧美日韩中文字幕在线视频 | 91久久久国产精品 | 2022中文字幕在线观看 | 国产一区二区三区高清播放 | 国产福利av | 亚洲精品国偷拍自产在线观看蜜桃 | 伊人婷婷在线 | 91久久国产综合精品女同国语 | 国产成人精品综合 | 97视频在线免费 | 狠狠色噜噜狠狠狠狠 | 免费观看一级成人毛片 | 91少妇精拍在线播放 | www.狠狠操| 手机看片1042 | 久久精品亚洲精品国产欧美 | 黄色一级在线观看 | 天天操天天干天天爽 | 亚洲婷婷在线视频 | 国产精品麻豆免费版 | 精品一区 精品二区 | 久久国产精品久久久 | 午夜私人影院 | 国产精品成人久久久 | 最近久乱中文字幕 | 国产精品久久婷婷六月丁香 | 国产91精品久久久久久 | 精品国产大片 | 国产综合小视频 | 亚洲精品日韩一区二区电影 | av中文在线 | 狠狠ri| 婷婷在线看| 99精品在线看 | 亚洲精品乱码久久 | av高清影院| 丁香在线观看完整电影视频 | 国产精品一区二区三区免费视频 | 亚洲欧美日韩国产 | 午夜精品久久久久久久久久久 | 国产人免费人成免费视频 | 国语精品免费视频 | 国产精品毛片一区 | 国产视频色 | 亚洲第一中文网 | 精品国产一区二区三区久久久久久 | 日韩视频免费观看高清 | 2023国产精品自产拍在线观看 | 成人黄色小说网 | 奇人奇案qvod | 成片免费 | 国产视频欧美视频 | 永久免费av在线播放 | 日本久久成人 | 97在线观看视频 | 国产在线播放不卡 | 亚洲精品理论片 | 成人wwwxxx视频 | 欧美在线观看视频免费 | 中文字幕一区二区在线播放 | 少妇搡bbb| 欧美一区中文字幕 | 欧美日韩高清一区二区 国产亚洲免费看 | 色五丁香 | 亚洲精品视频免费在线 | 国产精品日韩在线播放 | 国产麻豆果冻传媒在线观看 | 四虎在线观看精品视频 | 国产精品不卡在线播放 | 久久韩国免费视频 | 国产精品igao视频网入口 | 99视频偷窥在线精品国自产拍 | 免费观看的黄色片 | 久久国产精品一国产精品 | 国产免费午夜 | 久久免费看a级毛毛片 | 中国美女一级看片 | 中文字幕在线看人 | 精品久久亚洲 | 国产精品久久久久久久久免费看 | 久久久精品国产一区二区 | 四虎在线免费 | 免费网站黄色 | 黄色看片 | 亚洲天天| 久久久久免费电影 | 免费国产一区二区 | 久久开心激情 | 精品国产一区二区三区久久影院 | 日本性xxxxx 亚洲精品午夜久久久 | 激情五月婷婷综合网 | 久久91久久久久麻豆精品 | 五月婷婷视频 | 国产亚洲精品久久久久久电影 | 91黄色成人 | 韩国av一区二区三区 | 91久久精品一区二区三区 | 91成人精品在线 | 日本黄色免费播放 | 国产精品国产精品 | 视频在线观看入口黄最新永久免费国产 | 懂色av一区二区三区蜜臀 | 色97在线| 精品专区一区二区 | 国产伦精品一区二区三区无广告 | av在线免费观看不卡 | 国产一区视频免费在线观看 | 深爱五月网 | 亚洲精品乱码久久久久久蜜桃欧美 | 国产黄a三级三级 | 欧美日韩高清不卡 | 又色又爽又黄高潮的免费视频 | www.久久色 | 日韩av视屏 | 激情开心站 | 天堂视频中文在线 | 狠狠干夜夜操天天爽 | 欧美精品在线观看 | 激情综合中文娱乐网 | 日本不卡123区 | 伊人永久 | 夜夜躁日日躁 | 日日狠狠 | 国产在线观看你懂的 | 国产高清99 | 狠狠干天天操 | www.看片网站| 狠狠操狠狠 | 国产电影黄色av | 天天插天天干天天操 | 色综合久久中文字幕综合网 | 二区三区在线观看 | 黄色片视频在线观看 | 9999国产精品| 天天操天天射天天添 | 久久精品网站免费观看 | 免费在线观看污 | 色欲综合视频天天天 | 欧美性生活一级片 | 婷婷丁香国产 | 国产精品国产三级国产不产一地 | 国产a国产| 国产 精品 资源 | 欧美一级日韩免费不卡 | 伊色综合久久之综合久久 | 在线观看日韩免费视频 | 国产精品一区在线 | 奇米网网址 | 婷婷婷国产在线视频 | 国产最新在线观看 | 在线播放一区二区三区 | 日韩亚洲在线观看 | 青草视频在线 | 国产高清日韩 | 成人v| 国产成人在线免费观看 | 91精品婷婷国产综合久久蝌蚪 | 久久天堂网站 | www.狠狠色.com | 日韩成人在线免费观看 | 免费国产亚洲视频 | 中文免费在线观看 | 国产精品一区二区久久精品爱微奶 | 国产精品成人a免费观看 | 久久久免费观看完整版 | 久久免费精品视频 | 国产 一区二区三区 在线 | mm1313亚洲精品国产 | 欧美专区亚洲专区 | 波多野结衣视频一区二区三区 | 久久久久久黄色 | 精品国产伦一区二区三区观看体验 | 欧美日韩性生活 | 日韩精品一区电影 | 成人在线视频你懂的 | 欧美最猛性xxxxx(亚洲精品) | 国产aaa大片 | 亚洲成熟女人毛片在线 | 久久久精品视频网站 | 亚洲精品免费视频 | 成人免费影院 | 国产伦理一区二区三区 | 日韩久久久久久 | 久久精品一区二区三 | 国产麻豆剧传媒免费观看 | 天天天天天操 | 国产专区视频在线 | 日韩欧美精品一区二区 | 日韩美女久久 | 黄色网址在线播放 | 97人人澡人人爽人人模亚洲 | 国产一区二区三区午夜 | 人人超碰免费 | 最近中文字幕免费 | 三上悠亚在线免费 | 麻豆精品91 | 国产在线a不卡 | 91麻豆文化传媒在线观看 | 久久区二区 | 夜夜视频资源 | 亚洲精品中文字幕在线观看 | 久久精品视频免费 | 日韩一级成人av | 丁香视频全集免费观看 | 免费视频久久久久久久 | 免费av视屏| 狠狠黄| www色网站| 国产精品一区二区视频 | 青草视频在线看 | 亚洲一区二区三区miaa149 | 久久高清片 | 欧美激情精品久久久久 | 1024久久 | 日本乱码在线 | 丁香5月婷婷 | 成人在线视| 日日操夜| 激情丁香 | 激情中文在线 | 亚洲精品国产精品国 | 欧美一级视频免费 | a黄色大片| www欧美色| 久草爱| 免费大片黄在线 | 久久精品人 | 国产做a爱一级久久 | 久久高清免费 | 日韩欧美一区二区三区视频 | 狠狠躁夜夜a产精品视频 | 91传媒视频在线观看 | 激情中文在线 | 亚洲 在线 | 91欧美日韩国产 | 五月开心色 | 天天综合网国产 | 人人看人人爱 | 免费中文字幕在线观看 | 96视频免费在线观看 | 中文字幕在线看视频 | 日韩久久久久久久久 | 在线精品观看 | 久久99国产精品二区护士 | 久草色在线观看 | 天天干天天弄 | 国产亚洲亚洲 | 国产精品久久久久久久免费 | 蜜桃av久久久亚洲精品 | 99热这里只有精品在线观看 | 精品一区三区 | 超碰免费97| 福利视频一二区 | 久久涩涩网站 | 亚洲理论电影网 | 人人插人人射 | 欧美日性视频 | 色噜噜狠狠狠狠色综合久不 | 国产精品美女久久久网av | 中文亚洲欧美日韩 | 成人毛片a| 久久在线精品视频 | 国产日韩欧美在线看 | 三级小视频在线观看 | 国产特级毛片aaaaaa | 精品国产一区二区三区久久久蜜月 | 中文字幕黄色 | 在线观看91精品国产网站 | 国产精品毛片 | av电影在线免费观看 | 日本成址在线观看 | 五月综合激情 | 国产小视频免费在线网址 | 久久久亚洲国产精品麻豆综合天堂 | 亚洲色图27p | 麻豆播放 | 国产91九色蝌蚪 | 久久久在线免费观看 | 亚洲永久精品视频 | 色综合久久久 | 国产精品99久久久精品免费观看 | 四虎国产永久在线精品 | 久久91网| 伊人激情综合 | 国产黄色特级片 | 91成人在线网站 | 日韩免费b| 欧美乱码精品一区二区 | 六月丁香综合 | 欧美成人性战久久 | 久久免费公开视频 | 亚洲国产片 | 日韩中文免费视频 | 久久天堂亚洲 | 最新国产精品拍自在线播放 | 久久免费av | 激情视频免费在线 | 99久久精品午夜一区二区小说 | 婷婷视频导航 | 欧美日韩免费一区二区三区 | 91久久精品一区 | 久久99久久99精品免观看软件 | 久久精品中文字幕一区二区三区 | 91久久精品一区二区二区 | 一二三四精品 | 成人国产精品免费 | 欧美性护士| 五月天激情视频 | 97av在线视频免费播放 | 香蕉视频在线网站 | 亚洲动漫在线观看 | 国产黄在线观看 | 丁香激情五月 | 国产免费资源 | 色婷婷国产精品一区在线观看 | 天天爽天天做 | 国产日韩欧美视频在线观看 | 欧美成年性 | 久久成人在线视频 | 中文十次啦 | 国产成人黄色 | av大片免费在线观看 | 亚洲男女精品 | 国产一区久久 | 九九九九精品九九九九 | 亚洲视频精选 | 国产精品美女久久久久久久久 | 成人av免费看 | 亚洲网站在线看 | 色综合中文综合网 | av一区二区三区在线 | 久久综合色天天久久综合图片 | av色综合网 | 国产理论片在线观看 | 国产区在线看 | 伊人国产视频 | 在线视频手机国产 | 国产精品 亚洲精品 | 欧美国产91 | 国产专区视频在线观看 | 日韩在线中文字幕视频 | 日韩色中色 | 国产成人久久av免费高清密臂 | 五月婷婷毛片 | 久久涩视频 | 激情久久伊人 | 婷婷综合激情 | 亚洲成av人片在线观看www | 亚洲国产精品电影 | 中文字幕 婷婷 | 一级片免费观看视频 | 91高清免费在线观看 | 五月天激情综合网 | 一区二区伦理电影 | 亚州av免费| 丁香 婷婷 激情 | 成年美女黄网站色大片免费看 | 91私密视频 | 日韩乱色精品一区二区 | 久久精品国产一区二区三区 | 国产精品日韩欧美 | 日韩精品一区二区三区免费观看视频 | 91av在线免费播放 | 国产精品婷婷午夜在线观看 | 九九综合久久 | 国产精品乱码一区二区视频 | 久久婷婷影视 | 久久电影网站中文字幕 | 亚洲va在线va天堂 | 久久久久北条麻妃免费看 | 国产精品18久久久久白浆 | 一区二区三区四区在线 | 日本久久久久久科技有限公司 | 黄色亚洲免费 | 亚洲成人黄色网址 | 激情综合站 | 一区二区三区日韩视频在线观看 | 高清美女视频 | 天天综合网 天天综合色 | 国产精品嫩草影视久久久 | 狠狠躁18三区二区一区ai明星 | 中文在线字幕免费观 | 亚洲精品tv久久久久久久久久 | 波多野结衣在线视频一区 | 国产精品综合久久久久 | 干天天| 亚洲精品午夜一区人人爽 | 密桃av在线 | 久久综合九色综合网站 | 四虎成人免费影院 | 91精品国产福利 | 国产精品一区二区吃奶在线观看 | 免费观看黄 | 日韩av一区二区在线播放 | 在线观看国产91 | 亚洲成人影音 | 园产精品久久久久久久7电影 | 中文字幕精品久久 | 免费大片av | 夜色资源站国产www在线视频 | 最新日韩在线观看 | 国产视频第二页 | 999精品 | 久插视频 | 国产成本人视频在线观看 | 美女久久精品 | 国产一区二区观看 | 亚洲黄色小说网址 | 500部大龄熟乱视频使用方法 | 亚洲电影免费 | 亚洲国产wwwccc36天堂 | 国产91学生粉嫩喷水 | 日日干 天天干 | 亚洲美女精品视频 | 免费亚洲成人 | 国产一区二区在线免费 | 欧洲一区二区在线观看 | 中文国产在线观看 | 中文字幕一区二区三区四区在线视频 | 久久天 | 天天舔天天搞 | 日批视频在线观看免费 | 国产精品高潮呻吟久久av无 | 成人激情开心网 | 国产精品久久久区三区天天噜 | 中文字幕久久精品一区 | 日韩一区二区三区不卡 | 国色天香第二季 | 国产精品一区二区久久精品 | 亚洲国产播放 | 中文字幕在线资源 | 91 中文字幕 | 欧美精品午夜 | 欧美日韩免费观看一区二区三区 | 国产三级av在线 | 99热这里只有精品在线观看 | 成人av教育| 草久久av| 精品国偷自产在线 | 国产不卡视频在线 | 91在线操| 日韩精品91偷拍在线观看 | 国模视频一区二区 | 综合激情婷婷 | 国产一级片免费观看 | 激情久久久久久久久久久久久久久久 | 人人干人人艹 | 97电影院在线观看 | 在线观看视频免费播放 | 我爱av激情网 | 免费激情在线电影 | 一区二区视 | 97超碰国产精品 | 国产精品白丝jk白祙 | 手机看片久久 | 国产精品区在线观看 | www好男人| 成人观看 | 在线观看黄a | 激情九九 | 欧美大码xxxx | 久久久久久久久久免费视频 | 永久免费的av电影 | 国产精品久久久久久久久久久久午夜片 | 在线看成人 | 国产精品高潮呻吟久久av无 | 69xxxx欧美 | 国产高清视频色在线www | 欧美成人高清 | 91成人精品| 天天色成人网 | aav在线| 国内一级片在线观看 | 热re99久久精品国产99热 | 午夜视频久久久 | av亚洲产国偷v产偷v自拍小说 | 激情丁香久久 | 天躁狠狠躁 | 91av在线国产 | 亚洲欧美激情精品一区二区 | 国产精品自产拍 | 精品国产乱码久久久久久1区二区 | 日日夜夜av| 一区二区三区中文字幕在线 | 一区二区三区视频 | 一区免费观看 | 国产美女主播精品一区二区三区 | 日本精品免费看 | 国产成人777777| 亚洲一级黄色av | 911香蕉视频 | 亚洲欧美少妇 | 日韩丝袜视频 | 99视频在线精品国自产拍免费观看 | 精品久久久久久亚洲综合网站 | 亚洲 欧美 综合 在线 精品 | 欧美一级欧美一级 | 久久热首页 | 久章操 | 成人va天堂| 婷婷久操 | 日韩特黄一级欧美毛片特黄 | 在线免费三级 | 欧美黄污视频 | 欧美最新另类人妖 | 久久久亚洲麻豆日韩精品一区三区 | avwww在线| 欧美a性| 欧洲精品码一区二区三区免费看 | 欧美一区二区在线刺激视频 | 一级片黄色片网站 | 国产高清精 | 成片视频在线观看 | 亚洲视频免费视频 | 美女视频黄免费 | 亚洲一区久久久 | 久久午夜影院 | 国产黄色看片 | 久久亚洲影院 | 久久天天操| 97超碰超碰久久福利超碰 | 成人性生交视频 | 激情久久久久久久久久久久久久久久 | 国产成人精品一区二区三区在线观看 | 久久久精品小视频 | 日韩欧美在线观看一区二区三区 | 激情久久久久 | 天堂中文在线播放 | 久久 亚洲视频 | 久久精品国产一区二区三区 | 国产麻豆传媒 | 激情网在线视频 | 久久影院亚洲 | 伊人超碰在线 | 日韩首页 | 亚洲精品小视频 | 天天射狠狠干 | 久久综合久久综合这里只有精品 | 玖玖精品在线 | 久久国产精品一区二区 | 国产一级电影 | 天天干天天天天 | 久久久久久久久久网 | 一区二区三区日韩在线 | 激情开心色 | 成人av在线影院 | 久久99久久99精品免视看婷婷 | 国产一区二区三区久久久 | 色综合久久88色综合天天免费 | 欧美国产一区在线 | 国产黄色资源 | 麻豆91精品 | 欧美一二三区在线播放 | 国产精品久久久久久久免费 | 久久久久国产精品午夜一区 | 国产视频网站在线观看 | 黄色在线观看网站 | 伊人激情综合 | 六月丁香色婷婷 | 国产精品九九九九九 | 伊人丁香| 久久手机在线视频 | 久久久久久久久久久影院 | 日韩视频免费观看高清 | 91大神精品视频在线观看 | 日韩激情片在线观看 | 日韩中文字幕一区 | 久久国产精品免费视频 | 激情在线网| 日韩电影在线一区二区 | 婷婷丁香花五月天 | 精品在线一区二区三区 | 天天草天天干天天射 | 夜色.com | 九九热久久久 | 黄色毛片大全 | 久久国产精品久久精品国产演员表 | 91视频成人免费 | 日韩在线观看视频中文字幕 | 在线亚洲观看 | 天天干天天玩天天操 | 婷婷丁香花五月天 | 中文字幕资源在线观看 | 久草视频免费看 | 久久蜜臀一区二区三区av | 日韩视频一区二区在线 | www.色综合.com | 99精品视频在线看 | 看毛片网站 | 久久久久久综合 | 成人精品影视 | 一区二区三区四区免费视频 | 午夜av在线播放 | 免费日韩一区 | 久草免费在线视频 | 免费特级黄色片 | 国产精品免费高清 | 九九有精品 | 干干日日 | 麻豆视频国产精品 | 亚洲一二三区精品 | 中文字幕第一 | a在线免费观看视频 | 综合激情久久 | 久99精品 | 欧美日韩一级久久久久久免费看 | 99热免费在线 | 999热视频 | 成人动漫一区二区三区 | 国产第一福利 | 色综合天天综合 | 久久国内免费视频 | 欧美日韩精品二区第二页 | 国产精品一区二区久久精品爱涩 | 91亚洲精品久久久蜜桃网站 | 日韩午夜电影网 | 五月开心六月伊人色婷婷 | 婷婷黄色片| 91精品一区在线观看 | 天天天天综合 | 中文字幕免费 | 午夜精品一区二区三区可下载 | 区一区二区三在线观看 | 国内精品久久久久久久97牛牛 | 国产小视频在线看 | 韩国av电影网| 又黄又爽又刺激 | 丁香久久 | 五月花激情 | 天堂av在线7| 久久久一本精品99久久精品66 | 最新中文字幕在线播放 | 啪啪小视频网站 | 亚洲视频1区2区 | 久久人人爽人人爽人人片av免费 | 亚洲最大的av网站 | 国产资源在线免费观看 | 精品一区av | 99久久日韩精品免费热麻豆美女 | 国产手机在线视频 | 国产午夜在线观看视频 | 久久精品国产精品亚洲 | 国产精品九九视频 | 久久99精品国产91久久来源 | 韩国精品视频在线观看 | 日韩精品免费在线观看 | 亚洲精品国产精品久久99 | 精品国产中文字幕 | 日韩精品视频一二三 | 成人啪啪18免费游戏链接 | 久久夜av | 亚洲视频 一区 | 色姑娘综合| 国产精品免费观看久久 | 欧美成人91| 福利网址在线观看 | 四虎在线视频免费观看 | 欧洲黄色片 | 一 级 黄 色 片免费看的 | 99久久久久免费精品国产 | 欧美午夜久久久 | 国产99中文字幕 | 国产99久久久国产精品 | 九九在线精品视频 | 日韩毛片一区 | 99热精品视 | 国语黄色片 | 久久国产午夜精品理论片最新版本 | 国产精品一区免费看8c0m | 成人一级在线 | 日韩一区精品 | 色国产在线 | 99精品在线播放 | 福利一区二区在线 | 亚洲成av人影院 | 成人中文字幕+乱码+中文字幕 | 日韩小视频| 99产精品成人啪免费网站 | 久久露脸国产精品 | 在线观看一区 | 国产视频一区二区在线播放 | 久久久免费在线观看 | 免费网站看av片 | 久久影院精品 | 青春草免费在线视频 | 91热这里只有精品 | 国产精品成久久久久三级 | 婷婷亚洲激情 | 毛片网在线观看 | 在线看黄网站 | 国产在线观看你懂得 | 成人影音在线 | 欧美性猛片, | 成人a视频在线观看 | 国产午夜在线观看视频 | 国产精品亚州 | 久久久久久久久福利 | 在线观看国产永久免费视频 | 久久久午夜精品福利内容 | 日本成人a| 天天综合网 天天综合色 | 国产精品1区2区3区在线观看 | 99久久9| 特级黄色片免费看 | 天堂网av在线 | 在线你懂| 中文字幕av有码 | 麻豆视屏| 欧美日韩在线观看一区 | 国产精品一区免费在线观看 | 国内久久精品视频 | 麻豆果冻剧传媒在线播放 | 91在线国产观看 | 欧美在一区 | 亚洲精品国偷自产在线99热 | 日日日爽爽爽 | 狠狠狠狠干 | 国产91免费观看 | 中文字幕在线视频网站 | 亚洲国产视频a | 日日夜夜精品免费视频 | 免费一级日韩欧美性大片 | 99re视频在线观看 | 久草在线手机视频 | 好看的国产精品视频 | 日韩视频一区二区在线 | 久久亚洲综合国产精品99麻豆的功能介绍 | 91视视频在线直接观看在线看网页在线看 | 91精品一区二区三区久久久久久 | 日产中文字幕 | 国产在线精品播放 | 婷婷六月天天 | 国产成人61精品免费看片 | 国产精品丝袜 | 精品中文字幕视频 | 四虎国产精品成人免费影视 | 久久草av | 国产精品免费大片视频 | 亚洲欧美在线综合 | 深夜福利视频在线观看 | 日韩com| 日本aaaa级毛片在线看 | 久久久久久久国产精品 | 麻豆成人精品视频 | 天天操天天添天天吹 | 在线成人中文字幕 | 婷婷六月综合亚洲 | 天天做天天爱夜夜爽 | av片一区| 西西444www高清大胆 | 日韩特黄一级欧美毛片特黄 | 91精品啪啪| 亚洲视频在线观看 | 天天干天天操人体 | 四虎影视成人永久免费观看视频 | 丁香视频免费观看 | 天天射天天爽 | 欧美孕妇与黑人孕交 | 正在播放一区二区 | 91亚洲永久精品 | 999国产精品视频 | 天天操天天操天天干 | 二区三区在线视频 | 亚洲综合欧美精品电影 | 丰满少妇在线观看 | 狠狠操夜夜操 | 国产99精品在线观看 | 精品av网站| 国产精品三级视频 | 在线免费观看视频你懂的 | 热久久精品在线 | 天天色天天骑天天射 | 午夜三级影院 | 四虎国产精品免费观看视频优播 | 日韩天天操| 欧美国产日韩激情 | 99视频播放 | 伊在线视频 | av先锋影音少妇 | 九九99| 天天躁日日躁狠狠躁av麻豆 | 人人舔人人爽 | 久久久久久久福利 | 江苏妇搡bbbb搡bbbb | 国产黑丝一区二区 | 国产精品综合在线 | 中文一区在线观看 | adc在线观看 | 最新午夜 | 久久91久久久久麻豆精品 | 精品欧美在线视频 | a级国产乱理论片在线观看 特级毛片在线观看 | 日韩免费一区二区三区 | 亚洲最大av网站 | 成人97视频一区二区 | 久久国产精品免费视频 | 蜜桃传媒一区二区 | 天天干人人插 | 国内精品久久久精品电影院 | 免费高清在线观看成人 | 午夜视频在线观看欧美 | 日韩精品在线视频免费观看 | 国产999精品久久久影片官网 | 久久夜夜夜 | 国内视频 | 在线观看免费福利 | 国产成a人亚洲精v品在线观看 | 日本黄区免费视频观看 | 精品国产一区二区三区av性色 | 在线观看一二三区 | wwwwww色 | 国产精品久久久久一区二区国产 | 国产手机视频在线观看 | 日韩理论影院 | 久久综合九色九九 | 91av资源在线 | 久久69精品久久久久久久电影好 | 91在线观看视频网站 | 国产精品久久99综合免费观看尤物 | 欧美国产精品久久久久久免费 | 日韩精品一区二区电影 | 色婷婷综合久色 | 亚洲一区二区三区在线看 | 欧美精品一区二区三区一线天视频 | 2024国产精品视频 | 中文字幕第一页在线 | 玖玖精品在线 | 国产午夜在线观看视频 | 91精品天码美女少妇 | 婷婷婷国产在线视频 | 成人一级影视 | 成人一级电影在线观看 | www.日韩免费 | 国产视频一二三 | 国产91精品看黄网站 | 久久夜色精品国产欧美乱极品 | 国产成人精品日本亚洲999 | 午夜91视频 | 久久久国产精品成人免费 | 成 人 黄 色视频免费播放 | 黄色h在线观看 | 黄色av在 | 欧美综合在线视频 | 国产精品电影在线 | 天天曰天天曰 | 国产精品久久久久一区二区三区共 | 日韩综合第一页 | 精品国产乱码久久久久久1区2匹 | 日韩免费福利 | 在线免费观看黄色 | 亚洲精品99久久久久久 | 最近中文字幕大全中文字幕免费 | 中文字幕亚洲情99在线 | 国产亚洲欧美日韩高清 | 久久影视精品 | 黄色一级性片 | 亚洲91在线 | 97免费公开视频 | 日韩av片免费在线观看 | 国产在线久草 | 国产v在线播放 | 国产精品淫片 | 日韩在线视频二区 | 国产色在线,com | 韩国精品福利一区二区三区 | 久久www免费视频 | 2022中文字幕在线观看 | 国产精品久久久久一区二区三区 | 奇米影视777影音先锋 | 国产九九九九九 | 久久综合九色综合网站 | 成人a视频片观看免费 | 五月天天色 | 在线看国产日韩 | 91在线最新 | 一区二区视频电影在线观看 | 国产精品一区在线观看 | 激情五月视频 | 国产一级特黄毛片在线毛片 | www.五月天激情 | 91国内在线视频 | 激情五月六月婷婷 | 99久热 | 久久久精品小视频 | 国产精品青草综合久久久久99 | 成人黄色大片在线免费观看 | 91精品一区在线观看 | 在线观看av网站 | 国产在线理论片 | 久久午夜免费观看 | av永久网址 | 五月婷婷国产 | av色综合网 | 日躁夜躁狠狠躁2001 | 亚洲观看黄色网 | 韩日视频在线 | 在线 高清 中文字幕 | 久久精品网站免费观看 | 亚洲综合视频在线观看 | 日韩午夜视频在线观看 | 久草在线欧美 | 国产欧美日韩视频 | 日韩毛片在线一区二区毛片 | 欧美精品视 | 国产高清在线观看 | 国产又黄又硬又爽 | 国产激情电影综合在线看 | 不卡中文字幕av | av线上免费观看 | 成人毛片a | 久久经典国产视频 | 91人人视频在线观看 | 久久精品99国产精品 | 国产在线一区二区 | 视频一区在线免费观看 | 五月婷婷视频 | 亚洲国产视频网站 | 免费在线观看av的网站 | 久久国产精品99精国产 | 九九在线免费视频 | 亚洲精选在线观看 | 九九九九免费视频 |