void Assembly::bootstrap() { utArray<Type *> types; getTypes(types); Type *btype = vm->getType("system.Bootstrap"); for (UTsize i = 0; i < types.size(); i++) { Type *type = types[i]; if (type->getFullName() == "system.Null") { continue; } if (type->castToType(btype)) { MemberInfo *mi = type->findMember("initialize"); assert(mi); assert(mi->isMethod()); MethodInfo *method = (MethodInfo *)mi; method->invoke(NULL, 0); } } }
void Assembly::connectToDebugger(const char *host, int port) { if (!vm) { LSError("Assembly::connectToDebugger called on uninitialized assembly"); } Type *debuggerClient = vm->getType("system.debugger.DebuggerClient"); if (!debuggerClient) { LSError("Unable to get system.debugger.DebuggerClient"); } MethodInfo *method = debuggerClient->findMethodInfoByName("connect"); if (!method) { LSError("Unable to get system.debugger.DebuggerClient.connect method"); } lua_pushstring(vm->VM(), host); lua_pushnumber(vm->VM(), port); method->invoke(NULL, 2); }
void Assembly::execute() { MethodInfo *method = getStaticMethodInfo("main"); if (!method) { LSError("Unable to find main method in Assembly %s", getName().c_str()); } method->invoke(NULL, 0); }
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); }
// entry point when the first call to the method is late bound. /*static*/ Atom MethodInfo::verifyCoerceEnter(MethodEnv* env, int argc, Atom* args) { MethodInfo* f = env->method; #ifdef AVMPLUS_VERIFYALL // never verify late in verifyall mode AvmAssert(!f->pool()->core->config.verifyall); #endif f->verify(env->toplevel(), env->abcEnv()); #if VMCFG_METHODENV_IMPL32 // we got here by calling env->_implGPR, which now is pointing to verifyEnter(), // but next time we want to call the real code, not verifyEnter again. // All other MethodEnv's in their default state will call the target method // directly and never go through verifyEnter(). env->_implGPR = f->implGPR(); #endif AvmAssert(f->_invoker != MethodInfo::verifyCoerceEnter); return f->invoke(env, argc, args); }