Ejemplo n.º 1
0
        static int MetaNewIndexFunctionInternal(lua_State L)
        {
            var isIndexingClassObject = IsIndexingClassObject(L);

            System.Type typeObject = null;
            if (isIndexingClassObject)
            {
                typeObject = (System.Type)Lua.ObjectAtInternal(L, 1);
            }

            object thisObject = null;

            if (!isIndexingClassObject)
            {
                thisObject = Lua.ObjectAtInternal(L, 1);
                typeObject = thisObject.GetType();
            }

            Lua.Assert(typeObject != null, "Should has a type.");

            if (Api.lua_isnumber(L, 2))
            {
                if (typeObject != null && typeObject.IsArray)
                {
                    var array = (System.Array)thisObject;
                    var value = Lua.ValueAtInternal(L, 3);
                    var index = (int)Api.lua_tointeger(L, 2);
                    array.SetValue(Lua.ConvertTo(value, typeObject.GetElementType()), index);
                }
                else
                {
                    Lua.SetValueAtIndexOfObject(L, thisObject, typeObject, new object[] { (int)Api.lua_tointeger(L, 2) }, Lua.ValueAtInternal(L, 3));
                }
            }
            else if (Api.lua_isstring(L, 2))
            {
                Lua.SetMember(L, thisObject, typeObject, Api.lua_tostring(L, 2), Lua.ValueAtInternal(L, 3), hasPrivatePrivillage: false);
            }
            else if (Api.lua_istable(L, 2))
            {
                var host = Lua.CheckHost(L);
                using (var p = LuaTable.MakeRefTo(host, 2))
                {
                    using (var ret = host.testPrivillage.InvokeMultiRet(p))
                    {
                        var name = (string)ret[1];
                        Lua.SetMember(L, thisObject, typeObject, name, Lua.ValueAtInternal(L, 3), hasPrivatePrivillage: true);
                    }
                }
            }
            else
            {
                Lua.SetValueAtIndexOfObject(L, thisObject, typeObject, new object[] { Lua.ValueAtInternal(L, 2) }, Lua.ValueAtInternal(L, 3));
            }
            return(0);
        }
Ejemplo n.º 2
0
 ReturnType GenericFunc <T1, T2, T3, ReturnType>(T1 arg1, T2 arg2, T3 arg3)
 {
     return((ReturnType)Lua.ConvertTo(func.Invoke1(arg1, arg2, arg3), typeof(ReturnType)));
 }
Ejemplo n.º 3
0
 ReturnType GenericFunc <T1, ReturnType>(T1 arg1)
 {
     return((ReturnType)Lua.ConvertTo(func.Invoke1(arg1), typeof(ReturnType)));
 }
Ejemplo n.º 4
0
 ReturnType GenericFunc <ReturnType>()
 {
     return((ReturnType)Lua.ConvertTo(func.Invoke1(), typeof(ReturnType)));
 }