Example #1
0
        public void LoadProto(int idx)
        {
            var proto   = stack.closure.proto.Protos[idx];
            var closure = Closure.newLuaClosure(proto);

            stack.push(closure);

            for (int i = 0; i < proto.Upvalues.Length; i++)
            {
                var uvInfo = proto.Upvalues[i];
                int uvIdx  = uvInfo.Idx;
                if (uvInfo.Instack == 1)
                {
                    if (stack.openuvs == null)
                    {
                        stack.openuvs = new Dictionary <int, Upvalue>();
                    }

                    if (stack.openuvs.ContainsKey(uvIdx))
                    {
                        closure.upvals[i] = stack.openuvs[uvIdx];
                    }
                    else
                    {
                        closure.upvals[i] = new Upvalue(stack, uvIdx);
                        stack.openuvs.Add(uvIdx, closure.upvals[i]);
                    }
                }
                else
                {
                    closure.upvals[i] = stack.closure.upvals[uvIdx];
                }
            }
        }
Example #2
0
        public int Load(ref byte[] chunk, string chunkName, string mode)
        {
            var proto = binchunk.BinaryChunk.Undump(chunk);
            var c     = Closure.newLuaClosure(proto);

            stack.push(c);
            return(0);
        }
Example #3
0
        public int Load(ref byte[] chunk, string chunkName, string mode)
        {
            var proto = BinaryChunk.Undump(chunk);
            var c     = Closure.newLuaClosure(proto);

            stack.push(c);
            if (proto.Upvalues.Length > 0)
            {
                var env = registry.get(Consts.LUA_RIDX_GLOBALS);
                c.upvals[0] = new Upvalue(env);
            }

            return(0);
        }
Example #4
0
        public void LoadProto(int idx)
        {
            var subProto = stack.closure.proto.Protos[idx];
            var closure  = Closure.newLuaClosure(subProto);

            stack.push(closure);
            for (var i = 0; i < subProto.Upvalues.Length; i++)
            {
                var uvInfo = subProto.Upvalues[i];
                var uvIdx  = (int)uvInfo.Idx;
                if (uvInfo.Instack == 1)
                {
                    if (stack.openuvs == null)
                    {
                        stack.openuvs = new Dictionary <int, Upvalue>();
                    }

                    if (stack.openuvs.ContainsKey(uvIdx))
                    {
                        var openuv = stack.openuvs[uvIdx];
                        closure.upvals[i] = openuv;
                    }
                    else
                    {
                        closure.upvals[i] = new Upvalue {
                            val = stack.slots[uvIdx]
                        };
                        stack.openuvs[uvIdx] = closure.upvals[i];
                    }
                }
                else
                {
                    closure.upvals[i] = stack.closure.upvals[uvIdx];
                }
            }
        }