Exemplo n.º 1
0
        private int GetConstructorSignatureInternal(LuaState luaState)
        {
            ProxyType klass = null;
            int       udata = LuaLib.LuaNetCheckUData(luaState, 1, "luaNet_class");

            if (udata != -1)
            {
                klass = (ProxyType)objects [udata];
            }

            if (klass == null)
            {
                ThrowError(luaState, "get_constructor_bysig: first arg is invalid type reference");
            }

            var signature = new Type[LuaLib.LuaGetTop(luaState) - 1];

            for (int i = 0; i < signature.Length; i++)
            {
                signature [i] = FindType(LuaLib.LuaToString(luaState, i + 2).ToString());
            }

            try {
                ConstructorInfo constructor = klass.UnderlyingSystemType.GetConstructor(signature);
                PushFunction(luaState, new LuaNativeFunction((new LuaMethodWrapper(this, null, klass, constructor)).invokeFunction));
            } catch (Exception e) {
                ThrowError(luaState, e);
                LuaLib.LuaPushNil(luaState);
            }

            return(1);
        }
Exemplo n.º 2
0
        private Type TypeOf(LuaState luaState, int idx)
        {
            int udata = LuaLib.LuaNetCheckUData(luaState, 1, "luaNet_class");

            if (udata == -1)
            {
                return(null);
            }

            ProxyType pt = (ProxyType)objects [udata];

            return(pt.UnderlyingSystemType);
        }
Exemplo n.º 3
0
        private int GetMethodSignatureInternal(LuaState luaState)
        {
            IReflect klass;
            object   target;
            int      udata = LuaLib.LuaNetCheckUData(luaState, 1, "luaNet_class");

            if (udata != -1)
            {
                klass  = (IReflect)objects [udata];
                target = null;
            }
            else
            {
                target = GetRawNetObject(luaState, 1);

                if (target == null)
                {
                    ThrowError(luaState, "get_method_bysig: first arg is not type or object reference");
                    LuaLib.LuaPushNil(luaState);
                    return(1);
                }

                klass = target.GetType();
            }

            string methodName = LuaLib.LuaToString(luaState, 2).ToString();
            var    signature  = new Type[LuaLib.LuaGetTop(luaState) - 2];

            for (int i = 0; i < signature.Length; i++)
            {
                signature [i] = FindType(LuaLib.LuaToString(luaState, i + 3).ToString());
            }

            try {
                //CP: Added ignore case
                var method = klass.GetMethod(methodName, BindingFlags.Public | BindingFlags.Static |
                                             BindingFlags.Instance | BindingFlags.FlattenHierarchy | BindingFlags.IgnoreCase, null, signature, null);
                PushFunction(luaState, new LuaNativeFunction((new LuaMethodWrapper(this, target, klass, method)).invokeFunction));
            } catch (Exception e) {
                ThrowError(luaState, e);
                LuaLib.LuaPushNil(luaState);
            }

            return(1);
        }