void freeModule(Module m) { Symbol s; if (m == NULL) return; if ((s = findSymbolInModule(m, "epilogue")) != NULL) { InstrPtr pci = getInstrPtr(s->def,0); if (pci && pci->token == COMMANDsymbol && pci->argc == 1) { int ret = 0; assert(pci->fcn != NULL); (*pci->fcn)(&ret); (void)ret; } } #ifdef _DEBUG_MODULE_ fprintf(stderr,"#freeModue %s \n", m->name); #endif freeSubScope(m); if (strcmp(m->name, "user")) { clrModuleIndex(m); } if (m->help) GDKfree(m->help); GDKfree(m); }
str shutdownFactoryByName(Client cntxt, Module m, str nme){ Plant pl, plim; InstrPtr p; Symbol s; plim = plants + lastPlant; for (pl = plants; pl < plim; pl++) if (pl->factory ) { MalStkPtr stk; p= getInstrPtr(pl->factory,0); if( strcmp(nme, getFunctionId(p)) != 0) continue; s = findSymbolInModule(m, nme ); if (s == NULL){ throw(MAL, "factory.remove", OPERATION_FAILED " SQL entry '%s' not found", putName(nme)); } stk = pl->stk; MSresetVariables(cntxt, pl->factory, stk, 0); shutdownFactory(cntxt, pl->factory); freeStack(stk); deleteSymbol(m,s); return MAL_SUCCEED; } return MAL_SUCCEED; }
str SQLCacheRemove(Client c, str nme) { Symbol s; #ifdef _SQL_CACHE_DEBUG mnstr_printf(GDKout, "#SQLCacheRemove %s\n", nme); #endif s = findSymbolInModule(c->nspace, nme); if (s == NULL) throw(MAL, "cache.remove", "internal error, symbol missing\n"); if (getInstrPtr(s->def, 0)->token == FACTORYsymbol) shutdownFactoryByName(c, c->nspace, nme); else deleteSymbol(c->nspace, s); return MAL_SUCCEED; }
Symbol findSymbol(Module usermodule, str mod, str fcn) { Module m = findModule(usermodule, mod); return findSymbolInModule(m, fcn); }