예제 #1
0
        internal void SetClLValue(LuaLClosureValue v)
        {
#if DEBUG_DUMMY_TVALUE_MODIFY
            CheckLock();
#endif
            Tt          = (int)LuaType.LUA_TFUNCTION;
            NValue      = 0.0;
            UInt64Value = CLOSURE_LUA;
            OValue      = v;
        }
예제 #2
0
        private void V_PushClosure(LuaProto p, LuaUpvalue[] encup, int stackBase, StkId ra)
        {
            var ncl = new LuaLClosureValue(p);

            ra.V.SetClLValue(ncl);
            for (int i = 0; i < p.Upvalues.Count; ++i)
            {
                // ULDebug.Log( "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ V_PushClosure i:" + i );
                // ULDebug.Log( "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ V_PushClosure InStack:" + p.Upvalues[i].InStack );
                // ULDebug.Log( "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ V_PushClosure Index:" + p.Upvalues[i].Index );

                if (p.Upvalues[i].InStack)                  // upvalue refers to local variable
                {
                    ncl.Upvals[i] = F_FindUpval(
                        Stack[stackBase + p.Upvalues[i].Index]);
                }
                else                    // get upvalue from enclosing function
                {
                    ncl.Upvals[i] = encup[p.Upvalues[i].Index];
                }
            }
        }