private static void GenOverrideFunctionBody(string name, _MethodBase methodBase) { sb.AppendLineEx("\r\n\t[MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]"); sb.AppendFormat("\tstatic int {0}(IntPtr L)\r\n", name); sb.AppendLineEx("\t{"); BeginTry(); sb.AppendLineEx("\t\t\tint count = LuaDLL.lua_gettop(L);"); sb.AppendLineEx(); if (HasAttribute(methodBase.Method, typeof(OverrideDefinedAttribute))) { GenOverrideDefinedFunc(methodBase.Method); sb.AppendFormat("\t\t\treturn 0;\r\n"); } else { int count = methodBase.ProcessParams(3, false, 0); int ret = methodBase.GetReturnType() == typeof(void) ? 0 : 1; sb.AppendFormat("\t\t\treturn {0};\r\n", ret + count); } EndTry(); sb.AppendLineEx("\t}"); }
static void GenOverrideFuncBody(_MethodBase md, bool beIf, int checkTypeOffset) { int offset = md.IsStatic ? 0 : 1; int ret = md.GetReturnType() == typeof(void) ? 0 : 1; string strIf = beIf ? "if " : "else if "; if (HasOptionalParam(md.GetParameters())) { ParameterInfo[] paramInfos = md.GetParameters(); ParameterInfo param = paramInfos[paramInfos.Length - 1]; string str = GetTypeStr(param.ParameterType.GetElementType()); if (paramInfos.Length + offset > 1) { string strParams = md.GenParamTypes(0); sb.AppendFormat("\t\t\t{0}(TypeChecker.CheckTypes<{1}>(L, 1) && TypeChecker.CheckParamsType<{2}>(L, {3}, {4}))\r\n", strIf, strParams, str, paramInfos.Length + offset, GetCountStr(paramInfos.Length + offset - 1)); } else { sb.AppendFormat("\t\t\t{0}(TypeChecker.CheckParamsType<{1}>(L, {2}, {3}))\r\n", strIf, str, paramInfos.Length + offset, GetCountStr(paramInfos.Length + offset - 1)); } } else { ParameterInfo[] paramInfos = md.GetParameters(); if (paramInfos.Length + offset > checkTypeOffset) { string strParams = md.GenParamTypes(checkTypeOffset); sb.AppendFormat("\t\t\t{0}(count == {1} && TypeChecker.CheckTypes<{2}>(L, {3}))\r\n", strIf, paramInfos.Length + offset, strParams, checkTypeOffset + 1); } else { sb.AppendFormat("\t\t\t{0}(count == {1})\r\n", strIf, paramInfos.Length + offset); } } sb.AppendLineEx("\t\t\t{"); int count = md.ProcessParams(4, false, checkTypeOffset); sb.AppendFormat("\t\t\t\treturn {0};\r\n", ret + count); sb.AppendLineEx("\t\t\t}"); }
static void GenFunction(_MethodBase m) { string name = GetMethodName(m.Method); sb.AppendLineEx("\r\n\t[MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]"); sb.AppendFormat("\tstatic int {0}(IntPtr L)\r\n", name == "Register" ? "_Register" : name); sb.AppendLineEx("\t{"); if (HasAttribute(m.Method, typeof(UseDefinedAttribute))) { FieldInfo field = extendType.GetField(name + "Defined"); string strfun = field.GetValue(null) as string; sb.AppendLineEx(strfun); sb.AppendLineEx("\t}"); return; } ParameterInfo[] paramInfos = m.GetParameters(); int offset = m.IsStatic ? 0 : 1; bool haveParams = HasOptionalParam(paramInfos); int rc = m.GetReturnType() == typeof(void) ? 0 : 1; BeginTry(); if (!haveParams) { int count = paramInfos.Length + offset; if (m.Name == "op_UnaryNegation") { count = 2; } sb.AppendFormat("\t\t\tToLua.CheckArgsCount(L, {0});\r\n", count); } else { sb.AppendLineEx("\t\t\tint count = LuaDLL.lua_gettop(L);"); } rc += m.ProcessParams(3, false, int.MaxValue); sb.AppendFormat("\t\t\treturn {0};\r\n", rc); EndTry(); sb.AppendLineEx("\t}"); }