void mlmTransform::insertHeaders(SgProject* project) { Rose_STL_Container<SgNode*> globalList = NodeQuery::querySubTree (project,V_SgGlobal); for(Rose_STL_Container<SgNode*>::iterator i = globalList.begin(); i != globalList.end(); i++) { SgGlobal* global = isSgGlobal(*i); ROSE_ASSERT(global); PreprocessingInfo* headerInfo = insertHeader("mlm.h",PreprocessingInfo::after,false,global); headerInfo->set_file_info(global->get_file_info()); } return; //assume always successful currently }
void f2cTraversal::visit(SgNode* n) { /* 1. The following switch statement search for the Fortran-specific AST nodes and transform them into C nodes. 2. The new C nodes are created first. Attributes and details are then copied from original Fortran nodes. After the copy, original Fortran nodes are deleted. */ switch(n->variantT()) { case V_SgSourceFile: { SgFile* fileNode = isSgFile(n); translateFileName(fileNode); break; } case V_SgProgramHeaderStatement: { SgProgramHeaderStatement* ProgramHeaderStatement = isSgProgramHeaderStatement(n); ROSE_ASSERT(ProgramHeaderStatement); translateProgramHeaderStatement(ProgramHeaderStatement); // Deep delete the original Fortran SgProgramHeaderStatement removeList.push_back(ProgramHeaderStatement); break; } case V_SgProcedureHeaderStatement: { SgProcedureHeaderStatement* procedureHeaderStatement = isSgProcedureHeaderStatement(n); ROSE_ASSERT(procedureHeaderStatement); translateProcedureHeaderStatement(procedureHeaderStatement); // Deep delete the original Fortran procedureHeaderStatement. removeList.push_back(procedureHeaderStatement); break; } case V_SgFortranDo: { SgFortranDo* fortranDo = isSgFortranDo(n); ROSE_ASSERT(fortranDo); translateFortranDoLoop(fortranDo); // Deep delete the original fortranDo . removeList.push_back(fortranDo); break; } case V_SgFunctionCallExp: { SgFunctionCallExp* functionCallExp = isSgFunctionCallExp(n); ROSE_ASSERT(functionCallExp); translateImplicitFunctionCallExp(functionCallExp); break; } case V_SgExponentiationOp: { SgExponentiationOp* expOp = isSgExponentiationOp(n); ROSE_ASSERT(expOp); translateExponentiationOp(expOp); break; } case V_SgFloatVal: { SgFloatVal* floatVal = isSgFloatVal(n); ROSE_ASSERT(floatVal); translateDoubleVal(floatVal); break; } case V_SgCommonBlock: { SgCommonBlock* commonBlock = isSgCommonBlock(n); ROSE_ASSERT(commonBlock); //translateCommonBlock(commonBlock); break; } case V_SgGlobal: { SgGlobal* global = isSgGlobal(n); ROSE_ASSERT(global); removeFortranMaxMinFunction(global); PreprocessingInfo* defMaxInfo = new PreprocessingInfo(PreprocessingInfo::CpreprocessorDefineDeclaration, "#define max(a,b) (((a)>(b))?(a):(b))", "Transformation generated", 0, 0, 0, PreprocessingInfo::before); defMaxInfo->set_file_info(global->get_file_info()); global->addToAttachedPreprocessingInfo(defMaxInfo,PreprocessingInfo::before); PreprocessingInfo* defMinInfo = new PreprocessingInfo(PreprocessingInfo::CpreprocessorDefineDeclaration, "#define min(a,b) (((a)<(b))?(a):(b))", "Transformation generated", 0, 0, 0, PreprocessingInfo::before); defMinInfo->set_file_info(global->get_file_info()); global->addToAttachedPreprocessingInfo(defMinInfo,PreprocessingInfo::before); break; } default: break; } }