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); }
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); }
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); }