static int MatchOperator (LuaState luaState, string operation, ObjectTranslator translator) { var validOperator = new MethodCache (); object target = GetTargetObject (luaState, operation, translator); if (target == null) { translator.ThrowError (luaState, "Cannot call " + operation + " on a nil object"); LuaLib.LuaPushNil (luaState); return 1; } Type type = target.GetType (); var operators = type.GetMethods (operation, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static); foreach (var op in operators) { bool isOk = translator.MatchParameters (luaState, op, ref validOperator); if (!isOk) continue; object result; if (op.IsStatic) result = op.Invoke (null, validOperator.args); else result = op.Invoke (target, validOperator.args); translator.Push (luaState, result); return 1; } translator.ThrowError (luaState, "Cannot call (" + operation + ") on object type " + type.Name); LuaLib.LuaPushNil (luaState); return 1; }