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);
	}
}
Exemple #2
0
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;
}