AGS.Plugin.Lua.LuaDotNetObjectProxy.__Index C# (CSharp) Метод

__Index() приватный Метод

private __Index ( IntPtr L ) : int
L System.IntPtr
Результат int
        private int __Index(lua_State L)
        {
            switch(InvokeLua.lua_type(L,1))
            {
                case InvokeLua.LUA_TSTRING:
                    string memberName = InvokeLua.lua_tostring(L, 1);
                    MemberInfo[] members = proxy_type.GetMember(memberName);
                    List<MethodInfo> methods = new List<MethodInfo>();
                    foreach (MemberInfo member in members)
                    {
                        switch (member.MemberType)
                        {
                            case MemberTypes.Field:
                                return PushField(L, (FieldInfo)member);
                            case MemberTypes.Property:
                                return PushProperty(L, (PropertyInfo)member);
                            case MemberTypes.Method:
                                LuaDotNetMethodProxy methodProxy;
                                if (proxiedMethods.TryGetValue(memberName, out methodProxy))
                                {
                                    methodProxy.Push(L);
                                    return 1;
                                }
                                MethodInfo method = (MethodInfo)member;
                                if (method.IsSpecialName || !method.IsPublic)
                                {
                                    continue;
                                }
                                methods.Add(method);
                                return 0;
                        }
                    }
                    if (methods.Count != 0)
                    {
                        GetMethodProxy(L, memberName, methods.ToArray());
                        return 1;
                    }
                    return 0;
                case InvokeLua.LUA_TNUMBER:
                    if (proxy_type.IsArray)
                    {
                        int idx = (int)InvokeLua.lua_tonumber(L,1);
                        if (idx < 0 || idx >= ((Array)proxy_for).Length) {
                            return 0;
                        }
                        PushValue(L, ((Array)proxy_for).GetValue(idx), proxied, proxiedByUserdata);
                        return 1;
                    }
                    else
                    {
                        proxy_type.GetProperty("Values");
                    }
                    return 0;
                default:
                    return 0;
            }
        }