void buildRoutineList (SymTableNodePtr curSymbol, ModuleInfo* moduleInfo) { if (curSymbol) { buildRoutineList(curSymbol->left, moduleInfo); if (curSymbol->defn.key == DFN_FUNCTION) { if (moduleInfo->numRoutines < 1024) { strcpy(moduleInfo->routineInfo[moduleInfo->numRoutines].name, curSymbol->name); moduleInfo->routineInfo[moduleInfo->numRoutines].codeSegmentSize = curSymbol->defn.info.routine.codeSegmentSize; moduleInfo->numRoutines++; } } buildRoutineList(curSymbol->right, moduleInfo); } }
void ABLModule::getInfo(ModuleInfo* moduleInfo) { int32_t i; strcpy(moduleInfo->name, name); strcpy(moduleInfo->fileName, ModuleRegistry[handle].fileName); moduleInfo->numRoutines = 0; buildRoutineList(ModuleRegistry[handle].moduleIdPtr->defn.info.routine.localSymTable, moduleInfo); for(i = 0; i < moduleInfo->numRoutines; i++) moduleInfo->totalCodeSegmentSize += moduleInfo->routineInfo[i].codeSegmentSize; moduleInfo->numStaticVars = ModuleRegistry[handle].numStaticVars; moduleInfo->totalSizeStaticVars = ModuleRegistry[handle].totalSizeStaticVars; int32_t largest = 0; for(i = 0; i < moduleInfo->numStaticVars; i++) { if(ModuleRegistry[handle].sizeStaticVars[i] > ModuleRegistry[handle].sizeStaticVars[largest]) largest = i; } moduleInfo->largestStaticVar.size = 0; if(ModuleRegistry[handle].sizeStaticVars) moduleInfo->largestStaticVar.size = ModuleRegistry[handle].sizeStaticVars[largest]; moduleInfo->largestStaticVar.name[0] = nullptr; }