示例#1
0
        public static UpVal luaF_findupval(lua_State L, int level)
        {
            TValue sl = L.stack[level];
            UpVal  pp = L.openupval;
            UpVal  p;

            lua_assert(isintwups(L) || L.openupval == null);
            while (pp != null && pp.level >= level)
            {
                p = pp;
                lua_assert(upisopen(p));
                if (p.level == level) /* found a corresponding upvalue? */
                {
                    return(p);        /* return it */
                }
                pp = p.u.open.next;
            }

            /* not found: create a new upvalue */
            UpVal uv = luaM_newobject <UpVal> (L);

            uv.refcount       = 0;
            uv.u.open.next    = pp.u.open.next; /* link it to list of open upvalues */
            pp.u.open.next    = uv;
            uv.u.open.touched = 1;
            uv.v     = sl;               /* current value lives in the stack */
            uv.level = level;
            if (isintwups(L) == false)   /* thread not in list of threads with upvalues? */
            {
                L.twups    = G(L).twups; /* link it to the list */
                G(L).twups = L;
            }
            return(uv);
        }
示例#2
0
        public static CClosure luaF_newCclosure(lua_State L, int n)
        {
            CClosure c = luaC_newobj <CClosure> (L, LUA_TCCL);

            c.nupvalues = (byte)n;
            return(c);
        }
示例#3
0
        public static LClosure luaF_newLclosure(lua_State L, int n)
        {
            LClosure c = luaC_newobj <LClosure> (L, LUA_TLCL);

            c.p         = null;
            c.nupvalues = (byte)n;
            c.upvals    = luaM_emptyvector <UpVal> (L, n);
            return(c);
        }
示例#4
0
 public static void luaF_freeproto(lua_State L, Proto f)
 {
     luaM_freearray(L, f.code);
     luaM_freearray(L, f.p);
     luaM_freearray(L, f.k);
     luaM_freearray(L, f.lineinfo);
     luaM_freearray(L, f.locvars);
     luaM_freearray(L, f.upvalues);
     luaM_free(L, f);
 }
示例#5
0
 /*
 ** fill a closure with new closed upvalues
 */
 public static void luaF_initupvals(lua_State L, LClosure cl)
 {
     for (int i = 0; i < cl.nupvalues; i++)
     {
         UpVal uv = luaM_newobject <UpVal> (L);
         uv.refcount = 1;
         uv.v        = uv.u.value; /* make it closed */
         setnilvalue(uv.v);
         cl.upvals[i] = uv;
     }
 }
示例#6
0
 public static void luaF_close(lua_State L, int level)
 {
     while (L.openupval != null && L.openupval.level >= level)
     {
         UpVal uv = L.openupval;
         lua_assert(upisopen(uv));
         L.openupval = uv.u.open.next; /* remove from 'open' list */
         if (uv.refcount == 0)         /* no references? */
         {
             luaM_free(L, uv);         /* free upvalue */
         }
         else
         {
             setobj(L, uv.u.value, uv.v); /* move value to upvalue slot */
             uv.v = uv.u.value;           /* now current value lives here */
             luaC_upvalbarrier(L, uv);
         }
     }
 }
示例#7
0
 /* test whether thread is in 'twups' list */
 public static bool isintwups(lua_State L)
 {
     return(L.twups != L);
 }
示例#8
0
        public static Proto luaF_newproto(lua_State L)
        {
            Proto f = luaC_newobj <Proto> (L, LUA_TPROTO);

            return(f);
        }
示例#9
0
 public static void luai_userstateopen(lua_State L)
 {
 }
示例#10
0
 public static void condmovestack(lua_State L)
 {
 }
示例#11
0
 public static void luai_userstateyield(lua_State L, int n)
 {
 }
示例#12
0
 public static void luai_userstateresume(lua_State L, int n)
 {
 }
示例#13
0
 public static void luai_userstatefree(lua_State L, lua_State L1)
 {
 }
示例#14
0
 public static void luai_userstatethread(lua_State L, lua_State L1)
 {
 }
示例#15
0
 public static void luai_userstateclose(lua_State L)
 {
 }
示例#16
0
 public static void condchangemem(lua_State L)
 {
     condmovestack(L);
 }
示例#17
0
 public static void lua_unlock(lua_State L)
 {
 }