Rose2xaif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
CFGcanon.cpp
Go to the documentation of this file.
1 /*
2  * CFGcanon.cpp
3  *
4  * Created on: Aug 13, 2012
5  * Author: utke
6  */
7 
8 #include "Fortran/CFGcanon.hpp"
10 
11 namespace rose2xaif {
12  namespace fortran {
13 
14  void CFGcanon::collectLanguageSpecific(SgNode* node_p) {
15  if (!node_p) {
16  THROW_LOGICEXCEPTION_MACRO("CFGcanon::visit: NULL pointer passed");
17  }
18  if(SgFortranDo* anSgFortranDo_p=isSgFortranDo(node_p)) {
19  // mySgScopeStatementSet.insert(anSgFortranDo_p);
20  }
21  }
22  void CFGcanon::massageCFG(SgNode* node_p) {
23  if (!node_p) {
24  THROW_LOGICEXCEPTION_MACRO("CFGcanon::visit: NULL pointer passed");
25  }
26  if(SgFunctionDefinition* anSgFunctionDefinition_p=isSgFunctionDefinition(node_p)) {
27  if (isSgProcedureHeaderStatement(anSgFunctionDefinition_p->get_parent())->isSubroutine()) {
28  SgStatementPtrList& stmts=anSgFunctionDefinition_p->get_body()->get_statements();
29  if (stmts.rbegin()!=stmts.rend() && isSgReturnStmt(*(stmts.rbegin()))) {
30  stmts.pop_back(); // remove trailing return
31  }
32  }
33  }
34  }
35  }
36 }
37 
38