MethodInfo *Assembly::getStaticMethodInfo(const char *name) { utArray<Type *> types; for (UTsize i = 0; i < modules.size(); i++) { modules.at(i)->getTypes(types); for (UTsize j = 0; j < types.size(); j++) { Type *type = types.at(j); MemberTypes types; types.method = true; utArray<MemberInfo *> members; type->findMembers(types, members); for (UTsize k = 0; k < members.size(); k++) { //TODO: this get's the first static main method, at compiler time // we need to verify only one entry per assembly MethodInfo *methodInfo = (MethodInfo *)members.at(k); if (methodInfo->isStatic() && !strcmp(methodInfo->getName(), name)) { return methodInfo; } } } types.clear(); } return NULL; }
void LSLuaState::invokeStaticMethod(const utString& typePath, const char *methodName, int numParameters) { Type *type = getType(typePath.c_str()); lmAssert(type, "LSLuaState::invokeStaticMethod unknown type: %s", typePath.c_str()); MemberInfo *member = type->findMember(methodName); lmAssert(member, "LSLuaState::invokeStaticMethod unknown member: %s:%s", typePath.c_str(), methodName); if (!member->isMethod()) { lmAssert(0, "LSLuaState::invokeStaticMethod member: %s:%s is not a method", typePath.c_str(), methodName); } MethodInfo *method = (MethodInfo *)member; lmAssert(method->isStatic(), "LSLuaState::invokeStaticMethod member: %s:%s is not a static method", typePath.c_str(), methodName); method->invoke(NULL, numParameters); }