public void AddFunc(LuaFuncDescriptor pFunc) { if (this.PackageFuncs == null) { this.PackageFuncs = new Hashtable(); } this.PackageFuncs.Add(pFunc.getFuncName(), pFunc); }
public static void registerLuaFunctions(string strPackage, object pTarget, string strPkgDoc) { if (((pLuaVM != null) && (pLuaFuncs != null)) && (pLuaPackages != null)) { LuaPackageDescriptor descriptor = null; if (strPackage != null) { pLuaVM.DoString(strPackage + " = {}"); descriptor = new LuaPackageDescriptor(strPackage, strPkgDoc); } Type type = pTarget.GetType(); foreach (MethodInfo info in type.GetMethods()) { foreach (Attribute attribute in Attribute.GetCustomAttributes(info)) { if (attribute.GetType() == typeof(AttrLuaFunc)) { AttrLuaFunc func = (AttrLuaFunc)attribute; ArrayList strParams = new ArrayList(); ArrayList strParamDocs = new ArrayList(); string strFuncName = func.getFuncName(); string strFuncDoc = func.getFuncDoc(); string[] strArray = func.getFuncParams(); ParameterInfo[] parameters = info.GetParameters(); if ((strArray != null) && (parameters.Length != strArray.Length)) { Console.WriteLine(string.Concat(new object[] { "Function ", info.Name, " (exported as ", strFuncName, ") argument number mismatch. Declared ", strArray.Length, " but requires ", parameters.Length, "." })); break; } for (int i = 0; i < parameters.Length; i++) { strParams.Add(parameters[i].Name); strParamDocs.Add(strArray[i]); } LuaFuncDescriptor pFunc = new LuaFuncDescriptor(strFuncName, strFuncDoc, strParams, strParamDocs); if (descriptor != null) { descriptor.AddFunc(pFunc); pLuaVM.RegisterFunction(strPackage + strFuncName, pTarget, info); pLuaVM.DoString(strPackage + "." + strFuncName + " = " + strPackage + strFuncName); pLuaVM.DoString(strPackage + strFuncName + " = nil"); } else { pLuaFuncs.Add(strFuncName, pFunc); pLuaVM.RegisterFunction(strFuncName, pTarget, info); } } } } if (descriptor != null) { pLuaPackages.Add(strPackage, descriptor); } } }