Пример #1
0
 static Lua.Proto combine(Lua.LuaState L, int n)
 {
     if (n == 1)
     {
         return(toproto(L, -1));
     }
     else
     {
         int       i, pc;
         Lua.Proto f = Lua.luaF_newproto(L);
         Lua.setptvalue2s(L, L.top, f); Lua.incr_top(L);
         f.source       = Lua.luaS_newliteral(L, "=(" + PROGNAME + ")");
         f.maxstacksize = 1;
         pc             = 2 * n + 1;
         f.code         = (Instruction[])Lua.luaM_newvector <Instruction>(L, pc);
         f.sizecode     = pc;
         f.p            = Lua.luaM_newvector <Lua.Proto>(L, n);
         f.sizep        = n;
         pc             = 0;
         for (i = 0; i < n; i++)
         {
             f.p[i]       = toproto(L, i - n - 1);
             f.code[pc++] = (uint)Lua.CREATE_ABx(Lua.OpCode.OP_CLOSURE, 0, i);
             f.code[pc++] = (uint)Lua.CREATE_ABC(Lua.OpCode.OP_CALL, 0, 1, 1);
         }
         f.code[pc++] = (uint)Lua.CREATE_ABC(Lua.OpCode.OP_RETURN, 0, 1, 0);
         return(f);
     }
 }
Пример #2
0
        public static int decompileFunction(LuaState L)
        {
            Decompiler.Decompiler d = new Decompiler.Decompiler();
            Lua.Proto             p = Pget(L, 1);
            if (p == null)
            {
                lua_pushstring(L, "not a Lua function");
            }
            string s = d.Decompile(p);

            //Console.WriteLine(s);
            lua_pushstring(L, s);
            return(1);
        }