3#include "markLhsValues.h" 
    5#include "FileUtility.h" 
    6#include <Sawyer/Message.h> 
    8#include "AstJSONGeneration.h" 
   10#include "SgNodeHelper.h"  
   12#include "Rose/AST/Utility.h" 
   14#include "sageInterface.h" 
   15#include "Combinatorics.h" 
   18#ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT 
   19#include "replaceExpressionWithStatement.h" 
   21#include "constantFolding.h" 
   28#include "sageBuilder.h" 
   34#ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT 
   37#include "AstInterface_ROSE.h" 
   38#include "LoopTransformInterface.h" 
   40#include "DepInfoAnal.h"  
   41#include "ArrayAnnot.h" 
   42#include "ArrayInterface.h" 
   44#include "LoopUnroll.h" 
   45#include "abstract_handle.h" 
   46#include "roseAdapter.h" 
   49#include <boost/lexical_cast.hpp> 
   50#include <boost/foreach.hpp> 
   56#include <unordered_map> 
   58#ifdef ROSE_BUILD_JAVA_LANGUAGE_SUPPORT 
   66                extern jclass currentJavaTraversalClass;
 
   67                extern JNIEnv *currentEnvironment;
 
   68                extern jmethodID mainMethod;
 
   69                extern jmethodID hasConflictsMethod;
 
   70                extern jmethodID getTempDirectoryMethod;
 
   71                extern jmethodID createTempFileMethod;
 
   72                extern jmethodID createTempNamedFileMethod;
 
   73                extern jmethodID createTempNamedDirectoryMethod;
 
   80using namespace Rose::Frontend::Java::Ecj;
 
   85#include "rose_config.h" 
   88namespace EDG_ROSE_Translation
 
   91#if defined(ROSE_BUILD_CXX_LANGUAGE_SUPPORT) && !defined(ROSE_USE_CLANG_FRONTEND) 
   93     extern std::map<std::string, SgIncludeFile*> edg_include_file_map;
 
   96     std::map<std::string, SgIncludeFile*> edg_include_file_map;
 
  103#include "detectMacroOrIncludeFileExpansions.h" 
  106  template<
class T> 
void setSourcePositionToDefault( T* node );
 
  110#ifdef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT 
  111   #include "transformationSupport.h" 
  119#include "AST_FILE_IO.h" 
  124#define OPTIMIZE_IS_LANGUAGE_KIND_FUNCTIONS 1 
  134typedef std::set<SgLabelStatement*> SgLabelStatementPtrSet;
 
  153     vector<SgBasicBlock*> addedBasicBlockNodes;
 
  170               std::vector<SgNode*> resultlist;
 
  171               void visit ( 
SgNode* node)
 
  174                    ROSE_ASSERT(result != NULL);
 
  176                    printf (
"In SageInterface::deleteAllNodes(): result = %p = %s \n",result,result->
class_name().c_str());
 
  181                         resultlist.push_back(result);
 
  184                    resultlist.push_back(result);
 
  188           virtual ~MyTraversal() {}
 
  192     size_t numberOfNodes_before = numberOfNodes();
 
  194     MyTraversal my_traversal;
 
  198     my_traversal.traverseMemoryPool();
 
  204     vector<SgNode*> & nodeList = my_traversal.resultlist;
 
  206     printf (
"In SageInterface::deleteAllNodes(): get list of SgNode: nodeList.size() = %zu \n",nodeList.size());
 
  208     vector<SgNode*>::iterator i = nodeList.begin();
 
  211     while (i != nodeList.end())
 
  217          printf (
" --- calling delete (and thus the destructor) node = %p = %s \n",node,node->
class_name().c_str());
 
  227     vector<SgFunctionDeclaration*> functionDeclarationList = getSgNodeListFromMemoryPool<SgFunctionDeclaration>();
 
  228     printf (
"In SageInterface::deleteAllNodes(): get list of SgFunctionDeclaration: functionDeclarationList.size() = %zu \n",functionDeclarationList.size());
 
  232     AST_FILE_IO::clearAllMemoryPools();
 
  234     size_t numberOfNodes_after = numberOfNodes();
 
  237     printf (
"Leaving SageInterface::deleteAllNodes(): numberOfNodes_before = %zu numberOfNodes_after = %zu \n",numberOfNodes_before,numberOfNodes_after);
 
 
  266               void visit ( 
SgNode* node)
 
  273                    resultlist.push_back(result);
 
  276           virtual ~MyTraversal() {}
 
  280     size_t numberOfNodes_before = numberOfNodes();
 
  282     MyTraversal my_traversal;
 
  286     my_traversal.traverseMemoryPool();
 
  295     ASSERT_not_null(decl);
 
  298     printf (
"TOP of SageInterface::DeclarationSets::addDeclaration(): decl = %p = %s = %s \n",decl,decl->
class_name().c_str(),
get_name(decl).c_str());
 
  303     if (firstNondefiningDeclaration == 
nullptr)
 
  307          printf (
"WARNING: SageInterface::DeclarationSets::addDeclaration(): firstNondefiningDeclaration == NULL: decl = %p = %s = %s \n",decl,decl->
class_name().c_str(),
get_name(decl).c_str());
 
  311     ASSERT_not_null(firstNondefiningDeclaration);
 
  313     if (decl == firstNondefiningDeclaration)
 
  316          if (isSgTypedefDeclaration(decl) != 
nullptr)
 
  318               printf (
"TOP of SageInterface::DeclarationSets::addDeclaration(): decl = %p = %s = %s \n",decl,decl->
class_name().c_str(),
get_name(decl).c_str());
 
  321          if (declarationMap.find(firstNondefiningDeclaration) == declarationMap.end())
 
  324               printf (
"In SageInterface::DeclarationSets::addDeclaration(): Add a set for decl = %p = %s = %s \n",decl,decl->
class_name().c_str(),
get_name(decl).c_str());
 
  327               if (isSgTypedefDeclaration(decl) != 
nullptr)
 
  329                    printf (
"In SageInterface::DeclarationSets::addDeclaration(): Add a set for decl = %p = %s = %s \n",decl,decl->
class_name().c_str(),
get_name(decl).c_str());
 
  333               declarationMap[decl] = 
new set<SgDeclarationStatement*>();
 
  335               ROSE_ASSERT (declarationMap.find(firstNondefiningDeclaration) != declarationMap.end());
 
  336               ROSE_ASSERT(declarationMap[decl] != 
nullptr);
 
  339               declarationMap[firstNondefiningDeclaration]->insert(decl);
 
  343               if (declarationMap[firstNondefiningDeclaration]->find(decl) == declarationMap[firstNondefiningDeclaration]->end())
 
  346                    printf (
"In SageInterface::DeclarationSets::addDeclaration(): Add the declaration to the existing set: decl = %p = %s = %s \n",decl,decl->
class_name().c_str(),
get_name(decl).c_str());
 
  349                    if (isSgTypedefDeclaration(decl) != 
nullptr)
 
  351                         printf (
"In SageInterface::DeclarationSets::addDeclaration(): Add the declaration to the existing set: decl = %p = %s = %s \n",decl,decl->
class_name().c_str(),
get_name(decl).c_str());
 
  355                    declarationMap[firstNondefiningDeclaration]->insert(decl);
 
  360                    printf (
"WARNING: SageInterface::DeclarationSets::addDeclaration(): A set already exists for decl = %p = %s = %s \n",decl,decl->
class_name().c_str(),
get_name(decl).c_str());
 
  364                    bool ignore_error = (isSgFunctionParameterList(decl) != 
nullptr);
 
  375                    bool isInTemplateFunctionDeclaration = enclosingFunction != 
nullptr && (isSgTemplateMemberFunctionDeclaration(enclosingFunction) || isSgTemplateFunctionDeclaration(enclosingFunction));
 
  379                    bool isInTemplateClassDefinition = enclosingClassDefinition != 
nullptr && isSgTemplateClassDefinition(enclosingClassDefinition);
 
  381                    bool isInTemplateDeclaration = isInTemplateFunctionDeclaration || isInTemplateClassDefinition;
 
  383                    ignore_error = ignore_error || (isSgTypedefDeclaration(decl) != 
nullptr) || (isSgTemplateInstantiationDecl(decl) != 
nullptr) || (isInTemplateDeclaration == 
true);
 
  388                    if (isSgClassDeclaration(decl) != 
nullptr)
 
  390                         ignore_error = ignore_error || (isSgClassDeclaration(decl)->get_isUnNamed() == 
true);
 
  398          if (declarationMap.find(firstNondefiningDeclaration) != declarationMap.end())
 
  401               ROSE_ASSERT (declarationMap[firstNondefiningDeclaration] != 
nullptr);
 
  402               if (declarationMap[firstNondefiningDeclaration]->find(decl) == declarationMap[firstNondefiningDeclaration]->end())
 
  405                    declarationMap[firstNondefiningDeclaration]->insert(decl);
 
  410                    printf (
"This declaration is already in the set (skip adding it twice): decl = %p = %s = %s \n",decl,decl->
class_name().c_str(),
get_name(decl).c_str());
 
  419               printf (
"In SageInterface::DeclarationSets::addDeclaration(): Adding set and declaration for the firstNondefiningDeclaration = %p = %s = %s \n",
 
  420                    firstNondefiningDeclaration,firstNondefiningDeclaration->
class_name().c_str(),
get_name(firstNondefiningDeclaration).c_str());
 
  427               declarationMap[firstNondefiningDeclaration] = 
new set<SgDeclarationStatement*>();
 
  429               ROSE_ASSERT (declarationMap.find(firstNondefiningDeclaration) != declarationMap.end());
 
  433               declarationMap[firstNondefiningDeclaration]->insert(decl);
 
  436               ROSE_ASSERT(declarationMap[firstNondefiningDeclaration]->find(decl) != declarationMap[firstNondefiningDeclaration]->end());
 
  438               printf (
"SageInterface::DeclarationSets::addDeclaration(): No set exists for the firstNondefiningDeclaration = %p = %s = %s \n",firstNondefiningDeclaration,firstNondefiningDeclaration->
class_name().c_str(),
get_name(firstNondefiningDeclaration).c_str());
 
  445     printf (
"Leaving SageInterface::DeclarationSets::addDeclaration(): decl = %p = %s = %s \n",decl,decl->
class_name().c_str(),
get_name(decl).c_str());
 
  449const std::set<SgDeclarationStatement*>*
 
  455     ROSE_ASSERT(declarationMap.find(firstNondefiningDeclaration) != declarationMap.end());
 
  457     const set<SgDeclarationStatement*>* declarationSet = declarationMap[firstNondefiningDeclaration];
 
  460     return declarationSet;
 
  463std::map<SgDeclarationStatement*,std::set<SgDeclarationStatement*>* > &
 
  464SageInterface::DeclarationSets::getDeclarationMap()
 
  466     return declarationMap;
 
  482#define DEBUG_LOCATED_IN_DEFINING_SCOPE 0 
  485     ROSE_ASSERT(firstNondefiningDeclaration != 
nullptr);
 
  487     set<SgDeclarationStatement*>* declarationSet = declarationMap[firstNondefiningDeclaration];
 
  488     ROSE_ASSERT(declarationSet != 
nullptr);
 
  490     set<SgDeclarationStatement*>::iterator i = declarationSet->begin();
 
  492     bool isDefinedInNamedScope = 
false;
 
  494#if DEBUG_LOCATED_IN_DEFINING_SCOPE 
  495     printf (
"In DeclarationSets::isLocatedInDefiningScope(): decl = %p = %s \n",decl,decl->
class_name().c_str());
 
  496     printf (
"   --- declarationSet->size()                        = %" PRIuPTR 
" \n",declarationSet->size());
 
  499     while (isDefinedInNamedScope == 
false && i != declarationSet->end())
 
  501          ROSE_ASSERT(*i != 
nullptr);
 
  502#if DEBUG_LOCATED_IN_DEFINING_SCOPE 
  503          printf (
"   --- *i = %p = %s \n",*i,(*i)->class_name().c_str());
 
  507          SgScopeStatement* structural_scope = isSgScopeStatement((*i)->get_parent());
 
  509#if DEBUG_LOCATED_IN_DEFINING_SCOPE 
  510          printf (
"   --- semantic_scope = %p = %s \n",semantic_scope,semantic_scope->
class_name().c_str());
 
  511          printf (
"   --- structural_scope = %p = %s \n",structural_scope,structural_scope->
class_name().c_str());
 
  514          SgScopeStatement* scope = isSgClassDefinition(semantic_scope) != 
nullptr ? semantic_scope : structural_scope;
 
  515          ASSERT_not_null(scope);
 
  517#if DEBUG_LOCATED_IN_DEFINING_SCOPE 
  518          printf (
"   --- scope = %p = %s \n",scope,scope->
class_name().c_str());
 
  519          printf (
"   --- scope->isNamedScope() = %s \n",scope->
isNamedScope() ? 
"true" : 
"false");
 
  521          SgGlobal* globalScope = isSgGlobal(scope);
 
  524          if (globalScope != 
nullptr || (scope->
isNamedScope() == 
true && isSgClassDefinition(structural_scope) == 
nullptr) )
 
  527               bool willBeOutput = ((*i)->get_file_info()->isCompilerGenerated() == 
false ||
 
  528                                      ((*i)->get_file_info()->isCompilerGenerated() &&
 
  529                                       (*i)->get_file_info()->isOutputInCodeGeneration()) );
 
  530#if DEBUG_LOCATED_IN_DEFINING_SCOPE 
  531               printf (
"   --- before: willBeOutput = %s \n",willBeOutput ? 
"true" : 
"false");
 
  534               willBeOutput = willBeOutput && scope == structural_scope;
 
  536#if DEBUG_LOCATED_IN_DEFINING_SCOPE 
  537               printf (
"   --- after: willBeOutput = %s \n",willBeOutput ? 
"true" : 
"false");
 
  543               isDefinedInNamedScope = willBeOutput;
 
  549#if DEBUG_LOCATED_IN_DEFINING_SCOPE 
  550     if (associatedDeclaration != 
nullptr)
 
  552          printf (
"Leaving DeclarationSets::isLocatedInDefiningScope(): associatedDeclaration = %p = %s \n",associatedDeclaration,
associatedDeclaration->
class_name().c_str());
 
  556          printf (
"Leaving DeclarationSets::isLocatedInDefiningScope(): associatedDeclaration = %p \n",associatedDeclaration);
 
  560     return isDefinedInNamedScope;
 
  564SageInterface::buildDeclarationSets(
SgNode* n)
 
  566     DeclarationSets* declarationSet = 
new DeclarationSets();
 
  571               DeclarationSets* declarationSet;
 
  574               DeclarationSetTraversal(DeclarationSets* ds) : declarationSet(ds) {}
 
  580                         declarationSet->addDeclaration(decl);
 
  586     DeclarationSetTraversal traversal(declarationSet);
 
  587     traversal.traverse(n, preorder);
 
  589     return declarationSet;
 
  596string getVariantName ( VariantT v )
 
  598     ROSE_ASSERT( 
int(v) < 
int(V_SgNumVariants));
 
  605     extern const char* roseGlobalVariantNameList[];
 
  606     return string(roseGlobalVariantNameList[v]);
 
  613     bool usingTemplateSyntax = 
false;
 
  614     string nameString = name.getString();
 
  617     usingTemplateSyntax = (nameString.find(
'<') != string::npos) && (nameString.find(
'>') != string::npos);
 
  621     if (nameString == 
"<unnamed>")
 
  623          printf (
"In SageInterface::hasTemplateSyntax(): Identified case of name == <unnamed> \n");
 
  625          usingTemplateSyntax = 
false;
 
  629     return usingTemplateSyntax;
 
 
  641     ROSE_ASSERT(node != NULL);
 
  645     ROSE_ASSERT(isSgFile(node)     == NULL);
 
  646     ROSE_ASSERT(isSgFileList(node) == NULL);
 
  647     ROSE_ASSERT(isSgProject(node)  == NULL);
 
  652     while (parent != 
nullptr && isSgFileList(parent) == 
nullptr)
 
  656          printf (
"--- parent = %p = %s \n",parent,parent->
class_name().c_str());
 
  659          parent->
get_file_info()->display(
"In SageInterface::whereAmI() diagnostics support");
 
 
  686         ifstmt->setCaseInsensitive(
true);
 
  689     if (conditional) conditional->
set_parent(ifstmt);
 
  691     if (false_body) false_body->
set_parent(ifstmt);
 
 
  698     ROSE_ASSERT(switchStatement != NULL);
 
  702          switchStatement->setCaseInsensitive(
true);
 
  707     if (switchStatement->
get_body() == 
nullptr)
 
  711     if (item_selector != 
nullptr)
 
 
  721     ROSE_ASSERT(whileStatement);
 
  725          whileStatement->setCaseInsensitive(
true);
 
  729     if (whileStatement->
get_body() == 
nullptr)
 
  733     if (whileStatement->get_else_body() == 
nullptr)
 
  734          whileStatement->set_else_body(else_body);
 
  737     if (condition) condition->
set_parent(whileStatement);
 
  741     if (else_body != 
nullptr)
 
  743          whileStatement->set_else_body(else_body);
 
 
  764     ROSE_ASSERT(declaration != NULL);
 
  768     while ( isSgNamespaceDefinitionStatement(tempScope) == 
nullptr && isSgGlobal(tempScope) == 
nullptr )
 
  771          ROSE_ASSERT(tempScope != NULL);
 
  778     return namespaceScope;
 
 
  792     ASSERT_not_null(defn);
 
  796     ASSERT_not_null(templateDeclaration);
 
  802     if (templateInstatiationClassDefinition != 
nullptr)
 
  806          ASSERT_not_null(parentTemplateInstantiationDefinition);
 
  808          ASSERT_not_null(parentTemplateInstantiationDeclaration);
 
  811          ASSERT_not_null(parentDeclaration);
 
  813       else if (cdefn != 
nullptr)
 
  817          ASSERT_not_null(parentDeclaration);
 
  819       else if (nrscope != 
nullptr)
 
  821          parentDeclaration = isSgDeclarationStatement(nrscope->
get_parent());
 
  822          ASSERT_not_null(parentDeclaration);
 
  829      return parentDeclaration;
 
 
  838  ASSERT_not_null(var_decl);
 
  839  ASSERT_not_null(base_decl);
 
  853      if (find(stmt_list.begin(), stmt_list.end(), base_decl) != stmt_list.end())
 
  858  var_decl->set_baseTypeDefiningDeclaration(base_decl);
 
  864  t1.traverseMemoryPool();
 
 
  873     bool foundExistingPrototype = 
false;
 
  875     ROSE_ASSERT(scope != NULL);
 
  876     ROSE_ASSERT(functionDeclaration != NULL);
 
  877     ROSE_ASSERT(startingAtDeclaration != NULL);
 
  880     if (isSgDeclarationScope(scope)) {
 
  881       printf(
"TODO: SgDeclarationScope handling in SageInterface::isPrototypeInScope see ROSE-1378\n");
 
  892     SgDeclarationStatementPtrList::iterator startingLocation = find(declarationList.begin(),declarationList.end(),startingAtDeclaration);
 
  894     if (startingLocation != declarationList.end())
 
  897          printf (
"startingLocation = %p = %s = %s \n",*startingLocation,(*startingLocation)->class_name().c_str(),
SageInterface::get_name(*startingLocation).c_str());
 
  900          SgDeclarationStatementPtrList::iterator i = startingLocation;
 
  902          SgName targetName = functionDeclaration->get_name();
 
  904          while (i != declarationList.end())
 
  910               if (templateMemberFunction != 
nullptr)
 
  913                    if (targetScope == templateMemberFunction->
get_scope())
 
  915                         if (targetName == templateMemberFunction->get_name())
 
  918                              if (templateMemberFunction->
isForward() == 
true)
 
  920                                   foundExistingPrototype = 
true;
 
  933     return foundExistingPrototype;
 
 
  939     ROSE_ASSERT(node1 && node2);
 
  949        } 
while( (curnode!=
nullptr) && (curnode!=node1));
 
 
  966#define DEBUG_HAS_SAME_SCOPE 0 
  968#if DEBUG_HAS_SAME_SCOPE 
  969     printf (
"In SageInterface::hasSameGlobalScope(): \n");
 
  970     printf (
" --- statement_1 = %p = %s \n",statement_1,statement_1->
class_name().c_str());
 
  971     printf (
" --- statement_2 = %p = %s \n",statement_2,statement_2->
class_name().c_str());
 
  974     bool includingSelf = 
true;
 
  975     SgGlobal* global_scope_1 = getEnclosingNode<SgGlobal>(statement_1,includingSelf);
 
  976     SgGlobal* global_scope_2 = getEnclosingNode<SgGlobal>(statement_2,includingSelf);
 
  978#if DEBUG_HAS_SAME_SCOPE 
  979     printf (
" --- global_scope_1 = %p = %s \n",global_scope_1,global_scope_1->
class_name().c_str());
 
  981     printf (
" --- --- sourcefile_1 = %p filename = %s \n",sourcefile_1,sourcefile_1->
getFileName().c_str());
 
  983     printf (
" --- global_scope_2 = %p = %s \n",global_scope_2,global_scope_2->
class_name().c_str());
 
  985     printf (
" --- --- sourcefile_2 = %p filename = %s \n",sourcefile_2,sourcefile_2->
getFileName().c_str());
 
  988     bool returnResult = (global_scope_1 == global_scope_2);
 
  990#if DEBUG_HAS_SAME_SCOPE 
  991     printf (
"Leaving SageInterface::hasSameGlobalScope(): returning: %s \n",returnResult ? 
"true" : 
"false");
 
 
 1001     std::vector<SgNode*> intersectionSet;
 
 1004     std::vector<SgNode*> AST_original = NodeQuery::querySubTree (original,V_SgNode);
 
 1005     std::vector<SgNode*> AST_copy     = NodeQuery::querySubTree (copy,V_SgNode);
 
 1007     int AST_original_size = AST_original.size();
 
 1008     int AST_copy_size     = AST_copy.size();
 
 1012          printf (
"Original AST size         = %d \n",AST_original_size);
 
 1013          printf (
"Copy of original AST size = %d \n",AST_copy_size);
 
 1016     int differenceInSizes = AST_original_size - AST_copy_size;
 
 1017     if (differenceInSizes == 0)
 
 1020               printf (
"Copied AST is the SAME size as the original (size = %d) \n",AST_original_size);
 
 1024          printf (
"Warning: Copied AST and the original are DIFFERENT sizes (original size = %d copyied size = %d) \n",AST_original_size,AST_copy_size);
 
 1029     std::set<SgNode*> AST_set_original;
 
 1030     for (
int i = 0; i < AST_original_size; i++)
 
 1032          AST_set_original.insert(AST_original[i]);
 
 1035     std::set<SgNode*> AST_set_copy;
 
 1036     for (
int i = 0; i < AST_copy_size; i++)
 
 1038          AST_set_copy.insert(AST_copy[i]);
 
 1041     int size = AST_original_size;
 
 1042     std::vector<SgNode*> intersectionList(size);
 
 1045     std::vector<SgNode*>::iterator end = set_intersection(AST_set_original.begin(),AST_set_original.end(),AST_set_copy.begin(),AST_set_copy.end(),intersectionList.begin());
 
 1048     std::vector<SgNode*> meaningIntersectionList = std::vector<SgNode*>(intersectionList.begin(),end);
 
 1049     std::vector<SgNode*> deleteList;
 
 1050     for (
int i = 0; i < (int)meaningIntersectionList.size(); i++)
 
 1052          if (meaningIntersectionList[i] != 
nullptr && isSgType(meaningIntersectionList[i]) != 
nullptr)
 
 1054               deleteList.push_back(meaningIntersectionList[i]);
 
 1060          printf (
"Remove the types that are allowed to be shared: deleteList.size() = %ld \n",(
long)deleteList.size());
 
 1062     for (std::vector<SgNode*>::iterator i = deleteList.begin(); i != deleteList.end(); i++)
 
 1064          meaningIntersectionList.erase(find(meaningIntersectionList.begin(),meaningIntersectionList.end(),*i));
 
 1068          printf (
"After removing the types there are meaningIntersectionList.size() = %ld \n",(
long)meaningIntersectionList.size());
 
 1070     for (
int i = 0; i < (int)meaningIntersectionList.size(); i++)
 
 1072          printf (
"     meaningIntersectionList[%d] = %p = %s = %s \n",i,meaningIntersectionList[i],meaningIntersectionList[i]->class_name().c_str(),
get_name(meaningIntersectionList[i]).c_str());
 
 1075     int unmatchedIRnodes = 0;
 
 1076     if (help != 
nullptr)
 
 1078          std::vector<SgNode*> tmp_AST_original; 
 
 1079          std::vector<SgNode*> tmp_AST_copy; 
 
 1081          int AST_original_size = AST_original.size();
 
 1082          for (
int j = 0; j < AST_original_size; j++)
 
 1084               if (AST_original[j] != NULL && isSgType(AST_original[j]) == NULL)
 
 1086                    tmp_AST_original.push_back(AST_original[j]);
 
 1090          int AST_copy_size = AST_copy.size();
 
 1091          for (
int j = 0; j < AST_copy_size; j++)
 
 1093               if (AST_copy[j] != NULL && isSgType(AST_copy[j]) == NULL)
 
 1095                    tmp_AST_copy.push_back(AST_copy[j]);
 
 1099          std::vector<SgNode*> deleteList_original;
 
 1100          std::vector<SgNode*> deleteList_copy;
 
 1101          for (
int j = 0; j < (int)tmp_AST_original.size(); j++)
 
 1104               SgCopyHelp::copiedNodeMapTypeIterator i = help->get_copiedNodeMap().find(tmp_AST_original[j]);
 
 1106               if (i != help->get_copiedNodeMap().end())
 
 1109                    SgNode* associated_node_copy = i->second;
 
 1110                    ROSE_ASSERT(associated_node_copy != NULL);
 
 1111                    deleteList_original.push_back(tmp_AST_original[j]);
 
 1112                    deleteList_copy.push_back(associated_node_copy);
 
 1117                    if (templateMemberFunction != NULL)
 
 1119                         printf (
"In SageInterface::astIntersection(): Found a SgTemplateInstantiationMemberFunctionDecl = %p copy = %p \n",templateMemberFunction,associated_node_copy);
 
 1127          int deleteList_original_size = deleteList_original.size();
 
 1128          for (
int j = 0; j < deleteList_original_size; j++)
 
 1131               std::vector<SgNode*>::iterator k = find(tmp_AST_original.begin(),tmp_AST_original.end(),deleteList_original[j]);
 
 1132               if (k != tmp_AST_original.end())
 
 1134                    tmp_AST_original.erase(k);
 
 1139               printf (
"IR nodes different between the original AST and the copy of the AST = %" PRIuPTR 
" \n",tmp_AST_original.size());
 
 1141          for (
int j = 0; j < (int)tmp_AST_original.size(); j++)
 
 1143               printf (
"non matched IR node = %p = %s = %s \n",tmp_AST_original[j],tmp_AST_original[j]->class_name().c_str(),
get_name(tmp_AST_original[j]).c_str());
 
 1147          unmatchedIRnodes = (int)tmp_AST_original.size();
 
 1151     if (differenceInSizes != 0)
 
 1153          SgProject* originalProject = isSgProject(original);
 
 1154          if (originalProject != NULL)
 
 1156               printf (
"In %s Copied AST and the original are DIFFERENT sizes (original size = %d copyied size = %d) IR nodes different = %d \n",
 
 1157                    (*originalProject)[0]->get_sourceFileNameWithoutPath().c_str(),AST_original_size,AST_copy_size,unmatchedIRnodes);
 
 1160          if (unmatchedIRnodes > 0)
 
 1162               printf (
"Make this an error under stricter testing \n");
 
 1167     return intersectionSet;
 
 
 1177     ROSE_ASSERT(initializedNameNode != NULL);
 
 1179#define DEBUG_SET_NAME 0 
 1183     printf (
"In SageInterface::set_name(): initializedNameNode = %p name = %s new_name = %s \n",initializedNameNode,initializedNameNode->get_name().str(),new_name.str());
 
 1190     while((node!=NULL) && ( isSgScopeStatement(node)==NULL))
 
 1193     ROSE_ASSERT(node!=NULL);
 
 1201     if (isSgEnumDeclaration(initializedNameNode->
get_parent()) != NULL)
 
 1203          ROSE_ASSERT(scope_stmt != NULL);
 
 1204          printf (
"scope_stmt = %p = %s \n",scope_stmt,scope_stmt->
class_name().c_str());
 
 1206          printf (
"Detected isSgEnumDeclaration as parent: exiting as a test in SageInterface::set_name() \n");
 
 1211     ROSE_ASSERT(scope_stmt != NULL);
 
 1217     ROSE_ASSERT(parent_declaration != NULL);
 
 1220     std::pair<SgSymbolTable::hash_iterator,SgSymbolTable::hash_iterator> pair_it = scope_stmt->
get_symbol_table()->get_table()->equal_range(initializedNameNode->get_name());
 
 1222     SgSymbolTable::hash_iterator found_it = scope_stmt->
get_symbol_table()->get_table()->end();
 
 1224     for (SgSymbolTable::hash_iterator it = pair_it.first; it != pair_it.second; ++it)
 
 1227          printf (
"Looking for symbol in scope = %p = %s \n",scope_stmt,scope_stmt->
class_name().c_str());
 
 1228          printf (
" --- *it = %p = %s \n",(*it).second,(*it).second->class_name().c_str());
 
 1230          switch(parent_declaration->
variantT())
 
 1232               case V_SgFunctionParameterList:
 
 1233               case V_SgVariableDeclaration:
 
 1235                    if (isSgVariableSymbol((*it).second) != NULL)
 
 1240               case V_SgClassDeclaration:
 
 1242                    if (isSgClassSymbol((*it).second) != NULL)
 
 1247               case V_SgFunctionDeclaration:
 
 1249                    if (isSgFunctionSymbol((*it).second) != NULL)
 
 1255               case V_SgEnumDeclaration:
 
 1257                    if (isSgEnumFieldSymbol((*it).second) != NULL)
 
 1264                    printf (
"Default reached in switch in SageInterface::set_name() \n");
 
 1272          printf (
"Warning: There is no Variable, Class, Function, or EnumValue symbol associated with p_name \n");
 
 1279          printf (
"WARNING: SageInterface::set_name(): This statement can not be transformed because it is part of a header file specific more then once with different include file syntax \n");
 
 1285          printf (
"In SageInterface::set_name(): This statement can be transformed! parent_declaration = %p = %s \n",parent_declaration,
get_name(parent_declaration).c_str());
 
 1290          printf (
"Exiting as a test! \n");
 
 1295     SgSymbol * associated_symbol = (*found_it).second;
 
 1310     found_it = scope_stmt->
get_symbol_table()->get_table()->insert(pair<SgName,SgSymbol*> ( new_name,associated_symbol));
 
 1312     found_it = scope_stmt->
get_symbol_table()->get_table()->insert(pair<SgName,SgSymbol*> ( new_name,associated_symbol));
 
 1317          printf (
"Warning: insertion of new symbol failed \n");
 
 1323     printf (
"Reset initializedNameNode->get_name() = %s to new_name = %s \n",initializedNameNode->get_name().str(),new_name.str());
 
 1327     initializedNameNode->set_name(new_name);
 
 1332     ROSE_ASSERT(enclosingStatement != NULL);
 
 1348               void visit (
SgNode* node)
 
 1353                    ROSE_ASSERT(varRefExp      != NULL);
 
 1354                    ROSE_ASSERT(variableSymbol != NULL);
 
 1356                    if (varRefExp->get_symbol() == variableSymbol)
 
 1359                         printf (
"In SageInterface::set_name(): Found associated SgVarRefExp varRefExp = %p to symbol associated_symbol = %p \n",varRefExp,variableSymbol);
 
 1362                         printf (
"Exiting as a test! \n");
 
 1373                         printf (
"In SageInterface::set_name(): When unparsing header files, we need to set the physical file id to the correct file \n");
 
 1378                         ROSE_ASSERT(associatedStatement != NULL);
 
 1384                         ROSE_ASSERT(associatedStatement != NULL);
 
 1392               RoseVisitor(
SgSymbol* symbol_parmeter) : counter(0), symbol(symbol_parmeter)
 
 1395                   printf (
"roseVisitor::visit: counter %4d node = %s \n",counter,symbol_parmeter->
class_name().c_str());
 
 1403     RoseVisitor t1(associated_symbol);
 
 1408     printf (
"Leaving SageInterface::set_name(): initializedNameNode = %p name = %s new_name = %s (return 1) \n",initializedNameNode,initializedNameNode->get_name().str(),new_name.str());
 
 
 1420     printf (
"In SageInterface::listHeaderFiles(): includeFile filename = %s \n",includeFile->get_filename().str());
 
 1426               void visit (
SgNode* node)
 
 1428                    printf (
"In listHeaderFiles visit(): node = %p = %s \n",node,node->
class_name().c_str());
 
 1430                    if (includeFile != NULL)
 
 1432                         printf (
"include file: filename = %s \n",includeFile->get_filename().str());
 
 1438     PrefixTraversal traversal;
 
 1439     traversal.traverse(includeFile, preorder);
 
 
 1458     ROSE_ASSERT(scope != NULL);
 
 1459     int scope_file_id = scope->
get_file_info()->get_physical_file_id();
 
 1461     bool return_value = 
false;
 
 1465          SgDeclarationStatementPtrList & declarationStatementList = scope->
getDeclarationList();
 
 1467          printf (
"In scopeHasStatementsFromSameFile(): DeclarationStatementList not implemented \n");
 
 1470          printf (
"declarationStatementList.size() = %zu \n",declarationStatementList.size());
 
 1472          SgDeclarationStatementPtrList::iterator i = declarationStatementList.begin();
 
 1474          while (i != declarationStatementList.end() && return_value == 
false)
 
 1477               int statement_file_id = statement->
get_file_info()->get_physical_file_id();
 
 1479               if (statement_file_id == scope_file_id)
 
 1481                   return_value = 
true;
 
 1487          printf (
"Exiting as a test! \n");
 
 1495          printf (
"In scopeHasStatementsFromSameFile(): StatementList not implemented \n");
 
 1497          SgStatementPtrList::iterator i = statementList.begin();
 
 1499          while (i != statementList.end() && return_value == 
false)
 
 1502               int statement_file_id = statement->
get_file_info()->get_physical_file_id();
 
 1504               if (statement_file_id == scope_file_id)
 
 1506                   return_value = 
true;
 
 1513     return return_value;
 
 
 1519  template <
class SageDecl>
 
 1520  std::string genericGetName(SageDecl* dcl)
 
 1523    return dcl->get_name();
 
 1533     string name = 
"undefined_name";
 
 1535     ROSE_ASSERT(directive != NULL);
 
 1544          case V_SgIncludeDirectiveStatement:
 
 1545          case V_SgDefineDirectiveStatement:
 
 1546          case V_SgUndefDirectiveStatement:
 
 1547          case V_SgIfdefDirectiveStatement:
 
 1548          case V_SgIfndefDirectiveStatement:
 
 1549          case V_SgDeadIfDirectiveStatement:
 
 1550          case V_SgIfDirectiveStatement:
 
 1551          case V_SgElseDirectiveStatement:
 
 1552          case V_SgElseifDirectiveStatement:
 
 1553          case V_SgLineDirectiveStatement:
 
 1554          case V_SgWarningDirectiveStatement:
 
 1555          case V_SgErrorDirectiveStatement:
 
 1556          case V_SgEmptyDirectiveStatement:
 
 1563          case V_SgClinkageStartStatement:
 
 1564          case V_SgClinkageEndStatement:
 
 1570          case V_SgFortranIncludeLine:
 
 1578               printf (
"Warning: default case reached in SageInterface::get_name ( const SgC_PreprocessorDirectiveStatement* directive ), directive = %p = %s \n",
 
 1582               name = 
"directive_default_name_case_reached_not_handled";
 
 
 1594     string name = 
"undefined_name";
 
 1596     ROSE_ASSERT(declaration != NULL);
 
 1600     if (directive != NULL)
 
 1607          case V_SgTemplateMemberFunctionDeclaration:
 
 1608               name = isSgTemplateMemberFunctionDeclaration(declaration)->get_name().str();
 
 1611          case V_SgTemplateFunctionDeclaration:
 
 1612               name = isSgTemplateFunctionDeclaration(declaration)->get_name().str();
 
 1615          case V_SgTemplateClassDeclaration:
 
 1616               name = isSgTemplateClassDeclaration(declaration)->get_name().str();
 
 1619          case V_SgTemplateDeclaration:
 
 1620               name = isSgTemplateDeclaration(declaration)->
get_name().str();
 
 1623          case V_SgTemplateInstantiationDecl:
 
 1624               name = isSgTemplateInstantiationDecl(declaration)->
get_templateName().str();
 
 1627          case V_SgClassDeclaration:
 
 1628          case V_SgDerivedTypeStatement:
 
 1629          case V_SgJovialTableStatement:
 
 1630               name = isSgClassDeclaration(declaration)->get_name().str();
 
 1635          case V_SgJovialDefineDeclaration:
 
 1636          case V_SgJovialDirectiveStatement:
 
 1637          case V_SgJovialCompoolStatement:
 
 1638               name = 
"__" + declaration->
class_name() + 
"_";
 
 1642          case V_SgJovialLabelDeclaration:
 
 1643               name = isSgJovialLabelDeclaration(declaration)->get_label();
 
 1646          case V_SgEnumDeclaration:
 
 1647               name = isSgEnumDeclaration(declaration)->
get_name().str();
 
 1651          case V_SgTemplateInstantiationTypedefDeclaration:
 
 1653          case V_SgTemplateTypedefDeclaration:
 
 1654          case V_SgTypedefDeclaration:
 
 1655               name = isSgTypedefDeclaration(declaration)->get_name().str();
 
 1658          case V_SgFunctionDeclaration:
 
 1659          case V_SgProgramHeaderStatement:
 
 1660          case V_SgProcedureHeaderStatement:
 
 1661          case V_SgMemberFunctionDeclaration:
 
 1662          case V_SgTemplateInstantiationFunctionDecl:
 
 1663          case V_SgTemplateInstantiationMemberFunctionDecl:
 
 1664          case V_SgAdaFunctionRenamingDecl:
 
 1665          case V_SgAdaEntryDecl:
 
 1666               name = isSgFunctionDeclaration(declaration)->get_name().str();
 
 1669          case V_SgNamespaceDeclarationStatement:
 
 1670               name = isSgNamespaceDeclarationStatement(declaration)->
get_name().str();
 
 1674          case V_SgFunctionParameterList:
 
 1677               ROSE_ASSERT(declaration->
get_parent() != NULL);
 
 1681                 name = 
get_name(functionDeclaration);
 
 1689               name += 
"_parameter_list_";
 
 1694          case V_SgTemplateVariableDeclaration:
 
 1695          case V_SgTemplateVariableInstantiation:
 
 1698          case V_SgVariableDeclaration:
 
 1702               name = 
"_variable_declaration_";
 
 1704               ROSE_ASSERT(variableDeclaration != NULL);
 
 1705               SgInitializedNamePtrList::const_iterator i = variableDeclaration->
get_variables().begin();
 
 1708               ROSE_ASSERT(i != variableDeclaration->
get_variables().end());
 
 1711                    name += string((*i)->get_name().str());
 
 1720          case V_SgVariableDefinition:
 
 1724               name = 
"_variable_definition_";
 
 1726               ROSE_ASSERT(variableDefinition != NULL);
 
 1729               ROSE_ASSERT(variableDefinition->
get_vardefn() != NULL);
 
 1735          case V_SgPragmaDeclaration:
 
 1737               name = 
"_pragma_declaration_";
 
 1739               ROSE_ASSERT(pragmaDeclaration != NULL);
 
 1740               ROSE_ASSERT(pragmaDeclaration->get_pragma() != NULL);
 
 1741               name += 
get_name(pragmaDeclaration->get_pragma());
 
 1746          case V_SgUsingDirectiveStatement:
 
 1748               name = 
"_using_directive_statement_";
 
 1750               ROSE_ASSERT(usingDeclaration != NULL);
 
 1757          case V_SgNamespaceAliasDeclarationStatement:
 
 1759               name = 
"_namespace_alias_directive_statement_";
 
 1761               ROSE_ASSERT(namespaceAliasDeclaration != NULL);
 
 1762               ROSE_ASSERT(namespaceAliasDeclaration->
get_name().is_null() == 
false);
 
 1763               name += namespaceAliasDeclaration->
get_name();
 
 1768          case V_SgUsingDeclarationStatement:
 
 1770               name = 
"_using_declaration_statement_";
 
 1772               ROSE_ASSERT(usingDeclaration != NULL);
 
 1786          case V_SgTemplateInstantiationDirectiveStatement:
 
 1788               name = 
"_template_instantiation_directive_statement_";
 
 1789               ROSE_ASSERT(declaration != NULL);
 
 1791               ROSE_ASSERT(templateInstantiationDirective != NULL);
 
 1792               ROSE_ASSERT(templateInstantiationDirective->
get_declaration() != NULL);
 
 1800          case V_SgCtorInitializerList:
 
 1802               name = 
"_ctor_list_";
 
 1804               ROSE_ASSERT(ctorDeclaration != NULL);
 
 1805               ROSE_ASSERT(ctorDeclaration->
get_parent() != NULL);
 
 1813               name = 
"_asm_stmt_";
 
 1814               const SgAsmStmt* asmStatement = isSgAsmStmt(declaration);
 
 1815               ROSE_ASSERT(asmStatement != NULL);
 
 1816               ROSE_ASSERT(asmStatement->
get_parent() != NULL);
 
 1822          case V_SgImplicitStatement:
 
 1824               name = 
"_fortran_implicit_";
 
 1826               ROSE_ASSERT(implicitStatement != NULL);
 
 1827               ROSE_ASSERT(implicitStatement->
get_parent() != NULL);
 
 1833          case V_SgNamelistStatement:
 
 1835               name = 
"_fortran_namelist_";
 
 1837               ROSE_ASSERT(namelistStatement != NULL);
 
 1838               ROSE_ASSERT(namelistStatement->
get_parent() != NULL);
 
 1844          case V_SgEquivalenceStatement:
 
 1846               name = 
"_fortran_equivalence_";
 
 1848               ROSE_ASSERT(equivalenceStatement != NULL);
 
 1849               ROSE_ASSERT(equivalenceStatement->
get_parent() != NULL);
 
 1856          case V_SgCommonBlock:
 
 1858               name = 
"_fortran_common_block_";
 
 1859               const SgCommonBlock* commonBlockStatement = isSgCommonBlock(declaration);
 
 1860               ROSE_ASSERT(commonBlockStatement != NULL);
 
 1861               ROSE_ASSERT(commonBlockStatement->
get_parent() != NULL);
 
 1867          case V_SgImportStatement:
 
 1869               name = 
"_fortran_import_stmt_";
 
 1871               ROSE_ASSERT(importStatement != NULL);
 
 1872               ROSE_ASSERT(importStatement->
get_parent() != NULL);
 
 1878          case V_SgFormatStatement:
 
 1880               name = 
"_fortran_format_stmt_";
 
 1882               ROSE_ASSERT(formatStatement != NULL);
 
 1883               ROSE_ASSERT(formatStatement->
get_parent() != NULL);
 
 1889          case V_SgModuleStatement:
 
 1891               name = 
"_fortran_module_stmt_";
 
 1893               ROSE_ASSERT(moduleStatement != NULL);
 
 1894               ROSE_ASSERT(moduleStatement->
get_parent() != NULL);
 
 1900          case V_SgUseStatement:
 
 1902               name = 
"_fortran_use_stmt_";
 
 1903               const SgUseStatement* useStatement = isSgUseStatement(declaration);
 
 1904               ROSE_ASSERT(useStatement != NULL);
 
 1905               ROSE_ASSERT(useStatement->
get_parent() != NULL);
 
 1911          case V_SgContainsStatement:
 
 1913               name = 
"_fortran_contains_stmt_";
 
 1915               ROSE_ASSERT(containsStatement != NULL);
 
 1916               ROSE_ASSERT(containsStatement->
get_parent() != NULL);
 
 1922          case V_SgEntryStatement:
 
 1924               name = 
"_fortran_entry_stmt_";
 
 1926               ROSE_ASSERT(entryStatement != NULL);
 
 1927               ROSE_ASSERT(entryStatement->
get_parent() != NULL);
 
 1933          case V_SgAttributeSpecificationStatement:
 
 1935               name = 
"_fortran_attribute_specification_stmt_";
 
 1937               ROSE_ASSERT(statement != NULL);
 
 1938               ROSE_ASSERT(statement->
get_parent() != NULL);
 
 1943           case V_SgInterfaceStatement:
 
 1945               name = 
"_fortran_interface_stmt_";
 
 1947               ROSE_ASSERT(statement != NULL);
 
 1948               ROSE_ASSERT(statement->
get_parent() != NULL);
 
 1953           case V_SgFortranIncludeLine:
 
 1955               name = 
"_fortran_include_line_stmt_";
 
 1957               ROSE_ASSERT(statement != NULL);
 
 1958               ROSE_ASSERT(statement->
get_parent() != NULL);
 
 1964           case V_SgJavaImportStatement:
 
 1966               name = 
"_java_import_stmt_";
 
 1968               ROSE_ASSERT(statement != NULL);
 
 1969               ROSE_ASSERT(statement->
get_parent() != NULL);
 
 1974           case V_SgJavaPackageDeclaration:
 
 1976               name = 
"_java_package_declaration_";
 
 1978               ROSE_ASSERT(package_declaration != NULL);
 
 1979               ROSE_ASSERT(package_declaration->
get_parent() != NULL);
 
 1984           case V_SgJavaPackageStatement:
 
 1986               name = 
"_java_package_stmt_";
 
 1988               ROSE_ASSERT(statement != NULL);
 
 1989               ROSE_ASSERT(statement->
get_parent() != NULL);
 
 1995          case V_SgStaticAssertionDeclaration:
 
 1997               name = 
"_static_assertion_declaration_stmt_";
 
 1999               ROSE_ASSERT(statement != NULL);
 
 2000               ROSE_ASSERT(statement->
get_parent() != NULL);
 
 2005          case V_SgNonrealDecl:
 
 2007               const SgNonrealDecl * nrdecl = isSgNonrealDecl(declaration);
 
 2008               ROSE_ASSERT(nrdecl != NULL);
 
 2009               name = nrdecl->get_name();
 
 2014          case V_SgEmptyDeclaration:
 
 2017               ROSE_ASSERT(emptyDeclaration != NULL);
 
 2022          case V_SgAdaPackageSpecDecl:
 
 2024              name = genericGetName(isSgAdaPackageSpecDecl(declaration));
 
 2028          case V_SgAdaPackageBodyDecl:
 
 2030              name = genericGetName(isSgAdaPackageBodyDecl(declaration));
 
 2034          case V_SgAdaFormalTypeDecl:
 
 2036               name = genericGetName(isSgAdaFormalTypeDecl(declaration));
 
 2040          case V_SgAdaGenericDecl:
 
 2044              name = 
get_name(gendcl->get_declaration());
 
 2047              if (isSgFunctionDeclaration(dcl->get_declaration())) {
 
 2048                name = 
"_ada_generic_decl_" + genericGetName(isSgFunctionDeclaration(dcl->get_declaration()));
 
 2051              if (isSgAdaPackageSpecDecl(dcl->get_declaration())) {
 
 2052                name = 
"_ada_generic_decl_" + genericGetName(isSgAdaPackageSpecDecl(dcl->get_declaration()));
 
 2062            case V_SgAdaDiscriminatedTypeDecl:
 
 2073                name = 
"_incomplete_Ada_discriminated_type_";
 
 2079            case V_SgAdaVariantDecl:
 
 2081              name = 
"_ada_variant_decl_";
 
 2085            case V_SgAdaAttributeClause:
 
 2087              name = 
"_ada_attribute_clause_";
 
 2091            case V_SgAdaRepresentationClause:
 
 2093              name = 
"_ada_representation_clause_";
 
 2097            case V_SgAdaEnumRepresentationClause:
 
 2099              name = 
"_ada_enum_representation_clause_";
 
 2103            case V_SgAdaComponentClause:
 
 2105              name = 
"_ada_component_clause_";
 
 2109            case V_SgAdaTaskTypeDecl:
 
 2111              name = genericGetName(isSgAdaTaskTypeDecl(declaration));
 
 2115            case V_SgAdaProtectedTypeDecl:
 
 2117              name = genericGetName(isSgAdaProtectedTypeDecl(declaration));
 
 2121            case V_SgAdaTaskBodyDecl:
 
 2123              name = genericGetName(isSgAdaTaskBodyDecl(declaration));
 
 2127            case V_SgAdaProtectedBodyDecl:
 
 2129              name = genericGetName(isSgAdaProtectedBodyDecl(declaration));
 
 2133            case V_SgAdaRenamingDecl:
 
 2135              name = genericGetName(isSgAdaRenamingDecl(declaration));
 
 2139            case V_SgAdaTaskSpecDecl:
 
 2141              name = genericGetName(isSgAdaTaskSpecDecl(declaration));
 
 2145            case V_SgAdaProtectedSpecDecl:
 
 2147              name = genericGetName(isSgAdaProtectedSpecDecl(declaration));
 
 2151            case V_SgAdaGenericInstanceDecl:
 
 2153              name = genericGetName(isSgAdaGenericInstanceDecl(declaration));
 
 2157            case V_SgAdaFormalPackageDecl:
 
 2159              name = genericGetName(isSgAdaFormalPackageDecl(declaration));
 
 2163            case V_SgAdaParameterList:
 
 2168              name = std::accumulate( plst->get_parameters().begin(), plst->get_parameters().end(),
 
 2169                                      std::string{
"_ada_parameter_list_"},
 
 2172                                        n += SageInterface::get_name(rhs);
 
 2181               printf (
"Warning: default case reached in SageInterface::get_name ( const SgDeclarationStatement* declaration ), declaration = %p = %s \n",
 
 2182                    declaration,declaration->
class_name().c_str());
 
 
 2192     string name = 
"undefined_name";
 
 2194     ROSE_ASSERT(scope != NULL);
 
 2199          case V_SgTemplateClassDefinition:
 
 2200               name = 
get_name(isSgTemplateClassDefinition(scope)->get_declaration());
 
 2203          case V_SgClassDefinition:
 
 2204          case V_SgTemplateInstantiationDefn:
 
 2205               name = 
get_name(isSgClassDefinition(scope)->get_declaration());
 
 2209          case V_SgTemplateFunctionDefinition:
 
 2210          case V_SgFunctionDefinition:
 
 2211               name = 
get_name(isSgFunctionDefinition(scope)->get_declaration());
 
 2214          case V_SgNamespaceDefinitionStatement:
 
 2215               name = 
get_name(isSgNamespaceDefinitionStatement(scope)->get_namespaceDeclaration());
 
 2217          case V_SgJavaLabelStatement:
 
 2218               name = (isSgJavaLabelStatement(scope)->get_label()).getString();
 
 2222          case V_SgDeclarationScope:
 
 2225          case V_SgAssociateStatement:
 
 2226          case V_SgJavaForEachStatement:
 
 2228          case V_SgFunctionParameterScope:
 
 2229          case V_SgAdaPackageSpec:
 
 2230          case V_SgAdaPackageBody:
 
 2231          case V_SgAdaTaskSpec:
 
 2232          case V_SgAdaTaskBody:
 
 2233          case V_SgAdaProtectedSpec:
 
 2234          case V_SgAdaProtectedBody:
 
 2235          case V_SgAdaGenericDefn:
 
 2236          case V_SgAdaAcceptStmt:
 
 2237          case V_SgJovialForThenStatement: 
 
 2238          case V_SgMatlabForStatement: 
 
 2239          case V_SgBasicBlock:
 
 2240          case V_SgCatchOptionStmt:
 
 2241          case V_SgDoWhileStmt:
 
 2242          case V_SgForStatement:
 
 2245          case V_SgSwitchStatement:
 
 2248          case V_SgForAllStatement:
 
 2249          case V_SgRangeBasedForStatement:
 
 2254               printf (
"Error: undefined case (SgScopeStatement) in SageInterface::get_name(): node = %s \n",scope->
class_name().c_str());
 
 
 2264     string name = 
"undefined_name";
 
 2266     ROSE_ASSERT(stmt != NULL);
 
 2269     if (declaration != NULL)
 
 2287                    case V_SgCaseOptionStmt:
 
 2288                    case V_SgCatchStatementSeq:
 
 2289                    case V_SgClinkageStartStatement:
 
 2290                    case V_SgContinueStmt:
 
 2291                    case V_SgDefaultOptionStmt:
 
 2293                    case V_SgForInitStmt:
 
 2294                    case V_SgFunctionTypeTable:
 
 2295                    case V_SgGotoStatement:
 
 2296                    case V_SgReturnStmt:
 
 2302                    case V_SgLabelStatement:
 
 2305                         name = labelStatement->
get_label().str();
 
 
 2328     ROSE_ASSERT(node != NULL);
 
 2330     string name = 
"undefined_name";
 
 2332     ROSE_ASSERT(node != NULL);
 
 2336          case V_SgInitializedName:
 
 2339               if (initializedName != NULL)
 
 2341                    name = initializedName->get_name().str();
 
 2349               name = 
"_pragma_string_";
 
 2350               const SgPragma* pragma = isSgPragma(node);
 
 2351               ROSE_ASSERT(pragma != NULL);
 
 2352               name += pragma->get_pragma();
 
 2366          case V_SgSourceFile:
 
 2367#ifdef ROSE_ENABLE_BINARY_ANALYSIS 
 2368          case V_SgBinaryComposite:
 
 2374               const SgFile* file = isSgFile(node);
 
 2375               ROSE_ASSERT(file != NULL);
 
 2382          case V_SgSymbolTable:
 
 2384               name = 
"_symbol_table_";
 
 2389          case V_SgStorageModifier:
 
 2391               name = 
"_storage_modifier_";
 
 2397          case V_Sg_File_Info:
 
 2399               name = 
"_file_info_";
 
 2404          case V_SgTemplateArgument:
 
 2406               name = 
"_template_argument_";
 
 2408               ROSE_ASSERT(templateArgument != NULL);
 
 2414                         ROSE_ASSERT(t != NULL);
 
 2428                              ROSE_ASSERT(templateArgument->get_initializedName() == NULL);
 
 2433                              ROSE_ASSERT(t == NULL);
 
 2435                              ROSE_ASSERT(initializedName != NULL);
 
 2446                         ROSE_ASSERT(t != NULL);
 
 2453                         printf (
"Error: default case reached in switch on templateArgument->get_argumentType() \n");
 
 2462          case V_SgTypeModifier:
 
 2465               ROSE_ASSERT(typeModifier != NULL);
 
 2466               name = 
"_type_modifier_" + typeModifier->displayString();
 
 2473               const SgNameGroup* nameGroup = isSgNameGroup(node);
 
 2474               ROSE_ASSERT(nameGroup != NULL);
 
 2475               name = 
"_name_group_" + nameGroup->get_group_name();
 
 2480          case V_SgDataStatementGroup:
 
 2483               ROSE_ASSERT(dataGroup != NULL);
 
 2484               name = 
"_data_statement_group_";
 
 2489          case V_SgDataStatementObject:
 
 2492               ROSE_ASSERT(dataObject != NULL);
 
 2493               name = 
"_data_statement_object_";
 
 2498          case V_SgDataStatementValue:
 
 2501               ROSE_ASSERT(dataValue != NULL);
 
 2502               name = 
"_data_statement_value_";
 
 2507          case V_SgCommonBlockObject:
 
 2510               ROSE_ASSERT(commonBlockObject != NULL);
 
 2511               name = 
"_common_block_object_" + commonBlockObject->get_block_name();
 
 2516          case V_SgFormatItem:
 
 2519               ROSE_ASSERT(formatItem != NULL);
 
 2520               name = 
"_format_item_";
 
 2525          case V_SgFormatItemList:
 
 2528               ROSE_ASSERT(formatItemList != NULL);
 
 2529               name = 
"_format_item_list_";
 
 2534          case V_SgRenamePair:
 
 2537               ROSE_ASSERT(renamePair != NULL);
 
 2538               name = renamePair->get_local_name() + 
"__" + renamePair->get_use_name() + 
"_rename_pair_";
 
 2545               const SgName* name_node = isSgName(node);
 
 2546               ROSE_ASSERT(name_node != NULL);
 
 2547               name = 
"_name_" + name_node->getString();
 
 2552          case V_SgTemplateParameter:
 
 2555               ROSE_ASSERT(template_parameter_node != NULL);
 
 2556               name = 
"_template_parameter_";
 
 2558               switch(template_parameter_node->get_parameterType())
 
 2562                         name += 
"type_parameter_";
 
 2568                         name += 
"nontype_parameter_";
 
 2572                         if (template_parameter_node->get_expression() != NULL)
 
 2578                              ROSE_ASSERT(template_parameter_node->get_initializedName() != NULL);
 
 2584                              name += template_parameter_node->get_initializedName()->
unparseToString();
 
 2592                         name += 
"template_parameter_";
 
 2598                         printf (
"Error: default reached \n");
 
 2608               const SgBaseClass* base_class_node = isSgBaseClass(node);
 
 2609               ROSE_ASSERT(base_class_node != NULL);
 
 2610               ROSE_ASSERT(base_class_node->get_base_class() != NULL);
 
 2615               ROSE_ASSERT(baseClassModifier != NULL);
 
 2616               access = baseClassModifier->displayString();
 
 2618               name = 
"_base_class_" + access + 
"_" + 
get_name(base_class_node->get_base_class());
 
 2624               printf (
"Default reached in switch for SgSupport IR node = %s \n",node->
class_name().c_str());
 
 2625               name = 
"default name";
 
 
 2640     ROSE_ASSERT(symbol != NULL);
 
 2642     string aliasSymbolPrefix = 
"";
 
 2643     if (isSgAliasSymbol(symbol) != NULL)
 
 2645          aliasSymbolPrefix = 
"_ALIAS";
 
 2652     return symbol->
get_name() + aliasSymbolPrefix + 
"_symbol_";
 
 
 2660     ROSE_ASSERT(type != NULL);
 
 2664     const SgNamedType* namedType = isSgNamedType(type);
 
 2665     if (namedType != NULL)
 
 2667          returnName = 
"named_type_";
 
 2668          returnName = namedType->
get_name().getString();
 
 2674               case V_SgPointerType:
 
 2677                    returnName = 
"pointer_to_";
 
 2678                    returnName += 
get_name(pointerType->get_base_type());
 
 2682               case V_SgReferenceType:
 
 2685                    returnName = 
"reference_to_";
 
 2686                    returnName += 
get_name(referenceType->get_base_type());
 
 2692                    const SgArrayType* arrayType = isSgArrayType(type);
 
 2693                    returnName = 
"array_of_";
 
 2694                    returnName += 
get_name(arrayType->get_base_type());
 
 2698               case V_SgModifierType:
 
 2702                    returnName += 
get_name(modifierType->get_base_type());
 
 2707               case V_SgTemplateType:
 
 2710                    returnName = 
"templateType_";
 
 2711                    returnName += templateType->get_name();
 
 
 2728     string name = 
"undefined_name";
 
 2736               name = 
"var_ref_of_";
 
 2737               ROSE_ASSERT(varRef != NULL);
 
 2738               ROSE_ASSERT(varRef->get_symbol() != NULL);
 
 2739               name += varRef->get_symbol()->
get_name();
 
 2744          case V_SgLabelRefExp:
 
 2747               name = 
"label_ref_of_";
 
 2748               ROSE_ASSERT(labelRef != NULL);
 
 2749               ROSE_ASSERT(labelRef->get_symbol() != NULL);
 
 2750               name += labelRef->get_symbol()->
get_name();
 
 2754          case V_SgPntrArrRefExp:
 
 2757               name = 
"array_ref_of_";
 
 2764          case V_SgFunctionCallExp:
 
 2767               name = 
"function_call_";
 
 2768               name += 
get_name(functionCall->get_function());
 
 2772          case V_SgFunctionRefExp:
 
 2775               name = 
"function_ref_";
 
 2776               name += functionRefExp->get_symbol()->
get_name();
 
 2781          case V_SgMemberFunctionRefExp:
 
 2784               name = 
"member_function_ref_";
 
 2785               name += memberFunctionRefExp->get_symbol()->
get_name();
 
 2791               const SgIntVal* valueExp = isSgIntVal(expr);
 
 2792               name = 
"integer_value_exp_";
 
 2799               const SgStringVal* valueExp = isSgStringVal(expr);
 
 2800               name = 
"string_value_exp_";
 
 2801               name += valueExp->get_value();
 
 2805          case V_SgSubscriptExpression:
 
 2808               name = 
"subscript_exp_";
 
 2810               name += 
get_name(subscriptExpression->get_lowerBound());
 
 2813               name += 
get_name(subscriptExpression->get_upperBound());
 
 2816               name += 
get_name(subscriptExpression->get_stride());
 
 2820          case V_SgNullExpression:
 
 2822               name = 
"null_expression";
 
 2827          case V_SgExprListExp:
 
 2830               name = 
"expr_list_exp_";
 
 2831               for (
size_t i = 0; i < exprListExp->get_expressions().size(); i++)
 
 2833                    name += 
get_name(exprListExp->get_expressions()[i]);
 
 2839          case V_SgActualArgumentExpression:
 
 2842               name = 
"actual_arg_exp_name_";
 
 2843               name += actualArgExp->get_argument_name();
 
 2845               name += 
get_name(actualArgExp->get_expression());
 
 2850          case V_SgTemplateParameterVal:
 
 2853               name = 
"template_parameter_value_expression_number_";
 
 2863               const SgDotExp* dotExp = isSgDotExp(expr);
 
 2864               ROSE_ASSERT(dotExp != NULL);
 
 2866               name = 
"_dot_exp_lhs_";
 
 2868               name += 
"_dot_exp_rhs_";
 
 2877               const SgLambdaExp* lambdaExp = isSgLambdaExp(expr);
 
 2878               ROSE_ASSERT (lambdaExp != NULL);
 
 2879               name = 
"lambda_expression_";
 
 2886               const SgThisExp* thisExp = isSgThisExp(expr);
 
 2887               ROSE_ASSERT(thisExp != NULL);
 
 2889               name = 
"_this_exp_for_";
 
 2892               ROSE_ASSERT(classSymbol != NULL);
 
 2905               printf (
"Note: default reached in get_name() expr = %p = %s \n",expr,expr->
class_name().c_str());
 
 
 2924     ROSE_ASSERT(node != NULL);
 
 2930          case V_SgRenamePair:
 
 2933               returnName = 
"rename_pair_";
 
 2934               returnName += n->get_local_name().str();
 
 2935               returnName += 
"_from_";
 
 2936               returnName += n->get_use_name().str();
 
 2940          case V_SgInitializedName:
 
 2943               ROSE_ASSERT (n != NULL);
 
 2944               returnName = 
"initialized_name_";
 
 2945               returnName += n->get_name().str();
 
 2950           case V_SgLambdaCapture:
 
 2953               ROSE_ASSERT (n != NULL);
 
 2954               returnName = 
"lambda_capture_";
 
 2960          case V_SgInterfaceBody:
 
 2963               returnName = 
"interface_body";
 
 
 2983     string name = 
"undefined_name";
 
 2985     ROSE_ASSERT(node != NULL);
 
 2988     if (locatedNode != NULL)
 
 2990          const SgStatement* statement = isSgStatement(node);
 
 2991          if (statement != NULL)
 
 2998               if (expression != NULL)
 
 3005                    if (locatedNodeSupport != NULL)
 
 3007                         name = 
get_name(locatedNodeSupport);
 
 3011                         const SgToken* token = isSgToken(node);
 
 3018                              printf (
"Unknown SgLocatedNode = %p = %s \n",node,node->
class_name().c_str());
 
 3027          const SgSupport* supportNode = isSgSupport(node);
 
 3028          if (supportNode != NULL)
 
 3035               const SgSymbol* symbol = isSgSymbol(node);
 
 3043                    const SgType* type = isSgType(node);
 
 
 3064     string name = 
"undefined_name";
 
 3066     ROSE_ASSERT(token != NULL);
 
 3067     name = token->get_lexeme_string();
 
 3072     else if (name == 
"\n")
 
 3074     else if (name == 
"\t")
 
 
 3116          case V_SgClassDeclaration:
 
 3117          case V_SgTemplateClassDeclaration:
 
 3121               ROSE_ASSERT(classDeclaration != NULL);
 
 3123               string type_name = classDeclaration->get_name();
 
 3125               printf (
"In SageInterface::generateUniqueNameForUseAsIdentifier_support(): case class or template type: type_name = %s \n",type_name.c_str());
 
 3127               string className = string(
"scope_") + scope + 
"_type_name_" + type_name;
 
 3129               printf (
"classDeclaration->get_scope() = %p = %s scope = %s \n",classDeclaration->
get_scope(),classDeclaration->
get_scope()->
class_name().c_str(),scope.c_str());
 
 3136          case V_SgTemplateInstantiationDecl:
 
 3139               ROSE_ASSERT(templateInstantiationDeclaration != NULL);
 
 3145               string type_name = templateInstantiationDeclaration->get_name();
 
 3147               printf (
"In SageInterface::generateUniqueNameForUseAsIdentifier_support(): case SgTemplateInstantiationDecl: type_name = %s \n",type_name.c_str());
 
 3149               string className = string(
"scope_") + scope + 
"_type_name_" + type_name;
 
 3164               printf (
"className = %s compressedClassName = %s \n",className.c_str(),compressedClassName.c_str());
 
 3167               printf (
"templateInstantiationDeclaration->get_scope() = %p = %s scope = %s \n",
 
 3171               s = compressedClassName;
 
 3173               printf (
"Exiting as a test! \n");
 
 3179          case V_SgFunctionDeclaration:
 
 3180          case V_SgTemplateFunctionDeclaration:
 
 3181          case V_SgTemplateInstantiationFunctionDecl:
 
 3184               ROSE_ASSERT(functionDeclaration != NULL);
 
 3186               printf (
"In SageInterface::generateUniqueNameForUseAsIdentifier_support(): case SgFunctionDeclaration: not implemented \n");
 
 3189               string original_name = functionDeclaration->get_name();
 
 3191               string function_name_part = mangleFunctionName(original_name,
"return_type");
 
 3192               string function_name  = string(
"scope_") + scope + 
"_function_name_" + function_name_part;
 
 3206                    printf (
"In SageInterface::generateUniqueNameForUseAsIdentifier(): Collision count = %d \n",count);
 
 3213               printf (
"In SageInterface::generateUniqueNameForUseAsIdentifier(): case SgFunctionDeclaration: Exiting as a test! \n");
 
 3219          case V_SgMemberFunctionDeclaration:
 
 3220          case V_SgTemplateMemberFunctionDeclaration:
 
 3221          case V_SgTemplateInstantiationMemberFunctionDecl:
 
 3224               ROSE_ASSERT(memberFunctionDeclaration != NULL);
 
 3226               printf (
"In SageInterface::generateUniqueNameForUseAsIdentifier_support(): case SgMemberFunctionDeclaration: not implemented \n");
 
 3229               string original_name = memberFunctionDeclaration->get_name();
 
 3235               string member_function_name_part = mangleFunctionName(original_name,
"return_type");
 
 3237               string member_function_name  = string(
"scope_") + scope + 
"_member_function_name_" + member_function_name_part;
 
 3251                    printf (
"In SageInterface::generateUniqueNameForUseAsIdentifier(): Collision count = %d \n",count);
 
 3256               s = member_function_name;
 
 3258               printf (
"In SageInterface::generateUniqueNameForUseAsIdentifier(): case SgMemberFunctionDeclaration: Exiting as a test! \n");
 
 3266               printf (
"In SageInterface::generateUniqueNameForUseAsIdentifier(): Unsupported declaration = %p = %s \n",declaration,declaration->
class_name().c_str());
 
 3272     printf (
"In SageInterface::generateUniqueNameForUseAsIdentifier(): s = %s \n",s.c_str());
 
 3277          printf (
"In SageInterface::generateUniqueNameForUseAsIdentifier(): s = %s \n",s.c_str());
 
 3282     printf (
"Exiting as a test! \n");
 
 
 3301     printf (
"In generateUniqueNameForUseAsIdentifier(): evaluating declaration = %p = %s \n",declaration,declaration->
class_name().c_str());
 
 3314          if (definingDeclaration != NULL)
 
 3317               printf (
"In generateUniqueName(): Using the defining declaration = %p since %p was not in the map \n",definingDeclaration,declaration);
 
 3325               printf (
"Warning: defining declaration not in SageInterface::local_node_to_name_map: declaration = %p = %s using name = %s \n",
 
 3332               ROSE_ASSERT(nondefiningDeclaration != NULL);
 
 3338     printf (
"Exiting as a test! \n");
 
 
 3349     ROSE_ASSERT(astNode != NULL);
 
 3359               void visit (
SgNode* node)
 
 3366                         if (classDeclaration != NULL || functionDeclaration != NULL)
 
 3377     UniqueNameTraversal traversal;
 
 3378     traversal.traverse(astNode, preorder);
 
 
 3388     ROSE_ASSERT(classDeclaration != NULL);
 
 3390     ROSE_ASSERT(definingDeclaration != NULL);
 
 3391     SgClassDeclaration* definingClassDeclaration = isSgClassDeclaration(definingDeclaration);
 
 3395     if (definingClassDeclaration != NULL)
 
 3397          SgClassDefinition* classDefinition = definingClassDeclaration->get_definition();
 
 3398          ROSE_ASSERT(classDefinition != NULL);
 
 3400          SgDeclarationStatementPtrList::iterator i = classDefinition->
get_members().begin();
 
 3401          while ( i != classDefinition->
get_members().end() )
 
 3404               ROSE_ASSERT( (*i)->get_parent() != NULL);
 
 3405               ROSE_ASSERT( (*i)->get_parent() == classDefinition);
 
 3408               if (memberFunction != NULL)
 
 3411                    if ( memberFunction->get_specialFunctionModifier().isConstructor() == 
true )
 
 3412                       defaultConstructor = memberFunction;
 
 3423     return defaultConstructor;
 
 
 3431     ROSE_ASSERT(classDeclaration != NULL);
 
 3433     if (definingDeclaration != NULL)
 
 3435          ROSE_ASSERT(definingDeclaration != NULL);
 
 3436          SgClassDeclaration* definingClassDeclaration = isSgClassDeclaration(definingDeclaration);
 
 3440          if (definingClassDeclaration != NULL)
 
 3442               SgClassDefinition* classDefinition = definingClassDeclaration->get_definition();
 
 3443               ROSE_ASSERT(classDefinition != NULL);
 
 3445               SgDeclarationStatementPtrList::iterator i = classDefinition->
get_members().begin();
 
 3446               while ( i != classDefinition->
get_members().end() )
 
 3450                    ROSE_ASSERT(i_parent != NULL);
 
 3455                    if ( i_parent != classDefinition )
 
 3457                         printf (
"Error: (*i)->get_parent() = %p = %s \n",i_parent,i_parent->
class_name().c_str());
 
 3458                         printf (
"(*i) = %p = %s = %s \n",*i,(*i)->class_name().c_str(),(*i)->unparseToString().c_str());
 
 3459                         (*i)->get_file_info()->display(
"Called from SageInterface::getDefaultDestructor: debug");
 
 3461                    ROSE_ASSERT( i_parent == classDefinition);
 
 3464                    if (memberFunction != NULL)
 
 3466                         if ( memberFunction->get_specialFunctionModifier().isDestructor() == 
true )
 
 3467                            defaultDestructor = memberFunction;
 
 3476     return defaultDestructor;
 
 
 3488#define DEBUG_ADD_DEFAULT_CONSTRUCTOR 0 
 3492     ASSERT_not_null(classType);
 
 3494     bool returnValue = 
false;
 
 3497     SgClassDeclaration* classDeclaration = isSgClassDeclaration(classType->get_declaration());
 
 3498     ROSE_ASSERT(classDeclaration != NULL);
 
 3500     ROSE_ASSERT(definingClassDeclaration != NULL);
 
 3501     SgClassDefinition* classDefinition = definingClassDeclaration->get_definition();
 
 3502     ROSE_ASSERT(classDefinition != NULL);
 
 3504     SgDeclarationStatementPtrList & declarationList = classDefinition->
get_members();
 
 3506     bool foundConstructor        = 
false;
 
 3507     bool foundDefaultConstructor = 
false;
 
 3509#if DEBUG_ADD_DEFAULT_CONSTRUCTOR 
 3510     printf (
"In addDefaultConstructorIfRequired(): class name = %s \n",classDeclaration->get_name().str());
 
 3513     SgDeclarationStatementPtrList::iterator i = declarationList.begin();
 
 3514     while (i != declarationList.end())
 
 3517          if (memberFunctionDeclaration != NULL)
 
 3519               bool isConstructor = memberFunctionDeclaration->get_specialFunctionModifier().isConstructor();
 
 3520               if (isConstructor == 
true)
 
 3522                    foundConstructor = 
true;
 
 3524#if DEBUG_ADD_DEFAULT_CONSTRUCTOR 
 3525                    printf (
"Found a constructor! \n");
 
 3528                    ROSE_ASSERT(functionParameterList != NULL);
 
 3532                    foundDefaultConstructor = ((foundDefaultConstructor == 
true) || (functionParameterList->
get_args().size() == 0));
 
 3534#if DEBUG_ADD_DEFAULT_CONSTRUCTOR 
 3535                    if (foundDefaultConstructor == 
true)
 
 3537                         printf (
"Found a default constructor! \n");
 
 3541                         printf (
"This is not a default constructor: functionParameterList->get_args().size() = %zu \n",functionParameterList->
get_args().size());
 
 3547#if DEBUG_ADD_DEFAULT_CONSTRUCTOR 
 3548                    printf (
"This is not a constructor \n");
 
 3556#if DEBUG_ADD_DEFAULT_CONSTRUCTOR 
 3557     printf (
"foundConstructor        = %s \n",foundConstructor ? 
"true" : 
"false");
 
 3558     printf (
"foundDefaultConstructor = %s \n",foundDefaultConstructor ? 
"true" : 
"false");
 
 3561     if (foundConstructor == 
true)
 
 3564#if DEBUG_ADD_DEFAULT_CONSTRUCTOR 
 3565          printf (
"Since there is at least one constructor, we can't rely on compiler generated constructors \n");
 
 3567          if (foundDefaultConstructor == 
true)
 
 3570#if DEBUG_ADD_DEFAULT_CONSTRUCTOR 
 3571               printf (
"We can use the existing default constructor (no need to build one) \n");
 
 3578#if DEBUG_ADD_DEFAULT_CONSTRUCTOR 
 3579               printf (
"########################################################### \n");
 
 3580               printf (
"Need to build a default constructor in the associated class \n");
 
 3583               ROSE_ASSERT(constructorDeclaration != NULL);
 
 3585#if DEBUG_ADD_DEFAULT_CONSTRUCTOR 
 3586               printf (
" --- constructorDeclaration = %p = %s name = %s \n",constructorDeclaration,constructorDeclaration->
class_name().c_str(),constructorDeclaration->get_name().str());
 
 3588               ROSE_ASSERT (constructorDeclaration->get_declarationModifier().get_accessModifier().isPublic() == 
true);
 
 3590               classDefinition->prepend_statement(constructorDeclaration);
 
 3593               ROSE_ASSERT(constructorDeclaration->
get_parent() != NULL);
 
 3601               constructorDeclaration->
get_endOfConstruct  ()->set_physical_file_id(physical_file_id);
 
 3605               ROSE_ASSERT(constructorDeclaration->get_definition() != NULL);
 
 3608               constructorDeclaration->get_definition()->
get_startOfConstruct()->set_physical_file_id(physical_file_id);
 
 3609               constructorDeclaration->get_definition()->
get_endOfConstruct  ()->set_physical_file_id(physical_file_id);
 
 3612#if DEBUG_ADD_DEFAULT_CONSTRUCTOR 
 3613               printf (
"DONE: Need to build a default constructor in the associated class \n");
 
 3614               printf (
"################################################################# \n");
 
 3617               printf (
"Exiting as a test! \n");
 
 3626#if DEBUG_ADD_DEFAULT_CONSTRUCTOR 
 3627          printf (
"No constructors found, so we don't need to add an explicit default constructor \n");
 
 3631#if DEBUG_ADD_DEFAULT_CONSTRUCTOR 
 3632     printf (
"Leaving addDefaultConstructorIfRequired(): returnValue = %s \n",returnValue ? 
"true" : 
"false");
 
 
 3664     astTraversal.
traverse(node,preorder);
 
 
 3674     printf (
"Exiting as a test! \n");
 
 3684          printf (
"Symbol Table from %p = %s at: \n",scope,scope->
sage_class_name());
 
 3685          scope->
get_file_info()->display(
"Symbol Table Location (Called from SageInterface::OutputLocalSymbolTables::visit())");
 
 3687          scope->print_symboltable(
"Called from SageInterface::OutputLocalSymbolTables::visit()");
 
 
 3702     bool result = 
false;
 
 3717     bool result = 
false;
 
 3721     if (isTemplateMemberFunction(memberFunctionDeclaration) == 
true)
 
 3724          printf (
"templateDeclaration = %p parent of templateDeclaration = %p \n",templateDeclaration,templateDeclaration->
get_parent());
 
 3727          SgClassDeclaration* classDeclaration = memberFunctionDeclaration->get_class_scope()->get_declaration();
 
 3728          ROSE_ASSERT(classDeclaration != NULL);
 
 3731          if (classTemplateInstantiation != NULL)
 
 3734               if (classTemplateDeclaration != NULL && classTemplateDeclaration != templateDeclaration)
 
 3748    if (templateDeclaration != NULL && templateDeclaration->
get_parent() != NULL)
 
 3751      if (isSgClassDefinition(parentScope) != NULL)
 
 
 3764     printf (
"Error: This is no longer used. \n");
 
 3777     if (firstNondefiningDeclaration != NULL)
 
 3778          keyDeclaration = firstNondefiningDeclaration;
 
 3780          keyDeclaration = definingDeclaration;
 
 3781     ROSE_ASSERT(keyDeclaration != NULL);
 
 3783     return keyDeclaration;
 
 3789  string pragmaString = pragmaDeclaration->get_pragma()->get_pragma();
 
 3790  istringstream istr(pragmaString);
 
 
 3800  ROSE_ASSERT (n != NULL);
 
 3801  bool result = 
false;
 
 3802  if (isSgOmpBarrierStatement(n)||
 
 3803      isSgOmpBodyStatement(n)||
 
 3804      isSgOmpDeclareSimdStatement(n) ||
 
 3805      isSgOmpFlushStatement(n)||
 
 3806      isSgOmpThreadprivateStatement(n)||
 
 3807      isSgOmpTaskwaitStatement(n) )
 
 
 3835     if (memberFunctionDeclaration != NULL)
 
 3845          ROSE_ASSERT(scope != NULL);
 
 3848          if (isSgDeclarationScope(scope)) {
 
 3849            printf(
"TODO SageInterface::isOverloaded case when scope is SgDeclarationScope. See ROSE-1378.\n");
 
 3855               isSgClassDefinition(memberFunctionDeclaration->
get_scope());
 
 3856          ROSE_ASSERT(classDefinition != NULL);
 
 3860          ROSE_ASSERT(classDeclaration != NULL);
 
 3863          SgDeclarationStatementPtrList & memberList = classDefinition->
get_members();
 
 3866          printf (
"   memberList.size() = %" PRIuPTR 
" \n",memberList.size());
 
 3868          for (SgDeclarationStatementPtrList::iterator i = memberList.begin(); i != memberList.end(); i++)
 
 3871               printf (
"   counter = %d declaration = %p = %s \n",counter,*i,(*i)->class_name().c_str());
 
 3877               if (tempMemberFunction != NULL)
 
 3882                    if ( keyDeclaration == generateUniqueDeclaration(tempMemberFunction) )
 
 3885                         printf (
"Skipping the case of keyDeclaration == generateUniqueDeclaration(tempMemberFunction) = %p \n",keyDeclaration);
 
 3890                    ROSE_ASSERT(tempMemberFunction->get_name() != 
"");
 
 3892                    printf (
"      tempMemberFunction = (name) %s = (qualified) %s \n",
 
 3893                              tempMemberFunction->get_name().str(),
 
 3894                              tempMemberFunction->get_qualified_name().str());
 
 3896                    if (tempMemberFunction->get_name() == memberFunctionDeclaration->get_name())
 
 3899                         printf (
"      Found a matching overloaded member function! \n");
 
 3908                    if (tempTemplateDeclaration != NULL)
 
 3914                         printf (
"tempTemplateDeclaration->get_name() = %s \n",tempTemplateDeclaration->
get_name().str());
 
 3916                         if (memberFunctionDeclaration->get_name() == tempTemplateDeclaration->
get_name())
 
 3919                              printf (
"      Found a matching overloaded member function! \n");
 
 3928                          if (functionDeclaration->
variantT() == V_SgFunctionDeclaration)
 
 3930                               printf (
"In SageInterface::isOverloaded(): could friend functions be overloaded in a class? \n");
 
 3943          printf (
"In SageInterface::isOverloaded(): case of non-member function not yet implemented! \n");
 
 3950     return (counter > 1);
 
 
 3965     ROSE_ASSERT(memberFunctionInstantiation != NULL);
 
 3968    printf (
"buildForwardFunctionDeclaration: Member function = %p = %s = definition = %p \n",
 
 3969          memberFunctionInstantiation,
 
 3970          memberFunctionInstantiation->get_name().str(),
 
 3971          memberFunctionInstantiation->get_definition());
 
 3972    memberFunctionInstantiation->
get_file_info()->display(
"memberFunctionInstantiation: debug");
 
 3978     class NondefiningFunctionDeclarationCopyType : 
public SgCopyHelp 
 3988                    SgNode* returnValue = NULL;
 
 3996                         case V_SgFunctionDeclaration:
 
 3997                         case V_SgMemberFunctionDeclaration:
 
 3998                         case V_SgTemplateInstantiationFunctionDecl:
 
 3999                         case V_SgTemplateInstantiationMemberFunctionDecl:
 
 4003                              ROSE_ASSERT(functionDeclaration != NULL);
 
 4009                                   returnValue = 
const_cast<SgNode *
>(n);
 
 4021                         case V_SgFunctionDefinition:
 
 4023                              printf (
"Skip copying the function definition if it is present \n");
 
 4025                              returnValue = 
const_cast<SgNode *
>(n);
 
 4039                    if (returnValue == NULL)
 
 4040                         returnValue = n->copy(*
this);
 
 4042                    ROSE_ASSERT(returnValue != NULL);
 
 4045        } nondefiningFunctionDeclarationCopy;
 
 4050     if (memberFunctionInstantiation->get_definition() != NULL)
 
 4052          printf (
"\n\nNEED TO REMOVE POINTERS IN THE NON-DEFINING DECLARATION TO THE SgClassDefinition objects. \n");
 
 4057          memberFunctionInstantiation->set_definition(NULL);
 
 4059     SgNode* copyOfMemberFunctionNode = memberFunctionInstantiation->copy(nondefiningFunctionDeclarationCopy);
 
 4078     printf (
"copyOfMemberFunction->isForward()        = %s \n",copyOfMemberFunction->
isForward() ? 
"true" : 
"false");
 
 4079     printf (
"memberFunctionInstantiation->isForward() = %s \n",memberFunctionInstantiation->
isForward() ? 
"true" : 
"false");
 
 4082     printf (
"memberFunctionInstantiation->isSpecialization()        = %s \n",memberFunctionInstantiation->isSpecialization() ? 
"true" : 
"false");
 
 4083     printf (
"copyOfMemberFunctionNode = %p = %s = %s memberFunctionInstantiation->isSpecialization() = %s \n",
 
 4084          copyOfMemberFunction,copyOfMemberFunction->
class_name().c_str(),
SageInterface::get_name(copyOfMemberFunction).c_str(),copyOfMemberFunction->isSpecialization() ? 
"true" : 
"false");
 
 4085     copyOfMemberFunction->
get_file_info()->display(
"copyOfMemberFunction: debug");
 
 4089     ROSE_ASSERT(memberFunctionInstantiation->get_args().size() == copyOfMemberFunction->get_args().size());
 
 4095     ROSE_ASSERT(copyOfMemberFunction != NULL);
 
 4096     return copyOfMemberFunction;
 
 
 4105     ROSE_ASSERT(declarationForType != NULL);
 
 4108     switch(declarationForType->
variantT())
 
 4111          case V_SgTemplateInstantiationDecl:
 
 4112          case V_SgTemplateClassDeclaration:
 
 4114          case V_SgClassDeclaration:
 
 4119               if (isSgTemplateClassDeclaration(declarationForType) != NULL)
 
 4128               ROSE_ASSERT(symbol != NULL);
 
 4129               SgName name = classDeclaration->get_name();
 
 4130               symbolTable->insert(name,symbol);
 
 4134          case V_SgEnumDeclaration:
 
 4138               ROSE_ASSERT(symbol != NULL);
 
 4140               symbolTable->insert(name,symbol);
 
 4144          case V_SgFunctionDeclaration:
 
 4148               ROSE_ASSERT(symbol != NULL);
 
 4149               SgName name = functionDeclaration->get_name();
 
 4150               symbolTable->insert(name,symbol);
 
 4154          case V_SgMemberFunctionDeclaration:
 
 4158               ROSE_ASSERT(symbol != NULL);
 
 4162               SgName name = functionDeclaration->get_name();
 
 4163               symbolTable->insert(name,symbol);
 
 4169               printf (
"Default reached in evaluation of typedef inner definition = %p = %s and building a symbol for it for the symbol table \n",declarationForType,declarationForType->
class_name().c_str());
 
 4180     SgInitializedNamePtrList::iterator i = variableList.begin();
 
 4181     while (i != variableList.end())
 
 4185          if (
variable->get_scope() == scope)
 
 4193                    printf (
"WARNING: Scopes do NOT match! variable = %p = %s (could this be a static variable, or has the symbol table been setup before the scopes have been set?) \n",
variable,
variable->get_name().str());
 
 4198          ROSE_ASSERT(symbol != NULL);
 
 4200          symbolTable->insert(name,symbol);
 
 4208SageInterface::supportForInitializedNameLists ( 
SgScopeStatement* scope, SgInitializedNamePtrList & variableList )
 
 4211     ROSE_ASSERT(symbolTable != NULL);
 
 4213     supportForVariableLists(scope,symbolTable,variableList);
 
 4221     SgInitializedNamePtrList & variableList = variableDeclaration->
get_variables();
 
 4222     supportForVariableLists(scope,symbolTable,variableList);
 
 4230          ROSE_ASSERT(symbolTable != NULL);
 
 4241     std::vector<SgNode*> labelList = NodeQuery::querySubTree (scope,V_SgLabelStatement);
 
 4243     int numberOfLabels = labelList.size();
 
 4244     for (
int i=0; i < numberOfLabels; i++)
 
 4248          ROSE_ASSERT(labelStatement != NULL);
 
 4249          ROSE_ASSERT(labelStatement->
get_scope() == scope);
 
 4252          ROSE_ASSERT(symbol != NULL);
 
 4256          SgName name = labelStatement->get_name();
 
 4257          symbolTable->insert(name,symbol);
 
 4267     ROSE_ASSERT(scope != NULL);
 
 4269     printf (
"In SageInterface::rebuildSymbolTable(): Symbol Table from %p = %s \n",scope,scope->
class_name().c_str());
 
 4272     printf (
"Exiting as a test \n");
 
 4278     if (symbolTable != NULL)
 
 4281          if (symbolTable->
size() != 0)
 
 4283               printf (
"symbolTable->size() = %d \n",symbolTable->
size());
 
 4285          ROSE_ASSERT(symbolTable->
size() == 0);
 
 4287          printf (
"Symbol Table from %p = %s of size = %" PRIuPTR 
" \n",scope,scope->
class_name().c_str(),symbolTable->
size());
 
 4288          symbolTable->
print(
"Called from SageInterface::rebuildSymbolTable()");
 
 4294          printf (
"In SageInterface::rebuildSymbolTable(): No symbol table found \n");
 
 4296          ROSE_ASSERT(symbolTable == NULL);
 
 4301          ROSE_ASSERT(symbolTable != NULL);
 
 4302          ROSE_ASSERT(symbolTable->get_table() != NULL);
 
 4306          ROSE_ASSERT(symbolTable->
get_parent() != NULL);
 
 4319          case V_SgForStatement:
 
 4326               SgStatementPtrList::iterator i = forStatement->get_init_stmt().begin();
 
 4330               while (i != forStatement->get_init_stmt().end())
 
 4334                    if (variableDeclarationInitializer != NULL)
 
 4339                         supportForVariableDeclarations ( scope, symbolTable, variableDeclarationInitializer );
 
 4345               SgVariableDeclaration* variableDeclarationCondition = isSgVariableDeclaration(forStatement->get_test());
 
 4346               if (variableDeclarationCondition != NULL)
 
 4351                    supportForVariableDeclarations ( scope, symbolTable, variableDeclarationCondition );
 
 4358        case V_SgJovialForThenStatement:
 
 4359        case V_SgMatlabForStatement:
 
 4367          case V_SgTemplateFunctionDefinition:
 
 4369          case V_SgFunctionDefinition:
 
 4376               if (functionDefinition != NULL)
 
 4382                    if (functionDeclaration != NULL)
 
 4385                         if (functionDeclaration->
isForward() == 
true)
 
 4387                              printf (
"ERROR: functionDeclaration = %p = %s = %s \n",functionDeclaration,functionDeclaration->
class_name().c_str(),functionDeclaration->get_name().str());
 
 4388                              printf (
"   --- functionDeclaration (get_name())   = %s \n",
get_name(functionDeclaration).c_str());
 
 4389                              printf (
"   --- functionDeclaration (mangled name) = %s \n",functionDeclaration->get_mangled_name().str());
 
 4391                              if (memberFunctionDeclaration != NULL)
 
 4393                                   printf (
"memberFunctionDeclaration != NULL \n");
 
 4396                         ROSE_ASSERT(functionDeclaration->
isForward() == 
false);
 
 4397                         SgInitializedNamePtrList & argumentList = functionDeclaration->get_args();
 
 4398                         supportForVariableLists(scope,symbolTable,argumentList);
 
 4411               supportForLabelStatements(scope,symbolTable);
 
 4422               SgIfStmt* ifStatement = isSgIfStmt(scope);
 
 4424               if (variableDeclarationCondition != NULL)
 
 4429                    supportForVariableDeclarations ( scope, symbolTable, variableDeclarationCondition );
 
 4435          case V_SgSwitchStatement:
 
 4442               if (variableDeclarationSelector != NULL)
 
 4447                    supportForVariableDeclarations ( scope, symbolTable, variableDeclarationSelector );
 
 4459               SgWhileStmt* whileStatement = isSgWhileStmt(scope);
 
 4461               if (variableDeclarationCondition != NULL)
 
 4467                    supportForVariableDeclarations ( scope, symbolTable, variableDeclarationCondition );
 
 4473          case V_SgCatchOptionStmt:
 
 4474          case V_SgDoWhileStmt:
 
 4483          case V_SgTemplateClassDefinition:
 
 4485          case V_SgBasicBlock:
 
 4486          case V_SgClassDefinition:
 
 4487          case V_SgTemplateInstantiationDefn:
 
 4489          case V_SgNamespaceDefinitionStatement:
 
 4497          case V_SgJavaForEachStatement:
 
 4500               SgVariableDeclaration* variableDeclarationCondition = isSgVariableDeclaration(javaForEachStatement->get_element());
 
 4501               if (variableDeclarationCondition != NULL)
 
 4507                    supportForVariableDeclarations ( scope, symbolTable, variableDeclarationCondition );
 
 4515               printf (
"Default reached in SageInterface::rebuildSymbolTable() scope = %p = %s \n",scope,scope->
class_name().c_str());
 
 4521     printf (
"In SageInterface::rebuildSymbolTable(): fixup declarations in Symbol Table from %p = %s \n",scope,scope->
class_name().c_str());
 
 4529     for (SgStatementPtrList::iterator i = statementList.begin(); i != statementList.end(); i++)
 
 4536          if (declaration != NULL)
 
 4542               list<SgSymbol*> symbolList;
 
 4545                    case V_SgTemplateInstantiationMemberFunctionDecl:
 
 4549                         if (scope == derivedDeclaration->
get_scope())
 
 4552                              ROSE_ASSERT(symbol != NULL);
 
 4558                              SgName name = derivedDeclaration->get_name();
 
 4559                              symbolTable->insert(name,symbol);
 
 4570                              ROSE_ASSERT(derivedDeclarationScope != NULL);
 
 4577                              ROSE_ASSERT(templateDeclaration != NULL);
 
 4585                              SgType* functionType                               = templateDeclaration->get_type();
 
 4586                              SgTemplateParameterPtrList & templateParameterList = templateDeclaration->get_templateParameters();
 
 4589                              if (templateSymbol != NULL)
 
 4593                                   printf (
"Building a symbol for derivedDeclaration = %p = %s to an alternative symbol table in derivedDeclarationScope = %p \n",
 
 4594                                        derivedDeclaration,
get_name(derivedDeclaration).c_str(),derivedDeclarationScope);
 
 4597                                   ROSE_ASSERT(symbol != NULL);
 
 4598                                   SgName name = derivedDeclaration->get_name();
 
 4610                    case V_SgTemplateMemberFunctionDeclaration:
 
 4612                    case V_SgMemberFunctionDeclaration:
 
 4617                         if (scope == derivedDeclaration->
get_scope())
 
 4621                              if (isSgTemplateFunctionDeclaration(declaration) != NULL)
 
 4626                              ROSE_ASSERT(symbol != NULL);
 
 4630                              SgName name = derivedDeclaration->get_name();
 
 4631                              symbolTable->insert(name,symbol);
 
 4642                    case V_SgTemplateInstantiationFunctionDecl:
 
 4646                         if (scope == derivedDeclaration->
get_scope())
 
 4649                              ROSE_ASSERT(symbol != NULL);
 
 4650                              SgName name = derivedDeclaration->get_name();
 
 4651                              symbolTable->insert(name,symbol);
 
 4655                              if (derivedDeclaration->get_declarationModifier().
isFriend() == 
false)
 
 4657#if PRINT_DEVELOPER_WARNINGS 
 4658                                   printf (
"Shouldn't this be a friend declaration = %p = %s \n",derivedDeclaration,derivedDeclaration->
class_name().c_str());
 
 4667                    case V_SgTemplateFunctionDeclaration:
 
 4669                    case V_SgFunctionDeclaration:
 
 4675                         if (useThisDeclaration == 
true)
 
 4677                              if (scope == derivedDeclaration->
get_scope())
 
 4682                                   if (isSgTemplateFunctionDeclaration(declaration) != NULL)
 
 4687                                   ROSE_ASSERT(symbol != NULL);
 
 4688                                   SgName name = derivedDeclaration->get_name();
 
 4689                                   symbolTable->insert(name,symbol);
 
 4693                                   if (derivedDeclaration->get_declarationModifier().
isFriend() == 
false)
 
 4695#if PRINT_DEVELOPER_WARNINGS 
 4696                                        printf (
"Shouldn't this be a friend declaration = %p = %s \n",derivedDeclaration,derivedDeclaration->
class_name().c_str());
 
 4705                    case V_SgTemplateVariableDeclaration:
 
 4707                    case V_SgVariableDeclaration:
 
 4710                         SgInitializedNamePtrList & variableList = derivedDeclaration->
get_variables();
 
 4711                         SgInitializedNamePtrList::iterator i = variableList.begin();
 
 4712                         while ( i != variableList.end() )
 
 4718                              if (
variable->get_scope() == scope)
 
 4721                                   ROSE_ASSERT(symbol != NULL);
 
 4726                                   symbolTable->insert(name,symbol);
 
 4743                              ROSE_ASSERT(symbolTable != NULL);
 
 4752                    case V_SgTemplateInstantiationDecl:
 
 4759                         if (scope == derivedDeclaration->
get_scope())
 
 4763                              ROSE_ASSERT(symbol != NULL);
 
 4764                              SgName name = derivedDeclaration->get_name();
 
 4767                              if (scope != derivedDeclaration->
get_scope())
 
 4769                                   printf (
"Error: scopes don't match for derivedDeclaration = %p = %s \n",derivedDeclaration,derivedDeclaration->
class_name().c_str());
 
 4771                              ROSE_ASSERT(scope == derivedDeclaration->
get_scope());
 
 4773                              symbolTable->insert(name,symbol);
 
 4779                              if (derivedDeclaration->get_declarationModifier().
isFriend() == 
false)
 
 4781#if PRINT_DEVELOPER_WARNINGS 
 4782                                   printf (
"Shouldn't this be a friend declaration = %p = %s \n",derivedDeclaration,derivedDeclaration->
class_name().c_str());
 
 4788                         ROSE_ASSERT(symbol != NULL);
 
 4789                         SgName name = derivedDeclaration->get_name();
 
 4790                         symbolTable->insert(name,symbol);
 
 4797                    case V_SgTemplateClassDeclaration:
 
 4799                    case V_SgClassDeclaration:
 
 4803                         if (scope == derivedDeclaration->
get_scope())
 
 4806                                   if (isSgTemplateClassDeclaration(declaration) != NULL)
 
 4811                              ROSE_ASSERT(symbol != NULL);
 
 4812                              SgName name = derivedDeclaration->get_name();
 
 4813                              symbolTable->insert(name,symbol);
 
 4817                              if (derivedDeclaration->get_declarationModifier().
isFriend() == 
false)
 
 4819#if PRINT_DEVELOPER_WARNINGS 
 4820                                   printf (
"Shouldn't this be a friend declaration = %p = %s \n",derivedDeclaration,derivedDeclaration->
class_name().c_str());
 
 4826                         ROSE_ASSERT(symbol != NULL);
 
 4827                         SgName name = derivedDeclaration->get_name();
 
 4828                         symbolTable->insert(name,symbol);
 
 4833                    case V_SgEnumDeclaration:
 
 4836                         ROSE_ASSERT(derivedDeclaration != NULL);
 
 4838                         ROSE_ASSERT(symbol != NULL);
 
 4840                         symbolTable->insert(name,symbol);
 
 4843                         SgInitializedNamePtrList & enumFieldList = derivedDeclaration->
get_enumerators();
 
 4844                         SgInitializedNamePtrList::iterator i     = enumFieldList.begin();
 
 4847                         while (i != enumFieldList.end())
 
 4850                              ROSE_ASSERT(enum_field_symbol != NULL);
 
 4851                              SgName enum_field_name = (*i)->get_name();
 
 4852                              symbolTable->insert(enum_field_name,enum_field_symbol);
 
 4862                    case V_SgTemplateTypedefDeclaration:
 
 4864                    case V_SgTypedefDeclaration:
 
 4868                         ROSE_ASSERT(symbol != NULL);
 
 4869                         SgName name = derivedDeclaration->get_name();
 
 4870                         symbolTable->insert(name,symbol);
 
 4872                         printf (
"In SageInterface::rebuildSymbolTable(): case of SgTypedefDeclaration \n");
 
 4877                         if (derivedDeclaration->get_typedefBaseTypeContainsDefiningDeclaration() == 
true)
 
 4880                              ROSE_ASSERT(symbolTable != NULL);
 
 4883                              printf (
"In SageInterface::rebuildSymbolTable(): case of SgTypedefDeclaration: typedefBaseTypeContainsDefiningDeclaration == true calling supportForBaseTypeDefiningDeclaration() \n");
 
 4891                              if (declaration != NULL)
 
 4894                                   printf (
"In SageInterface::rebuildSymbolTable(): case of SgTypedefDeclaration: typedefBaseTypeContainsDefiningDeclaration == false calling supportForBaseTypeDefiningDeclaration() \n");
 
 4899                                   printf (
"In SageInterface::rebuildSymbolTable(): case of SgTypedefDeclaration: typedefBaseTypeContainsDefiningDeclaration == false: skipping call to supportForBaseTypeDefiningDeclaration() \n");
 
 4903                         printf (
"In SageInterface::rebuildSymbolTable(): Leaving case of SgTypedefDeclaration \n");
 
 4908                    case V_SgTemplateDeclaration:
 
 4914                         printf (
"case V_SgTemplateDeclaration: derivedDeclaration               = %p \n",derivedDeclaration);
 
 4915                         printf (
"case V_SgTemplateDeclaration: derivedDeclaration->get_declarationModifier().isFriend() = %s \n",derivedDeclaration->get_declarationModifier().
isFriend() ? 
"true" : 
"false");
 
 4916                         printf (
"case V_SgTemplateDeclaration: derivedDeclaration->get_name()   = %s \n",derivedDeclaration->
get_name().str());
 
 4917                         printf (
"case V_SgTemplateDeclaration: derivedDeclaration->get_string() = %s \n",derivedDeclaration->
get_string().str());
 
 4919                         if (scope == derivedDeclaration->
get_scope())
 
 4922                              ROSE_ASSERT(symbol != NULL);
 
 4924                              symbolTable->insert(name,symbol);
 
 4928                              if (derivedDeclaration->get_declarationModifier().
isFriend() == 
false)
 
 4930#if PRINT_DEVELOPER_WARNINGS 
 4931                                   printf (
"Shouldn't this be a friend declaration = %p = %s \n",derivedDeclaration,derivedDeclaration->
class_name().c_str());
 
 4938                         ROSE_ASSERT(symbol != NULL);
 
 4940                         symbolTable->insert(name,symbol);
 
 4947                    case V_SgNamespaceAliasDeclarationStatement:
 
 4950                         ROSE_ASSERT(aliasDeclaration != NULL);
 
 4954                         ROSE_ASSERT(derivedDeclaration != NULL);
 
 4958                         ROSE_ASSERT(symbol != NULL);
 
 4960                         symbolTable->insert(name,symbol);
 
 4968                    case V_SgNamespaceDeclarationStatement:
 
 4971                         ROSE_ASSERT(derivedDeclaration != NULL);
 
 4975                         ROSE_ASSERT(symbol != NULL);
 
 4977                         symbolTable->insert(name,symbol);
 
 4983                    case V_SgUsingDirectiveStatement:
 
 4984                    case V_SgPragmaDeclaration:
 
 4985                    case V_SgTemplateInstantiationDirectiveStatement:
 
 4986                    case V_SgUsingDeclarationStatement:
 
 4990                        printf (
"This declaration is ignored in rebuilding symbol table %p = %s = %s \n",*i,(*i)->class_name().c_str(),
get_name(*i).c_str());
 
 4999                        printf (
"An ASM statement (SgAsmStmt) declaration is not really a declaration %p = %s = %s \n",*i,(*i)->class_name().c_str(),
get_name(*i).c_str());
 
 5005                    case V_SgVariableDefinition:
 
 5006                    case V_SgFunctionParameterList:
 
 5007                    case V_SgCtorInitializerList:
 
 5010                        printf (
"Special cases not handled %p = %s = %s \n",*i,(*i)->class_name().c_str(),
get_name(*i).c_str());
 
 5014                  case V_SgStaticAssertionDeclaration:
 
 5018                        printf (
"A static assertion statement (SgStaticAssertionDeclaration) declaration is not really a declaration %p = %s = %s \n",*i,(*i)->class_name().c_str(),
get_name(*i).c_str());
 
 5025                        printf (
"Error: Default reached in rebuildSymbolTable declaration = %p = %s \n",declaration,declaration->
class_name().c_str());
 
 5030               ROSE_ASSERT(symbolTable != NULL);
 
 5031               ROSE_ASSERT(symbolTable->get_table() != NULL);
 
 5037     ROSE_ASSERT(symbolTable != NULL);
 
 5038     ROSE_ASSERT(symbolTable->get_table() != NULL);
 
 5041     printf (
"Leaving SageInterface::rebuildSymbolTable(): fixup declarations in Symbol Table from %p = %s \n",scope,scope->
class_name().c_str());
 
 5045     printf (
"Symbol Table from %p = %s at: \n",scope,scope->
class_name().c_str());
 
 5047     symbolTable->
print(
"Called from SageInterface::rebuildSymbolTable()");
 
 
 5062#ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT 
 5063     ROSE_ASSERT(this_scope != NULL);
 
 5064     ROSE_ASSERT(copy_scope != NULL);
 
 5067     printf (
"In fixupReferencesToSymbols(this_scope = %p = %s = %s, copy_scope = %p = %s = %s) \n",
 
 5075     printf (
"Before fixup: this scope = %p = %s this_symbolTable->get_table()->size() = %" PRIuPTR 
" \n",this_scope,this_scope->
class_name().c_str(),this_symbolTable->get_table()->size());
 
 5076     printf (
"Before fixup: copy scope = %p = %s copy_symbolTable->get_table()->size() = %" PRIuPTR 
" \n",copy_scope,copy_scope->
class_name().c_str(),copy_symbolTable->get_table()->size());
 
 5082     if (this_symbolTable->get_table()->size() != copy_symbolTable->get_table()->size())
 
 5086               printf (
"Before fixup: this scope = %p = %s this_symbolTable->get_table()->size() = %" PRIuPTR 
" \n",this_scope,this_scope->
class_name().c_str(),this_symbolTable->get_table()->size());
 
 5087               printf (
"Before fixup: copy scope = %p = %s copy_symbolTable->get_table()->size() = %" PRIuPTR 
" \n",copy_scope,copy_scope->
class_name().c_str(),copy_symbolTable->get_table()->size());
 
 5088               printf (
"Warning the symbols tables in these different scopes are different sizes \n");
 
 5093     SgSymbolTable::hash_iterator i = this_symbolTable->get_table()->begin();
 
 5096     std::map<SgNode*, SgNode*> replacementMap;
 
 5098     while (i != this_symbolTable->get_table()->end())
 
 5100          ROSE_ASSERT ( isSgSymbol( (*i).second ) != NULL );
 
 5102          SgName name     = (*i).first;
 
 5105          ROSE_ASSERT ( symbol != NULL );
 
 5107          SgSymbol* associated_symbol = NULL;
 
 5109          printf (
"Symbol number: %d (pair.first (SgName) = %s) pair.second (SgSymbol) = %p sage_class_name() = %s \n",counter,i->first.str(),i->second,i->second->class_name().c_str());
 
 5112          SgSymbolTable::hash_iterator associated_symbol_iterator = copy_symbolTable->get_table()->find(name);
 
 5117          while (associated_symbol_iterator != copy_symbolTable->get_table()->end() && associated_symbol_iterator->first == name)
 
 5119               if ( associated_symbol_iterator->second->variantT() == symbol->
variantT() )
 
 5121                    associated_symbol = associated_symbol_iterator->second;
 
 5124               associated_symbol_iterator++;
 
 5127          if (associated_symbol != NULL)
 
 5129               ROSE_ASSERT ( associated_symbol != NULL );
 
 5132               ROSE_ASSERT(copy_scope->symbol_exists(associated_symbol) == 
true);
 
 5137               replacementMap.insert(pair<SgNode*,SgNode*>(symbol,associated_symbol));
 
 5144               help.get_copiedNodeMap().insert(pair<const SgNode*,SgNode*>(symbol,associated_symbol));
 
 5151                    printf (
"Warning: Symbol number: %d (pair.first (SgName) = %s) pair.second (SgSymbol) = %p sage_class_name() = %s \n",counter,i->first.str(),i->second,i->second->class_name().c_str());
 
 5152                    printf (
"Warning: associated_symbol == NULL, need to investigate this (ignoring for now) \n");
 
 5162     printf (
"\n\n************************************************************\n");
 
 5163     printf (
"fixupReferencesToSymbols(this_scope = %p copy_scope = %p = %s = %s): calling Utils::edgePointerReplacement() \n",this_scope,copy_scope,copy_scope->
class_name().c_str(),
get_name(copy_scope).c_str());
 
 5169     printf (
"fixupReferencesToSymbols(): calling Utils::edgePointerReplacement(): DONE \n");
 
 5170     printf (
"************************************************************\n\n");
 
 5172     printf (
"\n\n After replacementMapTraversal(): intermediateDeleteSet: \n");
 
 5173     displaySet(intermediateDeleteSet,
"After Utils::edgePointerReplacement");
 
 5175     printf (
"After fixup: this_symbolTable->get_table()->size() = %" PRIuPTR 
" \n",this_symbolTable->get_table()->size());
 
 5176     printf (
"After fixup: copy_symbolTable->get_table()->size() = %" PRIuPTR 
" \n",copy_symbolTable->get_table()->size());
 
 5185     printf (
"Exiting as a test in fixupReferencesToSymbols() \n");
 
 
 5201               vector<SgFile*> fileList;
 
 5202               void visit ( 
SgNode* node)
 
 5204                    SgFile* file = isSgFile(node);
 
 5205                    ROSE_ASSERT(file != NULL);
 
 5208                         fileList.push_back(file);
 
 5212              virtual ~FileTraversal() {}
 
 5215     FileTraversal fileTraversal;
 
 5220#ifdef ROSE_ENABLE_BINARY_ANALYSIS 
 5231     return fileTraversal.fileList;
 
 
 5249      void visit ( 
SgNode* node)
 
 5251        project = isSgProject(node);
 
 5252        ROSE_ASSERT(project!= NULL);
 
 5254      virtual ~ProjectTraversal() {}
 
 5257  ProjectTraversal projectTraversal;
 
 5259  return projectTraversal.project;
 
 5261  std::vector<SgProject* > resultlist = getSgNodeListFromMemoryPool<SgProject>();
 
 5262  if (resultlist.empty())
 
 5264  ROSE_ASSERT(resultlist.size()==1);
 
 5265  return resultlist[0];
 
 
 5270    return getEnclosingNode<SgProject>(node, 
true );
 
 
 5275  if (isSgFunctionRefExp(func))
 
 5277    return isSgFunctionRefExp(func)->get_symbol()->get_declaration();
 
 5279  else if (isSgDotExp(func) || isSgArrowExp(func))
 
 5282    if (isSgMemberFunctionRefExp(func2))
 
 5283      return isSgMemberFunctionRefExp(func2)->get_symbol()->get_declaration();
 
 5286      cerr<<
"Warning in SageInterface::getDeclarationOfNamedFunction(): rhs operand of dot or arrow operations is not a member function, but a "<<func2->
class_name()<<endl;
 
 
 5295  const SgExpressionPtrList& ls = el->get_expressions();
 
 5296  if (ls.empty()) 
return 0;
 
 5297  if (isSgAssignOp(ls.back())) 
return 0;
 
 
 5304  ASSERT_not_null(astNode);
 
 5305  Rose_STL_Container<SgNode*> arr_exp_list = NodeQuery::querySubTree(astNode,V_SgPntrArrRefExp);
 
 5306  for (
SgNode* expr : arr_exp_list)
 
 5309    ASSERT_not_null(arr_exp);
 
 5310    Rose_STL_Container<SgNode*> refList = NodeQuery::querySubTree(arr_exp->
get_lhs_operand(),V_SgVarRefExp);
 
 5311    for (
SgNode* ref : refList)
 
 5314      ASSERT_not_null(cur_ref);
 
 5316      ASSERT_not_null(sym);
 
 5318      ASSERT_not_null(iname);
 
 5319      SgArrayType * a_type = isSgArrayType(iname->get_typeptr());
 
 5320      if (a_type && a_type->get_dim_info())
 
 5322        Rose_STL_Container<SgNode*> dim_ref_list = NodeQuery::querySubTree(a_type->get_dim_info(),V_SgVarRefExp);
 
 5323        for (Rose_STL_Container<SgNode*>::iterator iter2 = dim_ref_list.begin(); iter2 != dim_ref_list.end(); iter2++)
 
 5326          NodeList_t.push_back(dim_ref);
 
 5336#if (INLINE_OPTIMIZED_IS_LANGUAGE_KIND_FUNCTIONS == 0) 
 5340#if OPTIMIZE_IS_LANGUAGE_KIND_FUNCTIONS 
 5342     return Rose::is_Ada_language;
 
 5344     bool returnValue = 
false;
 
 5348     int size = (int)fileList.size();
 
 5349     for (
int i = 0; i < size; i++)
 
 5351          if (fileList[i]->get_Ada_only() == 
true)
 
 5362#if OPTIMIZE_IS_LANGUAGE_KIND_FUNCTIONS 
 5364     return Rose::is_C_language;
 
 5366     bool returnValue = 
false;
 
 5370     int size = (int)fileList.size();
 
 5371     for (
int i = 0; i < size; i++)
 
 5373          if (fileList[i]->get_C_only() == 
true)
 
 5384#if OPTIMIZE_IS_LANGUAGE_KIND_FUNCTIONS 
 5386     return Rose::is_OpenMP_language;
 
 5388     bool returnValue = 
false;
 
 5392     int size = (int)fileList.size();
 
 5393     for (
int i = 0; i < size; i++)
 
 5395          if (fileList[i]->get_openmp() == 
true)
 
 5406#if OPTIMIZE_IS_LANGUAGE_KIND_FUNCTIONS 
 5408     return Rose::is_UPC_language;
 
 5410     bool returnValue = 
false;
 
 5414     int size = (int)fileList.size();
 
 5415     for (
int i = 0; i < size; i++)
 
 5417          if (fileList[i]->get_UPC_only() == 
true)
 
 5429#if OPTIMIZE_IS_LANGUAGE_KIND_FUNCTIONS 
 5431     return Rose::is_CAF_language;
 
 5433     bool returnValue = 
false;
 
 5437     int size = (int)fileList.size();
 
 5438     for (
int i = 0; i < size; i++)
 
 5440          if (fileList[i]->get_CoArrayFortran_only()==
true)
 
 5453#if OPTIMIZE_IS_LANGUAGE_KIND_FUNCTIONS 
 5455     return Rose::is_UPC_dynamic_threads;
 
 5457     bool returnValue = 
false;
 
 5461     int size = (int)fileList.size();
 
 5462     for (
int i = 0; i < size; i++)
 
 5464          if (fileList[i]->get_upc_threads() > 0)
 
 5477#if OPTIMIZE_IS_LANGUAGE_KIND_FUNCTIONS 
 5479     return Rose::is_C99_language;
 
 5481     bool returnValue = 
false;
 
 5485     int size = (int)fileList.size();
 
 5486     for (
int i = 0; i < size; i++)
 
 5488          if (fileList[i]->get_C99_only() == 
true)
 
 5499#if OPTIMIZE_IS_LANGUAGE_KIND_FUNCTIONS 
 5501     return Rose::is_Cxx_language;
 
 5503     bool returnValue = 
false;
 
 5507     int size = (int)fileList.size();
 
 5508     for (
int i = 0; i < size; i++)
 
 5511          if (fileList[i]->get_Cxx_only() == 
true)
 
 5513               ROSE_ASSERT(fileList[i]->get_Fortran_only() == 
false && fileList[i]->get_C99_only() == 
false && fileList[i]->get_C_only() == 
false && fileList[i]->get_binary_only() == 
false);
 
 5526#if OPTIMIZE_IS_LANGUAGE_KIND_FUNCTIONS 
 5528     return Rose::is_Java_language;
 
 5530     bool returnValue = 
false;
 
 5534     int size = (int)fileList.size();
 
 5535     for (
int i = 0; i < size; i++)
 
 5537          if (fileList[i]->get_Java_only() == 
true)
 
 5548#if OPTIMIZE_IS_LANGUAGE_KIND_FUNCTIONS 
 5550     return Rose::is_Jvm_language;
 
 5552     bool returnValue = 
false;
 
 5556     int size = (int)fileList.size();
 
 5557     for (
int i = 0; i < size; i++)
 
 5559          if (fileList[i]->get_Jvm_only() == 
true)
 
 5571#if OPTIMIZE_IS_LANGUAGE_KIND_FUNCTIONS 
 5573     return Rose::is_Jovial_language;
 
 5575     bool returnValue = 
false;
 
 5579     int size = (int)fileList.size();
 
 5580     for (
int i = 0; i < size; i++)
 
 5582          if (fileList[i]->get_Jovial_only() == 
true)
 
 5594#if OPTIMIZE_IS_LANGUAGE_KIND_FUNCTIONS 
 5596     return Rose::is_Fortran_language;
 
 5598     bool returnValue = 
false;
 
 5602     int size = (int)fileList.size();
 
 5603     for (
int i = 0; i < size; i++)
 
 5605          if (fileList[i]->get_Fortran_only() == 
true)
 
 5617#if OPTIMIZE_IS_LANGUAGE_KIND_FUNCTIONS 
 5619     return Rose::is_binary_executable;
 
 5621     bool returnValue = 
false;
 
 5625     int size = (int)fileList.size();
 
 5626     for (
int i = 0; i < size; i++)
 
 5628          if (fileList[i]->get_binary_only() == 
true)
 
 5639#if OPTIMIZE_IS_LANGUAGE_KIND_FUNCTIONS 
 5641     return Rose::is_PHP_language;
 
 5643     bool returnValue = 
false;
 
 5647     int size = (int)fileList.size();
 
 5648     for (
int i = 0; i < size; i++)
 
 5650          if (fileList[i]->get_PHP_only() == 
true)
 
 5661#if OPTIMIZE_IS_LANGUAGE_KIND_FUNCTIONS 
 5663     return Rose::is_Python_language;
 
 5665     bool returnValue = 
false;
 
 5669     int size = (int)fileList.size();
 
 5670     for (
int i = 0; i < size; i++)
 
 5672          if (fileList[i]->get_Python_only() == 
true)
 
 5683#if OPTIMIZE_IS_LANGUAGE_KIND_FUNCTIONS 
 5685     return Rose::is_Cuda_language;
 
 5687     bool returnValue = 
false;
 
 5691     int size = (int)fileList.size();
 
 5692     for (
int i = 0; i < size; i++)
 
 5694          if (fileList[i]->get_Cuda_only() == 
true)
 
 5705#if OPTIMIZE_IS_LANGUAGE_KIND_FUNCTIONS 
 5707     return Rose::is_OpenCL_language;
 
 5709     bool returnValue = 
false;
 
 5713     int size = (int)fileList.size();
 
 5714     for (
int i = 0; i < size; i++)
 
 5716          if (fileList[i]->get_OpenCL_only() == 
true)
 
 5764     ASSERT_not_null(functionDefinition);
 
 5765     std::map<SgNode*,int> & scopeMap = functionDefinition->get_scope_number_list();
 
 5768     scopeMap.erase(scopeMap.begin(),scopeMap.end());
 
 5770     ASSERT_require(scopeMap.empty() == 
true);
 
 5771     ASSERT_require(functionDefinition->get_scope_number_list().empty() == 
true);
 
 
 5781     ROSE_ASSERT(functionDefinition != NULL);
 
 5784     ROSE_ASSERT(functionDefinition->get_scope_number_list().empty() == 
true);
 
 5790               ScopeNumberingTraversal() : count (0), storedFunctionDefinition(NULL) {}
 
 5791               void visit (
SgNode* node)
 
 5798                         if (testFunctionDefinition != NULL && storedFunctionDefinition == NULL)
 
 5800                              ROSE_ASSERT(storedFunctionDefinition == NULL);
 
 5801                              storedFunctionDefinition = testFunctionDefinition;
 
 5805                         ROSE_ASSERT(storedFunctionDefinition != NULL);
 
 5809                         std::map<SgNode*,int> & scopeMap = storedFunctionDefinition->get_scope_number_list();
 
 5810                         scopeMap.insert(pair<SgNode*,int>(scope,count));
 
 5812                         string functionName = storedFunctionDefinition->get_declaration()->get_name().str();
 
 5813                         printf (
"In function = %s insert scope = %p = %s with count = %d into local map (size = %d) \n",
 
 5814                              functionName.c_str(),scope,scope->
class_name().c_str(),count,scopeMap.size());
 
 5825       ScopeNumberingTraversal traversal;
 
 5826       traversal.traverse(functionDefinition, preorder);
 
 
 5840     ROSE_ASSERT(globalScope != NULL);
 
 5841     std::map<SgNode*,std::string> & mangledNameCache = globalScope->get_mangledNameCache();
 
 5844     mangledNameCache.erase(mangledNameCache.begin(),mangledNameCache.end());
 
 5846     ROSE_ASSERT(mangledNameCache.empty() == 
true);
 
 5847     ROSE_ASSERT(globalScope->get_mangledNameCache().empty() == 
true);
 
 5855     ROSE_ASSERT(globalScope != NULL);
 
 5856     ROSE_ASSERT(globalScope->get_mangledNameCache().empty() == 
true);
 
 5862               MangledNameTraversal() : storedGlobalScope(NULL) {}
 
 5863               void visit (
SgNode* node)
 
 5866                    if ( (mangleableNode != NULL) || (isSgGlobal(node) != NULL) )
 
 5869                         SgGlobal* testGlobalScope = isSgGlobal(mangleableNode);
 
 5870                         if (testGlobalScope != NULL && storedGlobalScope == NULL)
 
 5872                              ROSE_ASSERT(storedGlobalScope == NULL);
 
 5873                              storedGlobalScope = testGlobalScope;
 
 5877                         ROSE_ASSERT(storedGlobalScope != NULL);
 
 5879                         string mangledName = mangleableNode->get_mangled_name();
 
 5882                         std::map<SgNode*,std::string> & mangledNameCache = storedGlobalScope->get_mangledNameCache();
 
 5883                         mangledNameCache.insert(pair<SgNode*,std::string>(mangleableNode,mangledName));
 
 5885                         string nodeName = 
get_name(mangleableNode);
 
 5886                         printf (
"At node = %p = %s = %s in local map (size = %d) \n",
 
 5887                              mangleableNode,mangleableNode->
class_name().c_str(),nodeName.c_str(),mangledNameCache.size());
 
 5897       MangledNameTraversal traversal;
 
 5898       traversal.traverse(globalScope, preorder);
 
 5910     SgGlobal* globalScope = isSgGlobal(astNode);
 
 5912     if (globalScope == NULL && isSgFile(astNode) != NULL)
 
 5914          globalScope = isSgFile(astNode)->get_globalScope();
 
 5915          ROSE_ASSERT(globalScope != NULL);
 
 5918     if (globalScope == NULL && isSgProject(astNode) != NULL)
 
 5921          ROSE_ASSERT( isSgProject(astNode)->get_fileList()->size() == 1 );
 
 5922          globalScope = isSgProject(astNode)->get_fileList()->operator[](0)->get_globalScope();
 
 5923          ROSE_ASSERT(globalScope != NULL);
 
 5927     while (temp->
get_parent() != NULL && globalScope == NULL)
 
 5930          globalScope = isSgGlobal(temp);
 
 5932     ROSE_ASSERT(globalScope != NULL);
 
 5939     std::map<SgNode*,std::string>::iterator i = mangledNameCache.find(astNode);
 
 5942     if (i != mangledNameCache.end())
 
 5946          mangledName = i->second;
 
 
 5957#define DEBUG_SAGE_INTERFACE_ADD_MANGLED_TO_CACHE 0 
 5958#define DEBUG_MANGLED_SHORTNAME 1 
 5967#if DEBUG_SAGE_INTERFACE_ADD_MANGLED_TO_CACHE 
 5968     printf (
"In SageInterface::addMangledNameToCache(): TOP: astNode = %p = %s oldMangledName = %s \n",astNode,astNode->
class_name().c_str(),oldMangledName.c_str());
 
 5972#ifdef DEBUG_MANGLED_SHORTNAME 
 5973     static std::unordered_map<uint64_t, std::string> mangledNameHashCollisionCheckMap;
 
 5978     SgGlobal* globalScope = isSgGlobal(astNode);
 
 5980     if (globalScope == NULL && isSgFile(astNode) != NULL)
 
 5982          globalScope = isSgFile(astNode)->get_globalScope();
 
 5983          ROSE_ASSERT(globalScope != NULL);
 
 5986     if (globalScope == NULL && isSgProject(astNode) != NULL)
 
 5989          ROSE_ASSERT( isSgProject(astNode)->get_fileList()->size() == 1 );
 
 5990          globalScope = isSgProject(astNode)->get_fileList()->operator[](0)->get_globalScope();
 
 5991          ROSE_ASSERT(globalScope != NULL);
 
 5995     while (temp->
get_parent() != NULL && globalScope == NULL)
 
 5998          globalScope = isSgGlobal(temp);
 
 6000     ROSE_ASSERT(globalScope != NULL);
 
 6005     std::string mangledName;
 
 6007     if (SgProject::get_mangled_noshortname() == 
false) {
 
 6010         if (oldMangledName.size() > 40) {
 
 6011             std::map<std::string, uint64_t>::const_iterator shortMNIter = shortMangledNameCache.find(oldMangledName);
 
 6012             uint64_t idNumber = 0;
 
 6013             if (shortMNIter != shortMangledNameCache.end())
 
 6015                     idNumber = shortMNIter->second;
 
 6017#ifdef DEBUG_MANGLED_SHORTNAME 
 6019                   auto collisionIt = mangledNameHashCollisionCheckMap.find(idNumber);
 
 6020                   if(collisionIt != mangledNameHashCollisionCheckMap.end() &&
 
 6021                     oldMangledName != shortMNIter->first)
 
 6023                     mlog[Sawyer::Message::Common::ERROR] <<
" Got a short mangled name collision.  \n "<<
 
 6024                       oldMangledName << 
" and \n " << shortMNIter->first << 
" \n" <<
 
 6028                     mangledNameHashCollisionCheckMap[idNumber] = oldMangledName;
 
 6036                   hasher.
insert(oldMangledName);
 
 6038                   idNumber = hasher.
toU64();
 
 6039                   shortMangledNameCache.insert(std::pair<std::string, uint64_t>(oldMangledName, idNumber));
 
 6042             std::ostringstream mn;
 
 6044             mangledName = mn.str();
 
 6046             mangledName = oldMangledName;
 
 6057     static unsigned long counter = 0;
 
 6061     if (counter++ % 500 == 0)
 
 6063          printf (
"WARNING: In SageInterface::addMangledNameToCache(): Using longer forms of mangled names (can cause some function names with embedded special characters to fail; test2004_141.C) \n");
 
 6065     mangledName = oldMangledName;
 
 6072     printf (
"Updating mangled name cache for node = %p = %s with mangledName = %s \n",astNode,astNode->
class_name().c_str(),mangledName.c_str());
 
 6075#ifdef ROSE_DEBUG_NEW_EDG_ROSE_CONNECTION 
 6081               printf (
"Warning: SageInterface::addMangledNameToCache(): In it might be premature to add this IR node and name to the mangledNameCache: statement = %p = %s oldMangledName = %s \n",
 
 6082                    statement,statement->
class_name().c_str(),oldMangledName.c_str());
 
 6087     mangledNameCache.insert(pair<SgNode*,string>(astNode,mangledName));
 
 6089#if DEBUG_SAGE_INTERFACE_ADD_MANGLED_TO_CACHE 
 6090     printf (
"In SageInterface::addMangledNameToCache(): returning mangledName = %s \n",mangledName.c_str());
 
 
 6114                  : storedNondefiningDeclaration(nonDefiningDeclaration),
 
 6115                    storedDefiningDeclaration(definingDeclaration)
 
 6117                    storedDeclarationFound                            = 
false;
 
 6118                    nonDefiningDeclarationPreceedsDefiningDeclaration = 
false;
 
 6121               void visit (
SgNode* node)
 
 6123                    ROSE_ASSERT(storedNondefiningDeclaration != NULL);
 
 6124                    ROSE_ASSERT(storedDefiningDeclaration != NULL);
 
 6125                    ROSE_ASSERT(storedNondefiningDeclaration != storedDefiningDeclaration);
 
 6133                    if ( declaration != NULL )
 
 6135                         if (storedDeclarationFound == 
false)
 
 6137                              if (declaration == storedDefiningDeclaration)
 
 6139                                   storedDeclarationFound = 
true;
 
 6140                                   nonDefiningDeclarationPreceedsDefiningDeclaration = 
false;
 
 6142                              if (declaration == storedNondefiningDeclaration)
 
 6144                                   storedDeclarationFound = 
true;
 
 6145                                   nonDefiningDeclarationPreceedsDefiningDeclaration = 
true;
 
 6152               bool storedDeclarationFound;
 
 6153               bool nonDefiningDeclarationPreceedsDefiningDeclaration;
 
 6160     ROSE_ASSERT(nonDefiningDeclaration != NULL);
 
 6162     printf (
"In SageInterface::declarationPreceedsDefinition(): \n");
 
 6163     printf (
"     nondefiningDeclaration                            = %p = %s \n",nonDefiningDeclaration,nonDefiningDeclaration->
class_name().c_str());
 
 6164     nonDefiningDeclaration->
get_file_info()->display(
"nonDefiningDeclaration");
 
 6165     printf (
"     nondefiningDeclaration->get_definingDeclaration() = %p \n",nonDefiningDeclaration->
get_definingDeclaration());
 
 6166     printf (
"     definingDeclaration                               = %p = %s \n",definingDeclaration,definingDeclaration->
class_name().c_str());
 
 6167     definingDeclaration->
get_file_info()->display(
"definingDeclaration");
 
 6168     printf (
"************************************************************* \n");
 
 6175          printf (
"In SageInterface::declarationPreceedsDefinition() (warning): \n");
 
 6176          printf (
"     nondefiningDeclaration                            = %p \n",nonDefiningDeclaration);
 
 6177          printf (
"     nondefiningDeclaration->get_definingDeclaration() = %p \n",nonDefiningDeclaration->
get_definingDeclaration());
 
 6178          printf (
"     definingDeclaration                               = %p \n",definingDeclaration);
 
 6183     bool returnResult = 
false;
 
 6184     if (nonDefiningDeclaration != definingDeclaration)
 
 6187          SgGlobal* globalScope = TransformationSupport::getGlobalScope(definingDeclaration);
 
 6188          ROSE_ASSERT(globalScope != NULL);
 
 6191          DeclarationOrderTraversal traversal (nonDefiningDeclaration,definingDeclaration);
 
 6194          traversal.traverse(globalScope, preorder);
 
 6197          printf (
"Skipping traversal within SageInterface::declarationPreceedsDefinition() \n");
 
 6198          traversal.storedDeclarationFound = 
true;
 
 6199          traversal.nonDefiningDeclarationPreceedsDefiningDeclaration = 
false;
 
 6206          if (traversal.storedDeclarationFound == 
false)
 
 6209               printf (
"In SageInterface::declarationPreceedsDefinition(): warning, nonDefiningDeclaration not found in the AST \n");
 
 6210               nonDefiningDeclaration->
get_file_info()->display(
"nonDefiningDeclaration");
 
 6211               definingDeclaration->
get_file_info()->display(
"definingDeclaration");
 
 6212               printf (
"---------------------------------------------------- \n\n");
 
 6216               returnResult = 
true;
 
 6220               returnResult = traversal.nonDefiningDeclarationPreceedsDefiningDeclaration;
 
 6226     printf (
"returnResult = %s \n",returnResult ? 
"true" : 
"false");
 
 6227     printf (
"************************************************************* \n\n");
 
 6229     return returnResult;
 
 
 6246                  : storedFunctionCall(functionCall)
 
 6248                    ROSE_ASSERT(functionCall != NULL);
 
 6249                    ROSE_ASSERT(functionCall->get_function() != NULL);
 
 6250                    SgExpression* functionExpression = functionCall->get_function();
 
 6252                    switch (functionExpression->
variantT())
 
 6258                         case V_SgArrowStarOp:
 
 6259                         case V_SgPointerDerefExp:
 
 6262                              printf (
"These are the acceptable cases, but not handled yet... \n");
 
 6266                         case V_SgFunctionRefExp:
 
 6269                              ROSE_ASSERT(functionRefExp != NULL);
 
 6271                              ROSE_ASSERT(functionSymbol != NULL);
 
 6274                              ROSE_ASSERT(functionSymbol->get_declaration() != NULL);
 
 6275                              storedFunctionDeclaration = functionSymbol->get_declaration();
 
 6279                         case V_SgMemberFunctionRefExp:
 
 6282                              ROSE_ASSERT(memberFunctionRefExp != NULL);
 
 6284                              ROSE_ASSERT(memberFunctionSymbol != NULL);
 
 6286                              storedFunctionDeclaration = memberFunctionSymbol->get_declaration();
 
 6288                              printf (
"V_SgMemberFunctionRefExp case not handled yet... \n");
 
 6294                              printf (
"default reached in SageInterface::functionCallExpressionPreceedsDeclarationWhichAssociatesScope() functionExpression = %s \n",
 
 6302                    ROSE_ASSERT(storedFunctionDeclaration != NULL);
 
 6304                    storedFunctionCallFound                                       = 
false;
 
 6308               void visit (
SgNode* node)
 
 6310                    ROSE_ASSERT(storedFunctionCall != NULL);
 
 6311                    ROSE_ASSERT(storedFunctionDeclaration != NULL);
 
 6314                    if (storedFunctionCallFound == 
false)
 
 6317                         if ( functionCall != NULL )
 
 6319                              if (functionCall == storedFunctionCall)
 
 6321                                   storedFunctionCallFound = 
true;
 
 6331                         ROSE_ASSERT(storedFunctionDeclaration != NULL);
 
 6344                                   storedFunctionCallFound = 
true;
 
 6350                                   printf (
"Found a declaration which preceeds the function \n");
 
 6351                                   declaration->
get_file_info()->display(
"Found a declaration which preceeds the function: declaration");
 
 6352                                   storedFunctionCall->get_file_info()->display(
"Found a declaration which preceeds the function: storedFunctionCall");
 
 6353                                   storedFunctionDeclaration->get_file_info()->display(
"Found a declaration which preceeds the function: storedFunctionDeclaration");
 
 6359                                   if (parentScopeOfDeclaration == NULL)
 
 6362                                        printf (
"Strange case of parentScopeOfDeclaration == NULL in SageInterface::functionCallExpressionPreceedsDeclarationWhichAssociatesScope() \n");
 
 6364                                        if (parent != NULL) {
 
 6365                                           printf (
"declaration->get_parent() = %s \n",parent->
class_name().c_str());
 
 6368                                           printf (
"declaration->get_parent() = NULL \n");
 
 6370                                        declaration->
get_file_info()->display(
"case of parentScopeOfDeclaration == NULL");
 
 6379               bool storedFunctionCallFound;
 
 6387     ROSE_ASSERT(functionCall != NULL);
 
 6389     printf (
"In SageInterface::functionCallExpressionPreceedsDeclarationWhichAssociatesScope(): \n");
 
 6390     printf (
"     storedFunctionCall                           = %p = %s \n",functionCall,functionCall->
class_name().c_str());
 
 6391     functionCall->
get_file_info()->display(
"storedFunctionCall");
 
 6392     printf (
"     storedFunctionCall->get_function() = %p = %s \n",functionCall->get_function(),functionCall->get_function()->
class_name().c_str());
 
 6393     printf (
"************************************************************* \n");
 
 6397     bool returnResult = 
false;
 
 6400     SgGlobal* globalScope = TransformationSupport::getGlobalScope(functionCall);
 
 6401     ROSE_ASSERT(globalScope != NULL);
 
 6404     DeclarationOrderTraversal traversal (functionCall);
 
 6407     traversal.traverse(globalScope, preorder);
 
 6410     printf (
"Skipping traversal within SageInterface::functionCallExpressionPreceedsDeclarationWhichAssociatesScope() \n");
 
 6411     traversal.storedFunctionCallFound = 
true;
 
 6412     traversal.functionCallExpressionPreceedsDeclarationWhichAssociatesScope = 
false;
 
 6419     if (traversal.storedFunctionCallFound == 
false)
 
 6422          printf (
"In SageInterface::functionCallExpressionPreceedsDeclarationWhichAssociatesScope(): warning, storedFunctionCall not found in the AST \n");
 
 6424          printf (
"---------------------------------------------------- \n\n");
 
 6429          returnResult = 
true;
 
 6433          returnResult = traversal.functionCallExpressionPreceedsDeclarationWhichAssociatesScope;
 
 6437     ROSE_ASSERT(traversal.storedFunctionCallFound == 
true);
 
 6439     printf (
"returnResult = %s \n",returnResult ? 
"true" : 
"false");
 
 6440     printf (
"************************************************************* \n\n");
 
 6442     return returnResult;
 
 
 6463     ROSE_ASSERT(project != NULL);
 
 6470     Rose_STL_Container<string>::iterator i = fileList.begin();
 
 6473     if ( fileList.empty() == 
true )
 
 6475          return "empty_file_list";
 
 6479          string filename = *i;
 
 6485          if (i != fileList.begin())
 
 6486               projectName += 
"--";
 
 6490          string filenameWithoutSuffix;
 
 6491          if ( i != fileList.end() || supressSuffix == 
true )
 
 6494               filenameWithoutSuffix = filename;
 
 6501          filename = filenameWithoutPathOrSuffix;
 
 6503          unsigned long int n = 0;
 
 6504          while (n < filename.size())
 
 6506               if (filename[n] == 
'/')
 
 6513          projectName += filename;
 
 6517     while (i != fileList.end());
 
 
 6536     if (currentScope == NULL)
 
 6538     ROSE_ASSERT(currentScope != NULL);
 
 6541     while ((functionSymbol == NULL) && (tempScope != NULL))
 
 6543          functionSymbol = tempScope->lookup_function_symbol(functionName);
 
 6545          printf (
"In lookupFunctionSymbolInParentScopes(): Searching scope = %p = %s functionName = %s functionSymbol = %p \n",tempScope,tempScope->
class_name().c_str(),functionName.str(),functionSymbol);
 
 6548               tempScope = isSgGlobal(tempScope) ? NULL : tempScope->
get_scope();
 
 6552     return functionSymbol;
 
 
 6563     if (currentScope == NULL)
 
 6565     ROSE_ASSERT(currentScope != NULL);
 
 6568     while ((functionSymbol == NULL) && (tempScope != NULL))
 
 6570          functionSymbol = tempScope->lookup_template_function_symbol(functionName, ftype, tplparams);
 
 6572          printf (
"In lookupTemplateFunctionSymbolInParentScopes(): Searching scope = %p = %s functionName = %s functionSymbol = %p \n",tempScope,tempScope->
class_name().c_str(),functionName.str(),functionSymbol);
 
 6575               tempScope = isSgGlobal(tempScope) ? NULL : tempScope->
get_scope();
 
 6579     return functionSymbol;
 
 
 6590     if (currentScope == NULL)
 
 6592     ROSE_ASSERT(currentScope != NULL);
 
 6595     while ((functionSymbol == NULL) && (tempScope != NULL))
 
 6597          functionSymbol = tempScope->lookup_template_member_function_symbol(functionName, ftype, tplparams);
 
 6599          printf (
"In lookupTemplateMemberFunctionSymbolInParentScopes(): Searching scope = %p = %s functionName = %s functionSymbol = %p \n",tempScope,tempScope->
class_name().c_str(),functionName.str(),functionSymbol);
 
 6602               tempScope = isSgGlobal(tempScope) ? NULL : tempScope->
get_scope();
 
 6606     return functionSymbol;
 
 
 6614     if (isSgType(astNode) != NULL)
 
 6616          printf (
"Error: the mechanism to add text to be unparsed at IR nodes is not intended to operate on SgType IR nodes (since they are shared) \n");
 
 6620     if (astNode->
attributeExists(AstUnparseAttribute::markerName) == 
true)
 
 6622          AstUnparseAttribute* code = 
dynamic_cast<AstUnparseAttribute*
>(astNode->
getAttribute(AstUnparseAttribute::markerName));
 
 6623          ROSE_ASSERT(code != NULL);
 
 6627          code->addString(s,inputlocation);
 
 6636          AstUnparseAttribute* code = 
new AstUnparseAttribute(s,inputlocation);
 
 6637          ROSE_ASSERT(code != NULL);
 
 
 6654     ROSE_ASSERT(cscope != NULL);
 
 6656     while ((cscope != NULL) && (symbol == NULL))
 
 6659          symbol = cscope->lookup_class_symbol(name,NULL);
 
 6662               cscope = isSgGlobal(cscope) ? NULL : cscope->
get_scope();
 
 6693    if (currentScope == NULL)
 
 6695    ROSE_ASSERT(currentScope != NULL);
 
 6697    while (functionSymbol == NULL && tempScope != NULL)
 
 6699        functionSymbol = tempScope->lookup_function_symbol(functionName,t);
 
 6701            tempScope = isSgGlobal(tempScope) ? NULL : tempScope->
get_scope();
 
 6702        else tempScope = NULL;
 
 6704    return functionSymbol;
 
 
 6711     if (cscope == 
nullptr) {
 
 6714     ASSERT_not_null(cscope);
 
 6716     while ((cscope != 
nullptr) && (symbol == 
nullptr))
 
 6718          symbol = cscope->lookup_symbol(name,templateParameterList,templateArgumentList);
 
 6720               cscope = isSgGlobal(cscope) ? nullptr : cscope->
get_scope();
 
 
 6739#define USING_PERFORMANCE_TRACING 0 
 6743#if USING_PERFORMANCE_TRACING 
 6745     TimingPerformance timer1 (
"SageInterface::lookupSymbolInParentScopesIgnoringAliasSymbols: whole function:");
 
 6748     if (currentScope == NULL)
 
 6753     ROSE_ASSERT(currentScope != NULL);
 
 6755#define DEBUG_SYMBOL_LOOKUP_IN_PARENT_SCOPES_IGNORING_ALIAS_SYMBOLS 0 
 6757#if DEBUG_SYMBOL_LOOKUP_IN_PARENT_SCOPES_IGNORING_ALIAS_SYMBOLS 
 6758     printf (
"In SageInterface:: lookupSymbolInParentScopesIgnoringAliasSymbols(): currentScope = %p = %s (templateParameterList = %p templateArgumentList = %p) \n",
 
 6759          currentScope,currentScope->
class_name().c_str(),templateParameterList,templateArgumentList);
 
 6762     while ((currentScope != NULL) && (symbol == NULL))
 
 6764#if USING_PERFORMANCE_TRACING 
 6766          TimingPerformance timer1 (
"SageInterface::lookupSymbolInParentScopesIgnoringAliasSymbols: in loop:");
 
 6769#if DEBUG_SYMBOL_LOOKUP_IN_PARENT_SCOPES_IGNORING_ALIAS_SYMBOLS 
 6770          printf(
"   --- In SageInterface:: lookupSymbolInParentScopesIgnoringAliasSymbols(): name = %s currentScope = %p = %s \n",
 
 6771               name.str(),currentScope,currentScope->
class_name().c_str());
 
 6776          symbol = currentScope->lookup_symbol(name,templateParameterList,templateArgumentList);
 
 6778          if (isSgAliasSymbol(symbol) != NULL)
 
 6780#if DEBUG_SYMBOL_LOOKUP_IN_PARENT_SCOPES_IGNORING_ALIAS_SYMBOLS 
 6781               printf (
"Found a SgAliasSymbol: reset to NULL: symbol = %p = %s \n",symbol,symbol->
class_name().c_str());
 
 6786#if DEBUG_SYMBOL_LOOKUP_IN_PARENT_SCOPES_IGNORING_ALIAS_SYMBOLS && 1 
 6788          printf(
"   --- In SageInterface:: lookupSymbolInParentScopesIgnoringAliasSymbols(): symbol = %p \n",symbol);
 
 6789          currentScope->print_symboltable(
"In SageInterface:: lookupSymbolInParentScopesIgnoringAliasSymbols(): debug");
 
 6792               currentScope = isSgGlobal(currentScope) ? NULL : currentScope->
get_scope();
 
 6794               currentScope = NULL;
 
 6796#if DEBUG_SYMBOL_LOOKUP_IN_PARENT_SCOPES_IGNORING_ALIAS_SYMBOLS 
 6797          printf (
"   --- In SageInterface:: (base of loop) lookupSymbolInParentScopesIgnoringAliasSymbols(): cscope = %p symbol = %p \n\n",currentScope,symbol);
 
 6803#if DEBUG_SYMBOL_LOOKUP_IN_PARENT_SCOPES_IGNORING_ALIAS_SYMBOLS 
 6804          printf (
"Warning: In SageInterface:: lookupSymbolInParentScopesIgnoringAliasSymbols(): could not locate the specified name %s in any outer symbol table (templateParameterList = %p templateArgumentList = %p) \n",
 
 6805               name.str(),templateParameterList,templateArgumentList);
 
 6811     printf (
"Support for lookupSymbolInParentScopesIgnoringAliasSymbols() is not yet implemented \n");
 
 
 6833    ROSE_ASSERT(cscope);
 
 6835    while ((cscope!=NULL)&&(symbol==NULL))
 
 6837        symbol = cscope->lookup_symbol(name);
 
 6841            cscope = isSgGlobal(cscope) ? NULL : cscope->
get_scope();
 
 6867     printf (
"WARNING: SageInterface::lookupVariableSymbolInParentScopes() should be implemented similar to SageInterface::lookupClassSymbolInParentScopes() \n");
 
 6873          if (isSgAliasSymbol(symbol) != NULL)
 
 6875               printf (
"Error: This SageInterface::lookupVariableSymbolInParentScopes() function does not handle SgAliasSymbols \n");
 
 6878          result = isSgVariableSymbol(symbol);
 
 6886     ROSE_ASSERT(cscope != NULL);
 
 6888     while ((cscope != NULL) && (symbol == NULL))
 
 6891          symbol = cscope->lookup_variable_symbol(name);
 
 6894               cscope = isSgGlobal(cscope) ? NULL : cscope->
get_scope();
 
 
 6903#define DEBUG_LOOKUP_TEMPLATE_VARIABLE 0 
 6908#if DEBUG_LOOKUP_TEMPLATE_VARIABLE 
 6909     printf (
"In SageInterface::lookupTemplateVariableSymbolInParentScopes():\n");
 
 6910     printf (
"  -- name = %s\n", name.str());
 
 6911     printf (
"  -- tplparams = %p [%zd]\n", tplparams, tplparams ? tplparams->size() : 0);
 
 6912     printf (
"  -- tplargs   = %p [%zd]\n",   tplargs,   tplargs ?   tplargs->size() : 0);
 
 6913     printf (
"  -- cscope    = %p (%s)\n",     cscope,    cscope ?    cscope->
class_name().c_str() : 
"");
 
 6919     ROSE_ASSERT(cscope != NULL);
 
 6921     while ((cscope != NULL) && (symbol == NULL))
 
 6924          symbol = cscope->lookup_template_variable_symbol(name, tplparams, tplargs);
 
 6927               cscope = isSgGlobal(cscope) ? NULL : cscope->
get_scope();
 
 
 6943     ROSE_ASSERT(cscope != NULL);
 
 6945     while ((cscope != NULL) && (symbol == NULL))
 
 6949          symbol = cscope->lookup_class_symbol(name,templateArgumentList);
 
 6952               cscope = isSgGlobal(cscope) ? NULL : cscope->
get_scope();
 
 
 6966     ROSE_ASSERT(cscope != NULL);
 
 6968     while ((cscope != NULL) && (symbol == NULL))
 
 6970          symbol = cscope->lookup_nonreal_symbol(name,templateParameterList,templateArgumentList);
 
 6973               cscope = isSgGlobal(cscope) ? NULL : cscope->
get_scope();
 
 
 6988     ROSE_ASSERT(cscope != NULL);
 
 6991     printf (
"In lookupTypedefSymbolInParentScopes(): name = %s starting with cscope = %p = %s \n",name.str(),cscope,cscope->
class_name().c_str());
 
 6995     while ((cscope != NULL) && (symbol == NULL))
 
 6998          symbol = cscope->lookup_typedef_symbol(name);
 
 7001               cscope = isSgGlobal(cscope) ? NULL : cscope->
get_scope();
 
 7006          printf (
"In lookupTypedefSymbolInParentScopes(): symbol = %p next cscope = %p = %s \n",symbol,cscope,(cscope != NULL) ? cscope->
class_name().c_str() : 
"null");
 
 7011     printf (
"Leaving lookupTypedefSymbolInParentScopes(): symbol = %p \n",symbol);
 
 
 7029     ROSE_ASSERT(cscope != NULL);
 
 7031     while ((cscope != NULL) && (symbol == NULL))
 
 7037          symbol = cscope->lookup_template_symbol(name,NULL,NULL);
 
 7039          printf (
"In lookupTemplateSymbolInParentScopes(): Searching scope = %p = %s name = %s symbol = %p \n",cscope,cscope->
class_name().c_str(),name.str(),symbol);
 
 7042               cscope = isSgGlobal(cscope) ? NULL : cscope->
get_scope();
 
 7059     ROSE_ASSERT(cscope != NULL);
 
 7061     while ((cscope != NULL) && (symbol == NULL))
 
 7067          symbol = cscope->lookup_template_class_symbol(name,templateParameterList,templateArgumentList);
 
 7069          printf (
"In lookupTemplateSymbolInParentScopes(): Searching scope = %p = %s name = %s symbol = %p \n",cscope,cscope->
class_name().c_str(),name.str(),symbol);
 
 7072               cscope = isSgGlobal(cscope) ? NULL : cscope->
get_scope();
 
 
 7089     ROSE_ASSERT(cscope != NULL);
 
 7091     while ((cscope != NULL) && (symbol == NULL))
 
 7094          symbol = cscope->lookup_enum_symbol(name);
 
 7097               cscope = isSgGlobal(cscope) ? NULL : cscope->
get_scope();
 
 
 7112     ROSE_ASSERT(cscope != NULL);
 
 7114     while ((cscope != NULL) && (symbol == NULL))
 
 7117          symbol = cscope->lookup_namespace_symbol(name);
 
 7120               cscope = isSgGlobal(cscope) ? NULL : cscope->
get_scope();
 
 
 7130SageInterface::setSourcePositionToDefault( T* node )
 
 7148     ROSE_ASSERT(node != NULL);
 
 7151     if (node->get_endOfConstruct() == NULL && node->get_startOfConstruct() == NULL)
 
 7154          printf (
"Both startOfConstruct and endOfConstruct are NOT yet initialized with pointers to Sg_File_Info objects (node = %p = %s) \n",node,node->class_name().c_str());
 
 7157          ROSE_ASSERT(node->get_endOfConstruct()   == NULL);
 
 7158          ROSE_ASSERT(node->get_startOfConstruct() == NULL);
 
 7165          printf (
"In SageInterface::setSourcePositionToDefault(): Calling setSourcePositionUnavailableInFrontend() \n");
 
 7167          start_fileInfo->setSourcePositionUnavailableInFrontend();
 
 7168          end_fileInfo->setSourcePositionUnavailableInFrontend();
 
 7172          printf (
"In SageInterface::setSourcePositionToDefault(): Calling setOutputInCodeGeneration() \n");
 
 7178          node->set_startOfConstruct(start_fileInfo);
 
 7179          node->set_endOfConstruct  (end_fileInfo);
 
 7181          node->get_startOfConstruct()->set_parent(node);
 
 7182          node->get_endOfConstruct  ()->set_parent(node);
 
 7189          printf (
"Both startOfConstruct and endOfConstruct are ALREADY initialized with pointers to Sg_File_Info objects (node = %p = %s) \n",node,node->class_name().c_str());
 
 7191          if (node->get_startOfConstruct() == NULL)
 
 7193               printf (
"ERROR: startOfConstruct not set for locatedNode = %p = %s \n",node,node->class_name().c_str());
 
 7195          if (node->get_endOfConstruct() == NULL)
 
 7197               printf (
"ERROR: endOfConstruct not set for locatedNode = %p = %s \n",node,node->class_name().c_str());
 
 7200          ROSE_ASSERT(node->get_startOfConstruct() != NULL);
 
 7201          ROSE_ASSERT(node->get_endOfConstruct()   != NULL);
 
 7202          ROSE_ASSERT(node->get_endOfConstruct() != NULL && node->get_startOfConstruct() != NULL);
 
 7223     if (expression != NULL)
 
 7226          SgBinaryOp* binaryOp = isSgBinaryOp(expression);
 
 7227          if (binaryOp != NULL)
 
 7229               if (binaryOp->get_operatorPosition() == NULL)
 
 7232                    operator_fileInfo->setSourcePositionUnavailableInFrontend();
 
 7234                    binaryOp->set_operatorPosition(operator_fileInfo);
 
 7237                    binaryOp->get_operatorPosition()->
set_parent(binaryOp);
 
 7242          if (expression->get_operatorPosition() == NULL)
 
 7245               operator_fileInfo->setSourcePositionUnavailableInFrontend();
 
 7247               expression->set_operatorPosition(operator_fileInfo);
 
 7252               ROSE_ASSERT(expression->get_operatorPosition()->
get_parent() == expression);
 
 7263#ifdef ROSE_DEBUG_NEW_EDG_ROSE_CONNECTION 
 7264     printf (
"+++++ Depricated function (use setSourcePositionAsTransformation() instead) (no using internal source position mode) \n");
 
 
 7283     ROSE_ASSERT(node != NULL);
 
 7292     SgPragma*          pragma      = isSgPragma(node); 
 
 7293     SgGlobal*          global      = isSgGlobal(node); 
 
 7298       printf (
"Debug, Found a variable definition: %p\n", v_d);
 
 7301     if (locatedNode != NULL)
 
 7313          if (expression!=NULL)
 
 7316               expression->get_operatorPosition()->
set_parent(expression);
 
 
 7335     printf (
"+++++ Depricated name setOneSourcePositionNull() (use setSourcePositionPointersToNull() instead) (no using internal source position mode) \n");
 
 
 7353     ROSE_ASSERT(node != NULL);
 
 7357     SgPragma*          pragma      = isSgPragma(node); 
 
 7358     SgGlobal*          global      = isSgGlobal(node); 
 
 7364     if (locatedNode != NULL)
 
 7367               printf (
"WARNING: In SageInterface::setSourcePositionPointersToNull(): Memory leak of startOfConstruct Sg_File_Info object (setting Sg_File_Info pointers to NULL) \n");
 
 7375                    printf (
"WARNING: In SageInterface::setSourcePositionPointersToNull(): Memory leak of endOfConstruct Sg_File_Info object (setting Sg_File_Info pointers to NULL) \n");
 
 7381          if (expression != NULL)
 
 7383               if (expression->get_operatorPosition() != NULL)
 
 7384                    printf (
"WARNING: In SageInterface::setSourcePositionPointersToNull(): Memory leak of operatorPosition Sg_File_Info object (setting Sg_File_Info pointers to NULL) \n");
 
 7386               expression->set_operatorPosition(NULL);
 
 7393               printf (
"WARNING: In SageInterface::setSourcePositionPointersToNull(): Memory leak of Sg_File_Info object (setting Sg_File_Info pointers to NULL) \n");
 
 7395               pragma->set_startOfConstruct(NULL);
 
 
 7406     printf (
"+++++ Depricated name setSourcePositionForTransformation() (use setSourcePositionAtRootAndAllChildrenAsTransformation() instead) \n");
 
 7419     Rose_STL_Container <SgNode*> nodeList = NodeQuery::querySubTree(root,V_SgNode);
 
 7420     for (Rose_STL_Container<SgNode *>::iterator i = nodeList.begin(); i!=nodeList.end(); i++ )
 
 
 7431SageInterface::setSourcePositionAtRootAndAllChildrenAsTransformation(
SgNode *root)
 
 7433     Rose_STL_Container <SgNode*> nodeList= NodeQuery::querySubTree(root,V_SgNode);
 
 7434     for (Rose_STL_Container<SgNode *>::iterator i = nodeList.begin(); i!=nodeList.end(); i++ )
 
 7443SageInterface::setSourcePositionAtRootAndAllChildrenAsDefault(
SgNode *root)
 
 7445     Rose_STL_Container <SgNode*> nodeList= NodeQuery::querySubTree(root,V_SgNode);
 
 7446     for (Rose_STL_Container<SgNode *>::iterator i = nodeList.begin(); i!=nodeList.end(); i++ )
 
 7448          setSourcePositionAsDefault(*i);
 
 7458     Rose_STL_Container <SgNode*> nodeList = NodeQuery::querySubTree(root,V_SgNode);
 
 7461     printf (
"In setSourcePositionAtRootAndAllChildren(): nodeList.size() = %" PRIuPTR 
" \n",nodeList.size());
 
 7464     for (Rose_STL_Container<SgNode *>::iterator i = nodeList.begin(); i != nodeList.end(); i++)
 
 7467          printf (
"In setSourcePositionAtRootAndAllChildren(): *i = %p = %s \n",*i,(*i)->class_name().c_str());
 
 
 7486     printf (
"In SageInterface::setSourcePosition(): SourcePositionClassification scp = %s \n",
display(scp).c_str());
 
 7491          case e_sourcePositionError: 
 
 7493               printf (
"Error: error value e_sourcePositionError in SageInterface::setSourcePosition() \n");
 
 7500               printf (
"e_sourcePositionDefault in SageInterface::setSourcePosition() \n");
 
 7503               if (locatedNode != NULL)
 
 7505                    setSourcePositionToDefault(locatedNode);
 
 7510                    printf (
"Error: can't call setSourcePosition() in mode e_sourcePositionDefault with non SgLocatedNode (node = %p = %s) \n",node,node->
class_name().c_str());
 
 7519               printf (
"e_sourcePositionTransformation in SageInterface::setSourcePosition() \n");
 
 7528               printf (
"e_sourcePositionCompilerGenerated in SageInterface::setSourcePosition() \n");
 
 7530               printf (
"Sorry, not implemented \n");
 
 7539               printf (
"e_sourcePositionNullPointers in SageInterface::setSourcePosition() \n");
 
 7556               printf (
"e_sourcePositionFrontendConstruction in SageInterface::setSourcePosition() \n");
 
 7559               if (locatedNode != NULL)
 
 7562                    setSourcePositionToDefault(locatedNode);
 
 7567                    SgPragma* pragma = isSgPragma(node);
 
 7570                         setSourcePositionToDefault(pragma);
 
 7576                         SgType* type = isSgType(node);
 
 7584                              if (functionParameterTypeList != NULL)
 
 7590                                   printf (
"Error: can't call setSourcePosition() in mode e_sourcePositionFrontendConstruction with non SgLocatedNode (node = %p = %s) \n",node,node->
class_name().c_str());
 
 7603               printf (
"Error: error value e_sourcePositionError in SageInterface::setSourcePosition() \n");
 
 7609               printf (
"Error: default reached in SageInterface::setSourcePosition() \n");
 
 7617          node->
get_file_info()->display(
"Leaving SageInterface::setSourcePosition()");
 
 
 7624SageInterface::setSourcePositionForTransformation_memoryPool()
 
 7629     printf (
"ERROR: In setSourcePositionForTransformation_memoryPool(): This seems like a very dangerous function to have, is it required? \n");
 
 7632     VariantVector vv(V_SgNode);
 
 7633     Rose_STL_Container<SgNode*> nodeList = NodeQuery::queryMemoryPool(vv);
 
 7634     for (Rose_STL_Container<SgNode *>::iterator i = nodeList.begin(); i != nodeList.end(); i++ )
 
 7645     ROSE_ASSERT(project != NULL);
 
 7648     ROSE_ASSERT(project->get_fileList().empty() == 
false);
 
 7651     SgSourceFile* file = isSgSourceFile(project->get_fileList()[0]);
 
 7652     SgGlobal* global = file->get_globalScope();
 
 7655     SgFilePtrListPtr fileList = project->get_fileList();
 
 7656     SgFilePtrList::const_iterator i= fileList->begin();
 
 7658     SgGlobal* global = (*i)->get_globalScope();
 
 7660     ROSE_ASSERT(global != NULL);
 
 
 7681          if (declList.empty() == 
false)
 
 7683               stmt = isSgStatement(declList.back());
 
 7692          if (stmtList.empty() == 
false)
 
 7694               stmt = stmtList.back();
 
 
 7716          if (includingCompilerGenerated)
 
 7720               if (declList.empty() == 
false)
 
 7722                    stmt = isSgStatement(declList.front());
 
 7728               SgDeclarationStatementPtrList::iterator i=declList.begin();
 
 7729               while (i != declList.end())
 
 7756          if (includingCompilerGenerated)
 
 7760               if (stmtList.empty() == 
false)
 
 7762                    stmt = stmtList.front();
 
 7768               SgStatementPtrList::iterator i = stmtList.begin();
 
 7769               while (i!=stmtList.end())
 
 
 7804      SgDeclarationStatementPtrList::iterator i=declList.begin();
 
 7805      while (i!=declList.end())
 
 7829      SgStatementPtrList::iterator i=stmtList.begin();
 
 7830      while (i!=stmtList.end())
 
 
 7857   bool result = 
false;
 
 7860      if (isSgProgramHeaderStatement(n)) {
 
 7865      if (isSgFunctionDeclaration(n) != 
nullptr) {
 
 7866         bool either = 
false;
 
 7872            ROSE_ASSERT(stmnt != 
nullptr);
 
 7879            ROSE_ASSERT(funcDefn != 
nullptr);
 
 7880            if (funcDefn->get_name() == 
"main") {
 
 
 7904    return isSgFunctionDeclaration(n);
 
 7907  for (vector<SgNode*>::const_iterator i = children.begin();
 
 7908  i != children.end(); ++i) {
 
 
 7926  ROSE_ASSERT (scope != NULL);
 
 7930  for (
size_t i = 0; i<stmt_list.size(); i++)
 
 7934    if (isSgDeclarationStatement(cur_stmt))
 
 7936      if (isSgPragmaDeclaration (cur_stmt))
 
 
 7956     rt = n->copy (g_treeCopy);
 
 
 7966  bool isC = TransformationSupport::getSourceFile(n)->get_outputLanguage() == 
SgFile::e_C_language;
 
 
 7978#ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT 
 7980     for (std::vector<SgContinueStmt*>::iterator i = continues.begin(); i != continues.end(); ++i)
 
 7985          LowLevelRewrite::replace(*i, make_unit_list( gotoStatement ) );
 
 7991          printf (
"Not supported in mode: ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT (LowLevelRewrite::replace() is unavailable)");
 
 
 7996#define DEBUG_TEMPLATE_ARG_EQUIVALENCE 0 
 8002#if DEBUG_TEMPLATE_ARG_EQUIVALENCE 
 8003          printf (
"In templateArgumentEquivalence(): same pointer to template argument: returning true \n");
 
 8010#if DEBUG_TEMPLATE_ARG_EQUIVALENCE 
 8011          printf (
"In templateArgumentEquivalence(): different argumentType(): returning false \n");
 
 8020               ROSE_ASSERT(arg1->
get_type() != NULL);
 
 8021               ROSE_ASSERT(arg2->
get_type() != NULL);
 
 8023#if DEBUG_TEMPLATE_ARG_EQUIVALENCE 
 8024               printf (
"In templateArgumentEquivalence(): case SgTemplateArgument::type_argument: checking for the same type: arg1->get_type() = %p = %s arg2->get_type() = %p = %s \n",
 
 8032#if DEBUG_TEMPLATE_ARG_EQUIVALENCE 
 8033                    printf (
"In templateArgumentEquivalence(): case SgTemplateArgument::type_argument: checking for the same type: returning true \n");
 
 8046#if DEBUG_TEMPLATE_ARG_EQUIVALENCE 
 8047                    printf (
"In templateArgumentEquivalence(): case SgTemplateArgument::type_argument: checking for the same type: pointers are different: returning typesAreEqual = %s \n",typesAreEqual ? 
"true" : 
"false");
 
 8049                    return typesAreEqual;
 
 8057               if (expr1 == expr2) {
 
 8058#if DEBUG_TEMPLATE_ARG_EQUIVALENCE 
 8059                    printf (
"In templateArgumentEquivalence(): case SgTemplateArgument::nontype_argument: checking for the same expression: returning true \n");
 
 8063#if DEBUG_TEMPLATE_ARG_EQUIVALENCE 
 8064                    printf (
"In templateArgumentEquivalence(): case SgTemplateArgument::nontype_argument: same variant of expression: %s\n", expr1->
class_name().c_str());
 
 8067                      case V_SgLongIntVal: {
 
 8071                      case V_SgUnsignedLongVal:
 
 8076                      case V_SgBoolValExp:
 
 8081                        mlog[Sawyer::Message::Common::FATAL]
 
 8082                          << 
"FATAL: In templateArgumentEquivalence(): case SgTemplateArgument::nontype_argument: expression have the same variant " 
 8084                          << 
" but comparison is not NIY!" 
 8090#if DEBUG_TEMPLATE_ARG_EQUIVALENCE 
 8091                    printf (
"In templateArgumentEquivalence(): case SgTemplateArgument::nontype_argument: different variant of expression: returning false \n");
 
 8099               if (arg1->get_templateDeclaration() == arg2->get_templateDeclaration())
 
 8101#if DEBUG_TEMPLATE_ARG_EQUIVALENCE 
 8102                    printf (
"In templateArgumentEquivalence(): case SgTemplateArgument::template_template_argument: checking for the same templateDeclaration: returning true \n");
 
 8108                    ROSE_ASSERT(!
"NIY: template template argument comparaison."); 
 
 8114               ROSE_ASSERT(!
"Try to compare template arguments of unknown type...");
 
 8123               ROSE_ASSERT(!
"Try to compare template arguments of unknown type start_of_pack_expansion_argument");
 
 8129               printf (
"Error: default case not handled! \n");
 
 
 8137#define DEBUG_TEMPLATE_ARG_LIST_EQUIVALENCE 0 
 8141     if (list1.size() != list2.size())
 
 8143#if DEBUG_TEMPLATE_ARG_LIST_EQUIVALENCE 
 8144          printf (
"In templateArgumentListEquivalence(): different list sizes: returning false \n");
 
 8145          printf (
"   --- list1.size() = %zu \n",list1.size());
 
 8146          printf (
"   --- list2.size() = %zu \n",list2.size());
 
 8153#if DEBUG_TEMPLATE_ARG_LIST_EQUIVALENCE 
 8154          printf (
"In templateArgumentListEquivalence(): same list using STL equality operator: returning true \n");
 
 8160     for (
size_t i = 0; i < list1.size(); i++)
 
 8162#if DEBUG_TEMPLATE_ARG_LIST_EQUIVALENCE 
 8163          printf (
"In templateArgumentListEquivalence(): calling templateArgumentEquivalence() for i = %zu \n",i);
 
 8168#if DEBUG_TEMPLATE_ARG_LIST_EQUIVALENCE 
 8169               printf (
"In templateArgumentListEquivalence(): calling templateArgumentEquivalence() for i = %zu --- returned false: returning false \n",i);
 
 8175#if DEBUG_TEMPLATE_ARG_LIST_EQUIVALENCE 
 8176     printf (
"In templateArgumentListEquivalence(): reached base of function: returning true \n");
 
 
 8196  SgName labelname = 
"rose_label__";
 
 
 8209  if (isSgNullExpression(f->get_increment())) 
return;
 
 8214  f->set_increment(ne);
 
 
 8224  ROSE_ASSERT(condstmt);
 
 8226  if (isSgNullStatement(condstmt)) 
return true;
 
 8230  return isSgNullExpression(exprStmt->get_expression());
 
 8239  bbStmts = initStmts;
 
 8240  for (
size_t i = 0; i < bbStmts.size(); ++i) {
 
 8241    bbStmts[i]->set_parent(bb);
 
 8244  const bool testIsNull = hasEmptyCondition(f);
 
 
 8254  Rose_STL_Container<SgNode*> fors = NodeQuery::querySubTree(top,
 
 8256  for (
size_t i = 0; i < fors.size(); ++i) {
 
 
 8264    Rose_STL_Container<SgNode*> allGotos = NodeQuery::querySubTree(scope, V_SgGotoStatement);
 
 8266    vector<SgGotoStatement*> result;
 
 8267    for (Rose_STL_Container<SgNode*>::const_iterator i = allGotos.begin(); i != allGotos.end(); ++i) {
 
 8268      if (isSgGotoStatement(*i)->
get_label() == l) {
 
 8269        result.push_back(isSgGotoStatement(*i));
 
 
 8277  vector<SgReturnStmt*> SageInterface::findReturnStmts(
SgStatement* scope) {
 
 8280    Rose_STL_Container<SgNode*> returns = NodeQuery::querySubTree(scope, V_SgReturnStmt);
 
 8282    vector<SgReturnStmt*> result;
 
 8283    for (Rose_STL_Container<SgNode*>::const_iterator i = returns.begin(); i != returns.end(); ++i) {
 
 8284      result.push_back(isSgReturnStmt(*i));
 
 8290static  void getSwitchCasesHelper(
SgStatement* top, vector<SgStatement*>& result) {
 
 8292    if (isSgSwitchStatement(top)) 
return; 
 
 8293    if (isSgCaseOptionStmt(top) || isSgDefaultOptionStmt(top)) {
 
 8294      result.push_back(top);
 
 8297    for (
unsigned int i = 0; i < children.size(); ++i) {
 
 8298      if (isSgStatement(children[i])) {
 
 8299        getSwitchCasesHelper(isSgStatement(children[i]), result);
 
 8305    vector<SgStatement*> result;
 
 8306    getSwitchCasesHelper(sw->
get_body(), result);
 
 
 8336    if (
const SgSymbol* symbol = isSgSymbol(astNode))
 
 8337        return symbol->get_scope();
 
 8342    else if (
const SgQualifiedName* qualifiedName = isSgQualifiedName(astNode))
 
 8346    const SgNode* parentNode = astNode;
 
 8347    while (!isSgScopeStatement(parentNode))
 
 8352        if (isSgFunctionParameterList(parentNode) || isSgCtorInitializerList(parentNode))
 
 8355            ROSE_ASSERT(funcDeclaration != NULL);
 
 8357            if (funcDeclaration != NULL)
 
 8359                return funcDeclaration->get_definition();
 
 8364        if (parentNode == NULL)
 
 8372     if ( isSgScopeStatement(parentNode) == NULL &&
 
 8373          dynamic_cast<const SgType*
>(parentNode) == NULL &&
 
 8374          dynamic_cast<const SgSymbol*
>(parentNode) == NULL )
 
 8376          printf (
"Error: In SageInterface::getScope(): could not trace back to SgScopeStatement node \n");
 
 8381          if ( 
dynamic_cast<const SgType*
>(parentNode) != NULL || 
dynamic_cast<const SgSymbol*
>(parentNode) != NULL )
 
 8383               printf (
"Error: can't locate an associated SgStatement from astNode = %p = %s parentNode = %p = %s \n",astNode,astNode->
class_name().c_str(),parentNode,parentNode->
class_name().c_str());
 
 8391     ROSE_ASSERT (scopeStatement != NULL);
 
 8394     if (isSgScopeStatement(astNode))
 
 8395       if (isSgScopeStatement(parentNode))
 
 8397          ROSE_ASSERT (astNode == parentNode);
 
 
 8424          printf (
"In getVarSymFromName(): name->get_name() = %s \n",name->get_name().str());
 
 8427          ROSE_ASSERT (scope != NULL);
 
 8429          printf (
"In getVarSymFromName(): name->get_name() = %s scope = %p = %s \n",name->get_name().str(),scope,scope->
class_name().c_str());
 
 8431          v_sym = scope->lookup_var_symbol (name->get_name());
 
 8440              if (decl_scope != NULL)
 
 8441                   v_sym = decl_scope->lookup_var_symbol (name->get_name());
 
 8444                   cerr << 
"\t\t*** WARNING: Can't seem to find a symbol for '" 
 8445                        << name->get_name ().str ()
 
 8475getVarSym_const (
const SgNode* n)
 
 8481      v_sym = isSgVarRefExp (n)->get_symbol ();
 
 8483    case V_SgInitializedName:
 
 8484      v_sym = getVarSymFromName_const (isSgInitializedName (n));
 
 8510  if (!decl) 
return 0;
 
 8511  const SgInitializedNamePtrList& names = decl->
get_variables ();
 
 8512  if (names.begin () != names.end ())
 
 8515      return getVarSym_const (name);
 
 8534  if (names.begin () != names.end ())
 
 8535    return *(names.begin ());
 
 
 8541static void findBreakStmtsHelper(
SgStatement* code, 
const std::string& fortranLabel, 
bool inOutermostBody, vector<SgBreakStmt*>& breakStmts) {
 
 8542  if (isSgWhileStmt(code) || isSgDoWhileStmt(code) || isSgForStatement(code) || isSgSwitchStatement(code)) {
 
 8543    if (fortranLabel == 
"") {
 
 8548      inOutermostBody = 
false;
 
 8551  if (isSgBreakStmt(code)) {
 
 8553    bool breakMatchesThisConstruct = 
false;
 
 8554    if (bs->get_do_string_label() == 
"") {
 
 8556      breakMatchesThisConstruct = inOutermostBody;
 
 8558      breakMatchesThisConstruct = (fortranLabel == bs->get_do_string_label());
 
 8560    if (breakMatchesThisConstruct) {
 
 8561      breakStmts.push_back(bs);
 
 8566  for (
unsigned int i = 0; i < children.size(); ++i) {
 
 8567    if (isSgStatement(children[i])) {
 
 8568      findBreakStmtsHelper(isSgStatement(children[i]), fortranLabel, inOutermostBody, breakStmts);
 
 8576  vector<SgBreakStmt*> result;
 
 8577  findBreakStmtsHelper(code, fortranLabel, 
true, result);
 
 
 8582static void findContinueStmtsHelper(
SgStatement* code, 
const std::string& fortranLabel, 
bool inOutermostBody, vector<SgContinueStmt*>& continueStmts) {
 
 8583  if (isSgWhileStmt(code) || isSgDoWhileStmt(code) || isSgForStatement(code)) {
 
 8584    if (fortranLabel == 
"") {
 
 8589      inOutermostBody = 
false;
 
 8592  if (isSgContinueStmt(code)) {
 
 8594    bool continueMatchesThisConstruct = 
false;
 
 8595    if (cs->get_do_string_label() == 
"") {
 
 8597      continueMatchesThisConstruct = inOutermostBody;
 
 8599      continueMatchesThisConstruct = (fortranLabel == cs->get_do_string_label());
 
 8601    if (continueMatchesThisConstruct) {
 
 8602      continueStmts.push_back(cs);
 
 8607  for (
unsigned int i = 0; i < children.size(); ++i) {
 
 8609    if (stmnt != NULL) {
 
 8610      findContinueStmtsHelper(stmnt, fortranLabel, inOutermostBody, continueStmts);
 
 8618  vector<SgContinueStmt*> result;
 
 8619  findContinueStmtsHelper(code, fortranLabel, 
true, result);
 
 
 8630  std::cout << 
"Starting getInitializerOfExpression on 0x" << std::hex << (int)n << 
", which has type " << n->
sage_class_name() << std::endl;
 
 8632  while (!isSgInitializer(n)) {
 
 8635    std::cout << 
"Continuing getInitializerOfExpression on 0x" << std::hex << (int)n;
 
 8637    std::cout << std::endl;
 
 8641  return isSgInitializer(n);
 
 
 8649  std::vector<SgVariableSymbol*> symbols;
 
 8651  virtual void visit(
SgNode* n) {
 
 8652    if (isSgVarRefExp(n))
 
 8653      symbols.push_back(isSgVarRefExp(n)->get_symbol());
 
 8657  GetSymbolsUsedInExpressionVisitor vis;
 
 8658  vis.traverse(expr, preorder);
 
 
 8665    return getEnclosingNode<SgSourceFile>(n, includingSelf);
 
 
 8671  return findDeclarationStatement<SgFunctionDeclaration> (root, name, scope, isDefining);
 
 
 8682    return getEnclosingNode<SgFunctionDefinition>(n, includingSelf);
 
 
 8688    return getEnclosingNode<SgFunctionDeclaration>(astNode, includingSelf);
 
 
 8698    return getEnclosingNode<SgGlobal>(astNode, 
true );
 
 
 8703    return getEnclosingNode<SgClassDefinition>(astNode, includingSelf);
 
 
 8711    return getEnclosingNode<SgClassDeclaration>(astNode, 
true);
 
 
 8716    return getEnclosingNode<SgExprListExp>(astNode, includingSelf);
 
 
 8722     bool returnValue = 
false;
 
 8728          virtual void visit(
SgNode* n)
 
 8730               if (n == expression_target)
 
 8736          Visitor(
SgExpression* expr) : expression_target(expr), in_subtree(
false) {}
 
 8739     Visitor traversal(exp);
 
 8741     traversal.traverse(subtree, preorder);
 
 8743     returnValue = traversal.in_subtree;
 
 
 8757     ROSE_ASSERT (functionCallExp != NULL);
 
 8759     SgExpression* expression = functionCallExp->get_function();
 
 8760     ROSE_ASSERT (expression != NULL);
 
 8764     SgDotExp* dotExp = isSgDotExp(expression);
 
 8767          ROSE_ASSERT (dotExp != NULL);
 
 8770          ROSE_ASSERT (rhsOperand != NULL);
 
 8775          if (memberFunctionRefExp != NULL)
 
 8782     if (functionReferenceExp != NULL)
 
 8787     SgArrowExp* arrowExp = isSgArrowExp(expression);
 
 8788     if ( arrowExp != NULL)
 
 8790          ROSE_ASSERT (arrowExp != NULL);
 
 8793          ROSE_ASSERT (rhsOperand != NULL);
 
 8798          if (memberFunctionRefExp != NULL)
 
 8804     return returnDeclaration;
 
 
 8809std::list<SgClassType*>
 
 8814#define DEBUG_DATA_MEMBER_TYPE_CHAIN 0 
 8820     ROSE_ASSERT(varRefExp != NULL || memberFunctionRefExp != NULL);
 
 8822     std::list<SgClassType*> returnTypeChain;
 
 8825     std::list<SgClassType*> classChain;
 
 8830     if (varRefExp != NULL)
 
 8836          ROSE_ASSERT(memberFunctionRefExp != NULL);
 
 8841     ROSE_ASSERT(parent != NULL);
 
 8843#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 8844     printf (
"In SageInterface::getClassTypeChainForDataMemberReference(): parent = %p = %s \n",parent,parent->
class_name().c_str());
 
 8848     SgDotExp*   dotExp   = isSgDotExp(parent);
 
 8852     if (arrowExp != NULL)
 
 8854#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 8855          printf (
"In SageInterface::getClassTypeChainForDataMemberReference(): Found an arrow expression \n");
 
 8857          binaryOperator = arrowExp;
 
 8862#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 8863          printf (
"In SageInterface::getClassTypeChainForDataMemberReference(): Found an dot expression \n");
 
 8865          binaryOperator = dotExp;
 
 8869     if (binaryOperator != NULL)
 
 8872     ROSE_ASSERT(lhs != NULL);
 
 8874#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 8875     printf (
"In SageInterface::getClassTypeChainForDataMemberReference(): lhs = %p = %s \n",lhs,lhs->
class_name().c_str());
 
 8881     while (isSgCastExp(temp_lhs) != NULL)
 
 8883          cast = isSgCastExp(temp_lhs);
 
 8884          ROSE_ASSERT(cast != NULL);
 
 8887#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 8888          printf (
"Top of loop: processing cast = %p temp_lhs = %p = %s \n",cast,temp_lhs,temp_lhs->
class_name().c_str());
 
 8890          ROSE_ASSERT(cast->
get_type() != NULL);
 
 8892          if (classType == NULL)
 
 8894#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 8895               printf (
" --- looking for base type: In SageInterface::getClassTypeChainForDataMemberReference(): classType == NULL: cast->get_type() = %p = %s \n",
 
 8898               SgType* baseType = cast->
get_type()->
stripType(SgType::STRIP_POINTER_TYPE | SgType::STRIP_MODIFIER_TYPE | SgType::STRIP_REFERENCE_TYPE | SgType::STRIP_RVALUE_REFERENCE_TYPE | SgType::STRIP_TYPEDEF_TYPE);
 
 8899               ROSE_ASSERT(baseType != NULL);
 
 8901#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 8902               printf (
" --- baseType = %p = %s name = %s \n",baseType,baseType->
class_name().c_str(),
get_name(baseType).c_str());
 
 8904               classType = isSgClassType(baseType);
 
 8908          ROSE_ASSERT(temp_lhs != NULL);
 
 8910#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 8911          printf (
" --- temp_lhs = %p = %s name = %s \n",temp_lhs,temp_lhs->
class_name().c_str(),
get_name(temp_lhs).c_str());
 
 8917          if (classType != NULL)
 
 8919               classChain.push_front(classType);
 
 8923          if (classType != NULL)
 
 8934               ROSE_ASSERT(target_type != NULL);
 
 8935               SgClassType* target_classType = isSgClassType(target_type);
 
 8937               if (target_classType != NULL)
 
 8940                    ROSE_ASSERT(target_declaration != NULL);
 
 8941                    SgClassDeclaration* target_classDeclaration = isSgClassDeclaration(target_declaration);
 
 8942                    ROSE_ASSERT(target_classDeclaration != NULL);
 
 8944                    ROSE_ASSERT(target_definingClassDeclaration != NULL);
 
 8945                    SgScopeStatement* target_scope = target_definingClassDeclaration->get_definition();
 
 8946                    ROSE_ASSERT(target_scope != NULL);
 
 8948#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 8949                    printf (
"target_classDeclaration = %p = %s name = %s target_scope = %p = %s \n",
 
 8950                            target_classDeclaration,target_classDeclaration->
class_name().c_str(),target_classDeclaration->get_name().str(),target_scope,target_scope->
class_name().c_str());
 
 8953                    ROSE_ASSERT(source_classType != NULL);
 
 8955                    ROSE_ASSERT(source_declaration != NULL);
 
 8956                    SgClassDeclaration* source_classDeclaration = isSgClassDeclaration(source_declaration);
 
 8957                    ROSE_ASSERT(source_classDeclaration != NULL);
 
 8959                    ROSE_ASSERT(source_definingClassDeclaration != NULL);
 
 8960                    SgScopeStatement* source_scope = source_definingClassDeclaration->get_definition();
 
 8961                    ROSE_ASSERT(source_scope != NULL);
 
 8963#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 8964                    printf (
"source_classDeclaration = %p = %s name = %s source_scope = %p = %s \n",
 
 8965                            source_classDeclaration,source_classDeclaration->
class_name().c_str(),source_classDeclaration->get_name().str(),source_scope,source_scope->
class_name().c_str());
 
 8968                    while (tmp_scope != NULL && tmp_scope != target_scope)
 
 8970#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 8971                         printf (
"tmp_scope = %p = %s \n",tmp_scope,tmp_scope->
class_name().c_str());
 
 8974                         ROSE_ASSERT(tmp_classDefinition != NULL);
 
 8976                         ROSE_ASSERT(tmp_classDeclaration != NULL);
 
 8978#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 8979                         SgName scope_name = tmp_classDeclaration->get_name();
 
 8980                         printf (
"scope_name = %s \n",scope_name.str());
 
 8982                         SgClassType* tmp_classType = tmp_classDeclaration->get_type();
 
 8983                         ROSE_ASSERT(tmp_classType != NULL);
 
 8986                         classChain.push_front(tmp_classType);
 
 8990                         if (isSgGlobal(tmp_scope) != NULL)
 
 8999                    printf (
"In loop processing cast: target_type = %p = %s \n",target_type,target_type->
class_name().c_str());
 
 9005#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 9006          printf (
"Bottom of loop: processing cast = %p temp_lhs = %p = %s \n",cast,temp_lhs,temp_lhs->
class_name().c_str());
 
 9012     ROSE_ASSERT(temp_lhs != NULL);
 
 9014#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 9015     printf (
"In SageInterface::getClassTypeChainForDataMemberReference(): temp_lhs = %p = %s \n",temp_lhs,temp_lhs->
class_name().c_str());
 
 9018     SgVarRefExp* derivedClassVarRefExp = isSgVarRefExp(temp_lhs);
 
 9019     if (derivedClassVarRefExp != NULL)
 
 9021          SgVariableSymbol* derivedClassVariableSymbol =  derivedClassVarRefExp->get_symbol();
 
 9022          ROSE_ASSERT(derivedClassVariableSymbol != NULL);
 
 9024          SgName derivedClassVariableName = derivedClassVariableSymbol->
get_name();
 
 9026#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 9027          printf (
"In SageInterface::getClassTypeChainForDataMemberReference(): derivedClassVariableName = %s \n",derivedClassVariableName.str());
 
 9031          ROSE_ASSERT(type != NULL);
 
 9033#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 9034          printf (
"In SageInterface::getClassTypeChainForDataMemberReference(): lhs type = %p = %s \n",type,type->
class_name().c_str());
 
 9038          SgType* stripped_type = type->
stripType(SgType::STRIP_POINTER_TYPE|SgType::STRIP_ARRAY_TYPE|SgType::STRIP_REFERENCE_TYPE|SgType::STRIP_RVALUE_REFERENCE_TYPE|SgType::STRIP_MODIFIER_TYPE);
 
 9040#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 9041          printf (
"In SageInterface::getClassTypeChainForDataMemberReference(): lhs stripped_type = %p = %s \n",stripped_type,stripped_type->
class_name().c_str());
 
 9045          SgClassType* classType = isSgClassType(stripped_type);
 
 9048          if (classType != NULL)
 
 9050#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 9051               printf (
"In SageInterface::getClassTypeChainForDataMemberReference(): lhs classType = %p = %s \n",classType,classType->
class_name().c_str());
 
 9052               SgClassDeclaration* classDeclaration = isSgClassDeclaration(classType->get_declaration());
 
 9053               ROSE_ASSERT(classDeclaration != NULL);
 
 9054               printf (
"In SageInterface::getClassTypeChainForDataMemberReference(): lhs classDeclaration = %p = %s name = %s \n",
 
 9055                    classDeclaration,classDeclaration->
class_name().c_str(),classDeclaration->get_name().str());
 
 9060               classChain.push_front(classType);
 
 9064#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 9065               printf (
"In SageInterface::getClassTypeChainForDataMemberReference(): lhs stripped_type is not a SgClassType \n");
 
 9071#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 9072          printf (
"Need to support alternative to SgVarRefExp: temp_lhs = %p = %s \n",temp_lhs,temp_lhs->
class_name().c_str());
 
 9075          ROSE_ASSERT(type != NULL);
 
 9077#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 9078          printf (
"In SageInterface::getClassTypeChainForDataMemberReference(): lhs type = %p = %s name = %s \n",type,type->
class_name().c_str(),
get_name(type).c_str());
 
 9082          SgType* stripped_type = type->
stripType(SgType::STRIP_POINTER_TYPE|SgType::STRIP_ARRAY_TYPE|SgType::STRIP_REFERENCE_TYPE|SgType::STRIP_RVALUE_REFERENCE_TYPE|SgType::STRIP_MODIFIER_TYPE);
 
 9084#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 9085          printf (
"In SageInterface::getClassTypeChainForDataMemberReference(): stripped_type = %p = %s name = %s \n",stripped_type,stripped_type->
class_name().c_str(),
get_name(stripped_type).c_str());
 
 9088          SgClassType* classType = isSgClassType(stripped_type);
 
 9090          if (classType != NULL)
 
 9092               classChain.push_front(classType);
 
 9096#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 9097     printf (
"classChain.size() = %zu \n",classChain.size());
 
 9098     std::list<SgClassType*>::iterator iter = classChain.begin();
 
 9099     while(iter != classChain.end())
 
 9101          printf (
" --- *iter = %p = %s name = %s \n",*iter,(*iter)->class_name().c_str(),(*iter)->get_name().str());
 
 9114     if (varRefExp != NULL)
 
 9116          ROSE_ASSERT(varRefExp != NULL);
 
 9117          ROSE_ASSERT(memberFunctionRefExp == NULL);
 
 9119          referenceSymbol = varRefExp->get_symbol();
 
 9123          ROSE_ASSERT(varRefExp == NULL);
 
 9124          ROSE_ASSERT(memberFunctionRefExp != NULL);
 
 9126          referenceSymbol = memberFunctionRefExp->get_symbol();
 
 9128     ROSE_ASSERT(referenceSymbol != NULL);
 
 9131#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 9132     printf (
"referenceSymbol = %p = %s \n",referenceSymbol,referenceSymbol->
class_name().c_str());
 
 9133     printf (
"symbolName = %s \n",symbolName.str());
 
 9138     if (functionSymbol != NULL)
 
 9143          if (templateInstantiationMemberFunctionDeclaration != NULL)
 
 9145#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 9146               printf (
"This is a template name, we want the name without template arguments \n");
 
 9147               printf (
"templateInstantiationMemberFunctionDeclaration             = %p \n",templateInstantiationMemberFunctionDeclaration);
 
 9148               printf (
"templateInstantiationMemberFunctionDeclaration->get_name() = %s \n",templateInstantiationMemberFunctionDeclaration->get_name().str());
 
 9155                    isSgTemplateMemberFunctionDeclaration(templateInstantiationMemberFunctionDeclaration->
get_templateDeclaration());
 
 9156               if (templateMemberFunctionDeclaration != NULL)
 
 9158#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 9159                    printf (
"templateMemberFunctionDeclaration = %p \n",templateMemberFunctionDeclaration);
 
 9160                    printf (
"templateMemberFunctionDeclaration->get_name() = %s \n",templateMemberFunctionDeclaration->get_name().str());
 
 9163                    symbolName = templateMemberFunctionDeclaration->get_name();
 
 9167#if DEBUG_DATA_MEMBER_TYPE_CHAIN || 0 
 9168                    printf (
"templateMemberFunctionDeclaration == NULL: template declaration not available from template instantiation (rare, I think) \n");
 
 9172               printf (
"Exiting as a test! \n");
 
 9180               ROSE_ASSERT(declarationStatement != NULL);
 
 9181#if DEBUG_DATA_MEMBER_TYPE_CHAIN || 0 
 9182               printf (
"functionSymbol != NULL: but declaration is not a member function: declarationStatement = %p = %s \n",declarationStatement,declarationStatement->
class_name().c_str());
 
 9189          if (variableSymbol != NULL)
 
 9195#if DEBUG_DATA_MEMBER_TYPE_CHAIN || 0 
 9196               printf (
"In SageInterface::getClassTypeChainForDataMemberReference(): NOTE: referenceSymbol is not a SgFunctionSymbol or SgVariableSymbol \n");
 
 9199               printf (
"Exiting as a test! \n");
 
 9206#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 9207     printf (
"symbolName = %s \n",symbolName.str());
 
 9216     std::list<SgClassType*> saveList;
 
 9218#if DEBUG_DATA_MEMBER_TYPE_CHAIN || 0 
 9219     printf (
"classChain.size() = %zu \n",classChain.size());
 
 9222     std::list<SgClassType*>::iterator i = classChain.begin();
 
 9223     std::list<SgClassType*>::iterator save_iter = i;
 
 9229     bool ambiguityDetectedSoSaveWholeChain = 
false;
 
 9231     while(i != classChain.end())
 
 9233#if DEBUG_DATA_MEMBER_TYPE_CHAIN || 0 
 9234          printf (
"******** TOP OF WHILE LOOP ******** \n");
 
 9235          printf (
" --- *i = %p = %s name = %s \n",*i,(*i)->class_name().c_str(),(*i)->get_name().str());
 
 9236          printf (
" --- --- referenceSymbol = %p = %s \n",referenceSymbol,referenceSymbol->
class_name().c_str());
 
 9238          bool ambiguityDetected = 
false;
 
 9241          ROSE_ASSERT(declarationStatement != NULL);
 
 9243          if (definingDeclarationStatement != NULL)
 
 9245               SgClassDeclaration* classDeclaration = isSgClassDeclaration(definingDeclarationStatement);
 
 9246               ROSE_ASSERT(classDeclaration != NULL);
 
 9249#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 9250               printf (
" --- classDeclaration = %p = %s name = %s \n",classDeclaration,classDeclaration->
class_name().c_str(),classDeclaration->get_name().str());
 
 9251               printf (
" --- classDefinition = %p = %s \n",classDefinition,classDefinition->
class_name().c_str());
 
 9254               ambiguityDetected = classDefinition->hasAmbiguity(symbolName,referenceSymbol);
 
 9256#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 9257               printf (
" --- ambiguityDetected = %s \n",ambiguityDetected ? 
"true" : 
"false");
 
 9262          if (ambiguityDetected == 
true || ambiguityDetectedSoSaveWholeChain == 
true)
 
 9264               ambiguityDetectedSoSaveWholeChain = 
true;
 
 9266               if (save_iter != classChain.end())
 
 9268#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 9269                    printf (
" --- add to saveList: *save_iter = %p \n",*save_iter);
 
 9271                    saveList.push_back(*save_iter);
 
 9275#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 9276                    printf (
" --- save_iter == classChain.end() \n");
 
 9281#if DEBUG_DATA_MEMBER_TYPE_CHAIN || 0 
 9282          printf (
"******** BOTTOM OF WHILE LOOP ******** \n");
 
 9292#if DEBUG_DATA_MEMBER_TYPE_CHAIN 
 9293     printf (
"saveList.size() = %zu \n",saveList.size());
 
 9294     std::list<SgClassType*>::iterator saveList_iterator = saveList.begin();
 
 9295     while (saveList_iterator != saveList.end())
 
 9297          printf (
" --- *saveList_iterator = %p = %s name = %s \n",*saveList_iterator,(*saveList_iterator)->class_name().c_str(),(*saveList_iterator)->get_name().str());
 
 9299          saveList_iterator++;
 
 9303     returnTypeChain = saveList;
 
 9308     return returnTypeChain;
 
 
 9318#define DEBUG_IS_MEMBER_FUNCTION_MEMBER_REFERENCE 0 
 9320     ROSE_ASSERT(memberFunctionRefExp != NULL);
 
 9322     bool returnValue = 
false;
 
 9328     SgDotExp*   dotExp   = isSgDotExp(parent);
 
 9335     if (arrowExp != NULL || dotExp != NULL || addressOfOp != NULL)
 
 9339          ROSE_ASSERT(symbol != NULL);
 
 9342          ROSE_ASSERT(functionDeclaration != NULL);
 
 9345          if (functionDeclaration != NULL)
 
 9347               bool isStatic = functionDeclaration->get_declarationModifier().get_storageModifier().
isStatic();
 
 9348#if DEBUG_IS_MEMBER_FUNCTION_MEMBER_REFERENCE 
 9349               printf (
"isStatic = %s \n",
isStatic ? 
"true" : 
"false");
 
 9354                    ROSE_ASSERT(scope != NULL);
 
 9357                    if (classDefinition != NULL)
 
 9365#if DEBUG_IS_MEMBER_FUNCTION_MEMBER_REFERENCE 
 9366               printf (
"In SageInterface::isMemberFunctionMemberReference(): memberFunctionRefExp is not associated with variableDeclaration (could not compute if it is static data member) \n");
 
 9372#if DEBUG_IS_MEMBER_FUNCTION_MEMBER_REFERENCE 
 9373          printf (
"In SageInterface::isMemberFunctionMemberReference(): memberFunctionRefExp parent is not a is not SgArrowExp or SgDotExp expression \n");
 
 9377#if DEBUG_IS_MEMBER_FUNCTION_MEMBER_REFERENCE 
 9378     printf (
"Leaving SageInterface::isMemberFunctionMemberReference(): returnValue = %s \n",returnValue ? 
"true" : 
"false");
 
 
 9397#define DEBUG_IS_DATA_MEMBER_REFERENCE 0 
 9399     ROSE_ASSERT(varRefExp != NULL);
 
 9401     bool returnValue = 
false;
 
 9407     SgDotExp*   dotExp   = isSgDotExp(parent);
 
 9411     if (arrowExp != NULL || dotExp != NULL || addressOfOp != NULL)
 
 9413          if (arrowExp != NULL)
 
 9417               ROSE_ASSERT(parentOfArrowExp != NULL);
 
 9418               SgSizeOfOp* sizeOfOp = isSgSizeOfOp(parentOfArrowExp);
 
 9419               if (sizeOfOp != NULL && sizeOfOp->get_is_objectless_nonstatic_data_member_reference() == 
true)
 
 9422#if DEBUG_IS_DATA_MEMBER_REFERENCE 
 9423                    printf (
"In SageInterface::isDataMemberReference(): Found case of expression used in sizeof with objectless_nonstatic_data_member_reference \n");
 
 9430          ROSE_ASSERT(symbol != NULL);
 
 9433          ROSE_ASSERT(initializedName != NULL);
 
 9437          if (variableDeclaration != NULL)
 
 9439               bool isStatic = variableDeclaration->get_declarationModifier().get_storageModifier().
isStatic();
 
 9443                    ROSE_ASSERT(scope != NULL);
 
 9446                    if (classDefinition != NULL)
 
 9454#if DEBUG_IS_DATA_MEMBER_REFERENCE 
 9455               printf (
"In SageInterface::isDataMemberReference(): varRefExp is not associated with variableDeclaration (could not compute if it is static data member) \n");
 
 9461#if DEBUG_IS_DATA_MEMBER_REFERENCE 
 9462          printf (
"In SageInterface::isDataMemberReference(): varRefExp parent is not a is not SgArrowExp or SgDotExp expression \n");
 
 9466#if DEBUG_IS_DATA_MEMBER_REFERENCE 
 9467     printf (
"Leaving SageInterface::isDataMemberReference(): returnValue = %s \n",returnValue ? 
"true" : 
"false");
 
 
 9479     ROSE_ASSERT(varRefExp != NULL);
 
 9481     bool returnValue = 
false;
 
 9485     if (addressOfOp != NULL)
 
 9503     ROSE_ASSERT(varRefExp != NULL || memberFunctionRefExp != NULL);
 
 9507     ROSE_ASSERT(refExp != NULL);
 
 9509     bool returnValue = 
false;
 
 9514     if (addressOfOp != NULL)
 
 
 9532     ROSE_ASSERT (astNode != NULL);
 
 9536     ROSE_ASSERT (isSgProject(astNode) == NULL);
 
 9538     SgNode* previous_parent = NULL;
 
 9539     SgNode* previous_previous_parent = NULL;
 
 9541     SgNode* parent = astNode;
 
 9543     while ( (parent != NULL) && (isSgFile(parent) == NULL) && isSgJavaPackageDeclaration(parent) == NULL)
 
 9546          printf (
"In getEnclosingFileNode(): parent = %p = %s \n",parent,parent->
class_name().c_str());
 
 9548          previous_previous_parent = previous_parent;
 
 9549          previous_parent = parent;
 
 9554     if (previous_previous_parent != NULL && previous_parent != NULL && isSgJavaPackageDeclaration(parent) != NULL)
 
 9558          printf (
"parent                   = %p = %s \n",parent,parent->
class_name().c_str());
 
 9559          printf (
"previous_parent          = %p = %s \n",previous_parent,previous_parent->
class_name().c_str());
 
 9560          printf (
"previous_previous_parent = %p = %s \n",previous_previous_parent,previous_previous_parent->
class_name().c_str());
 
 9562          SgClassDeclaration* classDeclaration = isSgClassDeclaration(previous_previous_parent);
 
 9563          if (classDeclaration != NULL)
 
 9566               printf (
"Class name = %p = %s = %s \n",classDeclaration,classDeclaration->
class_name().c_str(),classDeclaration->get_name().str());
 
 9571               SgProject* project = TransformationSupport::getProject(parent);
 
 9572               ROSE_ASSERT(project != NULL);
 
 9573               SgFileList* fileList = project->get_fileList_ptr();
 
 9574               ROSE_ASSERT(fileList != NULL);
 
 9575               SgFilePtrList & vectorFile = fileList->get_listOfFiles();
 
 9577               printf (
"Output list of files: \n");
 
 9579               SgFilePtrList::iterator i = vectorFile.begin();
 
 9580               while (i != vectorFile.end())
 
 9583                    ROSE_ASSERT(file != NULL);
 
 9585                    printf (
"   --- filename = %s \n",file->
getFileName().c_str());
 
 9588                    string filenameWithoutPath = file->get_sourceFileNameWithoutPath();
 
 9589                    string classname           = classDeclaration->get_name();
 
 9590                    string matchingfilename    = classname + 
".java";
 
 9592                    printf (
"   ---   --- filename            = %s \n",filename.c_str());
 
 9593                    printf (
"   ---   --- filenameWithoutPath = %s \n",filenameWithoutPath.c_str());
 
 9594                    printf (
"   ---   --- classname           = %s \n",classname.c_str());
 
 9595                    printf (
"   ---   --- matchingfilename    = %s \n",matchingfilename.c_str());
 
 9597                    if (filenameWithoutPath == matchingfilename)
 
 9600                         printf (
"   return file = %p \n",file);
 
 9616                    SgSourceFile *sourcefile = isSgSourceFile(attribute->getNode());
 
 9617                    ROSE_ASSERT(sourcefile != NULL);
 
 9626          if (previous_parent == NULL && isSgJavaPackageDeclaration(parent) != NULL)
 
 9629               ROSE_ASSERT(isSgJavaPackageDeclaration(astNode) != NULL);
 
 9634               if (previous_previous_parent == NULL && isSgJavaPackageDeclaration(parent) != NULL)
 
 9637                    ROSE_ASSERT(isSgClassDefinition(astNode) != NULL);
 
 9648     if (parent == 
nullptr)
 
 9654          return isSgFile(parent);
 
 
 9660    std::set<SgNode*> specific;
 
 9661    std::set<SgNode*> non_specific;
 
 9663    static void recursive_collect( 
SgNode* node , std::set<SgNode *> & collection ) {
 
 9665      if (node == NULL || !collection.insert(node).second) 
return;
 
 9668      for (std::vector<std::pair<SgNode*, std::string> >::iterator i = data_members.begin(); i != data_members.end(); ++i) {
 
 9669        recursive_collect(i->first, collection);
 
 9676      if (fileInfo != NULL) {
 
 9677        if (fileInfo->isFrontendSpecific()) {
 
 9679          recursive_collect(n, specific);
 
 9681          non_specific.insert(n);
 
 9682          recursive_collect(n, non_specific);
 
 9685        fileInfo = isSg_File_Info(n);
 
 9686        if (fileInfo != NULL) {
 
 9687          if (fileInfo->isFrontendSpecific()) {
 
 9690            non_specific.insert(n);
 
 9696    std::set<SgNode*> apply() {
 
 9697      traverseMemoryPool();
 
 9699      std::set<SgNode*> result;
 
 9701      std::set_difference(
 
 9702        specific.begin(), specific.end(),
 
 9703        non_specific.begin(), non_specific.end(),
 
 9704        std::insert_iterator<set<SgNode*> >(result, result.begin())
 
 9711  FrontendSpecificTraversal fst;
 
 
 9724               void visit(
SgNode *astNode)
 
 9726                    ROSE_ASSERT(astNode != NULL);
 
 9728                    if (file_info != NULL)
 
 9732                              printf (
"Found shared node: astNode = %p = %s \n",astNode,astNode->
class_name().c_str());
 
 9738     OutputSharedNodesTraversal tt;
 
 9739     tt.traverse(node,preorder);
 
 
 9747  while (n && !isSgStatement(n)) n = n->
get_parent();
 
 9748  return isSgStatement(n);
 
 
 9757SageInterface::DeferredTransformation::DeferredTransformation()
 
 9758   : deferredTransformationKind(e_default),
 
 9759     statementToRemove(NULL),
 
 9760     statementToAdd(NULL),
 
 9761     class_definition(NULL),
 
 9762     target_class_member(NULL),
 
 9763     new_function_prototype(NULL),
 
 9765     locationToOverwriteWithTransformation(NULL),
 
 9766     transformationToOverwriteFirstStatementInInterval(NULL),
 
 9767     blockOfStatementsToOutline(NULL)
 
 9771     printf (
"In SageInterface::DeferredTransformation default constructor called \n");
 
 9779SageInterface::DeferredTransformation::DeferredTransformation(
 
 9783   : deferredTransformationKind(e_outliner),
 
 9784     statementToRemove(NULL),
 
 9785     statementToAdd(NULL),
 
 9786     class_definition(input_class_definition),
 
 9787     target_class_member(input_target_class_member),
 
 9788     new_function_prototype(input_new_function_prototype),
 
 9790     locationToOverwriteWithTransformation(NULL),
 
 9791     transformationToOverwriteFirstStatementInInterval(NULL),
 
 9792     blockOfStatementsToOutline(NULL)
 
 9796     printf (
"In SageInterface::DeferredTransformation constructor for outliner called \n");
 
 9804     printf (
"In SageInterface::DeferredTransformation constructor for replaceDefiningFunctionDeclarationWithFunctionPrototype called \n");
 
 9810     X.deferredTransformationKind = e_replaceDefiningFunctionDeclarationWithFunctionPrototype;
 
 9811     X.statementToRemove          = functionDeclaration;
 
 9812     X.statementToAdd             = NULL;
 
 9813     X.class_definition           = NULL;
 
 9814     X.target_class_member        = NULL;
 
 9815     X.new_function_prototype     = NULL;
 
 9818     X.locationToOverwriteWithTransformation             = NULL;
 
 9819     X.transformationToOverwriteFirstStatementInInterval = NULL;
 
 9820     X.blockOfStatementsToOutline                        = NULL;
 
 
 9826SageInterface::DeferredTransformation::replaceStatement(
SgStatement* oldStmt, 
SgStatement* newStmt, 
bool )
 
 9829     printf (
"In SageInterface::DeferredTransformation constructor for replaceStatement called \n");
 
 9835     X.deferredTransformationKind = e_replaceStatement;
 
 9836     X.statementToRemove          = oldStmt;
 
 9837     X.statementToAdd             = newStmt;
 
 9838     X.class_definition           = NULL;
 
 9839     X.target_class_member        = NULL;
 
 9840     X.new_function_prototype     = NULL;
 
 9843     X.locationToOverwriteWithTransformation = NULL;
 
 9844     X.transformationToOverwriteFirstStatementInInterval = NULL;
 
 9845     X.blockOfStatementsToOutline = NULL;
 
 9850SageInterface::DeferredTransformation::DeferredTransformation (
const DeferredTransformation& X)
 
 9852   : deferredTransformationKind(X.deferredTransformationKind),
 
 9853     statementToRemove(X.statementToRemove),
 
 9854     statementToAdd(X.StatementToAdd),
 
 9855     class_definition(X.class_definition),
 
 9856     target_class_member(X.target_class_member),
 
 9857     new_function_prototype(X.new_function_prototype),
 
 9858     targetClasses(X.targetClasses),
 
 9859     targetFriends(X.targetFriends)
 
 9865     printf (
"In SageInterface::DeferredTransformation copy constructor called \n");
 
 9875     printf (
"Inside of SageInterface::DeferredTransformation::operator= (const DeferredTransformation& X) \n");
 
 9880     targetFriends = X.targetFriends;
 
 9881     targetClasses = X.targetClasses;
 
 9887     transformationLabel = X.transformationLabel;
 
 9890     deferredTransformationKind = X.deferredTransformationKind;
 
 9891     statementToRemove          = X.statementToRemove;
 
 9892     statementToAdd             = X.statementToAdd;
 
 9894     class_definition           = X.class_definition;
 
 9895     target_class_member        = X.target_class_member;
 
 9896     new_function_prototype     = X.new_function_prototype;
 
 9897     targetClasses              = X.targetClasses;
 
 9898     targetFriends              = X.targetFriends;
 
 9901     statementInterval                                 = X.statementInterval;
 
 9902     locationToOverwriteWithTransformation             = X.locationToOverwriteWithTransformation;
 
 9903     transformationToOverwriteFirstStatementInInterval = X.transformationToOverwriteFirstStatementInInterval;
 
 9906     blockOfStatementsToOutline                        = X.blockOfStatementsToOutline;
 
 
 9917std::string SageInterface::DeferredTransformation::outputDeferredTransformationKind(
const TransformationKind & kind)
 
 9919     string returnValue = 
"uninitialized";
 
 9922         case e_error:                                                   returnValue = 
"e_error";            
break;
 
 9923         case e_default:                                                 returnValue = 
"e_default";          
break;
 
 9924         case e_outliner:                                                returnValue = 
"e_outliner";         
break;
 
 9925         case e_replaceStatement:                                        returnValue = 
"e_replaceStatement"; 
break;
 
 9926         case e_removeStatement:                                         returnValue = 
"e_removeStatement";  
break;
 
 9927         case e_replaceDefiningFunctionDeclarationWithFunctionPrototype: returnValue = 
"e_replaceDefiningFunctionDeclarationWithFunctionPrototype"; 
break;
 
 9928         case e_last:                                                    returnValue = 
"e_last";             
break;
 
 9931              printf (
"Error: SageInterface::DeferredTransformation::get_deferredTransformationKind_string(): default reached \n");
 
 9939void SageInterface::DeferredTransformation::display ( std::string label )
 const 
 9941     printf (
"SageInterface::DeferredTransformation::display(): label = %s \n",label.c_str());
 
 9946     printf (
" --- transformationLabel = %s \n",transformationLabel.c_str());
 
 9948     printf (
" --- deferredTransformationKind = %s \n",outputDeferredTransformationKind(deferredTransformationKind).c_str());
 
 9949     if (statementToRemove != NULL)
 
 9951          printf (
" --- statementToRemove = %p = %s name = %s \n",statementToRemove,statementToRemove->class_name().c_str(),
get_name(statementToRemove).c_str());
 
 9955          printf (
" --- statementToRemove == NULL \n");
 
 9958     if (statementToAdd != NULL)
 
 9960          printf (
" --- statementToAdd = %p = %s name = %s \n",statementToAdd,statementToAdd->class_name().c_str(),
get_name(statementToAdd).c_str());
 
 9964          printf (
" --- statementToAdd == NULL \n");
 
 9967     if (class_definition != NULL)
 
 9970          printf (
" --- class_definition = %p \n",class_definition);
 
 9973     if (target_class_member != NULL)
 
 9975          printf (
" --- target_class_member = %p = %s name = %s \n",target_class_member,target_class_member->class_name().c_str(),
get_name(target_class_member).c_str());
 
 9978     if (new_function_prototype != NULL)
 
 9980          printf (
" --- new_function_prototype = %p = %s name = %s \n",new_function_prototype,new_function_prototype->class_name().c_str(),
get_name(new_function_prototype).c_str());
 
 9984     if (locationToOverwriteWithTransformation != NULL)
 
 9988          printf (
" --- locationToOverwriteWithTransformation = %p \n",locationToOverwriteWithTransformation);
 
 9992     if (transformationToOverwriteFirstStatementInInterval != NULL)
 
 9996          printf (
" --- transformationToOverwriteFirstStatementInInterval = %p \n",transformationToOverwriteFirstStatementInInterval);
 
10000     if (blockOfStatementsToOutline != NULL)
 
10002          printf (
" --- blockOfStatementsToOutline = %p \n",blockOfStatementsToOutline);
 
10005     printf (
"targetClasses.size() = %zu \n",targetClasses.size());
 
10006     printf (
"targetFriends.size() = %zu \n",targetFriends.size());
 
10009     printf (
"statementInterval.size() = %zu \n",statementInterval.size());
 
10019#define REMOVE_STATEMENT_DEBUG 0 
10024#ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT 
10035     ASSERT_not_null(targetStmt);
 
10043     bool isRemovable = (parentStatement != NULL) ? LowLevelRewrite::isRemovableStatement(targetStmt) : 
false;
 
10045#if REMOVE_STATEMENT_DEBUG || 0 
10046     printf (
"In SageInterface::removeStatement(): parentStatement = %p = %s remove targetStatement = %p = %s (isRemovable = %s) \n",
 
10047          parentStatement,parentStatement->
class_name().c_str(),targetStmt,targetStmt->
class_name().c_str(),isRemovable ? 
"true" : 
"false");
 
10050     if (isRemovable == 
true)
 
10057          if (autoRelocatePreprocessingInfo == 
true)
 
10067               if (comments != 
nullptr && isSgBasicBlock(targetStmt) == 
nullptr )
 
10069                    vector<int> captureList;
 
10070#if REMOVE_STATEMENT_DEBUG 
10071                    printf (
"Found attached comments (removing %p = %s): comments->size() = %" PRIuPTR 
" \n",targetStmt,targetStmt->
class_name().c_str(),comments->size());
 
10077                    int commentIndex = 0;
 
10078                    AttachedPreprocessingInfoType::iterator i;
 
10079                    for (i = comments->begin(); i != comments->end(); i++)
 
10081                         ROSE_ASSERT ( (*i) != NULL );
 
10082#if REMOVE_STATEMENT_DEBUG 
10083                         printf (
"          Attached Comment (relativePosition=%s): %s\n",
 
10084                              ((*i)->getRelativePosition() == PreprocessingInfo::before) ? 
"before" : 
"after",
 
10085                              (*i)->getString().c_str());
 
10086                         printf (
"Comment/Directive getNumberOfLines = %d getColumnNumberOfEndOfString = %d \n",(*i)->getNumberOfLines(),(*i)->getColumnNumberOfEndOfString());
 
10087                         (*i)->get_file_info()->display(
"comment/directive location debug");
 
10089                         captureList.push_back(commentIndex);
 
10093#if REMOVE_STATEMENT_DEBUG 
10094                    printf (
"captureList.size() = %" PRIuPTR 
" \n",captureList.size());
 
10097                    if (captureList.empty() == 
false)
 
10102                         bool surroundingStatementPreceedsTargetStatement = 
false;
 
10105                         if (surroundingStatement != 
nullptr)
 
10108#if REMOVE_STATEMENT_DEBUG 
10109                              printf (
"In removeStatement(): surroundingStatementPreceedsTargetStatement = %s \n",surroundingStatementPreceedsTargetStatement ? 
"true" : 
"false");
 
10110                              printf (
" --- moving comments from targetStmt         = %p = %s name = %s \n",targetStmt,targetStmt->
class_name().c_str(),
get_name(targetStmt).c_str());
 
10111                              printf (
" --- moving comments to surroundingStatement = %p = %s name = %s \n",surroundingStatement,surroundingStatement->
class_name().c_str(),
get_name(surroundingStatement).c_str());
 
10126     printf (
"Error: This is not supported within Microsoft Windows (I forget why). \n");
 
 
10148     printf (
"In SageInterface::resetInternalMapsForTargetStatement(SgStatement*): sourceStatement = %p = %s \n",sourceStatement,sourceStatement->
class_name().c_str());
 
10157     printf (
"In SageInterface::resetInternalMapsForTargetStatement(SgStatement*): sourceFile = %p \n",sourceFile);
 
10160     if (sourceFile != NULL)
 
10162          std::map<SgStatement*,MacroExpansion*> & macroExpansionMap = sourceFile->get_macroExpansionMap();
 
10164          if (macroExpansionMap.find(sourceStatement) != macroExpansionMap.end())
 
10166               MacroExpansion* macroExpansion = macroExpansionMap[sourceStatement];
 
10167               ROSE_ASSERT(macroExpansion != NULL);
 
10169               printf (
"In resetInternalMapsForTargetStatement(): macroExpansion = %p = %s \n",macroExpansion,macroExpansion->macro_name.c_str());
 
10171               if (macroExpansion->isTransformed == 
false)
 
10174                    std::vector<SgStatement*> & associatedStatementVector = macroExpansion->associatedStatementVector;
 
10176                    for (
size_t i = 0; i < associatedStatementVector.size(); i++)
 
10179                         SgStatement* statement = associatedStatementVector[i];
 
10181                         printf (
"Mark as transformation to be output: statement = %p = %s \n",statement,statement->
class_name().c_str());
 
10205               macroExpansion->isTransformed = 
true;
 
 
10222#if REMOVE_STATEMENT_DEBUG || 0 
10223     printf (
"In moveCommentsToNewStatement(): destinationStatementProceedsSourceStatement = %s \n",destinationStatementProceedsSourceStatement ? 
"true" : 
"false");
 
10224     printf (
" --- sourceStatement = %p = %s name = %s \n",sourceStatement,sourceStatement->
class_name().c_str(),
get_name(sourceStatement).c_str());
 
10225     printf (
" --- destinationStatement = %p = %s name = %s \n",destinationStatement,destinationStatement->
class_name().c_str(),
get_name(destinationStatement).c_str());
 
10233#if REMOVE_STATEMENT_DEBUG 
10234     printf (
"Output the comments attached to sourceStatement: \n");
 
10236     printf (
"Output the comments attached to destinationStatement: \n");
 
10241     vector<int>::const_iterator j = indexList.begin();
 
10243     while (j != indexList.end())
 
10246          ROSE_ASSERT(destinationStatement->
get_file_info() != NULL);
 
10247#if REMOVE_STATEMENT_DEBUG || 0 
10248          printf (
"Attaching comments to destinationStatement = %p = %s on file = %s line %d \n",
 
10249               destinationStatement,destinationStatement->
class_name().c_str(),
 
10250               destinationStatement->
get_file_info()->get_filenameString().c_str(),
 
10253          printf (
"(*comments)[*j]->getRelativePosition() = %s \n",PreprocessingInfo::relativePositionName((*comments)[*j]->getRelativePosition()).c_str());
 
10265          if (destinationStatementProceedsSourceStatement == 
true || isSgGlobal(destinationStatement) != NULL )
 
10271                 auto commentPosition = (*comments)[*j]->getRelativePosition();
 
10272                 if (commentPosition == PreprocessingInfo::before)
 
10275                    (*comments)[*j]->setRelativePosition(PreprocessingInfo::after);
 
10277               else if (commentPosition == PreprocessingInfo::after ||
 
10278                        commentPosition == PreprocessingInfo::end_of)
 
10284                    ROSE_ASSERT(
false && 
"Comment relative position neither, before, after, nor end_of");
 
10296                    (*comments)[*j]->setRelativePosition(PreprocessingInfo::inside);
 
10307               if ((*comments)[*j]->getRelativePosition() == PreprocessingInfo::before)
 
10315                    ASSERT_require((*comments)[*j]->getRelativePosition() == PreprocessingInfo::after||
 
10316                       (*comments)[*j]->getRelativePosition() == PreprocessingInfo::end_of);
 
10317                    (*comments)[*j]->setRelativePosition(PreprocessingInfo::before);
 
10326               if (targetInfoList==NULL)
 
10335                  if( prevTargetAnchorComment==NULL)
 
10348               prevTargetAnchorComment = (*comments)[*j];
 
10353#if REMOVE_STATEMENT_DEBUG 
10354          printf (
"Marking entry from comments list as NULL on sourceStatement = %p = %s \n",sourceStatement,sourceStatement->
class_name().c_str());
 
10356         (*comments)[*j] = 
nullptr;
 
10363     for (
size_t n = 0; n < indexList.size(); n++)
 
10365#if REMOVE_STATEMENT_DEBUG || 0 
10366          printf (
"Erase entry from comments list on comments->size() %" PRIuPTR 
" \n",comments->size());
 
10368          bool modifiedList = 
false;
 
10369          AttachedPreprocessingInfoType::iterator k = comments->begin();
 
10370          while (k != comments->end() && modifiedList == 
false)
 
10375                    k = comments->erase(k);
 
10376                    modifiedList = 
true;
 
 
10398     ROSE_ASSERT(targetStmt != NULL);
 
10403#if REMOVE_STATEMENT_DEBUG || 0 
10404     printf (
"TOP of findSurroundingStatementFromSameFile(): surroundingStatementPreceedsTargetStatement = %s \n",surroundingStatementPreceedsTargetStatement ? 
"true" : 
"false");
 
10407     std::set<SgStatement*> previousVisitedStatementSet;
 
10412          surroundingStatementPreceedsTargetStatement = 
true;
 
10414#if REMOVE_STATEMENT_DEBUG 
10415          printf (
"   targetStmt->get_file_info()->get_file_id()           = %d \n",targetStmt->
get_file_info()->get_file_id());
 
10417#if REMOVE_STATEMENT_DEBUG 
10418          printf (
"Before loop: surroundingStatement = %p = %s name = %s surroundingStatement_fileId = %d \n",surroundingStatement,
 
10421          bool returningNullSurroundingStatement = 
false;
 
10433#if REMOVE_STATEMENT_DEBUG 
10434               printf (
"In loop: after getPreviousStatement(): surroundingStatement = %p = %s name = %s \n",surroundingStatement,
 
10438               if (surroundingStatement == NULL)
 
10441#if REMOVE_STATEMENT_DEBUG 
10442                    printf (
"   surroundingStatement_fileId set to Sg_File_Info::BAD_FILE_ID \n");
 
10447                    surroundingStatement_fileId = surroundingStatement->
get_file_info()->get_file_id();
 
10448#if REMOVE_STATEMENT_DEBUG 
10449                    printf (
"   surroundingStatement = %p = %s surroundingStatement->get_file_info()->get_file_id() = %d \n",
 
10450                         surroundingStatement,surroundingStatement->
class_name().c_str(),surroundingStatement->
get_file_info()->get_file_id());
 
10454#if REMOVE_STATEMENT_DEBUG 
10455               if (surroundingStatement != NULL)
 
10457                    printf (
"Looping toward the top of the file for a statement to attach comments and CPP directives to: surroundingStatement = %p = %s file = %s file id = %d line = %d \n",
 
10458                         surroundingStatement,surroundingStatement->
class_name().c_str(),
 
10459                         surroundingStatement->
get_file_info()->get_filenameString().c_str(),
 
10465                    printf (
"surroundingStatement == NULL \n");
 
10470               if (previousVisitedStatementSet.find(surroundingStatement) != previousVisitedStatementSet.end())
 
10472                   printf (
"This statement has been previously visited: surroundingStatement = %p = %s \n",surroundingStatement,surroundingStatement->
class_name().c_str());
 
10474                   printf (
"ERROR: SageInterface::findSurroundingStatementFromSameFile(): cannot located surrounding statement from same file (return NULL) \n");
 
10476                   surroundingStatement = NULL;
 
10482                   previousVisitedStatementSet.insert(surroundingStatement);
 
10486               if (surroundingStatement == NULL || isSgGlobal(surroundingStatement) != NULL)
 
10489#if REMOVE_STATEMENT_DEBUG 
10490                    printf (
"We just ran off the start (top) of the file... targetStmt = %p = %s \n",targetStmt,targetStmt->
class_name().c_str());
 
10496                    surroundingStatementPreceedsTargetStatement = 
false;
 
10499                    surroundingStatement = targetStmt;
 
10500                    SgStatement* previousStatement = surroundingStatement;
 
10504                    std::set<SgStatement*> forwardVisitedStatementSet;
 
10507                    while ( (surroundingStatement != NULL) && (surroundingStatement_fileId != targetStmt->
get_file_info()->get_file_id()) )
 
10510                         if (forwardVisitedStatementSet.find(surroundingStatement) != forwardVisitedStatementSet.end())
 
10512                              printf (
"This statement has been previously visited: surroundingStatement = %p = %s \n",surroundingStatement,surroundingStatement->
class_name().c_str());
 
10514                              printf (
"ERROR: SageInterface::findSurroundingStatementFromSameFile(): cannot located surrounding statement from same file (return NULL) \n");
 
10516                              surroundingStatement = NULL;
 
10522                              forwardVisitedStatementSet.insert(surroundingStatement);
 
10525                         previousStatement = surroundingStatement;
 
10528                         if (surroundingStatement == NULL)
 
10531#if REMOVE_STATEMENT_DEBUG 
10532                              printf (
"We just ran off the end (bottom) of the file... \n");
 
10537                              returningNullSurroundingStatement = 
true;
 
10541                              surroundingStatement_fileId = surroundingStatement->
get_file_info()->get_file_id();
 
10542#if REMOVE_STATEMENT_DEBUG 
10543                              printf (
"Looping toward the bottom of the file for a statement to attach comments and CPP directives to: surroundingStatement = %p = %s file = %s file id = %d line = %d \n",
 
10544                                   surroundingStatement,surroundingStatement->
class_name().c_str(),
 
10545                                   surroundingStatement->
get_file_info()->get_filenameString().c_str(),
 
10552                    if (surroundingStatement == NULL)
 
10554#if REMOVE_STATEMENT_DEBUG 
10555                         printf (
"Resetting the surroundingStatement to the previousStatement = %p = %s \n",previousStatement,previousStatement->
class_name().c_str());
 
10557                         surroundingStatement = previousStatement;
 
10560                         if (surroundingStatement == targetStmt)
 
10564#if REMOVE_STATEMENT_DEBUG 
10565                              printf (
"Setting the surroundingStatement to be global scope \n");
 
10567                              surroundingStatement = TransformationSupport::getGlobalScope(targetStmt);
 
10573          ROSE_ASSERT(surroundingStatement != NULL);
 
10577          printf (
"This is a special statement (not associated with the original source code, comment relocation is not supported for these statements) targetStmt file id = %d \n",targetStmt->
get_file_info()->get_file_id());
 
10578          surroundingStatement = NULL;
 
10581#if REMOVE_STATEMENT_DEBUG 
10582     printf (
"BOTTOM of findSurroundingStatementFromSameFile(): surroundingStatementPreceedsTargetStatement = %s surroundingStatement = %p \n",surroundingStatementPreceedsTargetStatement ? 
"true" : 
"false",surroundingStatement);
 
10583     if (surroundingStatement != NULL)
 
10585          printf (
"surroundingStatement = %p = %s \n",surroundingStatement,surroundingStatement->
class_name().c_str());
 
10591     return surroundingStatement;
 
 
10601    virtual void visit(
SgNode* n) {
 
10605  Visitor().
traverse(root, postorder);
 
 
10615     ROSE_ASSERT(oldStmt);
 
10616     ROSE_ASSERT(newStmt);
 
10618     if (oldStmt == newStmt) 
return;
 
10629          ROSE_ASSERT (f_do->get_body() == oldStmt);
 
10630          if (!isSgBasicBlock(newStmt))
 
10632          f_do->set_body(isSgBasicBlock(newStmt));
 
10649     printf (
"In SageInterface::replaceStatement(): physical_file_id = %d \n",physical_file_id);
 
10660     if (movePreprocessingInfoValue)
 
10668          printf (
"In SageInterface::replaceStatement(): calling moveUpPreprocessingInfo() changed to movePreprocessingInfo() \n");
 
10680          bool usePrepend = 
true;
 
10682          movePreprocessingInfo ( oldStmt, newStmt, PreprocessingInfo::undef, PreprocessingInfo::undef, usePrepend );
 
 
10703     printf (
"In SageInterface::moveDeclarationToAssociatedNamespace(): declarationStatement = %p = %s \n",declarationStatement,declarationStatement->
class_name().c_str());
 
10704     printf (
"   --- previousDeclarationStatement = %p = %s \n",previousDeclarationStatement,previousDeclarationStatement != NULL ? previousDeclarationStatement->
class_name().c_str() : 
"null");
 
10705     printf (
"   --- nextDeclarationStatement     = %p      \n",nextDeclarationStatement);
 
10706     printf (
"   --- nextDeclarationStatement     = %p = %s \n",nextDeclarationStatement,    nextDeclarationStatement != NULL     ? nextDeclarationStatement->
class_name().c_str() : 
"null");
 
10710     if (previousDeclarationStatement != NULL)
 
10716          printf (
"There is no previous statement so there is no namespace to close off! \n");
 
10719          printf (
"Exiting as a test! \n");
 
10724     if (nextDeclarationStatement != NULL)
 
10731          printf (
"There is no next statement so there is no namespace to reopen! \n");
 
10735          printf (
"Exiting as a test! \n");
 
10740     if (previousDeclarationStatement != NULL && nextDeclarationStatement != NULL)
 
10744          printf (
"Identified the most common case... \n");
 
10749          printf (
"declarationScope = %p = %s \n",declarationScope,declarationScope->
class_name().c_str());
 
10753          printf (
"Exiting as a test! \n");
 
10759          if (previousDeclarationStatement != NULL && nextDeclarationStatement == NULL)
 
10763               printf (
"Found 2nd most common case: previousDeclarationStatement != NULL && nextDeclarationStatement == NULL \n");
 
10767               printf (
"Exiting as a test! \n");
 
10773               if (previousDeclarationStatement == NULL && nextDeclarationStatement == NULL)
 
10775                    printf (
"This case should require no special handling, unless we are still in the wrong namespace \n");
 
10778                    printf (
"Exiting as a test! \n");
 
10783                    printf (
"This case should have been caught above! \n");
 
10786                    printf (
"Exiting as a test! \n");
 
10793     if (declarationParent == NULL)
 
10796          printf (
"declarationStatement->get_parent() = %p = %s \n",declarationStatement->
get_parent(), (declarationStatement->
get_parent() != NULL) ? declarationStatement->
get_parent()->
class_name().c_str() : 
"null");
 
10802     if (declarationParent != NULL)
 
10805          ROSE_ASSERT(declarationScope != NULL);
 
10808          if (namespaceDefinition != NULL)
 
10811               ROSE_ASSERT(namespaceDeclaration != NULL);
 
10813               printf (
"The declaration has been identified to be associuated with a valid namespace = %p = %s \n",namespaceDeclaration,namespaceDeclaration->
get_name().str());
 
10814               printf (
"   --- declarationParent = %p = %s \n",declarationParent,declarationParent->
class_name().c_str());
 
10815               printf (
"   --- Move declaration from scope = %p = %s to namespace = %p = %s \n",declarationParent,declarationParent->
class_name().c_str(),namespaceDeclaration,namespaceDeclaration->
get_name().str());
 
10818               printf (
"Exiting as a test! \n");
 
10825               printf (
"declaration is not associated with a namespace, so we don't have to wrap it: declarationScope = %p = %s \n",declarationScope,declarationScope->
class_name().c_str());
 
10832          printf (
"Warning: declarationParent == NULL: declarationStatement->get_parent() = %p = %s \n",declarationStatement->
get_parent(), (declarationStatement->
get_parent() != NULL) ? declarationStatement->
get_parent()->
class_name().c_str() : 
"null");
 
 
10844     if (isSgTemplateInstantiationDefn(node) != NULL)
 
10847          printf (
"Note: In SageInterface::isTemplateInstantiationNode(): skipping SgTemplateInstantiationDefn \n");
 
10851     return isSgTemplateInstantiationDecl(node)
 
10854         || isSgTemplateInstantiationDefn(node)
 
10855         || isSgTemplateInstantiationFunctionDecl(node)
 
10856         || isSgTemplateInstantiationMemberFunctionDecl(node)
 
10857         || isSgTemplateInstantiationTypedefDeclaration(node)
 
10858         || isSgTemplateInstantiationDirectiveStatement(node)
 
 
10867SageInterface::isTemplateDeclarationNode(
SgNode* node)
 
10870     if (isSgTemplateDefinition(node) != NULL)
 
10873          printf (
"Note: In SageInterface::isTemplateDeclarationNode(): skipping SgTemplateDefinition \n");
 
10877     return isSgTemplateInstantiationDecl(node)
 
10880         || isSgTemplateInstantiationDefn(node)
 
10881         || isSgTemplateInstantiationFunctionDecl(node)
 
10882         || isSgTemplateInstantiationMemberFunctionDecl(node)
 
10883         || isSgTemplateInstantiationTypedefDeclaration(node)
 
10884         || isSgTemplateInstantiationDirectiveStatement(node)
 
10897     std::vector<SgDeclarationStatement*> templateInstantiationVector;
 
10909               if (declaration != NULL)
 
10911                    templateInstantiationVector.push_back(declaration);
 
10920     std::cerr << 
"This feature for now is available with autotools only!" << std::endl;
 
10924     std::vector<SgDeclarationStatement*>::iterator j = templateInstantiationVector.begin();
 
10925     while (j != templateInstantiationVector.end())
 
 
10939  SgExpression * pattern_exp = isSgExpression(new_pattern);
 
10940  ROSE_ASSERT (anchor_exp != NULL);
 
10941  ROSE_ASSERT (pattern_exp != NULL);
 
10944   Rose_STL_Container<SgNode*> opaque_exp_list = NodeQuery::querySubTree(pattern_exp,V_SgExpression);
 
10945   for (
size_t i = 0; i<opaque_exp_list.size(); i++)
 
10947     SgExpression* opaque_exp = isSgExpression(opaque_exp_list[i]);
 
10948     ROSE_ASSERT (opaque_exp != NULL);
 
10949     if (opaque_exp->
variantT() == V_SgVariantExpression)
 
10958  return new_pattern;
 
 
10965    static int counter = 0;
 
10968    bool collision = 
false;
 
10971        name = 
"__" + baseName + boost::lexical_cast<string > (counter++) + 
"__";
 
10977        collision = (nameSymbol != NULL);
 
10980        Rose_STL_Container<SgNode*> childScopes = NodeQuery::querySubTree(scope, V_SgScopeStatement);
 
10982        BOOST_FOREACH(
SgNode* childScope, childScopes)
 
10988            nameSymbol = childScopeStatement->lookup_symbol(
SgName(name),NULL,NULL);
 
10990            collision = collision || (nameSymbol != NULL);
 
10992    } 
while (collision);
 
 
11002    SgType* variableType = expressionType;
 
11009        SgType* expressionBaseType = expressionType->
stripType(SgType::STRIP_TYPEDEF_TYPE | SgType::STRIP_REFERENCE_TYPE | SgType::STRIP_RVALUE_REFERENCE_TYPE);
 
11014    if (
SgArrayType* arrayType=isSgArrayType(expressionType)) {
 
11015      if(
SgArrayType* strippedArrayType = isSgArrayType(arrayType->stripType(SgType::STRIP_TYPEDEF_TYPE))) {
 
11016        SgType* strippedArrayBaseType = strippedArrayType->get_base_type();
 
11022    if (isSgPointerDerefExp(expression))
 
11030    ROSE_ASSERT(tempVarInitExpression != NULL);
 
11041    if (initializeInDeclaration)
 
11048    ROSE_ASSERT(tempVarDeclaration != NULL);
 
11051    if (reEvaluate != NULL)
 
11065    return std::make_pair(tempVarDeclaration, varRefExpression);
 
 
11078    SgType* variableType = expressionType;
 
11081    if (
SgArrayType* arrayType=isSgArrayType(expressionType))
 
11083      if(
SgArrayType* strippedArrayType = isSgArrayType(arrayType->stripType(SgType::STRIP_TYPEDEF_TYPE))) {
 
11084        SgType* strippedArrayBaseType = strippedArrayType->get_base_type();
 
11098    ROSE_ASSERT(tempVarDeclaration != NULL);
 
11102    return std::make_pair(tempVarDeclaration, varRefExpression);
 
 
11109  replaceExpressionInSgExpressionPtrList(
SgExpression* oldExp, 
SgExpression* newExp, SgExpressionPtrList& lst, 
bool replAll = 
false)
 
11111    SgExpressionPtrList::iterator lim = lst.end();
 
11112    SgExpressionPtrList::iterator pos = lst.begin();
 
11117      pos = std::find(pos, lim, oldExp);
 
11119      if (pos != lim) { *pos = newExp; ++pos; chg = 
true; }
 
11120    } 
while (replAll && (pos != lim));
 
11134  ROSE_ASSERT(oldExp);
 
11135  ROSE_ASSERT(newExp);
 
11136  if (oldExp==newExp) 
return;
 
11138  if (isSgVarRefExp(newExp))
 
11142  ROSE_ASSERT(parent!=NULL);
 
11148  if (isSgExprStatement(parent)) {
 
11149    isSgExprStatement(parent)->set_expression(newExp);
 
11150  } 
else if (isSgForStatement(parent)) {
 
11151    ROSE_ASSERT (isSgForStatement(parent)->get_increment() == oldExp);
 
11152    isSgForStatement(parent)->set_increment(newExp);
 
11155    if(matlabFor->get_index() == oldExp)
 
11156      matlabFor->set_index(newExp);
 
11157    else if(matlabFor->get_range() == oldExp)
 
11158      matlabFor->set_range(newExp);
 
11160      ROSE_ASSERT(!
"sub-expression not found");
 
11162    if(jovFor->get_initialization() == oldExp)
 
11163      jovFor->set_initialization(newExp);
 
11164    else if(jovFor->get_while_expression() == oldExp)
 
11165      jovFor->set_while_expression(newExp);
 
11166    else if(jovFor->get_by_or_then_expression() == oldExp)
 
11167      jovFor->set_by_or_then_expression(newExp);
 
11169      ROSE_ASSERT(!
"sub-expression not found");
 
11170  } 
else if (
SgRangeExp* rngexp = isSgRangeExp(parent)) {
 
11171    if (rngexp->get_start() == oldExp)
 
11172      rngexp->set_start(newExp);
 
11173    else if (rngexp->get_end() == oldExp)
 
11174      rngexp->set_end(newExp);
 
11175    else if (rngexp->get_stride() == oldExp)
 
11176      rngexp->set_stride(newExp);
 
11178      ROSE_ASSERT(!
"sub-expression not found");
 
11179  } 
else if (isSgReturnStmt(parent)) {
 
11180    isSgReturnStmt(parent)->set_expression(newExp);
 
11181  } 
else  if (isSgBinaryOp(parent)!=NULL) {
 
11182    if (oldExp==isSgBinaryOp(parent)->get_lhs_operand()) {
 
11184    } 
else if (oldExp==isSgBinaryOp(parent)->get_rhs_operand()) {
 
11189  } 
else if (isSgUnaryOp(parent)!=NULL){
 
11190      if (oldExp==isSgUnaryOp(parent)->get_operand_i())
 
11194  } 
else if (isSgConditionalExp(parent) != NULL) {
 
11204  } 
else if (isSgExprListExp(parent) != NULL) {
 
11205    SgExpressionPtrList& explist = isSgExprListExp(parent)->get_expressions();
 
11206    for (Rose_STL_Container<SgExpression*>::iterator i=explist.begin();i!=explist.end();i++) {
 
11207      if (isSgExpression(*i)==oldExp) {
 
11213  } 
else if (isSgValueExp(parent)) {
 
11218    ROSE_ASSERT(oldExp == actexp->get_expression());
 
11219    actexp->set_expression(newExp);
 
11221    if (oldExp == attrexp->get_object()) {
 
11222      attrexp->set_object(newExp);
 
11223    } 
else if (oldExp == attrexp->get_args()) {
 
11225      ASSERT_not_null(newLst);
 
11227      attrexp->set_args(newLst);
 
11232  } 
else if ((parentExp=isSgExpression(parent)) != NULL) {
 
11235    ROSE_ASSERT (worked);
 
11236  } 
else if (isSgInitializedName(parent)) {
 
11238    if (oldExp == initializedNameParent->get_initializer()) {
 
11240      ROSE_ASSERT(isSgInitializer(newExp));
 
11241      initializedNameParent->set_initializer(isSgInitializer(newExp));
 
11246  } 
else if (isSgCaseOptionStmt(parent)) {
 
11248    if (oldExp == case_stmt->
get_key()) {
 
11250    } 
else if(oldExp == case_stmt->get_key_range_end()) {
 
11251      case_stmt->set_key_range_end(newExp);
 
11255  } 
else if (isSgProcessControlStatement(parent)) {
 
11257    if (oldExp == ctrl_stmt->get_quiet()) {
 
11258      ctrl_stmt->set_quiet(newExp);
 
11259    } 
else if (oldExp == ctrl_stmt->get_code()) {
 
11260      ctrl_stmt->set_code(newExp);
 
11264  } 
else if (isSgFortranDo(parent)) {
 
11266    if (oldExp == fortranDo->get_initialization()) {
 
11267      fortranDo->set_initialization(newExp);
 
11268    } 
else if(oldExp == fortranDo->get_bound()) {
 
11269      fortranDo->set_bound(newExp);
 
11270    } 
else if (oldExp == fortranDo->get_increment()) {
 
11271      fortranDo->set_increment(newExp);
 
11277    ROSE_ASSERT(oldExp == stm->get_condition());
 
11278    stm->set_condition(newExp);
 
11281    ROSE_ASSERT(oldExp == ptype->get_modexpr());
 
11282    ptype->set_modexpr(newExp);
 
11285    ROSE_ASSERT(oldExp == stm->get_time());
 
11286    stm->set_time(newExp);
 
11288    ROSE_ASSERT(oldExp == clause->get_size());
 
11289    clause->set_size(newExp);
 
11291    ROSE_ASSERT(oldExp == dcl->get_renamed());
 
11292    dcl->set_renamed(newExp);
 
11294    ROSE_ASSERT(oldExp == dcl->get_entryBarrier());
 
11295    dcl->set_entryBarrier(newExp);
 
11297    ROSE_ASSERT(oldExp == stm->get_guard());
 
11298    stm->set_guard(newExp);
 
11300    ROSE_ASSERT(oldExp == delc->get_delta());
 
11301    delc->set_delta(newExp);
 
11303    ROSE_ASSERT(oldExp == digc->get_digits());
 
11304    digc->set_digits(newExp);
 
11306    replaceExpressionInSgExpressionPtrList(oldExp, newExp, disc->get_discriminants());
 
11308    ROSE_ASSERT(oldExp == rngc->get_range());
 
11309    rngc->set_range(newExp);
 
11311    replaceExpressionInSgExpressionPtrList(oldExp, newExp, idxc->get_indexRanges());
 
11313    ROSE_ASSERT(oldExp == vtdcl->get_discriminant());
 
11314    vtdcl->set_discriminant(newExp);
 
11316    ROSE_ASSERT(oldExp == clause->get_alignment());
 
11317    clause->set_alignment(newExp);
 
11320    if (newLst && (oldExp == vtwhen->get_choices()))
 
11321      vtwhen->set_choices(newLst);
 
11325    if (oldExp == clause->get_offset())
 
11326      clause->set_offset(newExp);
 
11327    else if (oldExp == clause->get_range() && isSgRangeExp(newExp))
 
11328      clause->set_range(isSgRangeExp(newExp));
 
11329    else if (oldExp == clause->get_component() && isSgVarRefExp(newExp))
 
11330      clause->set_component(isSgVarRefExp(newExp));
 
11334    if (oldExp == rendcl->get_renamed_function())
 
11335      rendcl->set_renamed_function(newExp);
 
11339    cerr<<
"SageInterface::replaceExpression(). Unhandled parent expression type of SageIII enum value: " <<parent->
class_name()<<endl;
 
 
11354     return Rose::getNextStatement(currentStmt);
 
 
11363     return isSgIntVal(e) && isSgIntVal(e)->get_value() == value;
 
 
11368   ROSE_ASSERT(func1&& func2);
 
11369   bool result = 
false;
 
11370   if (func1 == func2)
 
11376        if (func1->get_name() == func2->get_name())
 
11381         if (func1->get_qualified_name().getString() +
 
11382            func1->get_mangled_name().getString() ==
 
11383            func2->get_qualified_name().getString() +
 
11384            func2->get_mangled_name().getString()
 
11393        if (func1->get_name() == func2->get_name())
 
11398        cout<<
"Error: SageInterface::isSameFunction(): unhandled language"<<endl;
 
 
11409  bool result =
false;
 
11410  ROSE_ASSERT(stmt != NULL);
 
11412  ROSE_ASSERT(p_scope != NULL);
 
11417      if (stmtlist[stmtlist.size()-1] == stmt)
 
11423    if (stmtlist[stmtlist.size()-1] == stmt)
 
11428  if (stmtlist[stmtlist.size()-1] == stmt)
 
 
11440    virtual void visit(
SgNode* n) {
 
11442      if (valueExp != NULL) {
 
11443        valueExp->set_originalExpressionTree(NULL);
 
11447        if (cast_exp != NULL) {
 
11448          cast_exp->set_originalExpressionTree(NULL);
 
11453  Visitor().traverse(top, preorder);
 
 
11458  while (s && !isSgSwitchStatement(s)) {
 
11462  return isSgSwitchStatement(s);
 
 
11467  while (s && !isSgOmpClauseBodyStatement(s)) {
 
11473  return isSgOmpClauseBodyStatement(s);
 
 
11479  for (; s; s = isSgStatement(s->
get_parent())) {
 
11484      case V_SgDoWhileStmt: {
 
11485          if (label.empty()) {
 
11490      case V_SgForStatement: {
 
11491          if (label.empty()) {
 
11496      case V_SgFortranDo:
 
11497      case V_SgFortranNonblockedDo: {
 
11498        if (label.empty() ||
 
11499                        label == isSgFortranDo(sc)->get_string_label()) {
 
11504      case V_SgWhileStmt: {
 
11505        if (label.empty() ||
 
11506                        label == isSgWhileStmt(sc)->get_string_label()) {
 
11511      case V_SgSwitchStatement: {
 
11512        if (stopOnSwitches) 
return sc;
 
11515      case V_SgJavaForEachStatement: {
 
11516          if (label.empty()) {
 
11521      case V_SgJavaLabelStatement: {
 
11522          if (label.empty() ||
 
11523                          label == isSgJavaLabelStatement(sc)->get_label().getString()) {
 
 
11539    virtual void visit(
SgNode* n) {
 
11540      if (isSgBasicBlock(n)) {
 
11542        bool changes = 
true;
 
11545          for (SgStatementPtrList::iterator i = bb->
get_statements().begin();
 
11547            if (isSgGotoStatement(*i)) {
 
11549              SgStatementPtrList::iterator inext = i;
 
11553             if (!isSgLabelStatement(*inext))
 
11568  RemoveJumpsToNextStatementVisitor().traverse(top, postorder);
 
 
11577  ROSE_ASSERT (parent);
 
11581    ROSE_ASSERT (bb || fis);
 
11582    SgStatementPtrList& siblings =
 
11584    SgStatementPtrList::iterator j =
 
11585      std::find(siblings.begin(), siblings.end(), stmt);
 
11586    ROSE_ASSERT (j != siblings.end());
 
 
11599    SgLabelStatementPtrSet& used;
 
11600    SgLabelStatementPtrSet& all;
 
11603    FindUsedAndAllLabelsVisitor(SgLabelStatementPtrSet& used,
 
11604        SgLabelStatementPtrSet& all):
 
11605      used(used), all(all) {}
 
11607    virtual void visit(
SgNode* n) {
 
11608      if (isSgGotoStatement(n)) {
 
11609        used.insert(isSgGotoStatement(n)->get_label());
 
11611      if (isSgLabelStatement(n)) {
 
11612        all.insert(isSgLabelStatement(n));
 
11617  SgLabelStatementPtrSet used;
 
11618  SgLabelStatementPtrSet unused;
 
11619  FindUsedAndAllLabelsVisitor(used, unused).traverse(top, preorder);
 
11621  for (SgLabelStatementPtrSet::iterator i = used.begin();
 
11622      i != used.end(); ++i) {
 
11623    assert (unused.find(*i) != unused.end());
 
 
11636  for (SgLabelStatementPtrSet::iterator i = unused.begin();
 
11637      i != unused.end(); ++i) {
 
11645        l_stmt->set_statement(NULL);
 
 
11655    if (isSgWhileStmt(loopStmt)) 
return isSgWhileStmt(loopStmt)->
get_body();
 
11656    if (isSgForStatement(loopStmt)) 
return isSgForStatement(loopStmt)->
get_loop_body();
 
11657    if (isSgDoWhileStmt(loopStmt)) 
return isSgDoWhileStmt(loopStmt)->
get_body();
 
11659        ROSE_ASSERT (!
"Bad loop kind");
 
 
11664    if (isSgWhileStmt(loopStmt)) {
 
11665      isSgWhileStmt(loopStmt)->
set_body(body);
 
11666    } 
else if (isSgForStatement(loopStmt)) {
 
11668    } 
else if (isSgDoWhileStmt(loopStmt)) {
 
11669      isSgDoWhileStmt(loopStmt)->
set_body(body);
 
11671      ROSE_ASSERT (!
"Bad loop kind");
 
 
11677    if (isSgWhileStmt(loopStmt)) 
return isSgWhileStmt(loopStmt)->
get_condition();
 
11678    if (isSgForStatement(loopStmt)) 
return isSgForStatement(loopStmt)->get_test();
 
11679    if (isSgDoWhileStmt(loopStmt)) 
return isSgDoWhileStmt(loopStmt)->
get_condition();
 
11681        ROSE_ASSERT (!
"Bad loop kind");
 
 
11686    if (isSgWhileStmt(loopStmt)) {
 
11688    } 
else if (isSgForStatement(loopStmt)) {
 
11689      isSgForStatement(loopStmt)->set_test(cond);
 
11690    } 
else if (isSgDoWhileStmt(loopStmt)) {
 
11693      ROSE_ASSERT (!
"Bad loop kind");
 
 
11702  SgCastExp* cast_exp = isSgCastExp(exp);
 
11703   if (cast_exp != NULL)
 
11706      assert(operand != 0);
 
11707      return SkipCasting(operand);
 
11716  ROSE_ASSERT(loop!=NULL);
 
11718  SgStatementPtrList &init = loop ->get_init_stmt();
 
11719  if (init.size() !=1) 
 
11730  ROSE_ASSERT(ivarname != NULL);
 
11732  if (isSgAssignInitializer(initor))
 
11734    lbast = isSgAssignInitializer(initor)->
get_operand();
 
11749  ROSE_ASSERT(funcDef!=NULL);
 
11751  ROSE_ASSERT(funcBody!=NULL);
 
11753  std::ostringstream os;
 
11754  os<<ivarname->get_name().getString();
 
11759  if (visibleSym != NULL) 
 
11770  Rose_STL_Container<SgNode*> varRefs = NodeQuery::querySubTree(loop,V_SgVarRefExp);
 
11771  for (Rose_STL_Container<SgNode *>::iterator i = varRefs.begin(); i != varRefs.end(); i++)
 
11774    if (vRef->get_symbol()==osymbol)
 
11775      vRef->set_symbol(nsymbol);
 
11780  init.push_back(ninit);
 
11787  trans_records.forLoopInitNormalizationTable[loop] = 
true;
 
11788  trans_records.forLoopInitNormalizationRecord[loop] = make_pair (decl, ndecl) ;
 
 
11801  ROSE_ASSERT (loop != NULL);
 
11803  if (!trans_records.forLoopInitNormalizationTable[loop])
 
11808  ROSE_ASSERT (decl!= NULL);
 
11809  ROSE_ASSERT (ndecl!= NULL);
 
11813  SgStatementPtrList &init = loop ->get_init_stmt();
 
11814  ROSE_ASSERT(init.size() ==1); 
 
11819  ROSE_ASSERT (exp_stmt != NULL);
 
11820  SgAssignOp* assign_op = isSgAssignOp(exp_stmt->get_expression());
 
11821  ROSE_ASSERT (assign_op != NULL);
 
11828  init.push_back(decl);
 
11839  Rose_STL_Container<SgNode*> varRefs = NodeQuery::querySubTree(loop,V_SgVarRefExp);
 
11840  for (Rose_STL_Container<SgNode *>::iterator i = varRefs.begin(); i != varRefs.end(); i++)
 
11843    if (vRef->get_symbol()==osymbol)
 
11844      vRef->set_symbol(nsymbol);
 
11848  trans_records.forLoopInitNormalizationTable[loop] = 
false;
 
 
11854  ROSE_ASSERT(loop != NULL);
 
11861  if (test_stmt!=NULL)
 
11863    if (isSgNullStatement(test_stmt))
 
11869  if (isSgBinaryOp(test))
 
11873    ROSE_ASSERT(testlhs && testrhs);
 
11878  SgVarRefExp* testlhs_var = isSgVarRefExp(SkipCasting(testlhs));
 
11879  if (testlhs_var == NULL )
 
11882  if (var_symbol==NULL)
 
11886    case V_SgLessThanOp:  
 
11891    case V_SgGreaterThanOp: 
 
11895    case V_SgLessOrEqualOp:
 
11896    case V_SgGreaterOrEqualOp:
 
11897    case V_SgNotEqualOp: 
 
 
11906  ROSE_ASSERT(loop != NULL);
 
11910  if (isSgBinaryOp(test))
 
11914    ROSE_ASSERT(testlhs && testrhs);
 
11919  SgVarRefExp* testlhs_var = isSgVarRefExp(SkipCasting(testlhs));
 
11920  if (testlhs_var == NULL )
 
11923  if (var_symbol==NULL)
 
11929  ROSE_ASSERT(incr != NULL);
 
11931    case V_SgPlusPlusOp: 
 
11934        SgVarRefExp* incr_var = isSgVarRefExp(SkipCasting(isSgPlusPlusOp(incr)->get_operand()));
 
11935        if (incr_var == NULL) 
return false;
 
11936        if ( incr_var->get_symbol() != var_symbol)
 
11942    case V_SgMinusMinusOp: 
 
11945        SgVarRefExp* incr_var = isSgVarRefExp(SkipCasting(isSgMinusMinusOp(incr)->get_operand()));
 
11946        if (incr_var == NULL) 
return false;
 
11947        if ( incr_var->get_symbol() != var_symbol)
 
11953    case V_SgMinusAssignOp: 
 
11955        SgVarRefExp* incr_var = isSgVarRefExp(SkipCasting(isSgMinusAssignOp(incr)->get_lhs_operand()));
 
11957        ROSE_ASSERT (rhs != NULL);
 
11958        if (incr_var == NULL) 
return false;
 
11959        if ( incr_var->get_symbol() != var_symbol)
 
11966    case V_SgPlusAssignOp:
 
 
12021  bool changed = 
false;
 
12023  if (!switchStmt) 
return changed;
 
12027  if (!bodyBlock) 
return changed;
 
12031  std::vector<SgStatement*> stmts(stmtList.begin(), stmtList.end());
 
12032  int n = 
static_cast<int>(stmts.size());
 
12036  for (
int i = 0; i < n; ) {
 
12041    auto processLabel = [&](
SgStatement* labelStmt) {
 
12045      std::vector<SgStatement*> toWrap;
 
12047      while (j < n && !isSgCaseOptionStmt(stmts[j]) && !isSgDefaultOptionStmt(stmts[j])) {
 
12048        toWrap.push_back(stmts[j]);
 
12055      if (toWrap.size() == 1
 
12056          && isSgBasicBlock(toWrap[0])
 
12057          && ((isSgCaseOptionStmt(labelStmt) && !isSgBasicBlock(isSgCaseOptionStmt(labelStmt)->get_body()))
 
12058            || (isSgDefaultOptionStmt(labelStmt) && !isSgBasicBlock(isSgDefaultOptionStmt(labelStmt)->get_body()))))
 
12064        if (
auto c = isSgCaseOptionStmt(labelStmt)) {
 
12065          c->set_body(moved);
 
12066        } 
else if (
auto d = isSgDefaultOptionStmt(labelStmt)) {
 
12067          d->set_body(moved);
 
12073      else if (!toWrap.empty()) {
 
12088        if (
auto caseLabel = isSgCaseOptionStmt(labelStmt)) {
 
12089          caseLabel->set_body(newBlock);
 
12090        } 
else if (
auto defaultLabel = isSgDefaultOptionStmt(labelStmt)) {
 
12091          defaultLabel->set_body(newBlock);
 
12095        for (
auto* w: toWrap) {
 
12108    if (
auto caseLabel = isSgCaseOptionStmt(curr)) {
 
12109      i = processLabel(caseLabel);
 
12110    } 
else if (
auto defaultLabel = isSgDefaultOptionStmt(curr)) {
 
12111      i = processLabel(defaultLabel);
 
 
12125  ROSE_ASSERT(loop != NULL);
 
12143  ROSE_ASSERT(body!=NULL);
 
 
12161  ROSE_ASSERT (loop != NULL);
 
12163  if (isSgNullExpression(e_3))
 
12166    loop->set_increment(iv);
 
 
12181  ROSE_ASSERT(func!=NULL);
 
12182  AstInterfaceImpl faImpl(func->get_definition()->
get_body());
 
12183  AstInterface fa(&faImpl);
 
12184  ArrayAnnotation* annot = ArrayAnnotation::get_inst();
 
12185  ArrayInterface array_interface (*annot);
 
12186  array_interface.initialize(fa, AstNodePtrImpl(func->get_definition()));
 
12187  array_interface.observe(fa);
 
12188  LoopTransformInterface :: set_astInterface(fa);
 
12189  LoopTransformInterface :: set_arrayInterface(&array_interface);
 
12193  AstNodePtr result = AstNodePtrImpl(loop->
get_parent()) ;
 
12195  LoopUnrolling lu(unrolling_factor);
 
12198  result = lu(lpTrans, result);
 
12242#ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT 
12244  if (unrolling_factor <= 1)
 
12265    cerr<<
"Error in SageInterface::loopUnrolling(): target loop is not canonical."<<endl;
 
12269  ROSE_ASSERT(ivar&& lb && ub && step);
 
12270  ROSE_ASSERT(isSgBasicBlock(orig_body));
 
12273   bool needFringe = 
true;
 
12274   SgForStatement* fringe_loop = deepCopy<SgForStatement>(target_loop);
 
12292   ROSE_ASSERT(scope != NULL);
 
12296   attachComment(fringe_decl, 
"iter_count = (ub-lb+1)%step ==0?(ub-lb+1)/step: (ub-lb+1)/step+1;");
 
12297   attachComment(fringe_decl, 
"fringe = iter_count%unroll_factor==0 ? 0:unroll_factor*step");
 
12304   ConstantFolding::constantFoldingOptimization(fringe_decl,
false);
 
12306   ROSE_ASSERT(ivarname != NULL);
 
12310    if (isSgIntVal(init1->get_operand_i()))
 
12311     if (isSgIntVal(init1->get_operand_i())->get_value() == 0)
 
12312       needFringe = 
false;
 
12316   ROSE_ASSERT(ub_bin_op);
 
12326   ROSE_ASSERT(step_bin_op != NULL);
 
12329   bool isPlus = 
false;
 
12330   if (isSgPlusAssignOp(step_bin_op))
 
12332    else if (isSgMinusAssignOp(step_bin_op))
 
12336      cerr<<
"Error in SageInterface::loopUnrolling(): illegal incremental exp of a canonical loop"<<endl;
 
12342   for (
size_t i =1; i<unrolling_factor; i++)
 
12346     std::vector<SgVarRefExp*> refs = querySubTree<SgVarRefExp> (body, V_SgVarRefExp);
 
12347     for (std::vector<SgVarRefExp*>::iterator iter = refs.begin(); iter !=refs.end(); iter++)
 
12376   ConstantFolding::constantFoldingOptimization(scope,
false);
 
 
12388static size_t myfactorial (
size_t n)
 
12391  for (
size_t i=2; i<=n; i++)
 
12402std::vector<size_t> getPermutationOrder( 
size_t n, 
size_t lexicoOrder)
 
12404  size_t k = lexicoOrder;
 
12405  std::vector<size_t> s(n);
 
12407  for (
size_t i=0; i<n; i++)
 
12411  size_t factorial = myfactorial(n-1);
 
12413  if (k/n>=factorial)
 
12415    printf(
"Error: in getPermutationOrder(), lexicoOrder is larger than n!-1\n");
 
12431  for (
size_t j=0; j<n-1; j++)
 
12435    int tempj = (k/factorial) % (n - j);
 
12438    int temps = s[j+tempj];
 
12441    for (
size_t i=j+tempj; i>j; i--)
 
12448    factorial = factorial /(n-(j+1));
 
12451  for (
size_t i = 0; i<n; i++)
 
12483  ROSE_ASSERT(loopNest != NULL);
 
12484  ROSE_ASSERT(targetLevel >0);
 
12491  std::vector<SgForStatement* > loops= SageInterface::querySubTree<SgForStatement>(loopNest,V_SgForStatement);
 
12492  ROSE_ASSERT(loops.size()>=targetLevel);
 
12510     cerr<<
"Error in SageInterface::loopTiling(): target loop is not canonical."<<endl;
 
12514   ROSE_ASSERT(ivar&& lb && ub && step);
 
12522    parent = isSgLocatedNode(loopNest ->get_parent());
 
12524  ROSE_ASSERT(parent!= NULL);
 
12526  string ivar2_name = 
"_lt_var_"+ivar->get_name().getString();
 
12536   if (isSgBinaryOp(orig_test))
 
12538     if (isSgLessOrEqualOp(orig_test))
 
12540     else if (isSgGreaterOrEqualOp(orig_test))
 
12546       cerr<<
"Error: illegal condition operator for a canonical loop"<<endl;
 
12553     cerr<<
"Error: illegal condition expression for a canonical loop"<<endl;
 
12557   ROSE_ASSERT(cond_stmt != NULL);
 
12562   SgExpression* orig_incr_exp = target_loop->get_increment();
 
12563   if( isSgPlusAssignOp(orig_incr_exp))
 
12567    else if (isSgMinusAssignOp(orig_incr_exp))
 
12573      cerr<<
"Error: illegal increment expression for a canonical loop"<<endl;
 
12585  ROSE_ASSERT(assign_op);
 
12589  ROSE_ASSERT(bin_op);
 
 
12609  if (lexicoOrder == 0) 
 
12612  ROSE_ASSERT(loop != NULL);
 
12614  ROSE_ASSERT (depth >1);
 
12615  ROSE_ASSERT(lexicoOrder<myfactorial(depth));
 
12618  std::vector<SgForStatement* > loopNest = SageInterface::querySubTree<SgForStatement>(loop,V_SgForStatement);
 
12619  ROSE_ASSERT(loopNest.size()>=depth);
 
12620  std::vector<std::vector<SgNode*> > loopHeads;
 
12621  for (std::vector<SgForStatement* > ::iterator i = loopNest.begin(); i!= loopNest.end(); i++)
 
12624    std::vector<SgNode*> head;
 
12626    head.push_back(cur_loop->get_test());
 
12627    head.push_back(cur_loop->get_increment());
 
12628    loopHeads.push_back(head);
 
12632  std::vector<size_t> changedOrder = getPermutationOrder (depth, lexicoOrder);
 
12635  for (
size_t i=0; i<depth; i++)
 
12638    if (i != changedOrder[i])
 
12641      std::vector<SgNode*> newhead = loopHeads[changedOrder[i]];
 
12649        init->set_parent(cur_loop);
 
12654      cur_loop->set_test(test);
 
12662      cur_loop->set_increment(incr);
 
 
12676  ROSE_ASSERT(loop != NULL);
 
12682    SgAssignOp* assign_op = isSgAssignOp (do_loop->get_initialization());
 
12683    ROSE_ASSERT (assign_op != NULL);
 
12685    ROSE_ASSERT (var != NULL);
 
12686    ivarname = var->get_symbol()->get_declaration();
 
12687    ROSE_ASSERT (ivarname != NULL);
 
12701  SgStatementPtrList & init = fs->get_init_stmt();
 
12702  if (init.size() !=1)
 
12704    cerr<<
"SageInterface::getLoopIndexVariable(), no or more than one initialization statements are encountered. Not supported yet "<<endl;
 
12715  if (isSgVariableDeclaration(init1))
 
12719    ROSE_ASSERT(ivarname != NULL);
 
12726    SgVarRefExp* var = isSgVarRefExp(SkipCasting(ivarast));
 
12729      ivarname = var->get_symbol()->get_declaration();
 
12736    if (
SgCommaOpExp* comma_exp = isSgCommaOpExp(exp_stmt->get_expression()))
 
12743        SgVarRefExp* var = isSgVarRefExp(assign_op->get_lhs_operand());
 
12746          ivarname = var->get_symbol()->get_declaration();
 
12754    mlog[Sawyer::Message::Common::WARN] <<
"Warning: SageInterface::getLoopIndexVariable(). Unhandled init_stmt type of SgForStatement"<<endl;
 
12755    mlog[Sawyer::Message::Common::WARN] <<
"Init statement is :"<<init1->
class_name() <<
" " <<init1->
unparseToString()<<endl;
 
 
12773  ROSE_ASSERT (ivar != NULL);
 
12774  ROSE_ASSERT (subtree_root != NULL);
 
12775  bool result = 
false;
 
12780    if (i_index == ivar)
 
 
12800  ROSE_ASSERT (loop !=NULL);
 
12801  SgStatementPtrList& stmt_list = loop->get_init_stmt();
 
12802  if (stmt_list.size() >1) 
return true; 
 
12803  if (stmt_list.size() == 0) 
return false;
 
12808  if (decl_stmt != NULL)
 
12813  ROSE_ASSERT (exp_stmt != NULL);
 
12814  if (isSgCommaOpExp (exp_stmt->get_expression()) )
 
 
12824  ROSE_ASSERT(loop != NULL);
 
12832  SgAssignOp* init_assign = isSgAssignOp (init);
 
12837  bool isCase1=
false;
 
12842       ivarname = var->get_symbol()->get_declaration();
 
12844     if (ivarname && lbast )
 
12856  SgBinaryOp* test = isSgBinaryOp(fs->get_test_expr());
 
12860    case V_SgLessOrEqualOp:
 
12861       if (isInclusiveUpperBound != NULL)
 
12862         *isInclusiveUpperBound = 
true;
 
12863       if (hasIncrementalIterationSpace != NULL)
 
12864         *hasIncrementalIterationSpace = 
true;
 
12866    case V_SgLessThanOp:
 
12867       if (isInclusiveUpperBound != NULL)
 
12868         *isInclusiveUpperBound = 
false;
 
12869       if (hasIncrementalIterationSpace != NULL)
 
12870         *hasIncrementalIterationSpace = 
true;
 
12872    case V_SgGreaterOrEqualOp:
 
12873       if (isInclusiveUpperBound != NULL)
 
12874         *isInclusiveUpperBound = 
true;
 
12875        if (hasIncrementalIterationSpace != NULL)
 
12876         *hasIncrementalIterationSpace = 
false;
 
12878    case V_SgGreaterThanOp:
 
12879       if (isInclusiveUpperBound != NULL)
 
12880         *isInclusiveUpperBound = 
false;
 
12881       if (hasIncrementalIterationSpace != NULL)
 
12882         *hasIncrementalIterationSpace = 
false;
 
12891  if (testvar == NULL)
 
12897  ubast = loop->get_bound();
 
12899  if (isInclusiveUpperBound != NULL)
 
12900     *isInclusiveUpperBound = 
true;
 
12903  ROSE_ASSERT (incr != NULL);
 
12904  if (isSgNullExpression(incr))
 
12906    cerr<<
"Error:isCanonicalDoLoop() found NULL increment expression. Please call doLoopNormalization() first!"<<endl;
 
12907    ROSE_ASSERT (
false);
 
12909  if (hasIncrementalIterationSpace != NULL)
 
12911     *hasIncrementalIterationSpace = 
true;
 
12913    if (
SgIntVal* i_v = isSgIntVal(incr))
 
12915      if (i_v->get_value()<0)
 
12916     *hasIncrementalIterationSpace = 
false;
 
12922    case V_SgPlusAssignOp: 
 
12923    case V_SgMinusAssignOp:
 
12924      incr_var = isSgVarRefExp(SkipCasting(isSgBinaryOp(incr)->get_lhs_operand()));
 
12927    case V_SgPlusPlusOp:   
 
12928    case V_SgMinusMinusOp:  
 
12929      incr_var = isSgVarRefExp(SkipCasting(isSgUnaryOp(incr)->get_operand()));
 
12935  if (incr_var == NULL)
 
12949  if (body != NULL) {
 
12950    *body = fs->get_body();
 
 
12987  ROSE_ASSERT (s != NULL);
 
12990  std::set<SgNode*>  bset = SgNodeHelper::loopRelevantBreakStmtNodes (s);
 
12991  if (bset.size()!=0 )
 
13005  ROSE_ASSERT(loop != NULL);
 
13016  SgStatementPtrList & init = fs->get_init_stmt();
 
13017  if (init.size() !=1)
 
13020  SgExpression* ivarast=NULL, *lbast=NULL, *ubast=NULL, *stepast=NULL;
 
13023  bool isCase1=
false, isCase2=
false;
 
13025  if (isSgVariableDeclaration(init1))
 
13029     ROSE_ASSERT(ivarname != NULL);
 
13031     if (isSgAssignInitializer(initor))
 
13033       lbast = isSgAssignInitializer(initor)->
get_operand();
 
13039     SgVarRefExp* var = isSgVarRefExp(SkipCasting(ivarast));
 
13042       ivarname = var->get_symbol()->get_declaration();
 
13047   ROSE_ASSERT(!(isCase1&&isCase2));
 
13049    if (!(isCase1||isCase2))
 
13061    case V_SgLessOrEqualOp:
 
13062       if (isInclusiveUpperBound != NULL)
 
13063         *isInclusiveUpperBound = 
true;
 
13064       if (hasIncrementalIterationSpace != NULL)
 
13065         *hasIncrementalIterationSpace = 
true;
 
13067    case V_SgLessThanOp:
 
13068       if (isInclusiveUpperBound != NULL)
 
13069         *isInclusiveUpperBound = 
false;
 
13070       if (hasIncrementalIterationSpace != NULL)
 
13071         *hasIncrementalIterationSpace = 
true;
 
13073    case V_SgGreaterOrEqualOp:
 
13074       if (isInclusiveUpperBound != NULL)
 
13075         *isInclusiveUpperBound = 
true;
 
13076        if (hasIncrementalIterationSpace != NULL)
 
13077         *hasIncrementalIterationSpace = 
false;
 
13079    case V_SgGreaterThanOp:
 
13080       if (isInclusiveUpperBound != NULL)
 
13081         *isInclusiveUpperBound = 
false;
 
13082       if (hasIncrementalIterationSpace != NULL)
 
13083         *hasIncrementalIterationSpace = 
false;
 
13092  if (testvar == NULL)
 
13116    case V_SgPlusAssignOp: 
 
13117    case V_SgMinusAssignOp:
 
13118      incr_var = isSgVarRefExp(SkipCasting(isSgBinaryOp(incr)->get_lhs_operand()));
 
13121    case V_SgPlusPlusOp:   
 
13122    case V_SgMinusMinusOp:  
 
13123      incr_var = isSgVarRefExp(SkipCasting(isSgUnaryOp(incr)->get_operand()));
 
13126    case V_SgAssignOp: { 
 
13127      incr_var=isSgVarRefExp(SkipCasting(isSgBinaryOp(incr)->get_lhs_operand()));
 
13128      if(incr_var == NULL)
 
13130      SgAddOp* addOp=isSgAddOp(SkipCasting(isSgBinaryOp(incr)->get_rhs_operand()));
 
13131      SgSubtractOp* subtractOp=isSgSubtractOp(SkipCasting(isSgBinaryOp(incr)->get_rhs_operand()));
 
13135      else if(subtractOp)
 
13136        arithOp=subtractOp;
 
13139      ROSE_ASSERT(arithOp!=0);
 
13140      if(
SgVarRefExp* varRefExp=isSgVarRefExp(SkipCasting(isSgBinaryOp(arithOp)->get_lhs_operand()))) {
 
13142        incr_var=varRefExp;
 
13144      } 
else if(
SgVarRefExp* varRefExp=isSgVarRefExp(SkipCasting(isSgBinaryOp(arithOp)->get_rhs_operand()))) {
 
13145        if(isSgAddOp(arithOp)) {
 
13147          incr_var=varRefExp;
 
13157  if (incr_var == NULL)
 
13178  if (body != NULL) {
 
 
13187  ROSE_ASSERT(loop != NULL);
 
13188  ROSE_ASSERT(lb != NULL);
 
13193  if (forstmt != NULL)
 
13198    Rose_STL_Container<SgNode* > testList = NodeQuery::querySubTree( *((forstmt->get_init_stmt()).begin()), V_SgAssignOp);
 
13199    if (testList.size()>0) 
 
13201      ROSE_ASSERT(testList.size()==1);
 
13202      SgAssignOp * assignop = isSgAssignOp((*testList.begin()));
 
13203      ROSE_ASSERT(assignop);
 
13213      Rose_STL_Container<SgNode* > testList = NodeQuery::querySubTree( *((forstmt->get_init_stmt()).begin()),  V_SgAssignInitializer );
 
13214      ROSE_ASSERT(testList.size()==1);
 
13216      ROSE_ASSERT(init != NULL);
 
13217      init->set_operand(lb);
 
13222  else if (dostmt != NULL)
 
13225    ROSE_ASSERT (init != NULL);
 
13227    ROSE_ASSERT (a_op!=NULL);
 
13234    cerr<<
"Error. SageInterface::setLoopLowerBound(), illegal loop type:"<< loop->
class_name()<<endl;
 
13235    ROSE_ASSERT (
false);
 
 
13242  ROSE_ASSERT(loop != NULL);
 
13243  ROSE_ASSERT(ub != NULL);
 
13247  if (forstmt != NULL)
 
13250    SgBinaryOp * binop= isSgBinaryOp(isSgExprStatement(forstmt->get_test())->get_expression());
 
13251    ROSE_ASSERT(binop != NULL);
 
13255  else if (dostmt != NULL)
 
13257    dostmt->set_bound(ub);
 
13263    cerr<<
"Error. SageInterface::setLoopUpperBound(), illegal loop type:"<< loop->
class_name()<<endl;
 
13264    ROSE_ASSERT (
false);
 
 
13272  ROSE_ASSERT(loop != NULL);
 
13273  ROSE_ASSERT(stride != NULL);
 
13277  if (dostmt != NULL)
 
13279    dostmt->set_increment(stride);
 
13283  else  if (forstmt != NULL)
 
13287    Rose_STL_Container<SgNode*> testList = NodeQuery::querySubTree( forstmt->get_increment(), V_SgPlusPlusOp);
 
13288    if (testList.size()>0)
 
13290      ROSE_ASSERT(testList.size() == 1); 
 
13292          (isSgPlusPlusOp( *testList.begin())->
get_operand()));
 
13294      forstmt->set_increment(plusassignop);
 
13298    testList = NodeQuery::querySubTree(forstmt->get_increment(), V_SgMinusMinusOp);
 
13299    if (testList.size()>0)
 
13301      ROSE_ASSERT(testList.size()==1);
 
13303          (isSgMinusMinusOp(*testList.begin())->
get_operand()));
 
13305      forstmt->set_increment(plusassignop);
 
13309    testList = NodeQuery::querySubTree( forstmt->get_increment(), V_SgPlusAssignOp);
 
13310    if (testList.size()>0)
 
13312      ROSE_ASSERT(testList.size()==1);
 
13313      SgPlusAssignOp * assignop = isSgPlusAssignOp(*(testList.begin()));
 
13314      ROSE_ASSERT(assignop!=NULL);
 
13319    testList = NodeQuery::querySubTree(forstmt->get_increment(), V_SgMinusAssignOp);
 
13320    if (testList.size()>0)
 
13322      ROSE_ASSERT(testList.size()==1);
 
13325      SgExprStatement* exprstmt = isSgExprStatement((*testList.begin())->get_parent());
 
13326      ROSE_ASSERT(exprstmt !=NULL);
 
13328      exprstmt->set_expression(plusassignop);
 
13339    testList = NodeQuery::querySubTree(forstmt->get_increment(), V_SgAddOp);
 
13340    if (testList.size()>0)
 
13342      ROSE_ASSERT(testList.size()==1);
 
13344      SgAddOp * addop = isSgAddOp(*(testList.begin()));
 
13345      ROSE_ASSERT(addop!=NULL);
 
13359    testList = NodeQuery::querySubTree(forstmt->get_increment(), V_SgSubtractOp);
 
13360    if (testList.size()>0)
 
13362      ROSE_ASSERT(testList.size()==1);
 
13364      SgSubtractOp * subtractop = isSgSubtractOp(*(testList.begin()));
 
13365      ROSE_ASSERT(subtractop!=NULL);
 
13368      SgAssignOp *assignop = isSgAssignOp((*testList.begin())->get_parent());
 
13369      ROSE_ASSERT(assignop !=NULL);
 
13376    cerr<<
"Error. SageInterface::setLoopStride(), illegal loop type:"<< loop->
class_name()<<endl;
 
13377    ROSE_ASSERT (
false);
 
 
13388  SgExpression *exp = (n != 0)? n->get_expression() : isSgExpression(s);
 
13391      case V_SgPlusAssignOp:
 
13392      case V_SgMinusAssignOp:
 
13393      case V_SgAndAssignOp:
 
13394      case V_SgIorAssignOp:
 
13395      case V_SgMultAssignOp:
 
13396      case V_SgDivAssignOp:
 
13397      case V_SgModAssignOp:
 
13398      case V_SgXorAssignOp:
 
13406            if ( init->variantT() == V_SgAssignInitializer)
 
13407              init = isSgAssignInitializer(init)->
get_operand();
 
13411            *readlhs = (exp->
variantT() != V_SgAssignOp);
 
 
13425     Rose_STL_Container<SgNode*> gotos = NodeQuery::querySubTree(top,V_SgGotoStatement);
 
13426     for (
size_t i = 0; i < gotos.size(); ++i)
 
13431          if (!lsParent) 
continue;
 
13434          size_t j = std::find(bbStatements.begin(), bbStatements.end(), ls) - bbStatements.begin();
 
13436          ROSE_ASSERT (j != bbStatements.size());
 
13438          while (j < bbStatements.size() - 1 && isSgLabelStatement(bbStatements[j + 1]))
 
13442          gs->
set_label(isSgLabelStatement(bbStatements[j]));
 
 
13458  ROSE_ASSERT(decl != NULL);
 
13459  ROSE_ASSERT(assign_stmt != NULL);
 
13462  SgAssignOp * assign_op = isSgAssignOp (assign_stmt->get_expression());
 
13463  if (assign_op == NULL)
 
13466  if (assign_op_var == NULL) 
return false;
 
13470  if (decl_var->get_initptr()!= NULL ) 
return false;
 
13477  if (decl_var_symbol!=NULL)
 
13480    if (assign_op_var->get_symbol() != decl_var_symbol)  
return false;
 
13485    if (assign_op_var->get_symbol()->
get_name() != decl_var ->get_name()) 
return false;
 
13499  if (removeAssignStmt)
 
13503  decl_var->set_initptr(initor);
 
 
13514  ROSE_ASSERT(assign_stmt != NULL);
 
13515  SgAssignOp * assign_op = isSgAssignOp (assign_stmt->get_expression());
 
13516  if (assign_op == NULL)
 
13519  if (assign_op_var == NULL)
 
13523  ROSE_ASSERT(decl != NULL);
 
13525  if (decl_var->get_initptr()!= NULL)
 
13532  ROSE_ASSERT(decl_var != NULL);
 
13534  if (decl_var_symbol != NULL) {
 
13536    if (assign_op_var->get_symbol() != decl_var_symbol)
 
13542    if (assign_op_var->get_symbol()->
get_name() != decl_var ->get_name())
 
13555  decl_var->set_initptr(initor);
 
 
13585  ROSE_ASSERT (decl != NULL);
 
13589  if (initor == NULL)
 
13596      rhs = ainitor->get_operand();
 
13602    decl_var->set_initptr(NULL);
 
 
13614    cerr<<
"SageInterface::splitVariableDeclaration() topLevelOnly == false is not yet implemented."<<endl;
 
13615    ROSE_ASSERT (
false);
 
13618  Rose_STL_Container<SgNode*> nodeList = NodeQuery::querySubTree(scope, V_SgVariableDeclaration);
 
13619  for (Rose_STL_Container<SgNode *>::iterator i = nodeList.begin(); i != nodeList.end(); i++)
 
13624      ROSE_ASSERT(decl != NULL);
 
 
13637  ROSE_ASSERT (root != NULL);
 
13640  Rose_STL_Container<SgNode*> nodeList = NodeQuery::querySubTree(root, V_SgVarRefExp);
 
13644  for (Rose_STL_Container<SgNode *>::iterator i = nodeList.begin(); i != nodeList.end(); i++)
 
13647    ROSE_ASSERT (vRef != NULL);
 
13648    result.push_back(vRef);
 
 
13655  ROSE_ASSERT (root != NULL);
 
13656  Rose_STL_Container<SgNode*> constructorList= NodeQuery::querySubTree(root, V_SgConstructorInitializer);
 
13657  for (
size_t i =0; i< constructorList.size(); i++)
 
13662      Rose_STL_Container<SgNode*> varList = NodeQuery::querySubTree (a_type->get_index(),V_SgVarRefExp);
 
13663      for (
size_t j =0 ; j< varList.size(); j++)
 
13665        SgVarRefExp* var_exp =  isSgVarRefExp(varList[j]) ;
 
13666        currentVarRefList.push_back(var_exp);
 
13690               SgExpression* lhsCopy = isSgExpression(lhs->copy(treeCopy));
 
13691               ROSE_ASSERT (lhsCopy);
 
 
13715               SgExpression* lhsCopy = isSgExpression(lhs->copy(treeCopy));
 
13716               ROSE_ASSERT (lhsCopy);
 
 
13740               SgExpression* lhsCopy = isSgExpression(lhs->copy(treeCopy));
 
13741               ROSE_ASSERT (lhsCopy);
 
 
13758  ROSE_ASSERT(from != NULL);
 
13760#ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT 
13764    ROSE_ASSERT (
false);
 
13769  SgStatement* stmt = getStatementOfExpression(from);
 
13771  if (!isSgForInitStatement(stmt->
get_parent())) {
 
13780  if (!parent && isSgForInitStatement(stmt->
get_parent()))
 
13786  SgName varname = 
"rose_temp__";
 
13787  if (newName == 
"") {
 
13795  vector<SgExpression*> ancestors;
 
13796  for (
SgExpression *expr = from, *anc = isSgExpression(fromparent); anc != 0;
 
13797      expr = anc, anc = isSgExpression(anc->get_parent()))
 
13799    if ((isSgAndOp(anc) && expr != isSgAndOp(anc)->get_lhs_operand()) ||
 
13802      ancestors.push_back(anc); 
 
13805  for (vector<SgExpression*>::reverse_iterator ai = ancestors.rbegin(); ai != ancestors.rend(); ++ai)
 
13808    switch ((*ai)->variantT()) {
 
13813      case V_SgConditionalExp:
 
13815      default: assert (!
"Should not happen"); abort();
 
13820  if (ancestors.size() != 0) {
 
13828  ROSE_ASSERT (initname);
 
13830  replaceExpressionWithExpression(from, varref);
 
13834  initname->set_initializer(ai);
 
13836  myStatementInsert(stmt, vardecl, 
true);
 
 
13857   SplitStatementGenerator gen;
 
 
13863   Rose_STL_Container<SgNode*> gotos = NodeQuery::querySubTree(top,
 
13864  V_SgGotoStatement);
 
13865   map<SgLabelStatement*, SgLabelStatement*> labelsToReplace;   
for 
13866  (
size_t i = 0; i < gotos.size(); ++i) {
 
13869     if (!gsParent) 
continue;
 
13871     size_t j = std::find(bbStatements.begin(), bbStatements.end(), gs)
 
13872  - bbStatements.begin();
 
13873     ROSE_ASSERT (j != bbStatements.size());
 
13874     if (j == 0) 
continue;
 
13875     if (isSgLabelStatement(bbStatements[j - 1])) {
 
13876       labelsToReplace[isSgLabelStatement(bbStatements[j - 1])] =
 
13880   for (
size_t i = 0; i < gotos.size(); ++i) {
 
13883     while (labelsToReplace.find(oldLabel) != labelsToReplace.end()) {
 
13884       oldLabel = labelsToReplace[oldLabel];
 
 
13894    case V_SgBoolValExp: 
return (isSgBoolValExp(e)->get_value() != 0);
 
13896    case V_SgBoolValExp: 
return (isSgBoolValExp(e)->get_value() == 
true);
 
13898    case V_SgIntVal: 
return isSgIntVal(e)->get_value() != 0;
 
13899    case V_SgCastExp: 
return isConstantTrue(isSgCastExp(e)->get_operand());
 
13901    case V_SgAddressOfOp: 
return true;
 
13902    default: 
return false;
 
 
13908      case V_SgBoolValExp: 
return isSgBoolValExp(e)->get_value() == 
false;
 
13909      case V_SgIntVal: 
return isSgIntVal(e)->get_value() == 0;
 
13910      case V_SgCastExp: 
return 
13912      case V_SgNotOp: 
return isConstantTrue(isSgNotOp(e)->get_operand());
 
13913      default: 
return false;
 
 
13920    if (!fc) 
return false;
 
13922    if (fr == NULL) 
return false;
 
13923    return fr->get_symbol()->get_declaration() == decl;
 
 
13929    if (!fc) 
return false;
 
13931    if (fr == NULL) 
return false;
 
13933  fr->get_symbol()->get_declaration()->get_qualified_name().getString();
 
13934    return (name == qualifiedName &&
 
13935  fc->get_args()->get_expressions().size() == arity);
 
 
13940    ROSE_ASSERT( e != NULL);
 
 
13956    ROSE_ASSERT(expList);
 
13958    expList->append_expression(exp);
 
 
13964    for (
size_t i = 0; i < exp.size(); ++i)
 
 
13973template <
class actualFunction>
 
13983     ROSE_ASSERT(paralist);
 
13988          cerr << 
"Waring! Setting a used SgFunctionParameterList to function: " 
13989               << (func->get_name()).getString()<<endl
 
13990               << 
" Sharing parameter lists can corrupt symbol tables!"<<endl
 
13991               << 
" Please use deepCopy() to get an exclusive parameter list for each function declaration!"<<endl;
 
13996     if (func->get_parameterList() != NULL)
 
13997          if (func->get_parameterList() != paralist)
 
13998               delete func->get_parameterList();
 
14000     func->set_parameterList(paralist);
 
14008     ROSE_ASSERT(paraList != NULL);
 
14009     ROSE_ASSERT(initName != NULL);
 
14011     if (isPrepend == 
true)
 
14012          paraList->prepend_arg(initName);
 
14014          paraList->append_arg(initName);
 
14021     ROSE_ASSERT(initName->
get_parent() == paraList);
 
14031     if (func_decl != NULL)
 
14037               ROSE_ASSERT(func_def);
 
14047          initName->set_declptr(func_decl);
 
14059     initName->set_scope(scope);
 
14079  return addArg(paraList,initName,
false);
 
 
14084  return addArg(paraList,initName,
true);
 
 
14090  ROSE_ASSERT(pragma);
 
14091  if (decl->get_pragma()!=NULL) 
delete (decl->get_pragma());
 
14092  decl->set_pragma(pragma);
 
 
14103     void testAstForUniqueNodes ( 
SgNode* node );
 
14106     printf (
"In SageInterface::appendStatement(): stmt = %p = %s scope = %p \n",stmt,stmt->
class_name().c_str(),scope);
 
14115          printf (
"   --- scope was not specified as input! \n");
 
14120     ROSE_ASSERT(stmt  != NULL);
 
14121     ROSE_ASSERT(scope != NULL);
 
14124     printf (
"In SageInterface::appendStatement(): stmt = %p = %s scope = %p = %s \n",stmt,stmt->
class_name().c_str(),scope,scope->
class_name().c_str());
 
14131     if (declarationStatement != NULL)
 
14159     scope->insertStatementInScope(stmt,
false);
 
14163     bool skipAddingStatement = 
false;
 
14165     if (classDeclaration != NULL)
 
14171               printf (
"Since the parent of this SgClassDeclaration is set, it must have been previously added to the AST: classDeclaration = %p = %s \n",classDeclaration,classDeclaration->
class_name().c_str());
 
14177          skipAddingStatement = (classDeclaration->get_isAutonomousDeclaration() == 
false);
 
14181          skipAddingStatement = (classDeclaration->get_isAutonomousDeclaration() == 
false) || (classDeclaration->
get_parent() != NULL);
 
14196               if (statementAlreadyExistsInScope == 
true)
 
14198                    if (isSgTemplateInstantiationDecl(classDeclaration) != NULL)
 
14202#if PRINT_DEVELOPER_WARNINGS 
14203                         printf (
"RARE ISSUE #1: In SageInterface::appendStatement(): This template instantiation has previously been added to the scope, so avoid doing so again (see test2013_198.C): classDeclaration = %p = %s scope = %p = %s \n",
 
14211                         printf (
"RARE ISSUE #2: In SageInterface::appendStatement(): This statement has previously been added to the scope, so avoid doing so again (see rose.h): stmt = %p = %s scope = %p = %s \n",
 
14216                    skipAddingStatement = 
true;
 
14223          if (enumDeclaration != NULL)
 
14226               skipAddingStatement = (enumDeclaration->get_isAutonomousDeclaration() == 
false);
 
14235     if (skipAddingStatement == 
false && statementAlreadyExistsInScope == 
true)
 
14238          printf (
"RARE ISSUE #2: In SageInterface::appendStatement(): This statement has previously been added to the scope, so avoid doing so again (see rose.h): stmt = %p = %s scope = %p = %s \n",
 
14242          printf (
"Exiting as a test! \n");
 
14245          skipAddingStatement = 
true;
 
14250     printf (
"   --- skipAddingStatement = %s \n",skipAddingStatement ? 
"true" : 
"false");
 
14253     if (skipAddingStatement == 
false)
 
14265          printf (
"   --- calling insertStatementInScope(): scope = %p = %s stmt = %p = %s \n",scope,scope->
class_name().c_str(),stmt,stmt->
class_name().c_str());
 
14267          scope->insertStatementInScope(stmt,
false);
 
14294     testAstForUniqueNodes(scope);
 
 
14303  ROSE_ASSERT (stmt != NULL);
 
14304  ROSE_ASSERT (for_init_stmt != NULL);
 
14307     printf (
"In SageInterface::appendStatement(): stmt = %p = %s scope = %p = %s (resetInternalMapsForTargetStatement: stmt) \n",stmt,stmt->
class_name().c_str(),scope,scope->
class_name().c_str());
 
14316     printf (
"In SageInterface::appendStatement(): stmt = %p = %s scope = %p = %s (resetInternalMapsForTargetStatement: scope) \n",stmt,stmt->
class_name().c_str(),scope,scope->
class_name().c_str());
 
14324  for_init_stmt->append_init_stmt (stmt);
 
 
14330     for (
size_t i = 0; i < stmts.size(); ++i)
 
14333#ifdef ROSE_DEBUG_NEW_EDG_ROSE_CONNECTION 
14334          printf (
"In appendStatementList(): stmts[i = %" PRIuPTR 
"] = %p = %s \n",i,stmts[i],stmts[i]->class_name().c_str());
 
14340          if (stmts[i]->get_parent() != NULL)
 
14343#ifdef ROSE_DEBUG_NEW_EDG_ROSE_CONNECTION 
14344               printf (
"   --- In appendStatementList(): stmts[i = %" PRIuPTR 
"] will be added to scope (because stmts[i]->get_parent() != NULL (= %p = %s) \n",i,stmts[i]->get_parent(),stmts[i]->get_parent()->class_name().c_str());
 
14351               printf (
"   --- WARNING: In appendStatementList(): stmts[i = %" PRIuPTR 
"] not added to scope (because stmts[i]->get_parent() == NULL) \n",i);
 
 
14360     ROSE_ASSERT (stmt != NULL);
 
14363     printf (
"In SageInterface::prependStatement(): stmt = %p = %s scope = %p \n",stmt,stmt->
class_name().c_str(),scope);
 
14373     ROSE_ASSERT(scope != NULL);
 
14383     printf (
"In SageInterface::prependStatement(): stmt = %p = %s scope = %p = %s (resetInternalMapsForTargetStatement: stmt) \n",
 
14395     printf (
"In SageInterface::prependStatement(): stmt = %p = %s scope = %p = %s (resetInternalMapsForTargetStatement: scope) \n",
 
14407     printf (
"Calling insertStatementInScope() \n");
 
14413     scope->insertStatementInScope(stmt,
true);
 
14433     printf (
"Leaving SageInterface::prependStatement() \n");
 
 
14441  ROSE_ASSERT (stmt != NULL);
 
14442  ROSE_ASSERT (for_init_stmt != NULL);
 
14445     printf (
"In SageInterface::prependStatement(): stmt = %p = %s scope = %p = %s (resetInternalMapsForTargetStatement: stmt) \n",stmt,stmt->
class_name().c_str(),scope,scope->
class_name().c_str());
 
14454     printf (
"In SageInterface::prependStatement(): stmt = %p = %s scope = %p = %s (resetInternalMapsForTargetStatement: scope) \n",stmt,stmt->
class_name().c_str(),scope,scope->
class_name().c_str());
 
14462  for_init_stmt->prepend_init_stmt (stmt);
 
 
14467     for (
size_t i = stmts.size(); i > 0; --i)
 
 
14479  ROSE_ASSERT (scope != NULL);
 
14482    case V_SgBasicBlock:
 
14483    case V_SgClassDefinition:
 
14484    case V_SgFunctionDefinition:
 
14486    case V_SgNamespaceDefinitionStatement: 
 
14490     case V_SgAssociateStatement :
 
14491     case V_SgBlockDataStatement :
 
14492     case V_SgCatchOptionStmt:
 
14493     case V_SgDoWhileStmt:
 
14494     case V_SgForAllStatement:
 
14495     case V_SgForStatement:
 
14496     case V_SgFortranDo:
 
14498     case V_SgSwitchStatement:
 
14499     case V_SgUpcForAllStatement:
 
14500     case V_SgWhileStmt:
 
14505      cout<<
"unrecognized or unhandled scope type for SageInterface::hasSimpleChildrenList() "<<endl;
 
 
14518     SgDeclarationStatementPtrList & declarationList = globalScope->
get_declarations();
 
14521     SgDeclarationStatementPtrList::iterator i = declarationList.begin();
 
14523     while (i != declarationList.end() && (*i)->get_file_info() != NULL && (*i)->get_file_info()->isFrontendSpecific() == 
true)
 
14526          printf (
"(*i)->get_file_info()->get_file_id() = %d isFrontendSpecific = %s \n",(*i)->get_file_info()->get_file_id(),(*i)->get_file_info()->isFrontendSpecific() ? 
"true" : 
"false");
 
14528          last_statement = *i;
 
14533     ROSE_ASSERT(last_statement != NULL);
 
14535     printf (
"last_statement = %p = %s \n",last_statement,last_statement->
class_name().c_str());
 
14538     printf (
"Exiting as a test! \n");
 
14542     return last_statement;
 
 
14551     ROSE_ASSERT(targetStmt &&newStmt);
 
14552     ROSE_ASSERT(targetStmt != newStmt); 
 
14554     if (isSgGlobal(targetStmt) ||
 
14555         isSgClassDefinition(targetStmt)||
 
14556         isSgNamespaceDefinitionStatement(targetStmt)||
 
14557         isSgFunctionParameterList(targetStmt)||
 
14558         isSgFunctionDefinition(targetStmt)||
 
14559         isSgCtorInitializerList(targetStmt))
 
14561       string className = targetStmt->
class_name();
 
14562       string err_msg = 
"targetStmt cannot be a " + className + 
". Its parent does not implement insert_child(). Please revise your code to avoid inserting a stmt as a sibling of this type of targetStmt.";
 
14563       cerr<<err_msg<<endl;
 
14564       ROSE_ASSERT (
false);
 
14568     if (isSgCaseOptionStmt(targetStmt))
 
14570         if (!isSgCaseOptionStmt(newStmt))
 
14572           cerr<<
"Target statment is a case option stmt. The new stmt should also be the same type to be a sibling. But it is "<< newStmt->
class_name() << 
" instead. This is not semantically correct." <<endl;
 
14573           ROSE_ASSERT(
false);
 
14578     if (parent == NULL)
 
14580          cerr << 
"Empty parent pointer for target statement. May be caused by the wrong order of target and new statements in insertStatement(targetStmt, newStmt)"<<endl;
 
14581          ROSE_ASSERT(parent);
 
14607        cerr<<
"Error: you cannot insert a variable declaration stmt inside a case option statement without enclosing brances in between."<<endl;
 
14608        cerr<<
"parent of target is a case option stmt:"<<parent <<endl; 
 
14609        cerr<<
"new statement is a variable statement:"<<newStmt <<endl; 
 
14610        ASSERT_require(
false);
 
14614     if (isSgLabelStatement(parent) != 
nullptr)
 
14618          ROSE_ASSERT(isSgLabelStatement(parent) == NULL);
 
14621     if (isSgFunctionDefinition(parent) ||
 
14622         isSgTypedefDeclaration(parent) ||
 
14623         isSgSwitchStatement(parent) ||
 
14624         isSgVariableDeclaration(parent))
 
14627       string err_msg = 
"targetStmt's parent cannot be a " + className + 
". This parent does not implement insert() function. Please revise your code to avoid inserting a stmt as a child of this type of parent.";
 
14628       cerr<<err_msg<<endl;
 
14631           if (switch_stmt->get_item_selector() == targetStmt)
 
14633              cerr<<
"The target statement is the item selector of a switch statement. You cannot insert any statement before or after it."<<endl;
 
14637       ROSE_ASSERT (
false);
 
14641     printf (
"In SageInterface::insertStatement(): insert newStmt = %p = %s before/after targetStmt = %p = %s \n",newStmt,newStmt->
class_name().c_str(),targetStmt,targetStmt->
class_name().c_str());
 
14659     ROSE_ASSERT(scope);
 
14662     printf (
"targetStmt = %p = %s \n",targetStmt,targetStmt->
class_name().c_str());
 
14663     printf (
"scope      = %p = %s \n",scope,scope->
class_name().c_str());
 
14681     ROSE_ASSERT(isSgStatement(parent) != NULL);
 
14686     ROSE_ASSERT(targetStmt != NULL);
 
14690     printf (
"In SageInterface::insertStatement(): after checking for associated comments \n");
 
14691     reportNodesMarkedAsModified(scope);
 
14697     if (autoMovePreprocessingInfo) 
 
14699     if (comments != NULL && isSgBasicBlock(newStmt) == NULL)
 
14701          vector<int> captureList;
 
14703          printf (
"Found attached comments (at %p = %s, inserting %p = %s insertBefore = %s): comments->size() = %" PRIuPTR 
" \n",
 
14704               targetStmt,targetStmt->
class_name().c_str(),newStmt,newStmt->
class_name().c_str(),insertBefore ? 
"true" : 
"false",comments->size());
 
14711               printf (
"Warning: at present statements being inserted should not have attached comments of CPP directives (could be a problem, but comment relocation is not disabled). \n");
 
14716          int commentIndex = 0;
 
14717          AttachedPreprocessingInfoType::iterator i;
 
14718          for (i = comments->begin(); i != comments->end(); i++)
 
14720               ROSE_ASSERT ( (*i) != NULL );
 
14722               printf (
"          Attached Comment (relativePosition=%s): %s\n",
 
14723                    ((*i)->getRelativePosition() == PreprocessingInfo::before) ? 
"before" : 
"after",
 
14724                    (*i)->getString().c_str());
 
14725               printf (
"Comment/Directive getNumberOfLines = %d getColumnNumberOfEndOfString = %d \n",(*i)->getNumberOfLines(),(*i)->getColumnNumberOfEndOfString());
 
14726               (*i)->get_file_info()->display(
"comment/directive location");
 
14729               if ((*i)->getRelativePosition() == relativePosition)
 
14732                    captureList.push_back(commentIndex);
 
14739          if (captureList.empty() == 
false)
 
14745               ROSE_ASSERT(surroundingStatement != targetStmt);
 
14746               ROSE_ASSERT(surroundingStatement != NULL);
 
14748               if (surroundingStatement == NULL)
 
14751                    surroundingStatement = (insertBefore == 
true) ? newStmt : newStmt;
 
14756               vector<int>::iterator j = captureList.begin();
 
14757               while (j != captureList.end())
 
14765                    (*comments)[*j] = NULL;
 
14772               for (
size_t n = 0; n < captureList.size(); n++)
 
14774                    AttachedPreprocessingInfoType::iterator k = comments->begin();
 
14775                    while (k != comments->end())
 
14780                              comments->erase(k);
 
14793          if (comments != NULL)
 
14795               printf (
"Warning: special rules appear to apply to the insertion of a SgBasicBlock which has attached comments and/or CPP directives (comment relocation disabled). \n");
 
14802     printf (
"In SageInterface::insertStatement(): after processing associated comments \n");
 
14803     reportNodesMarkedAsModified(scope);
 
14806     if (isSgIfStmt(parent))
 
14808          if (isSgIfStmt(parent)->get_conditional()==targetStmt)
 
14814               if (isSgIfStmt(parent)->get_true_body()==targetStmt)
 
14834                    if (isSgIfStmt(parent)->get_false_body()==targetStmt)
 
14848          if (isSgWhileStmt(parent))
 
14850               if (isSgWhileStmt(parent)->get_condition()==targetStmt)
 
14856                    if (isSgWhileStmt(parent)->get_body()==targetStmt)
 
14859                         isSgWhileStmt(parent)->
set_body(newparent);
 
14869               if (isSgDoWhileStmt(parent))
 
14871                    if (isSgDoWhileStmt(parent)->get_condition()==targetStmt)
 
14877                         if (isSgDoWhileStmt(parent)->get_body()==targetStmt)
 
14880                              isSgDoWhileStmt(parent)->
set_body(newparent);
 
14890                    if (isSgForStatement(parent))
 
14892                         if (isSgForStatement(parent)->get_loop_body()==targetStmt)
 
14903                              if (isSgForStatement(parent)->get_test()==targetStmt)
 
14924                                   p->set_body(newparent);
 
14932                                   ROSE_ASSERT(stmnt != NULL);
 
14954     printf (
"In SageInterface::insertStatement(): at BASE of function \n");
 
14955     reportNodesMarkedAsModified(scope);
 
 
14964          for (
size_t i = 0; i < newStmts.size(); ++i)
 
14971          for (
size_t i = newStmts.size(); i > 0; --i)
 
 
14980    insertStatement(targetStmt,newStmt,
false, autoMovePreprocessingInfo);
 
 
14991    ROSE_ASSERT (stmt != NULL);
 
14992    ROSE_ASSERT (scope != NULL);
 
 
15004    ROSE_ASSERT (scope != NULL);
 
15005    vector <SgStatement* >::iterator iter;
 
15007    for (iter= stmt_list.begin(); iter != stmt_list.end(); iter++)
 
15009      if (iter == stmt_list.begin())
 
15015        ROSE_ASSERT (prev_stmt != NULL);
 
 
15024    ROSE_ASSERT(newStmt!=NULL);
 
15025    ROSE_ASSERT(scope!=NULL);
 
15027        if (!isSgDeclarationStatement(targetStmt)) {
 
 
15037    ROSE_ASSERT(scope!=NULL);
 
15039        if (!isSgDeclarationStatement(targetStmt)) {
 
 
15062    ROSE_ASSERT(target);
 
15063    ROSE_ASSERT(operand);
 
15064    ROSE_ASSERT(target!=operand);
 
15065    switch (target->variantT())
 
15067      case V_SgActualArgumentExpression:
 
15068        isSgActualArgumentExpression(target)->set_expression(operand);
 
15071        isSgAsmOp(target)->set_expression(operand);
 
15074        isSgSizeOfOp(target)->set_operand_expr(operand);
 
15077        isSgTypeIdOp(target)->set_operand_expr(operand);
 
15080        isSgVarArgOp(target)->set_operand_expr(operand);
 
15082      case V_SgVarArgStartOneOperandOp:
 
15083        isSgVarArgStartOneOperandOp(target)->set_operand_expr(operand);
 
15085      case V_SgAssignInitializer:
 
15086         isSgAssignInitializer (target)->
set_operand(operand);
 
15089        if (isSgUnaryOp(target)!=NULL)
 
15093            cerr<<
"\tSageInterface::setOperand(): unhandled case for target expression of type " 
15094                <<target->class_name()<<endl;
 
15099    markLhsValues(target);
 
 
15105    ROSE_ASSERT(target);
 
15107    ROSE_ASSERT(target!=lhs);
 
15108    bool hasrhs = 
false;
 
15114    if (varargcopy!=NULL)
 
15116      varargcopy->set_lhs_operand(lhs);
 
15117       if( varargcopy->get_rhs_operand()!=NULL) hasrhs= 
true;
 
15119    else if(varargstart!=NULL)
 
15121      varargstart->set_lhs_operand(lhs);
 
15122      if( varargstart->get_rhs_operand()!=NULL) hasrhs= 
true;
 
15124    else if(binary!=NULL)
 
15131      cout<<
"SageInterface::setLhsOperand(): unhandled case for target expression of type " 
15132                <<target->class_name()<<endl;
 
15139      markLhsValues(target);
 
 
15144    ROSE_ASSERT(target);
 
15146    ROSE_ASSERT(target!=rhs);
 
15147    bool haslhs = 
false;
 
15153    if (varargcopy!=NULL)
 
15155       varargcopy->set_rhs_operand(rhs);
 
15156       if( varargcopy->get_lhs_operand()!=NULL) haslhs= 
true;
 
15158    else if(varargstart!=NULL)
 
15160      varargstart->set_rhs_operand(rhs);
 
15161      if( varargstart->get_lhs_operand()!=NULL) haslhs= 
true;
 
15163    else if(binary!=NULL)
 
15170      cout<<
"SageInterface::setRhsOperand(): unhandled case for target expression of type " 
15171                <<target->class_name()<<endl;
 
15177      markLhsValues(target);
 
 
15196     ROSE_ASSERT(parentFileList != NULL);
 
15202     if (parentDirectory != NULL)
 
15205          parentDirectory->get_directoryList()->get_listOfDirectories().push_back(directory);
 
15212          project = isSgProject(parentFileList->
get_parent());
 
15213          ROSE_ASSERT(project != NULL);
 
15216          project->get_directoryList()->get_listOfDirectories().push_back(directory);
 
15223     directory->get_fileList()->get_listOfFiles().push_back(file);
 
15226     parentFileList->get_listOfFiles().erase(find(parentFileList->get_listOfFiles().begin(),parentFileList->get_listOfFiles().end(),file));
 
 
15236     ROSE_ASSERT(structDecl != NULL);
 
15237     ROSE_ASSERT(scope != NULL);
 
15239     ROSE_ASSERT(nondefdecl != NULL);
 
15265     SgName name = structDecl->get_name();
 
15279     if (mysymbol == NULL)
 
15281          printf (
"Note: SageInterface::fixStructDeclaration(): structDecl = %p nondefdecl = %p (mysymbol == NULL) \n",structDecl,nondefdecl);
 
15285          ROSE_ASSERT(structDecl->
get_scope() != NULL);
 
15290               ROSE_ASSERT(mysymbol);
 
15293               printf (
"############## DANGER:DANGER:DANGER ################\n");
 
15295               printf (
"In SageInterface::fixStructDeclaration(): Adding class symbol to scope = %p = %s \n",scope,scope->
class_name().c_str());
 
15303               printf (
"*** WARNING: In SageInterface::fixStructDeclaration(): (mysymbol == NULL) Commented out the setting of the parent to be the same as the scope \n");
 
15312               printf (
"In SageInterface::fixStructDeclaration(): (mysymbol == NULL) Skipped building an associated symbol! \n");
 
15317     ROSE_ASSERT(nondefdecl->get_type() != NULL);
 
15320     ROSE_ASSERT(nondefdecl->get_type()->
variantT() != V_SgNode);
 
15323     ROSE_ASSERT(isSgClassType(nondefdecl->get_type()) != NULL);
 
15327     if (nondefdecl->get_type() == NULL)
 
15331     ROSE_ASSERT (nondefdecl->get_type() != NULL);
 
15334     if (defdecl != NULL)
 
15337          ROSE_ASSERT(defdecl->get_type()->
variantT() != V_SgNode);
 
15340          ROSE_ASSERT(isSgClassType(defdecl->get_type()) != NULL);
 
15344     if (defdecl != NULL)
 
15347          ROSE_ASSERT(defdecl->get_type() != NULL);
 
15348          if (defdecl->get_type() != nondefdecl->get_type())
 
15350               printf (
"ERROR: defdecl->get_type() != nondefdecl->get_type(): what are these: \n");
 
15351               printf (
"   defdecl->get_type()    = %p = %s \n",defdecl   ->get_type(),defdecl   ->get_type()->class_name().c_str());
 
15352               SgNamedType* namedType_definingDecl = isSgNamedType(defdecl->get_type());
 
15353               if (namedType_definingDecl != NULL)
 
15355                    printf (
"namedType_definingDecl->get_declaration() = %p = %s \n",namedType_definingDecl->get_declaration(),namedType_definingDecl->get_declaration()->
class_name().c_str());
 
15357               printf (
"   nondefdecl->get_type() = %p = %s \n",nondefdecl->get_type(),nondefdecl->get_type()->
class_name().c_str());
 
15358               SgNamedType* namedType_nondefiningDecl = isSgNamedType(nondefdecl->get_type());
 
15359               if (namedType_nondefiningDecl != NULL)
 
15361                    printf (
"namedType_nondefiningDecl->get_declaration() = %p = %s \n",namedType_nondefiningDecl->get_declaration(),namedType_nondefiningDecl->get_declaration()->
class_name().c_str());
 
 
15377     ROSE_ASSERT(structDecl);
 
15378     ROSE_ASSERT(scope);
 
15380     ROSE_ASSERT(nondefdecl);
 
15399     if (mysymbol==NULL)
 
15406               ROSE_ASSERT(mysymbol);
 
15408               printf (
"In SageInterface::fixNamespaceDeclaration(): inserting namespace symbol into scope = %p = %s \n",scope,scope->
class_name().c_str());
 
15412               ROSE_ASSERT(defdecl);
 
 
15422#define DEBUG__SageInterface__fixVariableDeclaration 0 
15426     ROSE_ASSERT(varDecl != NULL);
 
15427     ROSE_ASSERT(scope   != NULL);
 
15429     SgInitializedNamePtrList namelist = varDecl->
get_variables();
 
15434#if DEBUG__SageInterface__fixVariableDeclaration 
15435     printf (
"In SageInterface::fixVariableDeclaration():\n");
 
15436     printf (
"  varDecl = %p scope = %p = %s \n", varDecl);
 
15437     printf (
"  scope = %p : %s \n", scope, scope->
class_name().c_str());
 
15440     ROSE_ASSERT(namelist.size() > 0);
 
15442     SgInitializedNamePtrList::iterator i;
 
15443     for (i = namelist.begin(); i != namelist.end(); i++)
 
15446          ROSE_ASSERT(initName != NULL);
 
15447#if DEBUG__SageInterface__fixVariableDeclaration 
15448          printf (
"  initName = %p\n", initName);
 
15449          printf (
"  initName->get_scope() = %p : %s\n", initName->get_scope(), initName->get_scope() ? initName->get_scope()->
class_name().c_str() : 
"");
 
15452          SgName name = initName->get_name();
 
15453#if DEBUG__SageInterface__fixVariableDeclaration 
15454          printf (
"  name = %s\n", name.str());
 
15459#if DEBUG__SageInterface__fixVariableDeclaration 
15460          printf (
"  name = %s\n", name.str());
 
15467          if (preAssociatedScope != NULL) {
 
15468            requiredScope = preAssociatedScope;
 
15472          initName->set_scope(requiredScope);
 
15477          ROSE_ASSERT(requiredScope != NULL);
 
15478          SgVariableSymbol* varSymbol = requiredScope->lookup_variable_symbol(name);
 
15479#if DEBUG__SageInterface__fixVariableDeclaration 
15480          printf (
"  varSymbol = %p (%s)\n", varSymbol, varSymbol ? varSymbol->
class_name().c_str() : 
"");
 
15482          if (varSymbol == NULL) {
 
15483            if (scope == initName->get_scope()) {
 
15484              if (isSgTemplateVariableDeclaration(varDecl)) {
 
15489              ROSE_ASSERT(varSymbol);
 
15494            ROSE_ASSERT(prev_decl);
 
15495            if (initName != prev_decl) {
 
15496              initName->set_prev_decl_item(prev_decl);
 
15498            ROSE_ASSERT(initName->get_prev_decl_item() != initName);
 
15500#if DEBUG__SageInterface__fixVariableDeclaration 
15501          printf (
"  varSymbol = %p (%s)\n", varSymbol, varSymbol ? varSymbol->
class_name().c_str() : 
"");
 
 
15519  Rose_STL_Container<SgNode*> varList;
 
15522  Rose_STL_Container<SgNode*> reflist = NodeQuery::querySubTree(root, V_SgVarRefExp);
 
15523  for (Rose_STL_Container<SgNode*>::iterator i=reflist.begin();i!=reflist.end();i++)
 
15525    varRef= isSgVarRefExp(*i);
 
15526    ROSE_ASSERT(varRef->get_symbol());
 
15529    ROSE_ASSERT (initname != NULL);
 
15532      SgName varName=initname->get_name();
 
15543        if (varRef == arrowExp->get_rhs_operand_i())
 
15547            SgType* lhs_type = arrowExp->get_lhs_operand_i()->get_type() ;
 
15548            lhs_type = lhs_type->
stripType(SgType::STRIP_MODIFIER_TYPE | SgType::STRIP_REFERENCE_TYPE | SgType::STRIP_RVALUE_REFERENCE_TYPE | SgType::STRIP_TYPEDEF_TYPE);
 
15550            ROSE_ASSERT(ptrType);
 
15551            SgClassType* clsType = isSgClassType(ptrType->get_base_type()-> stripType(SgType::STRIP_MODIFIER_TYPE | SgType::STRIP_REFERENCE_TYPE | SgType::STRIP_RVALUE_REFERENCE_TYPE | SgType::STRIP_TYPEDEF_TYPE));
 
15552            ROSE_ASSERT(clsType);
 
15570        if (varRef == dotExp->get_rhs_operand_i())
 
15575            SgType* lhs_type = dotExp->get_lhs_operand_i()->get_type() ;
 
15576            lhs_type = lhs_type->
stripType(SgType::STRIP_MODIFIER_TYPE | SgType::STRIP_REFERENCE_TYPE | SgType::STRIP_RVALUE_REFERENCE_TYPE | SgType::STRIP_TYPEDEF_TYPE);
 
15578            ROSE_ASSERT(clsType);
 
15602      if (realSymbol==NULL)
 
15609        ROSE_ASSERT(realSymbol!=(varRef->get_symbol()));
 
15616        bool toDelete = 
true;
 
15618        SgSymbol* symbolToDelete = varRef->get_symbol();
 
15619        varRef->set_symbol(isSgVariableSymbol(realSymbol));
 
15622        if (varList.empty())
 
15624            VariantVector vv(V_SgVarRefExp);
 
15625            varList = NodeQuery::queryMemoryPool(vv);
 
15628        for (Rose_STL_Container<SgNode*>::iterator i = varList.begin();
 
15629                i != varList.end(); ++i)
 
15633                if (var->get_symbol() == symbolToDelete)
 
15643            delete symbolToDelete;
 
15652        delete (varRef->get_symbol());
 
15656        varRef->set_symbol(isSgVariableSymbol(realSymbol));
 
15663  if (cleanUnusedSymbols)
 
 
15670    Rose_STL_Container<SgNode*> symbolList;
 
15671    VariantVector sym_vv(V_SgVariableSymbol);
 
15672    symbolList = NodeQuery::queryMemoryPool(sym_vv);
 
15674    Rose_STL_Container<SgNode*> varList;
 
15675    VariantVector var_vv(V_SgVarRefExp);
 
15679      varList = NodeQuery::querySubTree(root, V_SgVarRefExp);
 
15682    for (Rose_STL_Container<SgNode*>::iterator i = symbolList.begin();
 
15683            i != symbolList.end(); ++i)
 
15686        ROSE_ASSERT(symbolToDelete);
 
15690        bool toDelete = 
true;
 
15694          for (Rose_STL_Container<SgNode*>::iterator j = varList.begin();
 
15695              j != varList.end(); ++j)
 
15700            if (var->get_symbol() == symbolToDelete)
 
15711            std::cout << 
"Symbol " << symbolToDelete->
get_name().str() << 
' ' << symbolToDelete <<
 
15712               ' ' << symbolToDelete->get_declaration() <<  
" is deleted." << std::endl;
 
15714            delete symbolToDelete->get_declaration();
 
15715            delete symbolToDelete;
 
 
15728     ROSE_ASSERT(label_stmt);
 
15737     if (isSgFunctionDefinition(scope) != 
nullptr)
 
15739          ASSERT_not_null(label_scope);
 
15745          SgLabelSymbol* lsymbol = label_scope->lookup_label_symbol(name);
 
15747          if (lsymbol == 
nullptr)
 
15752               ASSERT_not_null(lsymbol);
 
 
15764     ROSE_ASSERT (stmt != NULL);
 
15765     ROSE_ASSERT (label_value >0 && label_value <=99999); 
 
15768     if (label_scope == NULL)
 
15772     ROSE_ASSERT (label_scope != NULL);
 
15774     SgLabelSymbol * symbol = label_scope->lookup_label_symbol (label_name);
 
15775     if (symbol == NULL)
 
15781          ROSE_ASSERT(symbol != NULL);
 
15782          symbol->set_fortran_statement(stmt);
 
15783          symbol->set_numeric_label_value(label_value);
 
15788          cerr<<
"Error. SageInterface::setFortranNumericLabel() tries to set a duplicated label value!"<<endl;
 
15789          ROSE_ASSERT (
false);
 
15798         case SgLabelSymbol::e_start_label_type:
 
15800              stmt->set_numeric_label(ref_exp);
 
15803         case SgLabelSymbol::e_end_label_type:
 
15805              stmt->set_end_numeric_label(ref_exp);
 
15810               std::cerr << 
"SageInterface::setFortranNumericLabel: unimplemented for label_type " << label_type << 
"\n";
 
 
15822  ROSE_ASSERT (func_def != NULL);
 
15827  std::set<SgNode*>::iterator iter ;
 
15828  for (iter=symbols.begin(); iter !=symbols.end(); iter++)
 
15833      int cur_val = l_symbol->get_numeric_label_value();
 
15834      if (result <=cur_val)
 
15835        result = cur_val +10;
 
15839  ROSE_ASSERT (result <= 99999); 
 
 
15850    ROSE_ASSERT(scope != NULL);
 
15855    ROSE_ASSERT(fTable != NULL);
 
15862         printf (
"WARNING: Skip setting the scope of the SgFunctionTypeTable scope = %p = %s \n",scope,scope->
class_name().c_str());
 
15868     printf (
"In SageInterface::fixStatement(): stmt = %p = %s \n",stmt,stmt->
class_name().c_str());
 
15881     if (tmfunc != NULL)
 
15882       assert(tmfunc->
variantT() == V_SgTemplateMemberFunctionDeclaration);
 
15883     else if (mfunc != NULL)
 
15884       assert(mfunc->
variantT() == V_SgMemberFunctionDeclaration || mfunc->
variantT() == V_SgTemplateInstantiationMemberFunctionDecl);
 
15885     else if (tfunc != NULL)
 
15886       assert(tfunc->
variantT() == V_SgTemplateFunctionDeclaration);
 
15887     else if (procfunc != NULL)
 
15888        assert(procfunc->
variantT() == V_SgProcedureHeaderStatement);
 
15889     else if (progfunc != NULL)
 
15890        assert(progfunc->
variantT() == V_SgProgramHeaderStatement);
 
15891     else if (func != NULL)
 
15892       assert(func->
variantT() == V_SgFunctionDeclaration || func->
variantT() == V_SgTemplateInstantiationFunctionDecl);
 
15896     printf (
"In SageInterface::fixStatement(): scope = %p = %s \n",scope,scope->
class_name().c_str());
 
15897     printf (
"In SageInterface::fixStatement(): stmt->get_scope() = %p \n",stmt->
get_scope());
 
15909          printf (
"Looking up the function symbol using name = %s and type = %p = %s \n",func->get_name().str(),func->get_type(),func->get_type()->
class_name().c_str());
 
15915          if (tmfunc != NULL)
 
15917            SgTemplateParameterPtrList & templateParameterList = tmfunc->get_templateParameters();
 
15920            func_symbol = scope->lookup_template_member_function_symbol (func->get_name(), func->get_type(),&templateParameterList);
 
15922          else if (mfunc != NULL)
 
15925            SgTemplateArgumentPtrList* templateArgumentList = (templateInstantiationMemberFunctionDecl != NULL) ? &(templateInstantiationMemberFunctionDecl->
get_templateArguments()) : NULL;
 
15927            func_symbol = scope->lookup_nontemplate_member_function_symbol (func->get_name(), func->get_type(),templateArgumentList);
 
15929          else if (tfunc != NULL)
 
15931            SgTemplateParameterPtrList & templateParameterList = tfunc->get_templateParameters();
 
15933            printf (
"In SageInterface::fixStatement(): templateParameterList.size() = %" PRIuPTR 
" \n",templateParameterList.size());
 
15937            func_symbol = scope->lookup_template_function_symbol (func->get_name(), func->get_type(),&templateParameterList);
 
15939          else if (procfunc != NULL)
 
15942            printf (
"In SageInterface::fixStatement(): procfunc->get_name() = %s calling lookup_function_symbol() \n",procfunc->get_name().str());
 
15944            func_symbol = scope->lookup_function_symbol (procfunc->get_name(), procfunc->get_type());
 
15945            assert(func_symbol != NULL);
 
15947          else if (progfunc != NULL)
 
15949            func_symbol = scope->lookup_function_symbol (progfunc->get_name(), progfunc->get_type());
 
15950            assert(func_symbol != NULL);
 
15952          else if (func != NULL)
 
15955            printf (
"In SageInterface::fixStatement(): func->get_name() = %s calling lookup_function_symbol() \n",func->get_name().str());
 
15958            SgTemplateArgumentPtrList* templateArgumentList = (templateInstantiationFunctionDecl != NULL) ? &(templateInstantiationFunctionDecl->
get_templateArguments()) : NULL;
 
15960            func_symbol = scope->lookup_function_symbol (func->get_name(), func->get_type(),templateArgumentList);
 
15965            if (func_symbol == NULL)
 
15977          printf (
"In SageInterface::fixStatement(): func_symbol = %p \n",func_symbol);
 
15979          assert(func_symbol != NULL);
 
 
15990     printf (
"Need to handle SgTemplateDeclaration IR nodes as well...(implement later) \n");
 
 
15998     if (isSgVariableDeclaration(stmt))
 
16005          ROSE_ASSERT(classDeclaration != 
nullptr);
 
16008       else if (isSgClassDeclaration(stmt))
 
16012      else if (isSgLabelStatement(stmt))
 
16016       else if (isSgFunctionDeclaration(stmt))
 
16024          ROSE_ASSERT(fTable);
 
16033          printf (
"In SageInterface::fixStatement(): scope = %p = %s \n",scope,scope->
class_name().c_str());
 
16034          printf (
"In SageInterface::fixStatement(): stmt->get_scope() = %p \n",stmt->
get_scope());
 
16045               printf (
"Looking up the function symbol using name = %s and type = %p = %s \n",func->get_name().str(),func->get_type(),func->get_type()->
class_name().c_str());
 
16047               SgFunctionSymbol*            func_symbol = scope->lookup_function_symbol (func->get_name(), func->get_type());
 
16049               printf (
"In SageInterface::fixStatement(): func_symbol = %p \n",func_symbol);
 
16050               if (func_symbol == NULL)
 
16062                    ROSE_ASSERT (func_symbol != NULL);
 
16068                    printf (
"In SageInterface::fixStatement(): found a valid function so no need to insert new symbol \n");
 
16076          if (local_symbol == NULL) 
 
16081                    if (func != src_func )
 
16091       else if (isSgTemplateDeclaration(stmt) != NULL)
 
16106          case V_SgEnumDeclaration:
 
16107          case V_SgTemplateDeclaration:
 
16108          case V_SgTypedefDeclaration:
 
16109          case V_SgFunctionDeclaration:
 
16110          case V_SgMemberFunctionDeclaration:
 
16111          case V_SgTemplateInstantiationFunctionDecl:
 
16126               printf (
"In SageInterface::fixStatement(): switch default case used (likely OK): stmt = %p = %s \n",stmt,stmt->
class_name().c_str());
 
16129               printf (
"switch case not handled properly: stmt = %p = %s \n",stmt,stmt->
class_name().c_str());
 
 
16161     ROSE_ASSERT(func != NULL && scope != NULL);
 
16163     ROSE_ASSERT(func  != NULL);
 
16164     ROSE_ASSERT(scope != NULL);
 
16166     SgStatementPtrList stmtList, sameFuncList;
 
16173          SgDeclarationStatementPtrList::iterator i;
 
16174          for (i=declList.begin();i!=declList.end();i++)
 
16175               stmtList.push_back(*i);
 
16183     if (firstNondefiningFunctionDeclaration != NULL)
 
16188          printf (
"In SageInterface::updateDefiningNondefiningLinks(): func = %p Found a valid pointer to a firstNondefiningFunctionDeclaration = %p \n",func,firstNondefiningFunctionDeclaration);
 
16199          printf (
"WARNING: symbol for func->get_firstNondefiningDeclaration() = %p = %s = %s is not present in the scope = %p = %s associated with the firstNondefiningDeclaration \n",
 
16207     SgSymbol* functionSymbol = scope->lookup_function_symbol(func->get_name(),func->get_type());
 
16208     if (functionSymbol != NULL)
 
16210          printf (
"In SageInterface::updateDefiningNondefiningLinks(): func = %p Found a valid symbol = %p \n",func,functionSymbol);
 
16214          printf (
"In SageInterface::updateDefiningNondefiningLinks(): func = %p functionSymbol == NULL \n",func);
 
16219     SgStatementPtrList::iterator j;
 
16220     for (j = stmtList.begin(); j != stmtList.end(); j++)
 
16223          if (func_decl != NULL)
 
16230                    sameFuncList.push_back(func_decl);
 
16236     printf (
"func                            = %p \n",func);
 
16240     ROSE_ASSERT(func != NULL);
 
16244          for (j = sameFuncList.begin(); j != sameFuncList.end(); j++)
 
16249          ROSE_ASSERT(func  != NULL);
 
16252          ROSE_ASSERT(sameFuncList.empty() == 
false);
 
16254          if (func == isSgFunctionDeclaration(*(sameFuncList.begin()))) 
 
16256               for (j = sameFuncList.begin(); j != sameFuncList.end(); j++)
 
16260                    printf (
"In SageInterface::updateDefiningNondefiningLinks(): (case 1) Testing j = %p set_firstNondefiningDeclaration(%p) \n",*j,func);
 
16264                    if (func_decl != func)
 
16271                              printf (
"In SageInterface::updateDefiningNondefiningLinks(): (case 1) Calling j = %p set_firstNondefiningDeclaration(%p) \n",*j,func);
 
16281               printf (
"In SageInterface::updateDefiningNondefiningLinks(): (case 2) Testing func = %p set_firstNondefiningDeclaration(%p) \n",func,isSgFunctionDeclaration(*(sameFuncList.begin()))->
get_firstNondefiningDeclaration());
 
16288                    printf (
"In SageInterface::updateDefiningNondefiningLinks(): (case 2) Calling func = %p set_firstNondefiningDeclaration(%p) \n",func,isSgFunctionDeclaration(*(sameFuncList.begin()))->
get_firstNondefiningDeclaration());
 
 
16297  assert(source_file != NULL);
 
16298  assert(position == PreprocessingInfo::before || position ==  PreprocessingInfo::after);
 
16300  SgGlobal * global_scope = source_file->get_globalScope();
 
16303  ROSE_ASSERT(result);
 
 
16319           PreprocessingInfo::DirectiveType dtype )
 
16321     ASSERT_not_null(target); 
 
16324     PreprocessingInfo::DirectiveType mytype=dtype;
 
16329     if (mytype == PreprocessingInfo::CpreprocessorUnknownDeclaration)
 
16335                mytype = PreprocessingInfo::C_StyleComment;
 
16340                mytype = PreprocessingInfo::CplusplusStyleComment;
 
16345                mytype = PreprocessingInfo::F90StyleComment;
 
16350                mytype = PreprocessingInfo::AdaStyleComment;
 
16355                mytype = PreprocessingInfo::JovialStyleComment;
 
16359               cout << 
"WARNING: SageInterface::attachComment(): Unknown programming language \n";
 
16365     bool resetPositionInfo = 
false;
 
16368          case PreprocessingInfo::C_StyleComment:        comment = 
"/* " + content + 
" */"; 
break;
 
16369          case PreprocessingInfo::CplusplusStyleComment: comment = 
"// " + content;         
break;
 
16370          case PreprocessingInfo::FortranStyleComment:   comment = 
"      C " + content;    
break;
 
16371          case PreprocessingInfo::F90StyleComment:       comment = 
"!"   + content;         
break;
 
16372          case PreprocessingInfo::AdaStyleComment:       comment = 
"-- " + content;         
break;
 
16373          case PreprocessingInfo::JovialStyleComment:
 
16377          case PreprocessingInfo::CpreprocessorLineDeclaration:
 
16378               comment = 
"#myline " + content;
 
16379               mytype = PreprocessingInfo::CplusplusStyleComment;
 
16380               resetPositionInfo = 
true;
 
16382          case PreprocessingInfo::CpreprocessorIfndefDeclaration: comment = 
"#ifndef " + content + 
"\n"; 
break;
 
16383          case PreprocessingInfo::CpreprocessorDefineDeclaration: comment = 
"#define " + content + 
"\n"; 
break;
 
16384          case PreprocessingInfo::CpreprocessorEndifDeclaration:  comment = 
"#endif" + (content.empty() ? 
"\n" : (
" /* " + content + 
" */\n")); 
break;
 
16385          case PreprocessingInfo::CpreprocessorEnd_ifDeclaration:  comment = 
"#end if" + (content.empty() ? 
"\n" : (
" /* " + content + 
" */\n")); 
break;
 
16389               printf (
"Error: default in switch reached in SageInterface::attachComment() PreprocessingInfo::DirectiveType == %d \n",mytype);
 
16394     result = 
new PreprocessingInfo (mytype,comment, 
"transformation-generated", 0, 0, 0, position);
 
16397     if (resetPositionInfo == 
true)
 
16400          *(result->get_file_info()) = *(target->get_file_info());
 
16410     ASSERT_not_null(result);
 
16411     target->addToAttachedPreprocessingInfo(result);
 
 
16417    PreprocessingInfo::CpreprocessorIfDeclaration,
 
16419    "transformation-generated", 0, 0, 0,
 
16420    PreprocessingInfo::before
 
16422  target->addToAttachedPreprocessingInfo(if_macro);
 
16425    PreprocessingInfo::CpreprocessorEndifDeclaration,
 
16427    "transformation-generated", 0, 0, 0,
 
16428    PreprocessingInfo::after
 
16430  target->addToAttachedPreprocessingInfo(endif_macro);
 
 
16443static map<SgSourceFile*, map<string, PreprocessingInfo*> > fileHeaderDict;
 
16448  if (isSystemHeader)
 
16449    header_key=
"<"+header_file_name+
">";
 
16451    header_key=
"\""+header_file_name+
"\"";
 
16453  if (fileHeaderDict.count(source_file) && fileHeaderDict[source_file].count(header_key))
 
16454    return fileHeaderDict[source_file][header_key];
 
16456  vector<SgLocatedNode*> candidates;
 
16459  SgGlobal* global= source_file -> get_globalScope();
 
16461  candidates.push_back(global);
 
16464  SgDeclarationStatementPtrList decl_stmt_list = global->
get_declarations();
 
16465  for (SgDeclarationStatementPtrList::iterator iter= decl_stmt_list.begin(); iter!=decl_stmt_list.end(); iter++)
 
16466    candidates.push_back(*iter);
 
16468  bool found = 
false;
 
16469  for (
size_t ci=0; ci<candidates.size(); ci++)
 
16474    if (comments == NULL) 
continue;
 
16475    AttachedPreprocessingInfoType::iterator i;
 
16476    for (i = comments->begin (); i != comments->end (); i++)
 
16478      if ((*i)->getTypeOfDirective () != PreprocessingInfo::CpreprocessorIncludeDeclaration) 
continue;
 
16479      string content = (*i)->getString ();
 
16480      if (content.find(header_key) != string::npos)
 
16482        fileHeaderDict[source_file][header_key] = *i;
 
16493    return fileHeaderDict[source_file][header_key];
 
 
16503     bool supportTokenUnparsing = 
false;
 
16505     assert(source_file != NULL);
 
16506     assert(position == PreprocessingInfo::before || position ==  PreprocessingInfo::after);
 
16508     SgGlobal * global_scope = source_file->get_globalScope();
 
16511     if (isSystemHeader)
 
16512        content = 
"#include <" + header_file_name + 
"> \n";
 
16514        content = 
"#include \"" + header_file_name + 
"\" \n";
 
16517     ROSE_ASSERT(result);
 
16525     supportTokenUnparsing = source_file->get_unparse_tokens();
 
16526     bool supportUnparseHeaders = source_file->get_unparseHeaderFiles();
 
16529     printf (
"supportTokenUnparsing = %s \n",supportTokenUnparsing ? 
"true" : 
"false");
 
16530     printf (
"supportUnparseHeaders = %s \n",supportUnparseHeaders ? 
"true" : 
"false");
 
16531     printf (
"source_file           = %p \n",source_file);
 
16532     printf (
"global_scope          = %p \n",global_scope);
 
16535     printf (
"Exiting as a test! \n");
 
16540     if (supportTokenUnparsing == 
false)
 
16549          if (supportUnparseHeaders == 
true)
 
16554                printf (
"physical_file_id = %d \n",physical_file_id);
 
16559                printf (
"Exiting as a test! \n");
 
16566          global_scope->prepend_statement(emptyDeclaration);
 
16570     printf (
"Exiting as a test! \n");
 
16571     ROSE_ASSERT(
false);
 
 
16582     bool supportTokenUnparsing = 
false;
 
16588     printf (
"In SageInterface::insertHeader(): filename = %s \n",filename.c_str());
 
16589     printf (
" --- position = %s \n",PreprocessingInfo::relativePositionName(position).c_str());
 
16595     ROSE_ASSERT(scope);
 
16598     ROSE_ASSERT(globalScope != NULL);
 
16606     if (isSystemHeader)
 
16607          content = 
"#include <" + filename + 
"> \n";
 
16609          content = 
"#include \"" + filename + 
"\" \n";
 
16618     ROSE_ASSERT(sourceFile != NULL);
 
16620     supportTokenUnparsing      = sourceFile->get_unparse_tokens();
 
16622     bool supportUnparseHeaders = sourceFile->get_unparseHeaderFiles();
 
16624     if (supportUnparseHeaders)
 
16627          string suffix = Rose::StringUtility ::fileNameSuffix(filename);
 
16630          if (suffix==
"h" ||suffix==
"hpp"|| suffix==
"hh"||suffix==
"H" ||suffix==
"hxx"||suffix==
"h++" ||suffix==
"tcc")
 
16635     printf (
"supportTokenUnparsing = %s \n",supportTokenUnparsing ? 
"true" : 
"false");
 
16636     printf (
"supportUnparseHeaders = %s \n",supportUnparseHeaders ? 
"true" : 
"false");
 
16637     printf (
"sourceFile  = %p \n",sourceFile);
 
16638     printf (
"globalScope = %p \n",globalScope);
 
16641     printf (
"supportTokenUnparsing = %s \n",supportTokenUnparsing ? 
"true" : 
"false");
 
16644     printf (
"Exiting as a test! \n");
 
16648     SgDeclarationStatementPtrList & stmtList = globalScope->
get_declarations();
 
16651     printf (
"stmtList.size() = %zu \n",stmtList.size());
 
16654     if (stmtList.size() > 0) 
 
16656          for (SgDeclarationStatementPtrList::iterator j = stmtList.begin (); j != stmtList.end (); j++)
 
16660               if ( ((*j)->get_file_info())->isSameFile(srcScope->
get_file_info ()) || ((*j)->get_file_info ())->isTransformation() )
 
16662                    result = 
new PreprocessingInfo(PreprocessingInfo::CpreprocessorIncludeDeclaration, content, 
"Transformation generated",0, 0, 0, PreprocessingInfo::before);
 
16663                    ROSE_ASSERT(result != NULL);
 
16665                    printf (
"Building a PreprocessingInfo: result = %p \n",result);
 
16673                    if (supportTokenUnparsing == 
false)
 
16675                         (*j)->addToAttachedPreprocessingInfo(result,position);
 
16679                         (*j)->addToAttachedPreprocessingInfo(result,position);
 
16681                         printf (
"In SageInterface::insertHeader(): Calling set_containsTransformationToSurroundingWhitespace(true) \n");
 
16685                         (*j)->set_containsTransformationToSurroundingWhitespace(
true);
 
16694                         printf (
"In SageInterface::insertHeader(): declarationStatement = %p = %s \n",declarationStatement,declarationStatement->
class_name().c_str());
 
16695                         printf (
"In SageInterface::insertHeader(): declarationStatement->get_containsTransformationToSurroundingWhitespace() = %s \n",
 
16696                              declarationStatement->get_containsTransformationToSurroundingWhitespace() ? 
"true" : 
"false");
 
16703                         if (supportUnparseHeaders == 
true)
 
16708                              printf (
"physical_file_id = %d \n",physical_file_id);
 
16710                              emptyDeclaration->get_startOfConstruct()->set_physical_file_id(physical_file_id);
 
16711                              emptyDeclaration->get_endOfConstruct()->set_physical_file_id(physical_file_id);
 
16713                              printf (
"Exiting as a test! \n");
 
16714                              ROSE_ASSERT(
false);
 
16718                         emptyDeclaration->addToAttachedPreprocessingInfo(result, position);
 
16724                    printf (
"break out of for loop: result = %p \n",result);
 
16734          cerr<<
"SageInterface::insertHeader() Empty file is found!"<<endl;
 
16735          cerr<<
"#include xxx is  preprocessing information which has to be attached  to some other  located node (a statement for example)"<<endl;
 
16736          cerr<<
"You may have to insert some statement first before inserting a header"<<endl;
 
16737          ROSE_ASSERT(
false);
 
16738          result = 
new PreprocessingInfo(PreprocessingInfo::CpreprocessorIncludeDeclaration, content, 
"Transformation generated",0, 0, 0, PreprocessingInfo::after);
 
16739          ROSE_ASSERT(result);
 
16750     if (result != NULL)
 
16761     printf (
"Exiting as a test! \n");
 
16762     ROSE_ASSERT(
false);
 
16766     printf (
"Leaving SageInterface::insertHeader(): filename = %s \n",filename.c_str());
 
16770     printf (
"Exiting as a test! \n");
 
16771     ROSE_ASSERT(
false);
 
 
16781  ROSE_ASSERT (stmt != NULL);
 
16782  ROSE_ASSERT (newheader != NULL);
 
16785  printf (
"In SageInterface::insertHeader (SgStatement* stmt, PreprocessingInfo* newheader, bool asLastHeader) \n");
 
16791    position = PreprocessingInfo::after;
 
16793    position = PreprocessingInfo::before;
 
16799  if (comments != NULL)
 
16808    AttachedPreprocessingInfoType::iterator i, firsti, lasti;
 
16809    for (i = comments->begin (); i != comments->end (); i++)
 
16816      if ((*i)->getTypeOfDirective () == PreprocessingInfo::CpreprocessorIncludeDeclaration)
 
16819           if ((*i)->getTypeOfDirective () == PreprocessingInfo::CpreprocessorIncludeDeclaration)
 
16821                if (firstExistingHeader == NULL)
 
16823                     firstExistingHeader = (*i);
 
16827                lastExistingHeader = (*i);
 
16833      if ( (*i)->getTypeOfDirective () == PreprocessingInfo::CpreprocessorIncludeDeclaration ||
 
16834           (*i)->getTypeOfDirective () == PreprocessingInfo::CpreprocessorEndifDeclaration )
 
16837        if ((*i)->getTypeOfDirective () == PreprocessingInfo::CpreprocessorIncludeDeclaration)
 
16839             if (firstExistingHeader == NULL)
 
16841               firstExistingHeader = (*i);
 
16845             lastExistingHeader = (*i);
 
16848        if ((*i)->getTypeOfDirective () == PreprocessingInfo::CpreprocessorEndifDeclaration)
 
16850             if (firstExistingEndif == NULL)
 
16852               firstExistingEndif = (*i);
 
16867      if (lastExistingHeader == NULL) 
 
16871        comments->insert (lasti+1, newheader);
 
16876      if (firstExistingHeader == NULL) 
 
16880        comments->insert (firsti, newheader);
 
16888     printf (
"Exiting as a test! \n");
 
16889     ROSE_ASSERT(
false);
 
 
16898  ROSE_ASSERT (source_file != NULL);
 
16899  SgGlobal* globalScope = source_file->get_globalScope();
 
16900  ROSE_ASSERT (globalScope != NULL);
 
16904  if (isSystemHeader)
 
16905    content = 
"#include <" + filename + 
"> \n";
 
16907    content = 
"#include \"" + filename + 
"\" \n";
 
16914    position = PreprocessingInfo::after;
 
16916    position = PreprocessingInfo::before;
 
16919  SgDeclarationStatementPtrList & stmtList = globalScope->
get_declarations ();
 
16920  if (stmtList.size()>0) 
 
16922    for (SgDeclarationStatementPtrList::iterator j = stmtList.begin (); j != stmtList.end (); j++)
 
16927      if ( (*j)->get_file_info()->isSameFile(globalScope->
get_file_info()) || (*j)->get_file_info()->isTransformation() )
 
16930        printf (
"In SageInterface::insertHeader(): Found statement to attached #include: *j = %p = %s \n",*j,(*j)->class_name().c_str());
 
16931        printf (
" --- unparseToString() = %s \n",(*j)->unparseToString().c_str());
 
16933        result = 
new PreprocessingInfo(PreprocessingInfo::CpreprocessorIncludeDeclaration, content, 
"Transformation generated",0, 0, 0, PreprocessingInfo::before);
 
16934        ROSE_ASSERT(result);
 
16938        printf (
"Exiting as a test! \n");
 
16947    cerr<<
"SageInterface::insertHeader() Empty file is found!"<<endl;
 
16948    cerr<<
"#include xxx is  preprocessing information which has to be attached  to some other  located node (a statement for example)"<<endl;
 
16949    cerr<<
"You may have to insert some statement first before inserting a header"<<endl;
 
16952    result = 
new PreprocessingInfo(PreprocessingInfo::CpreprocessorIncludeDeclaration,
 
16953        content, 
"Transformation generated",0, 0, 0, PreprocessingInfo::after);
 
16954    ROSE_ASSERT(result);
 
16961  printf (
"In SageInterface::insertHeader(): Marking include file for filename = %s as a transformation \n",filename.c_str());
 
16971  printf (
"Exiting as a test! \n");
 
16972  ROSE_ASSERT(
false);
 
 
16990     ROSE_ASSERT(target != NULL); 
 
16997     PreprocessingInfo::DirectiveType mytype = PreprocessingInfo::CpreprocessorIfDeclaration;
 
17000     printf (
"Warning: attachArbitraryText(): attaching arbitrary text to the AST as a #if declaration: text = %s \n",text.c_str());
 
17002     result = 
new PreprocessingInfo (mytype,text, 
"transformation-generated", 0, 0, 0, position);
 
17003     ROSE_ASSERT(result);
 
17010     target->addToAttachedPreprocessingInfo(result);
 
 
17024  ROSE_ASSERT(target != NULL);
 
17025  AttachedPreprocessingInfoType *info=  target->getAttachedPreprocessingInfo ();
 
17026  if (info == NULL) 
return;
 
17027  AttachedPreprocessingInfoType::iterator j;
 
17028  for (j = info->begin (); j != info->end (); j++)
 
17030    if ((*j)->getTypeOfDirective()==PreprocessingInfo::CMacroCall)
 
17032#ifndef ROSE_SKIP_COMPILATION_OF_WAVE 
17034      std::ostringstream os;
 
17035      token_container tc = (*j)->get_macro_call()->expanded_macro;
 
17036      token_container::const_iterator iter;
 
17037      for (iter=tc.begin(); iter!=tc.end(); iter++)
 
17038        os<<(*iter).get_value();
 
17041      string pragmaText = target->get_pragma()->get_pragma();
 
17042      string targetString = (*j)->getString();
 
17043      string replacement = os.str();
 
17045      size_t pos1 = pragmaText.find(targetString);
 
17046      while (pos1 != string::npos)
 
17048        pragmaText.replace(pos1, targetString.size(), replacement);
 
17049        pos1 = pragmaText.find(targetString);
 
17051       delete target->get_pragma();
 
 
17065  if (isSgWhileStmt(loopOrSwitch) || isSgDoWhileStmt(loopOrSwitch) ||
 
17066      isSgForStatement(loopOrSwitch)) {
 
17068  } 
else if (isSgSwitchStatement(loopOrSwitch)) {
 
17069    body = isSgSwitchStatement(loopOrSwitch)->
get_body();
 
17071  ROSE_ASSERT (body);
 
17073  if (!breaks.empty()) {
 
17074    static int breakLabelCounter = 0;
 
17079                          isSgScopeStatement(loopOrSwitch->
get_parent()));
 
17081    for (
size_t j = 0; j < breaks.size(); ++j) {
 
17086        newGoto->
set_parent(breaks[j]->get_parent());
 
 
17093    ROSE_ASSERT(node!=NULL);
 
 
17103    ROSE_ASSERT(node!=NULL);
 
 
17116     ROSE_ASSERT(stmt_src != NULL);
 
17117     ROSE_ASSERT(stmt_dst != NULL);
 
17120     if (infoList == NULL)
 
17123          printf (
"In SageInterface::movePreprocessingInfo(): infoList == NULL: exiting movePreprocessingInfo() \n");
 
17128     AttachedPreprocessingInfoType* infoToRemoveList = 
new AttachedPreprocessingInfoType();
 
17131     printf (
"In SageInterface::movePreprocessingInfo(): \n");
 
17132     printf (
"   --- stmt_src = %p = %s src_position = %d \n",stmt_src,stmt_src->
class_name().c_str(),src_position);
 
17134     if (src_declarationStatement != NULL)
 
17137          printf (
"src_declarationStatement->get_definingDeclaration()         = %p \n",src_declarationStatement->
get_definingDeclaration());
 
17139     printf (
"   --- stmt_dst = %p = %s dst_position = %d \n",stmt_dst,stmt_dst->
class_name().c_str(),dst_position);
 
17141     if (dst_declarationStatement != NULL)
 
17144          printf (
"dst_declarationStatement->get_definingDeclaration()         = %p \n",dst_declarationStatement->
get_definingDeclaration());
 
17146     printf (
"   --- src_position                    = %s \n",PreprocessingInfo::relativePositionName(src_position).c_str());
 
17147     printf (
"   --- dst_position                    = %s \n",PreprocessingInfo::relativePositionName(dst_position).c_str());
 
17148     printf (
"   --- usePrepend                      = %s \n",usePrepend ? 
"true" : 
"false");
 
17150     printf (
"   --- infoList                        = %p \n",infoList);
 
17151     printf (
"   --- infoToRemoveList                = %p \n",infoToRemoveList);
 
17154     printf (
"   --- dst_infoList                    = %p \n",dst_infoList);
 
17157     printf (
"****************************************************************** \n");
 
17158     printf (
"In SageInterface::movePreprocessingInfo(): Attached comments and CPP directives: stmt_src \n");
 
17160     printf (
"In SageInterface::movePreprocessingInfo(): Attached comments and CPP directives: stmt_dst \n");
 
17162     printf (
"****************************************************************** \n");
 
17172     printf (
"   --- infoList->size()                = %zu \n",infoList->size());
 
17173     printf (
"   --- infoToRemoveList->size()        = %zu \n",infoToRemoveList->size());
 
17179     for (Rose_STL_Container<PreprocessingInfo*>::iterator i = (*infoList).begin(); i != (*infoList).end(); i++)
 
17182          ROSE_ASSERT(*i != NULL);
 
17187          ROSE_ASSERT(info != NULL);
 
17190          printf (
"counter = %d Processing PreprocessingInfo = %s \n",counter,info->getString().c_str());
 
17199     for (Rose_STL_Container<PreprocessingInfo*>::iterator i = (*infoList).begin(); i != (*infoList).end(); i++)
 
17201          ROSE_ASSERT(*i != NULL);
 
17204          ROSE_ASSERT(info != NULL);
 
17207               (info->getTypeOfDirective()==PreprocessingInfo::C_StyleComment)||
 
17208               (info->getTypeOfDirective()==PreprocessingInfo::CplusplusStyleComment)||
 
17209               (info->getTypeOfDirective()==PreprocessingInfo::FortranStyleComment)||
 
17210               (info->getTypeOfDirective()==PreprocessingInfo::F90StyleComment)||
 
17211               (info->getTypeOfDirective()==PreprocessingInfo::CpreprocessorIncludeDeclaration )||
 
17212               (info->getTypeOfDirective()==PreprocessingInfo::CpreprocessorIncludeNextDeclaration )||
 
17213               (info->getTypeOfDirective()==PreprocessingInfo::CpreprocessorDefineDeclaration )||
 
17214               (info->getTypeOfDirective()==PreprocessingInfo::CpreprocessorUndefDeclaration)||
 
17215               (info->getTypeOfDirective()==PreprocessingInfo::CpreprocessorIfdefDeclaration )||
 
17216               (info->getTypeOfDirective()==PreprocessingInfo::CpreprocessorIfndefDeclaration )||
 
17217               (info->getTypeOfDirective()==PreprocessingInfo::CpreprocessorIfDeclaration )||
 
17218               (info->getTypeOfDirective()==PreprocessingInfo::CpreprocessorDeadIfDeclaration )||
 
17219               (info->getTypeOfDirective()==PreprocessingInfo::CpreprocessorElseDeclaration )||
 
17220               (info->getTypeOfDirective()==PreprocessingInfo::CpreprocessorElifDeclaration )||
 
17221               (info->getTypeOfDirective()==PreprocessingInfo::CpreprocessorEndifDeclaration ) ||
 
17222               (info->getTypeOfDirective()==PreprocessingInfo::CpreprocessorEnd_ifDeclaration ) ||
 
17223               (info->getTypeOfDirective()==PreprocessingInfo::CpreprocessorLineDeclaration) ||
 
17224               (info->getTypeOfDirective()==PreprocessingInfo::CpreprocessorErrorDeclaration) ||
 
17225               (info->getTypeOfDirective()==PreprocessingInfo::CpreprocessorWarningDeclaration) ||
 
17227               (info->getTypeOfDirective()==PreprocessingInfo::ClinkageSpecificationStart) ||
 
17228               (info->getTypeOfDirective()==PreprocessingInfo::ClinkageSpecificationEnd)
 
17233               if ( src_position == PreprocessingInfo::undef || info->getRelativePosition() == src_position)
 
17235                    if (usePrepend == 
true)
 
17238                         if (prevItem == NULL)
 
17256                    info->setAsTransformation();
 
17264                    stmt_dst->set_containsTransformationToSurroundingWhitespace(
true);
 
17265                    if (isMarkedAsModified == 
false)
 
17272                    (*infoToRemoveList).push_back(*i);
 
17276               if (dst_position != PreprocessingInfo::undef)
 
17278                    info->setRelativePosition(dst_position);
 
17284     AttachedPreprocessingInfoType::iterator j;
 
17285     for (j = (*infoToRemoveList).begin(); j != (*infoToRemoveList).end(); j++)
 
17287          infoList->erase( find(infoList->begin(),infoList->end(),*j) );
 
 
17323  return info && (info->getRelativePosition () != pos);
 
17333  return info && !isNotRelPos (info, pos);
 
17340  ASSERT_not_null(src_node);
 
17343  AttachedPreprocessingInfoType* info = src_node->get_attachedPreprocessingInfoPtr();
 
17347    remove_copy_if(info->begin(),
 
17349                   back_inserter(save_buf),
 
17350                   [pos](
auto x) { 
return !isRelPos(x, pos); }
 
17354    AttachedPreprocessingInfoType::iterator
 
17355    new_end = remove_if(info->begin(),
 
17357                        [pos](
auto x) { return isRelPos(x, pos); }
 
17359    info->erase(new_end, info->end());
 
 
17363static AttachedPreprocessingInfoType *
 
17367  AttachedPreprocessingInfoType* info_list = s->get_attachedPreprocessingInfoPtr ();
 
17370    info_list = 
new AttachedPreprocessingInfoType;
 
17371    ROSE_ASSERT (info_list);
 
17372    s->set_attachedPreprocessingInfoPtr (info_list);
 
17376  ROSE_ASSERT (info_list);
 
17383  if (save_buf.size()==0) 
return;
 
17385  AttachedPreprocessingInfoType* info = createInfoList (dst_node);
 
17386  ROSE_ASSERT (info);
 
17393  if (pos==PreprocessingInfo::before)
 
17395    for(AttachedPreprocessingInfoType::reverse_iterator i=save_buf.rbegin();i!=save_buf.rend();i++)
 
17396      info->insert(info->begin(),*i);
 
17399  else if (pos==PreprocessingInfo::after)
 
17400    copy (save_buf.begin (), save_buf.end (), back_inserter (*info));
 
17401  else if (pos==PreprocessingInfo::inside)
 
17403    copy (save_buf.begin (), save_buf.end (), back_inserter (*info));
 
17404    cerr<<
"SageInterface::pastePreprocessingInfo() pos==PreprocessingInfo::inside is not supported."<<endl;
 
17405    save_buf[0]->display(
"ttt");
 
 
17411  ROSE_ASSERT(locatedNode != NULL);
 
17412  AttachedPreprocessingInfoType *comments =
 
17415  if (comments != NULL)
 
17417    printf (
"-----------------------------------------------\n");
 
17418    printf (
"Found an IR node (at %p of type: %s) in file %s \n",
 
17419        locatedNode, locatedNode->
class_name ().c_str (),
 
17420        (locatedNode->
get_file_info ()->get_filenameString ()).c_str ());
 
17422    AttachedPreprocessingInfoType::iterator i;
 
17423    for (i = comments->begin (); i != comments->end (); i++)
 
17426        (
"with attached preprocessingInfo numbering #%d :------------- \nclassification= %s:\nString format:%s\n",
 
17428         PreprocessingInfo::directiveTypeName ((*i)->getTypeOfDirective ()).
 
17429         c_str (), (*i)->getString ().c_str ());
 
17430      if ((*i)->getRelativePosition () == PreprocessingInfo::inside)
 
17431        printf (
"relative position is: inside\n");
 
17433        printf (
"relative position is: %s\n", \
 
17434            ((*i)->getRelativePosition () == PreprocessingInfo::before) ? 
"before" : 
"after");
 
17439    printf (
"No attached preprocessing info. (at %p of type: %s): \n", locatedNode,
 
 
17455template <
class ParentNode>
 
17465  if (basicblock == NULL) {
 
17467    (stmt.*setter)(basicblock);
 
17471  ROSE_ASSERT (basicblock != NULL);
 
17478  if (!isSgBasicBlock(b)) {
 
17486  ROSE_ASSERT (isSgBasicBlock(b));
 
17487  return isSgBasicBlock(b);
 
 
17493  if (!isSgBasicBlock(b)) {
 
17501  ROSE_ASSERT (isSgBasicBlock(b));
 
17502  return isSgBasicBlock(b);
 
 
17508  if (!isSgBasicBlock(b)) {
 
17516  ROSE_ASSERT (isSgBasicBlock(b));
 
17517  return isSgBasicBlock(b);
 
 
17522  ROSE_ASSERT (fs != NULL);
 
17524  return ensureBasicBlock_aux(*fs, &SgUpcForAllStatement::get_loop_body, &SgUpcForAllStatement::set_loop_body);
 
 
17529    if (!isSgBasicBlock(b)) {
 
17537    ROSE_ASSERT (isSgBasicBlock(b));
 
17538    return isSgBasicBlock(b);
 
 
17543    if (!isSgBasicBlock(b)) {
 
17551    ROSE_ASSERT (isSgBasicBlock(b));
 
17552    return isSgBasicBlock(b);
 
 
17557    if (!isSgBasicBlock(b)) {
 
17565    ROSE_ASSERT (isSgBasicBlock(b));
 
17566    return isSgBasicBlock(b);
 
 
17571    if (!isSgBasicBlock(b)) {
 
17579      printf (
"In SageInterface::ensureBasicBlockAsTrueBodyOfIf(): Added SgBasicBlock b = %p to addedBasicBlockNodes.size() = %zu \n",b,addedBasicBlockNodes.size());
 
17582    ROSE_ASSERT (isSgBasicBlock(b));
 
17583    return isSgBasicBlock(b);
 
 
17593     ROSE_ASSERT(bb != NULL);
 
17594     addedBasicBlockNodes.push_back(bb);
 
17596     printf (
"In SageInterface::recordNormalizations(): Added SgBasicBlock = %p to addedBasicBlockNodes.size() = %zu \n",bb,addedBasicBlockNodes.size());
 
 
17607     printf (
"In SageInterface::cleanupNontransformedBasicBlockNode(): addedBasicBlockNodes.size() = %zu \n",addedBasicBlockNodes.size());
 
17610     for (vector<SgBasicBlock*>::iterator i = addedBasicBlockNodes.begin(); i != addedBasicBlockNodes.end(); i++)
 
17613          ROSE_ASSERT(b != NULL);
 
17617                printf (
"This SgBasicBlock can be denormalized: b = %p \n",b);
 
17620                ROSE_ASSERT(parentOfBlock != NULL);
 
17625                ROSE_ASSERT(s != NULL);
 
17627                switch (parentOfBlock->
variantT())
 
17631                          SgIfStmt* ifStatement = isSgIfStmt(parentOfBlock);
 
17635                               printf (
"Calling set_true_body on ifStatement = %p = %s \n",ifStatement,ifStatement->
class_name().c_str());
 
17640                               printf (
"Calling set_parent on s = %p = %n \n",s,s->
class_name().c_str());
 
17645                               printf (
"DONE: Calling set_parent on s = %p = %n \n",s,s->
class_name().c_str());
 
17654                               printf (
"Calling set_false_body on ifStatement = %p = %s \n",ifStatement,ifStatement->
class_name().c_str());
 
17659                               printf (
"Calling set_parent on s = %p = %n \n",s,s->
class_name().c_str());
 
17664                               printf (
"DONE: Calling set_parent on s = %p = %n \n",s,s->
class_name().c_str());
 
17668                               printf (
"Mark as NOT modified after calling set_false_body on ifStatement = %p = %n \n",ifStatement,ifStatement->
class_name().c_str());
 
17671                               printf (
"Error: case not handled in case V_SgIfStmt: parentOfBlock = %p = %s \n",parentOfBlock,parentOfBlock->
class_name().c_str());
 
17679                     case V_SgWhileStmt:
 
17681                          SgWhileStmt* whileStatement = isSgWhileStmt(parentOfBlock);
 
17682                          if (b == whileStatement->
get_body())
 
17691                     case V_SgSwitchStatement:
 
17694                          if (b == switchStatement->
get_body())
 
17703                     case V_SgForStatement:
 
17715                     case V_SgCaseOptionStmt:
 
17717                          SgCaseOptionStmt* caseOptionStatement = isSgCaseOptionStmt(parentOfBlock);
 
17718                          if (b == caseOptionStatement->
get_body())
 
17727                     case V_SgDefaultOptionStmt:
 
17730                          if (b == defaultOptionStatement->
get_body())
 
17732                               defaultOptionStatement->
set_body(s);
 
17739                     case V_SgDoWhileStmt:
 
17741                          SgDoWhileStmt* doWhileStatement = isSgDoWhileStmt(parentOfBlock);
 
17742                          if (b == doWhileStatement->
get_body())
 
17752                          printf (
"Error: case not handled in switch: parentOfBlock = %p = %s \n",parentOfBlock,parentOfBlock->
class_name().c_str());
 
17758                if (wasPreviouslyModified == 
false)
 
17763                          printf (
"In SageInterface::cleanupNontransformedBasicBlockNode(): parentOfBlock reset to FALSE after IR node member function call (e.g. set_body()): parentOfBlock = %p = %s \n",parentOfBlock,parentOfBlock->
class_name().c_str());
 
17770                printf (
"Exiting as a test! \n");
 
17777     printf (
"Leaving SageInterface::cleanupNontransformedBasicBlockNode(): addedBasicBlockNodes.size() = %zu \n",addedBasicBlockNodes.size());
 
 
17785    if (!createEmptyBody && (b == NULL || isSgNullStatement(b)))
 
17787    if (!isSgBasicBlock(b)) {
 
17795    ROSE_ASSERT (isSgBasicBlock(b));
 
17796    return isSgBasicBlock(b);
 
 
17801    if (!isSgBasicBlock(b)) {
 
17806    ROSE_ASSERT (isSgBasicBlock(b));
 
17807    return isSgBasicBlock(b);
 
 
17813  if (!isSgBasicBlock(b)) {
 
17818  ROSE_ASSERT (isSgBasicBlock(b));
 
17819  return isSgBasicBlock(b);
 
 
17831    case V_SgForStatement:
 
17833        if (isSgForStatement(p)->get_loop_body() == s)
 
17837    case V_SgUpcForAllStatement: 
 
17840        if (upcforall.get_loop_body() == s)
 
17844    case V_SgWhileStmt:
 
17846        if (isSgWhileStmt(p)->get_body() == s)
 
17850    case V_SgDoWhileStmt:
 
17852        if (isSgDoWhileStmt(p)->get_body() == s)
 
17856    case V_SgSwitchStatement:
 
17858        if (isSgSwitchStatement(p)->get_body() == s)
 
17862    case V_SgCaseOptionStmt:
 
17864          if (isSgCaseOptionStmt(p)->get_body() == s)
 
17868    case V_SgDefaultOptionStmt:
 
17870          if (isSgDefaultOptionStmt(p)->get_body() == s)
 
17874    case V_SgCatchOptionStmt:
 
17876        if (isSgCatchOptionStmt(p)->get_body() == s)
 
17882        if (isSgIfStmt(p)->get_true_body() == s)
 
17884        else if (isSgIfStmt(p)->get_false_body() == s)
 
17890        if (isSgOmpBodyStatement(p))
 
 
17902  ROSE_ASSERT (singleStmt != NULL); 
 
17903  ROSE_ASSERT (isSgBasicBlock(singleStmt) == NULL); 
 
17915    case V_SgForStatement:
 
17917        if (isSgForStatement(p)->get_loop_body() == s)
 
17921    case V_SgUpcForAllStatement: 
 
17925        if (upcforall.get_loop_body() == s)
 
17929    case V_SgWhileStmt:
 
17931        if (isSgWhileStmt(p)->get_body() == s)
 
17935    case V_SgDoWhileStmt:
 
17937        if (isSgDoWhileStmt(p)->get_body() == s)
 
17941    case V_SgSwitchStatement:
 
17943        if (isSgSwitchStatement(p)->get_body() == s)
 
17947    case V_SgCaseOptionStmt:
 
17949          if (isSgCaseOptionStmt(p)->get_body() == s)
 
17953    case V_SgDefaultOptionStmt:
 
17955          if (isSgDefaultOptionStmt(p)->get_body() == s)
 
17959    case V_SgCatchOptionStmt:
 
17961        if (isSgCatchOptionStmt(p)->get_body() == s)
 
17967        if (isSgIfStmt(p)->get_true_body() == s)
 
17969        else if (isSgIfStmt(p)->get_false_body() == s)
 
17975        if (isSgOmpBodyStatement(p))
 
17982  ROSE_ASSERT (rt != NULL); 
 
 
17996                case V_SgBasicBlock: 
return isSgBasicBlock(p);
 
17997                case V_SgForStatement:
 
17999                        if (isSgForStatement(p)->get_loop_body() == s)
 
18001                        else if (isSgForStatement(p)->get_test() == s)
 
18004                        else if (isSgForStatement(p)->get_for_init_stmt() == s)
 
18010                case V_SgUpcForAllStatement: 
 
18014                  if (upcforall.get_loop_body() == s)
 
18017                  ROSE_ASSERT(  (s == upcforall.get_for_init_stmt())
 
18018                      || (s == upcforall.get_test())
 
18022                case V_SgWhileStmt:
 
18024                        if (isSgWhileStmt(p)->get_body() == s)
 
18026                        else if (isSgWhileStmt(p)->get_condition() == s)
 
18032                case V_SgDoWhileStmt:
 
18034                        if (isSgDoWhileStmt(p)->get_body() == s)
 
18036                        else if (isSgDoWhileStmt(p)->get_condition() == s)
 
18042                case V_SgSwitchStatement:
 
18044                        if (isSgSwitchStatement(p)->get_body() == s)
 
18046                        else if (isSgSwitchStatement(p)->get_item_selector() == s)
 
18052                case V_SgCatchOptionStmt:
 
18054                        if (isSgCatchOptionStmt(p)->get_body() == s)
 
18056                        else if (isSgCatchOptionStmt(p)->get_condition() == s)
 
18064                        if (isSgIfStmt(p)->get_true_body() == s)
 
18066                        else if (isSgIfStmt(p)->get_false_body() == s)
 
18068                        else if (isSgIfStmt(p)->get_conditional() == s)
 
18076                        if (isSgOmpBodyStatement(p))
 
18091  void SageInterface::changeAllLoopBodiesToBlocks(
SgNode* top) {
 
18092    cerr<<
"Warning: SageInterface::changeAllLoopBodiesToBlocks() is being replaced by SageInterface::changeAllBodiesToBlocks()."<<endl;
 
18093    cerr<<
"Please use SageInterface::changeAllBodiesToBlocks() if you can."<<endl;
 
18101      bool allowEmptyBody;
 
18102      Visitor (
bool flag):allowEmptyBody(flag) {}
 
18103      virtual void visit(
SgNode* n) {
 
18108          case V_SgForStatement: {
 
18112          case V_SgWhileStmt: {
 
18116          case V_SgDoWhileStmt: {
 
18120          case V_SgSwitchStatement: {
 
18129            printf (
"In changeAllBodiesToBlocks(): case SgIfStmt: n->get_isModified() = %s \n",n->
get_isModified() ? 
"true" : 
"false");
 
18136                 printf (
"In changeAllBodiesToBlocks(): AFTER RESET: case SgIfStmt: n->get_isModified() = %s \n",n->
get_isModified() ? 
"true" : 
"false");
 
18141          case V_SgCatchOptionStmt: {
 
18145          case V_SgUpcForAllStatement: {
 
18152              if (isSgOmpBodyStatement(n))
 
18159     if (wasPreviouslyModified == 
false)
 
18164               printf (
"In SageInterface::changeAllBodiesToBlocks(): parentOfBlock reset to FALSE after IR node member function call (e.g. set_body()): parentOfBlock = %p = %s \n",n,n->
class_name().c_str());
 
18173    Visitor(createEmptyBody).traverse(top, postorder);
 
 
18194#ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT 
18195     SgStatement*           enclosingStatement      = getStatementOfExpression(from);
 
18196     SgExprStatement*       exprStatement           = isSgExprStatement(enclosingStatement);
 
18198     SgForStatement*        forStatement            = isSgForStatement(enclosingStatement);
 
18199     SgReturnStmt*          returnStatement         = isSgReturnStmt(enclosingStatement);
 
18205     ROSE_ASSERT (exprStatement || forStatement || returnStatement || varDeclarationStatement);
 
18207     if (varDeclarationStatement)
 
18214          ROSE_ASSERT (root);
 
18217               if (forStatement && forStatement->get_increment() == root)
 
18228                    forStatement->get_increment()->
set_parent(incrStmt);
 
18232                    forStatement->set_increment(ne);
 
18239                    assert (enclosingStmtParent);
 
18240                    SgWhileStmt* whileStatement = isSgWhileStmt(enclosingStmtParent);
 
18241                    SgDoWhileStmt* doWhileStatement = isSgDoWhileStmt(enclosingStmtParent);
 
18242                    SgIfStmt* ifStatement = isSgIfStmt(enclosingStmtParent);
 
18244                    SgForStatement* enclosingForStatement = isSgForStatement(enclosingStmtParent);
 
18245                  if (enclosingForStatement && enclosingForStatement->get_test() == exprStatement)
 
18257                       pushTestIntoBody(enclosingForStatement);
 
18260                  else if (whileStatement && whileStatement->
get_condition() == exprStatement)
 
18273                       pushTestIntoBody(whileStatement);
 
18277                  else if (doWhileStatement && doWhileStatement->
get_condition() == exprStatement)
 
18293                      myStatementInsert(doWhileStatement, new_statement, 
false);
 
18295                      SgName varname = 
"rose__temp1"; 
 
18300                        varname, 
buildBoolType(), assignInitializer, new_statement);
 
18303                      initname->set_scope(new_statement);
 
18335                  else if (ifStatement && ifStatement->
get_conditional() == exprStatement)
 
18341                      myStatementInsert(ifStatement, new_statement, 
false);
 
18343                      SgName varname = 
"rose__temp2"; 
 
18352                      initname->set_scope(new_statement);
 
18377                  else if (switchStatement && switchStatement->
get_item_selector() == exprStatement)
 
18379                      SgExpression* switchCond = exprStatement->get_expression();
 
18380                      ROSE_ASSERT (switchCond);
 
18385                      myStatementInsert(switchStatement, new_statement, 
false);
 
18387                      SgName varname = 
"rose__temp3"; 
 
 
18434#ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT 
18435     SgStatement* stmt = getStatementOfExpression(from);
 
18437     if (isSgExprStatement(stmt))
 
18451               if (isSgAssignOp(top) && isSgAssignOp(top)->get_rhs_operand() == from)
 
18469     convertInitializerIntoAssignment(init);
 
18472     SgExprStatement* new_stmt = isSgExprStatement(getStatementOfExpression(from));
 
18473     assert (new_stmt != NULL); 
 
18474     replaceAssignmentStmtWithStatement(new_stmt, to);
 
 
18491    ROSE_ASSERT(func&&s);
 
18493    Rose_STL_Container <SgNode* > stmts = NodeQuery::querySubTree(func, V_SgReturnStmt);
 
18495    Rose_STL_Container<SgNode*>::iterator i;
 
18496    for (i=stmts.begin();i!=stmts.end();i++)
 
18499      ROSE_ASSERT(cur_stmt);
 
18502      bool needRewrite = (exp != NULL) && !(isSgValueExp(exp));
 
18513    if (stmts.size()==0 ) 
 
18518         cout<<
"In instrumentEndOfFunction(), found an empty function body.! "<<endl;
 
 
18530    return ((stmt->get_declarationModifier()).get_storageModifier()).isStatic();
 
 
18537    return ((stmt->get_declarationModifier()).get_storageModifier()).setStatic();
 
 
18543    return ((stmt->get_declarationModifier()).get_storageModifier()).isExtern();
 
 
18551    return ((stmt->get_declarationModifier()).get_storageModifier()).setExtern();
 
 
18558    return name->get_storageModifier().isMutable();
 
 
18571    std::vector<SgInitializedName*> in_params;
 
 
18583    std::vector<SgInitializedName*> out_params;
 
 
18593      case V_SgCharVal: 
return (
long long)(isSgCharVal(expr)->get_value());
 
18594      case V_SgSignedCharVal: 
return (
long long)(isSgSignedCharVal(expr)->get_value());
 
18595      case V_SgUnsignedCharVal: 
return isSgUnsignedCharVal(expr)->get_value();
 
18596      case V_SgShortVal: 
return (
long long)(isSgShortVal(expr)->get_value());
 
18597      case V_SgUnsignedShortVal: 
return isSgUnsignedShortVal(expr)->get_value();
 
18598      case V_SgIntVal: 
return (
long long)(isSgIntVal(expr)->get_value());
 
18599      case V_SgUnsignedIntVal: 
return isSgUnsignedIntVal(expr)->get_value();
 
18600      case V_SgLongIntVal: 
return (
long long)(isSgLongIntVal(expr)->get_value());
 
18601      case V_SgUnsignedLongVal: 
return isSgUnsignedLongVal(expr)->get_value();
 
18602      case V_SgLongLongIntVal: 
return isSgLongLongIntVal(expr)->get_value();
 
18603      case V_SgUnsignedLongLongIntVal: 
return isSgUnsignedLongLongIntVal(expr)->get_value();
 
18604      case V_SgBoolValExp: 
return (
long long )(isSgBoolValExp(expr)->get_value());
 
18610           printf (
"ERROR: In SageInterface::getIntegerConstantValue(): default reached: expr = %p = %s \n",expr,expr->
class_name().c_str());
 
18611           ROSE_ASSERT (
false);
 
18616    ROSE_ASSERT (!
"Bad kind return in getIntegerConstantValue");
 
 
18621#ifdef ROSE_ENABLE_BINARY_ANALYSIS 
18630    ROSE_ASSERT(binary!=NULL);
 
18635    if (1==headers.size()) {
 
18636        requisite_header = headers[0];
 
18638        for (SgAsmGenericHeaderPtrList::const_iterator hi=headers.begin(); hi!=headers.end(); ++hi) {
 
18639            if (isSgAsmPEFileHeader(*hi)) {
 
18640                requisite_header = isSgAsmPEFileHeader(*hi);
 
18645    ROSE_ASSERT(requisite_header!=NULL);
 
18648    const SgAsmInterpretationPtrList &interps = binary->get_interpretations()->
get_interpretations();
 
18649    for (SgAsmInterpretationPtrList::const_iterator ii=interps.begin(); ii!=interps.end(); ++ii) {
 
18650        const SgAsmGenericHeaderPtrList &headers = (*ii)->get_headers()->get_headers();
 
18651        for (SgAsmGenericHeaderPtrList::const_iterator hi=headers.begin(); hi!=headers.end(); ++hi) {
 
18652            if ((*hi)==requisite_header)
 
18657    ROSE_ASSERT(!
"no appropriate interpretation");
 
18670               SgNode* copy = n->copy(*
this);
 
18674               if (fileInfo != NULL)
 
18683   } collectDependentDeclarationsCopyType;
 
 
18691          vector<PreprocessingInfo*> cppDirectiveList;
 
18693          void visit(
SgNode *astNode);
 
 
18701     if (locatedNode != NULL)
 
18705          if (comments != NULL)
 
18708               printf (
"Found attached comments (at %p of type: %s): \n",locatedNode,locatedNode->
sage_class_name());
 
18710               AttachedPreprocessingInfoType::iterator i;
 
18711               for (i = comments->begin(); i != comments->end(); i++)
 
18713                    ROSE_ASSERT ( (*i) != NULL );
 
18715                    printf (
"          Attached Comment (relativePosition=%s): %s\n",
 
18716                         ((*i)->getRelativePosition() == PreprocessingInfo::before) ? 
"before" : 
"after",
 
18717                         (*i)->getString().c_str());
 
18718                    printf (
"Comment/Directive getNumberOfLines = %d getColumnNumberOfEndOfString = %d \n",(*i)->getNumberOfLines(),(*i)->getColumnNumberOfEndOfString());
 
18719                    (*i)->get_file_info()->display(
"comment/directive location");
 
18727                         cppDirectiveList.push_back(*i);
 
18729                         printf (
"          Attached include directive (relativePosition=%s): %s\n",
 
18730                              ((*i)->getRelativePosition() == PreprocessingInfo::before) ? 
"before" : 
"after",
 
18731                              (*i)->getString().c_str());
 
18739               printf (
"No attached comments (at %p of type: %s): \n",locatedNode,locatedNode->
sage_class_name());
 
 
18750vector<PreprocessingInfo*>
 
18757     return t.cppDirectiveList;
 
18761vector<PreprocessingInfo*>
 
18768     return t.cppDirectiveList;
 
18773outputPreprocessingInfoList ( 
const vector<PreprocessingInfo*> & l )
 
18777     vector<PreprocessingInfo*>::const_iterator i = l.begin();
 
18778     while ( i != l.end() )
 
18780          printf (
"          Attached include directive (relativePosition=%s): %s\n",
 
18781             ((*i)->getRelativePosition() == PreprocessingInfo::before) ? 
"before" : 
"after",
 
18782             (*i)->getString().c_str());
 
18797          case V_SgNamespaceDefinitionStatement:
 
18800               declaration = namespaceDefinition->get_namespaceDeclaration();
 
18804          case V_SgClassDefinition:
 
18805          case V_SgTemplateInstantiationDefn: 
 
18814               printf (
"Error: default reached in getAssociatedDeclaration(): scope = %p = %s \n",scope,scope->
class_name().c_str());
 
18820     ROSE_ASSERT(declaration != NULL);
 
18822     return declaration;
 
18831          vector<SgDeclarationStatement*> declarationList;
 
18835          vector<SgSymbol*> symbolList;
 
18838          set<SgDeclarationStatement*> alreadySavedDeclarations;
 
18841          void visit(
SgNode *astNode);
 
 
18857     ROSE_ASSERT(scope != NULL);
 
18862     SgGlobal* globalScope = isSgGlobal(scope);
 
18863     if (globalScope == NULL)
 
18870          ROSE_ASSERT(parentScope != NULL);
 
18871          while (globalScope == NULL)
 
18873               associatedDeclaration = getAssociatedDeclaration(parentScope);
 
18874               ROSE_ASSERT(associatedDeclaration != NULL);
 
18876               parentScope = parentScope->
get_scope();
 
18877               globalScope = isSgGlobal(parentScope);
 
18883     return returnDeclaration;
 
18889outputDeclarationList ( 
const vector<SgDeclarationStatement*> & l )
 
18894     vector<SgDeclarationStatement*>::const_iterator i = l.begin();
 
18895     while ( i != l.end() )
 
18897          printf (
"In outputDeclarationList(): list[%d] = %p = %s = %s \n",counter++,*i,(*i)->class_name().c_str(),
SageInterface::get_name(*i).c_str());
 
18905     if (declaration != NULL)
 
18914          if (alreadySavedDeclarations.find(dependentDeclaration) == alreadySavedDeclarations.end())
 
18917               printf (
"In CollectDependentDeclarationsTraversal::visit(): selected dependentDeclaration = %p = %s = %s \n",
 
18921               declarationList.push_back(dependentDeclaration);
 
18924               alreadySavedDeclarations.insert(dependentDeclaration);
 
18926               printf (
"In CollectDependentDeclarationsTraversal::visit(): astNode = %p = %s = %s \n",astNode,astNode->
class_name().c_str(),
SageInterface::get_name(astNode).c_str());
 
18927               printf (
"############### ADDING dependentDeclaration = %p = %s to alreadySavedDeclarations set (size = %" PRIuPTR 
") \n",
 
18928                    dependentDeclaration,dependentDeclaration->
class_name().c_str(),alreadySavedDeclarations.size());
 
18936               printf (
"In CollectDependentDeclarationsTraversal::visit(): astNode = %p = %s = %s \n",astNode,astNode->
class_name().c_str(),
SageInterface::get_name(astNode).c_str());
 
18937               printf (
"############### EXISTING dependentDeclaration = %p = %s found in alreadySavedDeclarations set (size = %" PRIuPTR 
") \n",
 
18938                    dependentDeclaration,dependentDeclaration->
class_name().c_str(),alreadySavedDeclarations.size());
 
18945static std::vector<SgTypedefDeclaration*> collectTypedefDeclarations(
SgType* type)
 
18947  ROSE_ASSERT(type != NULL);
 
18948  std::vector<SgTypedefDeclaration*> result;
 
18949  SgType* currentType = type;
 
18959    modType = isSgModifierType(currentType);
 
18962      currentType = modType->get_base_type();
 
18966      refType = isSgReferenceType(currentType);
 
18969        currentType = refType->get_base_type();
 
18973         pointType = isSgPointerType(currentType);
 
18976          currentType = pointType->get_base_type();
 
18980          arrayType = isSgArrayType(currentType);
 
18983            currentType = arrayType->get_base_type();
 
18987            typedefType = isSgTypedefType(currentType);
 
18998              result.push_back(decl);
 
19012  if (result.size()>0)
 
19014    cout<<
"------------Found a chain of typedef decls: count="<<result.size()<<endl;
 
19015    for (vector <SgTypedefDeclaration*>::const_iterator iter = result.begin();
 
19016          iter!=result.end(); iter ++)
 
19043     if (fileInfo != NULL && fileInfo->isFrontendSpecific() == 
false && (isSgStatement(astNode) != NULL) )
 
19045          printf (
"\n\nIn CollectDependentDeclarationsTraversal::visit(): astNode = %p = %s = %s \n",astNode,astNode->
class_name().c_str(),
SageInterface::get_name(astNode).c_str());
 
19048          printf (
"alreadySavedDeclarations.size() = %" PRIuPTR 
" \n",alreadySavedDeclarations.size());
 
19049          for (set<SgDeclarationStatement*>::iterator i = alreadySavedDeclarations.begin(); i != alreadySavedDeclarations.end(); i++)
 
19051               printf (
"alreadySavedDeclarations %d: %p = %s \n",counter++,*i,(*i)->class_name().c_str());
 
19062     if (initializedname != NULL)
 
19064       SgType* type = initializedname->get_type();
 
19067       std::vector <SgTypedefDeclaration*> typedefVec = collectTypedefDeclarations(type);
 
19068        for (std::vector <SgTypedefDeclaration*>::const_iterator iter =typedefVec.begin();
 
19069                iter != typedefVec.end(); iter++)
 
19072         addDeclaration(typedef_decl);
 
19096       SgNamedType* namedType = isSgNamedType(strippedType);
 
19097       if (namedType != NULL)
 
19105         if (classDeclaration != NULL)
 
19112           if (declaration != NULL)
 
19115             addDeclaration(declaration);
 
19118             addDeclaration (classDeclaration); 
 
19129           ROSE_ASSERT(classSymbol != NULL);
 
19132           symbolList.push_back(classSymbol);
 
19137         if (enum_decl != NULL)
 
19140           ROSE_ASSERT(declaration != NULL);
 
19141           addDeclaration(declaration);
 
19146           ROSE_ASSERT(esymbol!= NULL);
 
19147           symbolList.push_back(esymbol);
 
19151       printf (
"Found reference to type = %p = %s strippedType = %p = %s \n",type,type->
class_name().c_str(),strippedType,strippedType->
class_name().c_str());
 
19158     if (functionCallExp != NULL)
 
19163          if (declaration != NULL)
 
19164            addDeclaration(declaration);
 
19171          if (functionSymbol)
 
19172            symbolList.push_back(functionSymbol);
 
19177    SgEnumVal * eval = isSgEnumVal(astNode);
 
19180      declaration = eval->get_declaration();
 
19181      ROSE_ASSERT(declaration != NULL);
 
19182      addDeclaration(declaration);
 
19184      ROSE_ASSERT(symbol != NULL);
 
19185      symbolList.push_back(symbol);
 
 
19190static std::map<const SgStatement*, bool> visitedDeclMap; 
 
19202  printf (
"\n\n********************************************************** \n");
 
19203  printf (
" Inside of getDependentDeclarations(stmt = %p = %s) \n",stmt,stmt->
class_name().c_str());
 
19204  printf (
"********************************************************** \n");
 
19206 visitedDeclMap[stmt]= 
true;
 
19210     declarationList = t.declarationList;
 
19211     symbolList      = t.symbolList;
 
19214  copy(t.declarationList.begin(),t.declarationList.end(), back_inserter(declarationList));
 
19215  copy(t.symbolList.begin(),t.symbolList.end(), back_inserter(symbolList));
 
19217  sort (declarationList.begin(), declarationList.end());
 
19218  vector<SgDeclarationStatement*>::iterator new_end = unique(declarationList.begin(), declarationList.end());
 
19219  declarationList.erase(new_end, declarationList.end());
 
19221  sort (symbolList.begin(), symbolList.end());
 
19222  vector<SgSymbol*>::iterator end2 = unique(symbolList.begin(), symbolList.end());
 
19223  symbolList.erase(end2, symbolList.end());
 
19227  for (vector<SgDeclarationStatement*>::const_iterator iter = t.declarationList.begin();
 
19228      iter !=t.declarationList.end(); iter++)
 
19231    SgType* base_type = NULL;
 
19236    if (isSgClassDeclaration(decl))
 
19238      base_type =  isSgClassDeclaration(decl)->get_type();
 
19240    if (isSgTypedefDeclaration(decl))
 
19244      base_type = isSgTypedefDeclaration(decl)->get_base_type()->
stripType(SgType::STRIP_POINTER_TYPE|SgType::STRIP_ARRAY_TYPE|SgType::STRIP_REFERENCE_TYPE|SgType::STRIP_RVALUE_REFERENCE_TYPE|SgType::STRIP_MODIFIER_TYPE);
 
19252      if (isSgClassType(base_type))
 
19254        SgClassDeclaration* class_decl = isSgClassDeclaration(isSgClassType(base_type)->get_declaration()->get_definingDeclaration());
 
19255        if (class_decl!=NULL)
 
19257          body_stmt = class_decl->get_definition();
 
19261    if ((body_stmt!=NULL) &&(!visitedDeclMap[body_stmt]))
 
19273vector<SgDeclarationStatement*>
 
19276  vector<SgDeclarationStatement*> sortedNode;
 
19278  if (nodevec.size()==0 )
 
19281  if (nodevec.size() ==1)
 
19285  Rose_STL_Container<SgNode*> queryResult = NodeQuery::querySubTree(project,V_SgDeclarationStatement);
 
19286  for (Rose_STL_Container<SgNode*>::const_iterator iter = queryResult.begin();
 
19287      iter!= queryResult.end(); iter++)
 
19290    SgNode* cur_node = *iter;
 
19292    ROSE_ASSERT(cur_stmt!=NULL);
 
19304        ROSE_ASSERT (cur_stmt != func_decl);
 
19307    vector<SgDeclarationStatement*>::const_iterator i = find (nodevec.begin(), nodevec.end(), cur_stmt);
 
19308    if (i!=nodevec.end())
 
19312      vector<SgDeclarationStatement*>::const_iterator j = find (sortedNode.begin(), sortedNode.end(), *i);
 
19313      if (j == sortedNode.end())
 
19314        sortedNode.push_back(*i);
 
19318  if (nodevec.size() != sortedNode.size())
 
19320    cerr<<
"Fatal error in sortSgNodeListBasedOnAppearanceOrderInSource(): nodevec.size() != sortedNode.size()"<<endl;
 
19321    cerr<<
"nodevec() have "<< nodevec.size()<<
" elements. They are:"<<endl;
 
19322    for (vector<SgDeclarationStatement*>::const_iterator iter = nodevec.begin(); iter != nodevec.end(); iter++)
 
19324      cerr<<(*iter)<<
" "<<(*iter)->class_name() <<
" "<<(*iter)->unparseToString()<<endl;
 
19326    cerr<<
"sortedNode() have " << sortedNode.size() <<
" elements. They are:"<<endl;
 
19327    for (vector<SgDeclarationStatement*>::const_iterator iter = sortedNode.begin(); iter != sortedNode.end(); iter++)
 
19329      cerr<<(*iter)<<
" "<<(*iter)->class_name() <<
" "<<(*iter)->unparseToString()<<endl;
 
19332    ROSE_ASSERT(nodevec.size() == sortedNode.size());
 
 
19339std::vector<SgDeclarationStatement*>
 
19345     printf (
"\n\n********************************************************** \n");
 
19346     printf (
" Inside of getDependentDeclarations(stmt = %p = %s) \n",stmt,stmt->
class_name().c_str());
 
19347     printf (
"********************************************************** \n");
 
19352     return t.declarationList;
 
19355   visitedDeclMap.clear();
 
19356   vector<SgDeclarationStatement*> declarationList;
 
19357   vector<SgSymbol*> symbolList;
 
19361     printf (
"\n\n ********************************************************** \n");
 
19362     cout<<
"Found dependent decl: count="<<declarationList.size()<<endl;
 
19363     for ( vector<SgDeclarationStatement*>::const_iterator iter = declarationList.begin();
 
19364          iter != declarationList.end(); iter++)
 
19366       cout<<
"\t"<<(*iter)->class_name()<<
" at line "<<(*iter)->get_file_info()->get_line()<<endl;
 
19367       if ((*iter)->variantT()== V_SgFunctionDeclaration)
 
19368         cout<<
"func name is:"<<isSgFunctionDeclaration(*iter)->get_name().getString()<<endl;
 
19371     printf (
"\n ********************************************************** \n");
 
19374   return declarationList;
 
 
19383     bool returnValue = 
false;
 
19386     printf (
"In SageInterface::isPrefixOperatorName(): functionName = %s (might have to check the return type to distinguish the deref operator from the multiply operator) \n",functionName.str());
 
19389     if (functionName.is_null() == 
false)
 
19392          if ( functionName == 
"operator++" || functionName == 
"operator--" || functionName == 
"operator&" ||
 
19393               functionName == 
"operator!"  || functionName == 
"operator*"  || functionName == 
"operator+" ||
 
19394               functionName == 
"operator-"  || functionName == 
"operator+"  || functionName == 
"operator~")
 
19396               returnValue = 
true;
 
19400     return returnValue;
 
 
19412     bool returnValue = 
false;
 
19419     size_t numberOfOperands = 0;
 
19421     if (memberFunctionRefExp != NULL)
 
19423          ROSE_ASSERT(functionRefExp == NULL);
 
19425          if (memberFunctionDeclaration != NULL)
 
19427               functionName = memberFunctionDeclaration->get_name();
 
19428               numberOfOperands = memberFunctionDeclaration->get_args().size();
 
19434          if (functionRefExp != NULL)
 
19437               if (functionDeclaration != NULL)
 
19439                    functionName     = functionDeclaration->get_name();
 
19440                    numberOfOperands = functionDeclaration->get_args().size();
 
19446               printf (
"In SageInterface::isPrefixOperator(): unknown case of exp = %p = %s \n",exp,exp->
class_name().c_str());
 
19451     printf (
"In SageInterface::isPrefixOperator(): functionName = %s numberOfOperands = %" PRIuPTR 
" (might have to check the return type to distinguish the deref operator from the multiply operator) \n",functionName.str(),numberOfOperands);
 
19456          if (memberFunctionRefExp != NULL)
 
19459               ROSE_ASSERT(functionRefExp == NULL);
 
19460               if (numberOfOperands == 0)
 
19463                    returnValue = 
true;
 
19468                    returnValue = 
false;
 
19474               ROSE_ASSERT(functionRefExp != NULL);
 
19475               ROSE_ASSERT(memberFunctionRefExp == NULL);
 
19476               if (numberOfOperands == 1)
 
19479                    returnValue = 
true;
 
19484                    ROSE_ASSERT(numberOfOperands == 2);
 
19485                    returnValue = 
false;
 
19491     printf (
"Leaving SageInterface::isPrefixOperator(): returnValue = %s \n",returnValue ? 
"true" : 
"false");
 
19494     return returnValue;
 
 
19510     bool returnValue = 
false;
 
19512     if (memberFunctionRefExp == NULL)
 
19516     if (memberFunctionDeclaration != NULL)
 
19518          SgName functionName = memberFunctionDeclaration->get_name();
 
19519          if ( (functionName == 
"operator[]") && (isSgType(memberFunctionDeclaration->get_type()) != NULL) )
 
19521               returnValue = 
true;
 
19525               if ( (functionName == 
"operator()") && (isSgType(memberFunctionDeclaration->get_type()) != NULL) )
 
19527                    returnValue = 
true;
 
19531                    returnValue = 
false;
 
19536     return returnValue;
 
 
19547     ROSE_ASSERT(scope != NULL);
 
19550     printf (
"In SageInterface::lastStatementOfScopeWithTokenInfo(): scope = %p = %s \n",scope,scope->
class_name().c_str());
 
19553     SgIfStmt* ifStatement = isSgIfStmt(scope);
 
19554     if (ifStatement != NULL)
 
19557          if (lastStatement == NULL || (tokenStreamSequenceMap.find(lastStatement) == tokenStreamSequenceMap.end() || tokenStreamSequenceMap[lastStatement] == NULL))
 
19560               if (lastStatement == NULL || (tokenStreamSequenceMap.find(lastStatement) == tokenStreamSequenceMap.end() || tokenStreamSequenceMap[lastStatement] == NULL))
 
19562                    lastStatement = NULL;
 
19566          printf (
"Note: SgIfStmt scope in SageInterface::lastStatementOfScopeWithTokenInfo(): returning lastStatement = %p \n",lastStatement);
 
19567          if (lastStatement != NULL)
 
19569               printf (
"   --- lastStatement = %p = %s \n",lastStatement,lastStatement->
class_name().c_str());
 
19572          return lastStatement;
 
19576     if (statementList.rbegin() != statementList.rend())
 
19579          SgStatementPtrList::reverse_iterator i = statementList.rbegin();
 
19581          while (i != statementList.rend() && (tokenStreamSequenceMap.find(*i) == tokenStreamSequenceMap.end() || tokenStreamSequenceMap[*i] == NULL) )
 
19586          if (i == statementList.rend())
 
19588               lastStatement = NULL;
 
19592               lastStatement = *i;
 
19596     return lastStatement;
 
 
19610               void visit (
SgNode* node)
 
19620                         printf (
"Found declaration = %p = %s name = %s \n",decl,decl->
class_name().c_str(),
get_name(decl).c_str());
 
19621                         if (decl != definingDeclaration && decl != firstNondefiningDeclaration)
 
19623                              otherDeclaration = decl;
 
19626                         if (definingDeclaration != NULL)
 
19628                              definingDeclaration->get_declarationModifier().get_accessModifier().display(
"definingDeclaration: accessModifier");
 
19631                         if (firstNondefiningDeclaration != NULL)
 
19633                              firstNondefiningDeclaration->get_declarationModifier().get_accessModifier().display(
"firstNondefiningDeclaration: accessModifier");
 
19636                         if (otherDeclaration != NULL)
 
19638                              otherDeclaration->get_declarationModifier().get_accessModifier().display(
"otherDeclaration: accessModifier");
 
19648     DeclarationTraversal traversal;
 
19649     traversal.traverse(astNode, preorder);
 
 
19661               void visit (
SgNode* node)
 
19667                         if (functionDefinition != NULL)
 
19670                              ROSE_ASSERT(functionDeclaration != NULL);
 
19672                              string functionName = functionDeclaration->get_name();
 
19674                              printf (
"functionName = %s \n",functionName.c_str());
 
19676                              if (functionName == 
"main")
 
19680                                   ROSE_ASSERT(functionBody != NULL);
 
19682                                   ROSE_ASSERT(symbolTable != NULL);
 
19685                                   symbolTable->
print();
 
19690                         if (namespaceDefinition != NULL)
 
19693                              ROSE_ASSERT(namespaceDeclaration != NULL);
 
19695                              string namespaceName = namespaceDeclaration->
get_name();
 
19697                              printf (
"namespaceName = %s \n",namespaceName.c_str());
 
19699                              if (namespaceName == 
"B")
 
19702                                   ROSE_ASSERT(symbolTable != NULL);
 
19705                                   symbolTable->
print();
 
19713     ScopeTraversal traversal;
 
19714     traversal.traverse(astNode, preorder);
 
 
19722     if (fileInfo != NULL)
 
19728          if (locatedNode != NULL)
 
19737               printf (
"In markNodeToBeUnparsed(): physical_file_id = %d \n",physical_file_id);
 
19740               locatedNode->
get_file_info()->set_physical_file_id(physical_file_id);
 
19742               printf (
"Note: calling node markTransformationsForOutput(): node = %p = %s \n",node,node->
class_name().c_str());
 
19746               markTransformationsForOutput(node);
 
19751               printf (
"Note: node is not a SgLocatedNode: node = %p = %s \n",node,node->
class_name().c_str());
 
19758          printf (
"Note: no Sg_File_Info was found: node = %p = %s \n",node,node->
class_name().c_str());
 
19763     if (locatedNode != NULL)
 
19772               printf (
"In SageInterface::markNodeToBeUnparsed(): locatedNode = %p = %s calling set_physical_file_id(%d) \n",locatedNode,locatedNode->
class_name().c_str(),physical_file_id);
 
19774               locatedNode->
get_file_info()->set_physical_file_id(physical_file_id);
 
19779               printf (
"Note: no Sg_File_Info was found: node = %p = %s \n",node,node->
class_name().c_str());
 
 
19812     class InheritedAttribute
 
19815               int physical_file_id;
 
19816               bool isCastSubtree;
 
19817               InheritedAttribute(
int file_id): physical_file_id(file_id), isCastSubtree(
false) {}
 
19818               InheritedAttribute(
const InheritedAttribute & X)
 
19820                    isCastSubtree    = X.isCastSubtree;
 
19821                    physical_file_id = X.physical_file_id;
 
19832               InheritedAttribute evaluateInheritedAttribute ( 
SgNode* node, InheritedAttribute inheritedAttribute)
 
19834                    InheritedAttribute returnAttribute(inheritedAttribute);
 
19836                    SgCastExp* castExpression = isSgCastExp(node);
 
19837                    if (castExpression != NULL)
 
19839                         returnAttribute.isCastSubtree = 
true;
 
19842                    if (returnAttribute.isCastSubtree == 
true)
 
19846                         printf (
"In markSubtreeToBeUnparsedTreeTraversal(): subtree of a SgCastExp: node = %p = %s physical_file_id = %d \n",
 
19847                              node,node->
class_name().c_str(),inheritedAttribute.physical_file_id);
 
19853                         printf (
"In markSubtreeToBeUnparsedTreeTraversal(): Calling markNodeToBeUnparsed(): node = %p = %s physical_file_id = %d \n",
 
19854                              node,node->
class_name().c_str(),inheritedAttribute.physical_file_id);
 
19860                    return returnAttribute;
 
19864     InheritedAttribute inheritedAttribute(physical_file_id);
 
19867     SubtreeTraversal traversal;
 
19870     printf (
"\nIn markSubtreeToBeUnparsedTreeTraversal(): calling traverse \n");
 
19873     traversal.traverse(root, inheritedAttribute);
 
19875     printf (
"This function does not compile with GNU 4.9 or older compilers (part of ROSE used only with more modern compilers) \n");
 
 
19884vector<SgDeclarationStatement*>
 
19885generateCopiesOfDependentDeclarations (
const  vector<SgDeclarationStatement*>& dependentDeclarations, 
SgScopeStatement* targetScope)
 
19896     printf (
"\n\n********************************************************** \n");
 
19897     printf (
" Inside of generateCopiesOfDependentDeclarations(stmt = %p = %s) \n",stmt,stmt->
class_name().c_str());
 
19898     printf (
"********************************************************** \n");
 
19901     vector<SgDeclarationStatement*> copiesOfDependentDeclarations;
 
19906     printf (
"Output the dependentDeclarations: dependentDeclarations.size() = %" PRIuPTR 
" \n",dependentDeclarations.size());
 
19907     outputDeclarationList(dependentDeclarations);
 
19910     printf (
"************************************************ \n");
 
19911     printf (
"*** Make all copies of dependentDeclarations *** \n");
 
19912     printf (
"************************************************ \n");
 
19916     ROSE_ASSERT(targetScope != NULL);
 
19919     ROSE_ASSERT(isSgGlobal(targetScope) != NULL);
 
19921     for (vector<SgDeclarationStatement*>::const_iterator i = dependentDeclarations.begin(); i != dependentDeclarations.end(); i++)
 
19924          printf (
"Copying declaration = %p = %s = %s \n",*i,(*i)->class_name().c_str(),
SageInterface::get_name(*i).c_str());
 
19928          SgNode* copy_node = NULL;
 
19933          if (functionDeclaration != NULL)
 
19942                printf (
"WARNING: In SageInterface -- generateCopiesOfDependentDeclarations(): I think this is the wrong lookup symbol function that is being used here! \n");
 
19949               printf (
"In generateCopiesOfDependentDeclarations(): Copy mechanism appied to SgFunctionDeclaration functionDeclaration->get_firstNondefiningDeclaration() = %p \n",functionDeclaration->
get_firstNondefiningDeclaration());
 
19951               printf (
"functionDeclaration                                    = %p \n",functionDeclaration);
 
19952               printf (
"functionDeclaration->get_definingDeclaration()         = %p \n",functionDeclaration->
get_definingDeclaration());
 
19954               printf (
"functionDeclaration->get_scope()                       = %p \n",functionDeclaration->
get_scope());
 
19955               printf (
"targetScope                                            = %p \n",targetScope);
 
19958               assert(copy_functionDeclaration != NULL);
 
19960               copy_functionDeclaration->
set_parent(targetScope);
 
19970               assert(copy_functionDeclaration->
get_scope() != NULL);
 
19971               assert(copy_functionDeclaration->
get_scope() == targetScope);
 
19972               assert(copy_functionDeclaration->
get_scope()->lookup_function_symbol(copy_functionDeclaration->get_name(),
 
19973                    copy_functionDeclaration->get_type()) != NULL);
 
19974               assert(copy_functionDeclaration->
get_scope()->lookup_function_symbol(copy_functionDeclaration->get_name(),
 
19977               copy_node = copy_functionDeclaration;
 
19979               printf (
"In generateCopiesOfDependentDeclarations(): DONE: Copy mechanism appied to SgFunctionDeclaration \n");
 
19993                     cout<<
"Copying a defining typedef declaration:"<<tdecl->
unparseToString()<<endl;
 
19995                     cout<<
"Copying a non-defining typedef declaration:"<<tdecl->
unparseToString()<<endl;
 
19999                   tdecl_copy->set_typedefBaseTypeContainsDefiningDeclaration (
false); 
 
20002                   copy_node = (*i)->copy(collectDependentDeclarationsCopyType);
 
20006               ROSE_ASSERT(copy_declaration != NULL);
 
20010                    copy_declaration->
set_scope(targetScope);
 
20022          ROSE_ASSERT(copy_node != NULL);
 
20031          ROSE_ASSERT(copy_definingDeclaration != NULL);
 
20033          ROSE_ASSERT( *i != NULL );
 
20034          ROSE_ASSERT(copy_definingDeclaration != NULL);
 
20037          if (copy_definingDeclaration->
get_parent() == NULL)
 
20039               copy_definingDeclaration->
set_parent(targetScope);
 
20041          ROSE_ASSERT(copy_definingDeclaration->
get_parent() != NULL);
 
20044          printf (
"DONE: Copying declaration: original scope = %p copied to scope = %p \n",(*i)->get_scope(),copy_definingDeclaration->
get_scope());
 
20054          ROSE_ASSERT(copy_definingDeclaration->
get_parent() == NULL);
 
20061               printf (
"copy_definingDeclaration = %p \n",copy_definingDeclaration);
 
20062               printf (
"copy_definingDeclaration->get_firstNondefiningDeclaration() == NULL \n");
 
20063               printf (
"copy_definingDeclaration->get_definingDeclaration() = %p \n",copy_definingDeclaration->
get_definingDeclaration());
 
20068          if ((*i)->get_firstNondefiningDeclaration() != NULL)
 
20076          copiesOfDependentDeclarations.push_back(copy_definingDeclaration);
 
20080     printf (
"****************************************************** \n");
 
20081     printf (
"*** DONE: Make all copies of dependentDeclarations *** \n");
 
20082     printf (
"****************************************************** \n");
 
20083     printf (
"copiesOfDependentDeclarations.size() = %" PRIuPTR 
" \n",copiesOfDependentDeclarations.size());
 
20089     ROSE_ASSERT(copiesOfDependentDeclarations.size() <= dependentDeclarations.size());
 
20091     return copiesOfDependentDeclarations;
 
20096declarationContainsDependentDeclarations( 
SgDeclarationStatement* decl, vector<SgDeclarationStatement*> & dependentDeclarationList )
 
20099     bool returnValue = 
false;
 
20102     printf (
"\n\n********************************************************** \n");
 
20103     printf (
" Inside of declarationContainsDependentDeclarations(decl = %p = %s) \n",decl,decl->
class_name().c_str());
 
20104     printf (
"********************************************************** \n");
 
20112     for (
size_t i = 0; i < locallyDependentDeclarationList.size(); i++)
 
20118          vector<SgDeclarationStatement*>::iterator j = find(dependentDeclarationList.begin(),dependentDeclarationList.end(),d);
 
20119          if (j != dependentDeclarationList.end())
 
20124               printf (
"Found a dependent declaration buried in the class definition: locallyDependentDeclarationList[%" PRIuPTR 
"] = %p = %s = %s \n",i,d,d->
class_name().c_str(),
SageInterface::get_name(d).c_str());
 
20126               returnValue = 
true;
 
20131     printf (
"**************************************************************************** \n");
 
20132     printf (
" LEAVING: Inside of declarationContainsDependentDeclarations(decl = %p = %s) returnValue = %s \n",decl,decl->
class_name().c_str(),returnValue ? 
"true" : 
"false");
 
20133     printf (
"**************************************************************************** \n");
 
20136     return returnValue;
 
20141  ROSE_ASSERT (new_exp != NULL);
 
20142  ROSE_ASSERT (anchor_exp != NULL);
 
20143  ROSE_ASSERT (new_exp != anchor_exp);
 
20146  ROSE_ASSERT (parent != NULL);
 
20150  ROSE_ASSERT (result != NULL);
 
 
20162  ROSE_ASSERT (new_exp != NULL);
 
20163  ROSE_ASSERT (anchor_exp != NULL);
 
20164  ROSE_ASSERT (new_exp != anchor_exp);
 
20167  ROSE_ASSERT (parent != NULL);
 
20171  ROSE_ASSERT (t != NULL);
 
20173  ROSE_ASSERT (enclosing_stmt != NULL);
 
20180  ROSE_ASSERT (temp_sym != NULL);
 
20182    *temp_decl = t_decl;
 
20187    * temp_ref = first_ref;
 
 
20200     string fileName = 
"separate-outlined-file";
 
 
20220     printf (
"***** In SageInterface::appendStatementWithDependentDeclaration(): decl                                    = %p \n",decl);
 
20221     printf (
"***** In SageInterface::appendStatementWithDependentDeclaration(): decl->get_parent()                      = %p \n",decl->
get_parent());
 
20222     printf (
"***** In SageInterface::appendStatementWithDependentDeclaration(): decl->get_scope()                       = %p \n",decl->
get_scope());
 
20223     printf (
"***** In SageInterface::appendStatementWithDependentDeclaration(): original_statement                      = %p \n",original_statement);
 
20224     printf (
"***** In SageInterface::appendStatementWithDependentDeclaration(): file (decl)                             = %s \n",TransformationSupport::getSourceFile(decl)->getFileName().c_str());
 
20225     printf (
"***** In SageInterface::appendStatementWithDependentDeclaration(): decl->get_firstNondefiningDeclaration() = %p \n",decl->
get_firstNondefiningDeclaration());
 
20227          printf (
"***** In SageInterface::appendStatementWithDependentDeclaration(): file (first non-defining)               = %s \n",TransformationSupport::getSourceFile(decl->
get_firstNondefiningDeclaration())->
getFileName().c_str());
 
20228     printf (
"***** In SageInterface::appendStatementWithDependentDeclaration(): decl->get_definingDeclaration()         = %p \n",decl->
get_definingDeclaration());
 
20230          printf (
"***** In SageInterface::appendStatementWithDependentDeclaration(): file (first non-defining)               = %s \n",TransformationSupport::getSourceFile(decl->
get_definingDeclaration())->
getFileName().c_str());
 
20233#ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT 
20265    vector<SgDeclarationStatement*> dependentDeclarationList_inOriginalFile;
 
20272     vector<SgDeclarationStatement*> dependentDeclarationList = generateCopiesOfDependentDeclarations(dependentDeclarationList_inOriginalFile,scope);
 
20273     ROSE_ASSERT(dependentDeclarationList.size() <= dependentDeclarationList_inOriginalFile.size());
 
20283     std::map<SgNode*, SgNode*> replacementMap;
 
20288     SgCopyHelp::copiedNodeMapType copyNodeMap = collectDependentDeclarationsCopyType.get_copiedNodeMap();
 
20289     SgCopyHelp::copiedNodeMapType::iterator copyNodeMapItrator = copyNodeMap.begin();
 
20290     while (copyNodeMapItrator != copyNodeMap.end())
 
20295          SgNode* first  = 
const_cast<SgNode*
>(copyNodeMapItrator->first);
 
20296          SgNode* second = copyNodeMapItrator->second;
 
20298          printf (
"copyNodeMapItrator.first = %p = %s second = %p = %s \n",first,first->
class_name().c_str(),second,second->
class_name().c_str());
 
20301          if (isSgSymbol(first) != NULL)
 
20306               replacementMap.insert(pair<SgNode*,SgNode*>(first,second));
 
20309          copyNodeMapItrator++;
 
20313     printf (
"Exiting after test of new functionality \n");
 
20319     SgSourceFile* sourceFile = TransformationSupport::getSourceFile(original_statement);
 
20320     vector<PreprocessingInfo*> requiredDirectivesList = collectCppDirectives(sourceFile);
 
20323     ROSE_ASSERT(outlinedFunctionDeclaration != NULL);
 
20324     SgGlobal* originalFileGlobalScope = TransformationSupport::getGlobalScope(original_statement);
 
20325     ROSE_ASSERT(originalFileGlobalScope != NULL);
 
20327       printf (
"WARNING: In SageInterface::appendStatementWithDependentDeclaration(): I think this is the wrong lookup symbol function that is being used here! \n");
 
20331     SgFunctionSymbol* outlinedFunctionSymbolFromOriginalFile = isSgFunctionSymbol(originalFileGlobalScope->lookup_symbol(outlinedFunctionDeclaration->get_name(),NULL,NULL));
 
20337     printf (
"outlinedFunctionSymbolFromOriginalFile = %p outlinedFunctionSymbolFromOutlinedFile = %p \n",outlinedFunctionSymbolFromOriginalFile,outlinedFunctionSymbolFromOutlinedFile);
 
20339     printf (
"TransformationSupport::getSourceFile(decl)->getFileName()                                    = %s \n",TransformationSupport::getSourceFile(decl)->getFileName().c_str());
 
20340     printf (
"TransformationSupport::getSourceFile(decl->get_firstNondefiningDeclaration())->getFileName() = %s \n",TransformationSupport::getSourceFile(decl->
get_firstNondefiningDeclaration())->
getFileName().c_str());
 
20341     printf (
"TransformationSupport::getSourceFile(original_statement)->getFileName()                      = %s \n",TransformationSupport::getSourceFile(original_statement)->getFileName().c_str());
 
20344     ROSE_ASSERT(outlinedFunctionSymbolFromOriginalFile != NULL);
 
20345     ROSE_ASSERT(outlinedFunctionSymbolFromOutlinedFile != NULL);
 
20348     ROSE_ASSERT(outlinedFunctionSymbolFromOriginalFile == outlinedFunctionSymbolFromOutlinedFile);
 
20351     replacementMap.insert(pair<SgNode*,SgNode*>(originalFileGlobalScope,scope));
 
20354     SgFunctionDeclaration* outlinedNondefiningFunctionDeclarationFromOriginalFile = isSgFunctionDeclaration(outlinedFunctionSymbolFromOriginalFile->get_declaration());
 
20356     ROSE_ASSERT(outlinedNondefiningFunctionDeclarationFromOriginalFile != NULL);
 
20357     ROSE_ASSERT(outlinedNondefiningFunctionDeclarationFromOutlinedFile != NULL);
 
20358     replacementMap.insert(pair<SgNode*,SgNode*>(outlinedNondefiningFunctionDeclarationFromOriginalFile,outlinedNondefiningFunctionDeclarationFromOutlinedFile));
 
20367     for (
size_t i = 0; i < dependentDeclarationList.size(); i++)
 
20373          printf (
"originalDeclaration = %p \n",originalDeclaration);
 
20375          d->
get_file_info()->display(
"SageInterface::appendStatementWithDependentDeclaration()");
 
20383          ROSE_ASSERT(decl->
get_scope() == scope);
 
20389          printf (
"Add the required symbol information to the symbol table: scope = %p = %s \n",scope,scope->
class_name().c_str());
 
20396               case V_SgClassDeclaration:
 
20398                    if ( declarationContainsDependentDeclarations(d,dependentDeclarationList) == 
true )
 
20399                         printf (
"Warning: This class contains dependent declarations (not implemented) \n");
 
20403               case V_SgMemberFunctionDeclaration:
 
20404                  printf (
"Sorry, support for dependent member function declarations not implemented! \n");
 
20407                case V_SgTemplateInstantiationDecl:
 
20408                  printf (
"Sorry, not implemented: case SgTemplateInstantiationDecl not handled as dependent declaration \n");
 
20409                  d->
get_file_info()->display(
"Sorry, not implemented: case SgTemplateInstantiationDecl not handled as dependent declaration");
 
20411                  printf (
"Case of SgTemplateInstantiationDecl not implemented. \n");
 
20414                case V_SgNamespaceDeclarationStatement:
 
20415                  if (declarationContainsDependentDeclarations(d,dependentDeclarationList) == 
true )
 
20416                    printf (
"Warning: This namespace contains dependent declarations (not supported) \n");
 
20419               case V_SgFunctionDeclaration:
 
20420               case V_SgTypedefDeclaration:
 
20421               case V_SgEnumDeclaration:
 
20425                 printf (
"default case in SageInterface::appendStatementWithDependentDeclaration() (handling dependentDeclarationList) d = %p = %s \n",d,d->
class_name().c_str());
 
20431          vector<PreprocessingInfo*> cppDirectivesAlreadyAttachedToDependentDeclarations = collectCppDirectives(d);
 
20434          printf (
"directives BEFORE excluding those already present in dependent declarations \n");
 
20435          outputPreprocessingInfoList(requiredDirectivesList);
 
20437          printf (
"directives already attached to dependent declarations \n");
 
20438          outputPreprocessingInfoList(cppDirectivesAlreadyAttachedToDependentDeclarations);
 
20442          vector<PreprocessingInfo*>::iterator j = cppDirectivesAlreadyAttachedToDependentDeclarations.begin();
 
20443          while ( j != cppDirectivesAlreadyAttachedToDependentDeclarations.end() )
 
20446               vector<PreprocessingInfo*>::iterator entry = find(requiredDirectivesList.begin(),requiredDirectivesList.end(),*j);
 
20447               ROSE_ASSERT(entry != requiredDirectivesList.end());
 
20449               requiredDirectivesList.erase(entry);
 
20455          printf (
"directives AFTER excluding those already present in dependent declarations \n");
 
20456          outputPreprocessingInfoList(requiredDirectivesList);
 
20465     if (dependentDeclarationList.empty() == 
true)
 
20467          firstStatmentInFile = decl;
 
20471          firstStatmentInFile = dependentDeclarationList[0];
 
20474     ROSE_ASSERT(firstStatmentInFile != NULL);
 
20482     if (excludeHeaderFiles == 
false)
 
20485          vector<PreprocessingInfo*>::reverse_iterator j = requiredDirectivesList.rbegin();
 
20486          while ( j != requiredDirectivesList.rend() )
 
20505     SgSourceFile* outlinedFile = TransformationSupport::getSourceFile(scope);
 
20506     ROSE_ASSERT(outlinedFile != NULL);
 
20512     printf (
"\n\n************************************************************\n");
 
20513     printf (
"Calling Utils::edgePointerReplacement() \n");
 
20519     printf (
"Calling Utils::edgePointerReplacement(): DONE \n");
 
20520     printf (
"************************************************************\n\n");
 
20522     printf (
"\n\n After replacementMapTraversal(): intermediateDeleteSet: \n");
 
20523     displaySet(intermediateDeleteSet,
"After Utils::edgePointerReplacement");
 
20527     ROSE_ASSERT(dependentDeclarationList.size() <= dependentDeclarationList_inOriginalFile.size());
 
20535     printf (
"replacementMap.size() = %" PRIuPTR 
" dependentDeclarationList.size() = %" PRIuPTR 
" \n",replacementMap.size(),dependentDeclarationList.size());
 
 
20551                int SgVariableSymbol_count;
 
20552                int SgFunctionSymbol_count;
 
20553                int SgClassDeclaration_count;
 
20554                int SgTypedefSymbol_count;
 
20555                int SgMemFuncSymbol_count;
 
20556                int SgTemplateSymbol_count;
 
20557                int SgEnumFieldSymbol_count;
 
20575                        SgVariableSymbol_count = 0;
 
20576                        SgVariableSymbolPtr = symbol;
 
20577                        SgFunctionSymbolPtr =NULL;
 
20578                        SgClassSymbolPtr =NULL;
 
20579                        SgTypedefPtr = NULL;
 
20580                        SgMemFuncSymbolPtr =NULL;
 
20581                        class_defining = NULL;
 
20583                        typedef_defining =NULL;
 
20584                        function_decl = NULL;
 
20585                        SgTemplateSymbolPtr = NULL;
 
20586                        template_defining = NULL;
 
20587                        SgEnumFieldSymbolPtr = NULL;
 
20588                        templateInstantiate_defining =NULL;
 
20592                        SgFunctionSymbol_count = 0;
 
20593                        SgFunctionSymbolPtr = symbol;
 
20596                        SgMemFuncSymbol_count =0;
 
20598                        SgVariableSymbolPtr = NULL;
 
20599                        SgClassSymbolPtr =NULL;
 
20600                        SgTypedefPtr = NULL;
 
20601                        SgMemFuncSymbolPtr =NULL;
 
20602                        class_defining = NULL;
 
20604                        typedef_defining =NULL;
 
20605                        function_decl = NULL;
 
20606                        SgTemplateSymbolPtr = NULL;
 
20607                        template_defining = NULL;
 
20608                        SgEnumFieldSymbolPtr = NULL;
 
20609                        templateInstantiate_defining =NULL;
 
20613                        SgClassDeclaration_count = 0;
 
20614                        SgClassSymbolPtr = symbol;
 
20615                        SgFunctionSymbolPtr = NULL;
 
20616                        SgVariableSymbolPtr = NULL;
 
20617                        SgTypedefPtr = NULL;
 
20618                        SgMemFuncSymbolPtr =NULL;
 
20619                        class_defining = NULL;
 
20621                        typedef_defining =NULL;
 
20622                        function_decl = NULL;
 
20623                        SgTemplateSymbolPtr = NULL;
 
20624                        template_defining = NULL;
 
20625                        SgEnumFieldSymbolPtr = NULL;
 
20626                        templateInstantiate_defining =NULL;
 
20630                        SgTypedefSymbol_count =0;
 
20631                        SgTypedefPtr = symbol;
 
20632                        SgClassSymbolPtr = NULL;
 
20633                        SgFunctionSymbolPtr = NULL;
 
20634                        SgVariableSymbolPtr = NULL;
 
20635                        SgMemFuncSymbolPtr =NULL;
 
20636                        class_defining = NULL;
 
20638                        typedef_defining =NULL;
 
20639                        function_decl = NULL;
 
20640                        SgTemplateSymbolPtr = NULL;
 
20641                        template_defining = NULL;
 
20642                        SgEnumFieldSymbolPtr = NULL;
 
20643                        templateInstantiate_defining =NULL;
 
20647                        SgMemFuncSymbolPtr = symbol;
 
20648                        SgMemFuncSymbol_count =0;
 
20649                        SgTypedefPtr = NULL;
 
20650                        SgClassSymbolPtr = NULL;
 
20651                        SgFunctionSymbolPtr = NULL;
 
20652                        SgVariableSymbolPtr = NULL;
 
20653                        class_defining = NULL;
 
20655                        typedef_defining =NULL;
 
20656                        function_decl = NULL;
 
20657                        SgTemplateSymbolPtr = NULL;
 
20658                        template_defining = NULL;
 
20659                        SgEnumFieldSymbolPtr = NULL;
 
20660                        templateInstantiate_defining =NULL;
 
20664                        SgTemplateSymbolPtr = symbol;
 
20665                        SgTemplateSymbol_count =0;
 
20666                        SgMemFuncSymbolPtr = NULL;
 
20667                        SgTypedefPtr = NULL;
 
20668                        SgClassSymbolPtr = NULL;
 
20669                        SgFunctionSymbolPtr = NULL;
 
20670                        SgVariableSymbolPtr = NULL;
 
20671                        class_defining = NULL;
 
20673                        typedef_defining =NULL;
 
20674                        function_decl = NULL;
 
20675                        template_defining = NULL;
 
20676                        SgEnumFieldSymbolPtr = NULL;
 
20677                        templateInstantiate_defining =NULL;
 
20681                        SgEnumFieldSymbolPtr = symbol;
 
20682                        SgEnumFieldSymbol_count =0;
 
20683                        SgTemplateSymbolPtr = NULL;
 
20684                        SgMemFuncSymbolPtr = NULL;
 
20685                        SgTypedefPtr = NULL;
 
20686                        SgClassSymbolPtr = NULL;
 
20687                        SgFunctionSymbolPtr = NULL;
 
20688                        SgVariableSymbolPtr = NULL;
 
20689                        class_defining = NULL;
 
20691                        typedef_defining =NULL;
 
20692                        function_decl = NULL;
 
20693                        template_defining = NULL;
 
20694                        templateInstantiate_defining =NULL;
 
20699                        class_defining = node;
 
20700                        SgMemFuncSymbolPtr = NULL;
 
20701                        SgTypedefPtr = NULL;
 
20702                        SgClassSymbolPtr = NULL;
 
20703                        SgFunctionSymbolPtr = NULL;
 
20704                        SgVariableSymbolPtr = NULL;
 
20706                        typedef_defining =NULL;
 
20707                        function_decl = NULL;
 
20708                        SgTemplateSymbolPtr = NULL;
 
20709                        template_defining = NULL;
 
20710                        SgEnumFieldSymbolPtr = NULL;
 
20711                        templateInstantiate_defining =NULL;
 
20715                        template_defining = node;
 
20716                        class_defining = NULL;
 
20717                        SgMemFuncSymbolPtr = NULL;
 
20718                        SgTypedefPtr = NULL;
 
20719                        SgClassSymbolPtr = NULL;
 
20720                        SgFunctionSymbolPtr = NULL;
 
20721                        SgVariableSymbolPtr = NULL;
 
20723                        typedef_defining =NULL;
 
20724                        function_decl = NULL;
 
20725                        SgTemplateSymbolPtr = NULL;
 
20726                        SgEnumFieldSymbolPtr = NULL;
 
20727                        templateInstantiate_defining =NULL;
 
20730                        function_decl =node;
 
20731                        class_defining = NULL;
 
20732                        SgMemFuncSymbolPtr = NULL;
 
20733                        SgTypedefPtr = NULL;
 
20734                        SgClassSymbolPtr = NULL;
 
20735                        SgFunctionSymbolPtr = NULL;
 
20736                        SgVariableSymbolPtr = NULL;
 
20738                        typedef_defining =NULL;
 
20739                        SgTemplateSymbolPtr = NULL;
 
20740                        template_defining = NULL;
 
20741                        SgEnumFieldSymbolPtr = NULL;
 
20742                        templateInstantiate_defining =NULL;
 
20747                        function_decl =NULL;
 
20748                        class_defining = NULL;
 
20749                        SgMemFuncSymbolPtr = NULL;
 
20750                        SgTypedefPtr = NULL;
 
20751                        SgClassSymbolPtr = NULL;
 
20752                        SgFunctionSymbolPtr = NULL;
 
20753                        SgVariableSymbolPtr = NULL;
 
20754                        typedef_defining =NULL;
 
20755                        SgTemplateSymbolPtr = NULL;
 
20756                        template_defining = NULL;
 
20757                        SgEnumFieldSymbolPtr = NULL;
 
20758                        templateInstantiate_defining =NULL;
 
20762                        typedef_defining = node;
 
20764                        function_decl =NULL;
 
20765                        class_defining = NULL;
 
20766                        SgMemFuncSymbolPtr = NULL;
 
20767                        SgTypedefPtr = NULL;
 
20768                        SgClassSymbolPtr = NULL;
 
20769                        SgFunctionSymbolPtr = NULL;
 
20770                        SgVariableSymbolPtr = NULL;
 
20771                        SgTemplateSymbolPtr = NULL;
 
20772                        template_defining = NULL;
 
20773                        SgEnumFieldSymbolPtr = NULL;
 
20774                        templateInstantiate_defining =NULL;
 
20778                        templateInstantiate_defining =node;
 
20779                        typedef_defining = NULL;
 
20781                        function_decl =NULL;
 
20782                        class_defining = NULL;
 
20783                        SgMemFuncSymbolPtr = NULL;
 
20784                        SgTypedefPtr = NULL;
 
20785                        SgClassSymbolPtr = NULL;
 
20786                        SgFunctionSymbolPtr = NULL;
 
20787                        SgVariableSymbolPtr = NULL;
 
20788                        SgTemplateSymbolPtr = NULL;
 
20789                        template_defining = NULL;
 
20790                        SgEnumFieldSymbolPtr = NULL;
 
20797                     if(SgVariableSymbolPtr !=NULL)
 
20799                          if(node->get_scope()!=NULL)
 
20805                                    if (isSgVariableSymbol(s) == SgVariableSymbolPtr) SgVariableSymbol_count++;
 
20810                     if(SgEnumFieldSymbolPtr !=NULL)
 
20812                          if(node->get_scope()!=NULL)
 
20818                                    if (isSgEnumFieldSymbol(s) == SgEnumFieldSymbolPtr) SgEnumFieldSymbol_count++;
 
20826                        if(SgVariableSymbolPtr !=NULL){
 
20828                                if (s == SgVariableSymbolPtr) SgVariableSymbol_count++;
 
20832                int get_num_variable_pointers(){
return SgVariableSymbol_count;}
 
20834                int get_num_EnumField_pointers(){
return SgEnumFieldSymbol_count;}
 
20839                        if(SgFunctionSymbolPtr !=NULL){
 
20845                                                if ((
SgFunctionSymbol *)s == SgFunctionSymbolPtr) SgFunctionSymbol_count++;
 
20850                        if(function_decl!=NULL){
 
20854                                        if(node!=function_decl && (define==function_decl || first_nondefine==function_decl)) 
delete node;
 
20863                        printf (
"In visit(SgFunctionRefExp* node): SgFunctionSymbolPtr = %p \n",SgFunctionSymbolPtr);
 
20865                        if (SgFunctionSymbolPtr !=NULL)
 
20868                                if (isSgFunctionSymbol(s) == SgFunctionSymbolPtr)
 
20870                                  SgFunctionSymbol_count++;
 
20872                                  printf (
"Increment SgFunctionSymbol_count = %d \n",SgFunctionSymbol_count);
 
20882                        printf (
"In visit(SgMemberFunctionRefExp* node): SgFunctionSymbolPtr = %p \n",SgFunctionSymbolPtr);
 
20884                        if (SgFunctionSymbolPtr !=NULL)
 
20887                                if (isSgFunctionSymbol(s) == SgFunctionSymbolPtr)
 
20889                                  SgFunctionSymbol_count++;
 
20891                                  printf (
"Increment SgFunctionSymbol_count = %d \n",SgFunctionSymbol_count);
 
20899                        if (SgFunctionSymbolPtr !=NULL){
 
20901                                if (isSgFunctionSymbol(s) == SgFunctionSymbolPtr) SgFunctionSymbol_count++;
 
20905                int get_num_Function_pointers(){
return SgFunctionSymbol_count;}
 
20910                        if(SgClassSymbolPtr !=NULL){
 
20915                                                if (isSgClassSymbol(s) == SgClassSymbolPtr) SgClassDeclaration_count++;
 
20920                        if(class_defining!=NULL) {
 
20924                                        if((class_decl==class_defining||class_decl1==class_defining) && node!=class_defining )
 
20932                        if(SgClassSymbolPtr !=NULL){
 
20937                                                if (isSgClassSymbol(s) == SgClassSymbolPtr) SgClassDeclaration_count++;
 
20942                        if(templateInstantiate_defining!=NULL) {
 
20949                                                        if((template_decl==templateInstantiate_defining||template_decl1==templateInstantiate_defining) && node!=templateInstantiate_defining){
 
20969                        if (SgClassSymbolPtr !=NULL){
 
20970                                SgSymbol* s = node->get_class_symbol();
 
20971                                if (s == SgClassSymbolPtr) SgClassDeclaration_count++;
 
20977                        if (SgClassSymbolPtr !=NULL){
 
20979                                if (isSgClassSymbol(s) == SgClassSymbolPtr) SgClassDeclaration_count++;
 
20984                int get_num_Class_pointers(){
return SgClassDeclaration_count;}
 
20990                        if(memFunc !=NULL){
 
20992                                if(func == memFunc){
 
21001                        if (SgMemFuncSymbolPtr !=NULL){
 
21006                                                if(symbol == SgMemFuncSymbolPtr){
 
21007                                                        SgMemFuncSymbol_count++;
 
21016                        if (SgMemFuncSymbolPtr !=NULL){
 
21021                                                if(symbol == SgMemFuncSymbolPtr){
 
21022                                                        SgMemFuncSymbol_count++;
 
21031                int get_num_memFunc_pointers(){
return SgMemFuncSymbol_count;}
 
21037                        if(SgTypedefPtr!=NULL){
 
21046                        if(typedef_defining!=NULL){
 
21048                                if(typedef_define == typedef_defining && node != typedef_defining ) {
 
21054                int get_num_Typedef_pointers(){
return SgTypedefSymbol_count;}
 
21060                        if (SgTemplateSymbolPtr !=NULL){
 
21065                                                if(symbol == SgTemplateSymbolPtr){
 
21066                                                        SgTemplateSymbol_count++;
 
21072                        if(template_defining !=NULL) {
 
21079                                                        if((template_decl==template_defining||template_decl1==template_defining) && node!=template_defining) {
 
21089                int get_num_Template_pointers(){
return SgTemplateSymbol_count;}
 
21099                        void visit (
SgNode* node)
 
21106                                printf (
"In DeleteAST::visit(): node = %p = %s \n",node,node->
class_name().c_str());
 
21111                                if (isSgScopeStatement(node) !=NULL)
 
21115                                     printf (
"Deleting the scopes type table: scope->get_type_table() = %p \n",scope->get_type_table());
 
21117                                     delete scope->get_type_table();
 
21123                                if (isSgTypeTable(node) !=NULL)
 
21127                                     printf (
"Deleting the type table (SgSymbolTable): typeTable->get_type_table() = %p \n",typeTable->get_type_table());
 
21129                                     delete typeTable->get_type_table();
 
21132                                if(isSgInitializedName(node) !=NULL){
 
21136                                        if(isSgVariableDefinition(var_def) !=NULL){
 
21143                                        if(isSgInitializedName(node)->get_scope()!=NULL){
 
21147                                                        if(isSgVariableSymbol(symbol) !=NULL){
 
21149                                                                traverseMemoryPoolVisitorPattern(visitor);
 
21150                                                                if(visitor.get_num_variable_pointers()==1){ 
 
21157                                                        if(isSgEnumFieldSymbol(symbol) !=NULL){
 
21159                                                                traverseMemoryPoolVisitorPattern(visitor);
 
21160                                                                if(visitor.get_num_EnumField_pointers()==1){
 
21171                                if(isSgVarRefExp(node) !=NULL){
 
21173                                                ClassicVisitor visitor(symbol);
 
21174                                                traverseMemoryPoolVisitorPattern(visitor);
 
21175                                                if(visitor.get_num_variable_pointers()==1){ 
 
21187                                   SgFunctionDeclaration* funcDecl = isSgFunctionDeclaration(node);
 
21188                                   if (funcDecl != NULL){
 
21189                                      if (isSgMemberFunctionDeclaration(node) == NULL) {
 
21190                                         if (funcDecl->get_scope() != NULL) {
 
21191                                            if (funcDecl->get_scope()->get_symbol_table() != NULL) {
 
21192                                               SgSymbol* symbol = ((SgFunctionDeclaration*)node)->get_symbol_from_symbol_table();
 
21193                                               ClassicVisitor visitor((SgFunctionSymbol *)symbol);
 
21194                                               traverseMemoryPoolVisitorPattern(visitor);
 
21195                                               if (visitor.get_num_Function_pointers()==1) { //only one reference to this FunctionSymbol => safe to delete
 
21196                                                  ((SgFunctionDeclaration*)node)->get_scope()->get_symbol_table()->remove(symbol);
 
21198                                                //printf("A SgFunctionSymbol was deleted\n");
 
21200                                               ClassicVisitor visitor1((SgFunctionDeclaration *)node);
 
21201                                               traverseMemoryPoolVisitorPattern(visitor1);
 
21208                                if(isSgFunctionRefExp(node) !=NULL)
 
21211                                   SgFunctionRefExp* functionRefExp = isSgFunctionRefExp(node);
 
21212                                   ROSE_ASSERT(functionRefExp->get_symbol_i() != NULL);
 
21213                                   printf ("In DeleteAST::visit(): functionRefExp->get_symbol_i() = %p = %s \n",functionRefExp->get_symbol_i(),functionRefExp->get_symbol_i()->class_name().c_str());
 
21215                                                SgFunctionSymbol *symbol = ((SgFunctionRefExp*)node)->get_symbol_i();
 
21216                                                ClassicVisitor visitor(symbol);
 
21217                                                traverseMemoryPoolVisitorPattern(visitor);
 
21218                                                if(visitor.get_num_Function_pointers()==1)
 
21220                                               // only one reference to this FunctionSymbol => safe to delete
 
21221                                                        //((SgSymbol*)symbol)->get_scope()->get_symbol_table()->remove(symbol);
 
21223                                                        //printf("A SgFunctionSymbol was deleted\n");
 
21228                                if(isSgUserDefinedBinaryOp(node) !=NULL){
 
21229                                        SgFunctionSymbol *symbol = ((SgUserDefinedBinaryOp*)node)->get_symbol();
 
21230                                        ClassicVisitor visitor(symbol);
 
21231                                        traverseMemoryPoolVisitorPattern(visitor);
 
21232                                        if(visitor.get_num_Function_pointers()==1){ //only one reference to this FunctionSymbol => safe to delete
 
21233                                                ((SgSymbol*)symbol)->get_scope()->get_symbol_table()->remove(symbol);
 
21235                                                //printf("A SgFunctionSymbol was deleted\n");
 
21243                                if(isSgTypedefDeclaration(node) !=NULL){
 
21248                                                        if(isSgTypedefSymbol(symbol)){
 
21250                                                                traverseMemoryPoolVisitorPattern(visitor);
 
21251                                                                if(visitor.get_num_Typedef_pointers()==1){ 
 
21262                                                traverseMemoryPoolVisitorPattern(visitor1);
 
21270                                if(isSgNamespaceDeclarationStatement(node) !=NULL){
 
21271                                        if(((SgNamespaceDeclarationStatement*)node)->get_scope()!=NULL){
 
21272                                             if(((SgNamespaceDeclarationStatement*)node)->get_scope()->get_symbol_table()!=NULL)
 
21274                                                        SgSymbol* symbol = ((SgNamespaceDeclarationStatement*)node)->get_symbol_from_symbol_table();
 
21275                                                        if(isSgNamespaceSymbol(symbol)){
 
21276                                                                ((SgNamespaceDeclarationStatement*)node)->get_scope()->get_symbol_table()->remove(symbol);
 
21278                                                                //printf("A SgNamespaceSymbol was deleted\n");
 
21285                                if(isSgNamespaceAliasDeclarationStatement(node) !=NULL){
 
21286                                        if(((SgNamespaceAliasDeclarationStatement*)node)->get_scope()!=NULL){
 
21287                                             if(((SgNamespaceAliasDeclarationStatement*)node)->get_scope()->get_symbol_table()!=NULL)
 
21289                                                        SgSymbol* symbol = ((SgNamespaceAliasDeclarationStatement*)node)->get_symbol_from_symbol_table();
 
21290                                                        if(isSgNamespaceSymbol(symbol)){
 
21291                                                                ((SgNamespaceAliasDeclarationStatement*)node)->get_scope()->get_symbol_table()->remove(symbol);
 
21293                                                                //printf("A SgNamespaceSymbol was deleted\n");
 
21304                                if(isSgLabelStatement(node) !=NULL){
 
21309                                                        if(isSgLabelSymbol(symbol)){
 
21318                                if(isSgLabelRefExp(node) !=NULL){
 
21330                                if(isSgEnumDeclaration(node) !=NULL){
 
21331                                        if(((SgEnumDeclaration*)node)->get_scope()!=NULL){
 
21332                                             if(((SgEnumDeclaration*)node)->get_scope()->get_symbol_table()!=NULL)
 
21334                                                        SgSymbol* symbol = ((SgEnumDeclaration*)node)->get_symbol_from_symbol_table();
 
21335                                                        if(isSgEnumSymbol(symbol) !=NULL){
 
21336                                                                ((SgSymbol*)symbol)->get_scope()->get_symbol_table()->remove(symbol);
 
21338                                                                //printf("A SgEnumSymbol was deleted\n");
 
21342                                        SgEnumType* type= ((SgEnumDeclaration*)node)->get_type();
 
21345                                                        //printf("A SgEnumType was deleted\n");
 
21354                                if(isSgClassDeclaration(node) !=NULL && isSgTemplateInstantiationDecl(node) ==NULL){
 
21359                                                        if(isSgClassSymbol(symbol) !=NULL){
 
21361                                                                traverseMemoryPoolVisitorPattern(visitor);
 
21362                                                                if(visitor.get_num_Class_pointers()==1){ 
 
21372                                        traverseMemoryPoolVisitorPattern(visitor);
 
21381                                if(isSgThisExp(node) !=NULL){
 
21384                                        traverseMemoryPoolVisitorPattern(visitor);
 
21385                                        if(visitor.get_num_Class_pointers()==1){ 
 
21386                                                ((
SgSymbol*)symbol)->get_scope()->get_symbol_table()->remove(symbol);
 
21393                                if(isSgClassNameRefExp(node) !=NULL){
 
21395                                        if(isSgClassSymbol(symbol) !=NULL)
 
21398                                                traverseMemoryPoolVisitorPattern(visitor);
 
21399                                                if(visitor.get_num_Class_pointers()==1){ 
 
21400                                                        ((
SgSymbol*)symbol)->get_scope()->get_symbol_table()->remove(symbol);
 
21412                                if(isSgMemberFunctionDeclaration(node) !=NULL){
 
21413                                        if(((SgMemberFunctionDeclaration*)node)->get_scope()!=NULL){
 
21414                                             if(((SgMemberFunctionDeclaration*)node)->get_scope()->get_symbol_table()!=NULL)
 
21416                                                        SgSymbol* symbol = ((SgMemberFunctionDeclaration*)node)->get_symbol_from_symbol_table();
 
21417                                                        if(isSgMemberFunctionSymbol(symbol)){
 
21418                                                                ClassicVisitor visitor((SgMemberFunctionSymbol*)symbol);
 
21419                                                                traverseMemoryPoolVisitorPattern(visitor);
 
21420                                                                if(visitor.get_num_memFunc_pointers()==1){
 
21421                                                                        ((SgMemberFunctionDeclaration*)node)->get_scope()->get_symbol_table()->remove(symbol);
 
21423                                                                        //printf("A SgMemberFunctionSymbol was deleted\n");
 
21428                                        ClassicVisitor visitor((SgMemberFunctionDeclaration*) node);
 
21429                                        traverseMemoryPoolVisitorPattern(visitor);
 
21432//Tan: I have no idea why the codes below cannot work. Perhaps it conflicts with some prior works
 
21434                                if(isSgMemberFunctionRefExp(node) !=NULL){
 
21435                                        SgMemberFunctionSymbol* symbol = ((SgMemberFunctionRefExp*)node)->get_symbol_i();
 
21436                                        ClassicVisitor visitor(symbol);
 
21437                                        traverseMemoryPoolVisitorPattern(visitor);
 
21438                                        if(visitor.get_num_memFunc_pointers()==1){ //only one reference to this symbol => safe to delete
 
21439                                                ((SgSymbol*)symbol)->get_scope()->get_symbol_table()->remove(symbol);
 
21441                                                //printf("A SgClassSymbol was deleted\n");
 
21446                                if(isSgFunctionType(node) !=NULL){
 
21447                                        SgSymbol* symbol = ((SgFunctionType*)node)->get_symbol_from_symbol_table();
 
21448                                        if(isSgFunctionTypeSymbol(symbol)){
 
21449                                                ((SgSymbol*)symbol)->get_scope()->get_symbol_table()->remove(symbol);
 
21451                                                //printf("A SgFunctionTypeSymbol was deleted\n");
 
21460                                if(isSgInterfaceStatement(node) !=NULL){
 
21465                                                        if(isSgInterfaceSymbol(symbol)){
 
21476                                if(isSgModuleStatement(node) !=NULL){
 
21481                                                        if(isSgModuleSymbol(symbol)){
 
21494                                if(isSgTemplateInstantiationMemberFunctionDecl(node) !=NULL){
 
21499                                                        if(isSgMemberFunctionSymbol(symbol)){
 
21501                                                                traverseMemoryPoolVisitorPattern(visitor);
 
21502                                                                if(visitor.get_num_memFunc_pointers()==1){
 
21511                                        traverseMemoryPoolVisitorPattern(visitor);
 
21514                                if(isSgTemplateDeclaration(node) !=NULL){
 
21520                                                        traverseMemoryPoolVisitorPattern(visitor);
 
21521                                                        if(visitor.get_num_Template_pointers()==1){
 
21524                                                                        printf(
"A SgTemplateSymbol was deleted\n");
 
21530                                                traverseMemoryPoolVisitorPattern(visitor1);
 
21535                                if(isSgInterfaceStatement(node) !=NULL){
 
21540                                                        if(isSgInterfaceSymbol(symbol)){
 
21551                                if(isSgModuleStatement(node) !=NULL){
 
21556                                                        if(isSgModuleSymbol(symbol)){
 
21566                                if(isSgTemplateInstantiationDecl(node) !=NULL){
 
21571                                                        if(isSgClassSymbol(symbol)){
 
21573                                                                traverseMemoryPoolVisitorPattern(visitor);
 
21574                                                                if(visitor.get_num_Class_pointers()==1){
 
21593                                                printf(
"SgTemplateArg in normal traversal\n");
 
21595                                        printf(
"SgTemplateInstantiationDecl in normal traversal\n");
 
21598                                        traverseMemoryPoolVisitorPattern(visitor);
 
21608                        printf (
"After delete node: node = %p = %s \n",node,node->
class_name().c_str());
 
21614          DeleteAST deleteTree;
 
21617          deleteTree.traverse(n,postorder);
 
21620     printf (
"Leaving SageInterface::deleteAST(): n = %p = %s \n",n,n->
class_name().c_str());
 
 
21647          virtual void visit(
SgNode* n)
 
21650               if (expression != NULL)
 
21652                    Visitor().traverse(expression->get_originalExpressionTree(), postorder);
 
21659     Visitor().traverse(root, postorder);
 
 
21671    SgSymbol* symbol = s_table->find(iname);
 
21672    ASSERT_not_null(symbol);
 
21677  ASSERT_not_null(sourceBlock);
 
21678  ASSERT_not_null(targetBlock);
 
21693    SgSymbol* symbol = s_table->find(iname);
 
21694    ASSERT_not_null(symbol);
 
21701    ASSERT_not_null(symbol);
 
21712  ASSERT_require(stmt->
get_parent() == targetBlock);
 
21727          func->set_scope(targetBlock);
 
21730          SgFunctionDeclaration* nondef_decl= isSgFunctionDeclaration(func->get_firstNondefiningDeclaration());
 
21731          if (func != nondef_decl)
 
21733            ASSERT_not_null(nondef_decl);
 
21740      else if (
auto labelStmt = isSgLabelStatement(stmt))
 
21742        if (labelStmt->get_scope() == sourceBlock) {
 
21743          labelStmt->set_scope(targetBlock);
 
21748      else if (isSgJovialTableStatement(stmt) || isSgTypedefDeclaration(stmt) || isSgEnumDeclaration(stmt))
 
21756        mlog[Rose::Diagnostics::WARN] << 
"test failing stmt->get_scope() == targetBlock in SageInterface::moveStatementsBetweenBlocks(): class: " 
21763  if (declaration != 
nullptr)
 
21770      case V_SgVariableDeclaration:
 
21775          for (SgInitializedNamePtrList::iterator ii = l.begin(); ii != l.end(); ii++)
 
21785            SgType* var_type = init_name->get_type();
 
21788              var_type = mod_type->get_base_type();
 
21795            if (isSgEnumType(var_type))
 
21797              SgEnumType* enum_type = isSgEnumType(var_type);
 
21812                  enumerator->set_scope(targetBlock);
 
21816            else if (isSgJovialTableType(var_type))
 
21832            SgVariableSymbol* var_sym = isSgVariableSymbol(init_name -> search_for_symbol_from_symbol_table ()) ;
 
21833            ASSERT_not_null(var_sym);
 
21836            if (old_scope != sourceBlock)
 
21838              old_scope->remove_symbol (var_sym);
 
21839              sourceBlock ->
insert_symbol(init_name->get_name(), var_sym);
 
21842            init_name->set_scope(targetBlock);
 
21843            initname_vec.push_back(init_name);
 
21847      case V_SgFunctionDeclaration: 
 
21850          ASSERT_not_null(funcDecl);
 
21857            if (old_scope != sourceBlock)
 
21859              old_scope->remove_symbol (func_sym);
 
21867      case V_SgProgramHeaderStatement:
 
21868      case V_SgProcedureHeaderStatement:
 
21869      case V_SgClassDeclaration:
 
21870      case V_SgEnumDeclaration:
 
21873          ASSERT_not_null(nondef_decl);
 
21887              if (
auto proc = isSgProcedureHeaderStatement(nondef_decl)) {
 
21888                for (
auto arg : proc->get_parameterList()->get_args()) {
 
21889                  if (arg->get_scope() != proc->get_scope()) {
 
21893                    arg->set_scope(proc->get_scope());
 
21905                  name->set_scope(targetBlock);
 
21910      case V_SgJovialTableStatement:
 
21914          ROSE_ASSERT (table);
 
21923      case V_SgTypedefDeclaration:
 
21927          ASSERT_not_null(typedef_decl);
 
21932      case V_SgAttributeSpecificationStatement:
 
21933      case V_SgEmptyDeclaration:
 
21934      case V_SgFortranIncludeLine:
 
21935      case V_SgImplicitStatement: 
 
21936      case V_SgJovialDefineDeclaration:
 
21937      case V_SgJovialDirectiveStatement:
 
21938      case V_SgJovialLabelDeclaration:
 
21939      case V_SgJovialOverlayDeclaration:
 
21940      case V_SgPragmaDeclaration:
 
21941      case V_SgAdaAttributeClause:
 
21945          printf (
"Moving this declaration = %p = %s = %s between blocks is not yet supported \n",declaration,declaration->
class_name().c_str(), 
SageInterface::get_name(declaration).c_str());
 
21954template <
class T1, 
class T2>
 
21955void moveDeclarationsBetweenScopes( T1* sourceBlock, T2* targetBlock)
 
21959  ROSE_ASSERT (sourceBlock && targetBlock);
 
21960  ROSE_ASSERT (sourceBlock->containsOnlyDeclarations() && targetBlock->containsOnlyDeclarations());
 
21961  if ((
void*)sourceBlock == (
void*)targetBlock)
 
21963    cerr<<
"warning: SageInterface::moveStatementsBetweenScopes() is skipped, "<<endl;
 
21964    cerr<<
"         since program is trying to move statements from and to the identical scoped block. "<<endl;
 
21968  SgDeclarationStatementPtrList& srcStmts = sourceBlock->get_declarations ();
 
21969  std::vector <SgInitializedName*> initname_vec;
 
21971  for (
auto stmt : srcStmts)
 
21973    moveOneStatement(sourceBlock, targetBlock, stmt, initname_vec);
 
21978  ROSE_ASSERT(srcStmts.empty() == 
true);
 
21979  ROSE_ASSERT(sourceBlock->get_declarations().empty() == 
true);
 
21982  moveSymbolTableBetweenBlocks(sourceBlock, targetBlock, initname_vec);
 
21995template <
class T1, 
class T2>
 
21996void moveStatementsBetweenScopes( T1* sourceBlock, T2* targetBlock)
 
21999  ROSE_ASSERT (sourceBlock && targetBlock);
 
22000  if ((
void*)sourceBlock == (
void*)targetBlock)
 
22002    cerr<<
"warning: SageInterface::moveStatementsBetweenScopes() is skipped, "<<endl;
 
22003    cerr<<
"         since program is trying to move statements from and to the identical scoped block. "<<endl;
 
22007  SgStatementPtrList & srcStmts = sourceBlock->get_statements();
 
22008  std::vector <SgInitializedName*> initname_vec;
 
22012    moveOneStatement(sourceBlock, targetBlock, stmt, initname_vec);
 
22017  ROSE_ASSERT(srcStmts.empty() == 
true);
 
22018  ROSE_ASSERT(sourceBlock->get_statements().empty() == 
true);
 
22021  moveSymbolTableBetweenBlocks(sourceBlock, targetBlock, initname_vec);
 
22035  ASSERT_not_null(decl);
 
22039  ASSERT_require(local_def && global_def && (local_def!=global_def));
 
22041  for (
auto symbol : local_def->get_symbol_table()->get_symbols())
 
22043    SgSymbol *orig_sym = isSgSymbol(symbol);
 
22044    ASSERT_not_null(orig_sym);
 
22053  moveDeclarationsBetweenScopes(sourceBlock, targetBlock);
 
22055  createAliasSymbols(isSgNamespaceDeclarationStatement(targetBlock->
get_parent()));
 
 
22060  moveStatementsBetweenScopes(sourceBlock, targetBlock);
 
22062  createAliasSymbols(isSgNamespaceDeclarationStatement(targetBlock->
get_parent()));
 
 
22067  moveDeclarationsBetweenScopes(sourceBlock, targetBlock);
 
 
22073  moveStatementsBetweenScopes (sourceBlock, targetBlock);
 
 
22081  ROSE_ASSERT (func != NULL);
 
22083  ROSE_ASSERT (p != NULL);
 
22085  if (le && le->get_lambda_function() == func)
 
 
22098  #pragma message ("WARNING: MSVC does not handle isLambdaCapturedVariable() properly.") 
22100  ROSE_ASSERT (varRef!= NULL);
 
22104    SgThisExp* te = isSgThisExp(p->get_lhs_operand_i());
 
22108      ROSE_ASSERT (csym!= NULL);
 
22111      ROSE_ASSERT (xdecl != NULL);
 
22115        if (le->get_lambda_closure_class() == xdecl ) 
 
 
22131  ROSE_ASSERT(current != NULL);
 
22133  if (isSgInitializedName(current))
 
22135    name = isSgInitializedName(current);
 
22137  else if (isSgPntrArrRefExp(current) != NULL)
 
22141    ROSE_ASSERT(exp != NULL);
 
22143    ROSE_ASSERT(suc == 
true);
 
22147  else if (isSgVarRefExp(current) != NULL)
 
22153      if (isSgDotExp(parent))
 
22155        if (isSgDotExp(parent)->get_rhs_operand() == current)
 
22161        if (isSgArrowExp(parent)->get_rhs_operand() == current)
 
22165    name = isSgVarRefExp(current)->get_symbol()->get_declaration();
 
22167  else if (isSgFunctionRefExp(current) != NULL ||
 
22168           isSgTemplateFunctionRefExp(current) != NULL ||
 
22169           isSgMemberFunctionRefExp(current) != NULL ||
 
22170           isSgTemplateMemberFunctionRefExp(current) != NULL)
 
22175  else if (isSgNonrealRefExp(current) != NULL)
 
22180  else if (isSgDotExp(current))
 
22187    ROSE_ASSERT(child);
 
22191   else if (isSgArrowExp(current))
 
22212    ROSE_ASSERT(child);
 
22217  else if (isSgThisExp(current))
 
22222  else if (isSgPointerDerefExp(current))
 
22226  else if(isSgUnaryOp(current)) { 
 
22229  else if (isSgCastExp(current))
 
22235  else if (isSgAddOp(current))
 
22240  else if (isSgSubtractOp(current))
 
22251  else if (isSgIntVal(current))
 
22261      if (!isSgConstructorInitializer(current))
 
22263          mlog[Sawyer::Message::Common::WARN] <<
 
22264              "convertRefToInitializedName: " <<
 
22267          cerr<<
"In SageInterface::convertRefToInitializedName(): unhandled reference type:"<<current->
class_name()<<endl;
 
 
22278#ifdef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT 
22279  printf (
"AbstractHandle support is disabled for ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT \n");
 
22285  size_t pos = input_string.find(
"SourceFile<");
 
22286  ROSE_ASSERT (pos != string::npos);
 
22287  string trimed_string = input_string.substr(pos);
 
22291    if (handle->getNode()!=NULL)
 
22296#pragma message ("WARNING: covariant return type for get_node() not supported in MSVC.") 
22297      printf (
"ERROR: covariant return type for get_node() not supported in MSVC. \n");
 
 
22320  ROSE_ASSERT(node != NULL);
 
22323  cout<<
"///////////// begin of SageInterface::dumpInfo() ///////////////"<<endl;
 
22324  cout<<
"--------------base info. for SgNode---------------"<<endl;
 
22330    cout<<
"--------------source location info. for SgNode---------------"<<endl;
 
22338      cout<<
"--------------preprocessing info. for SgNode---------------"<<endl;
 
22339      AttachedPreprocessingInfoType::iterator i;
 
22340      cout<<
"Total attached preprocessingInfo count="<<comments->size()<<endl;
 
22341      for (i = comments->begin (); i != comments->end (); i++)
 
22344        pinfo->display(
"");
 
22347    cout<<
"--------------name info. for SgNode---------------"<<endl;
 
22351      cout<<
"\tqualified name="<<decl->get_qualified_name().getString()<<endl;
 
22354      cout<<
"\treferenced variable name= "<<varRef->get_symbol()->
get_name().getString()<<endl;
 
22361  cout<<
"///////////// end of SageInterface::dumpInfo() ///////////////"<<endl;
 
 
22372  bool retVal = 
true;
 
22374  ROSE_ASSERT(stmt !=NULL);
 
22376#ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT 
22383  if (funcDecl != NULL)
 
22386    if (funcDecl == NULL)
 
22388      cerr<<
"In collectReadWriteRefs(): cannot proceed without a function body!"<<endl;
 
22391      stmt = funcDecl->get_definition()->
get_body();
 
22399  ROSE_ASSERT(funcDef != NULL);
 
22401  ROSE_ASSERT(funcBody!= NULL);
 
22404  AstInterfaceImpl faImpl(funcBody);
 
22405  AstInterface fa(&faImpl);
 
22406  ArrayAnnotation* annot = ArrayAnnotation::get_inst();
 
22407  if( useCachedDefUse ){
 
22408    ArrayInterface* array_interface = ArrayInterface::get_inst(*annot, fa, funcDef, AstNodePtrImpl(funcDef));
 
22409    LoopTransformInterface::set_arrayInfo(array_interface);
 
22411    ArrayInterface array_interface(*annot);
 
22414    array_interface.observe(fa);
 
22415    LoopTransformInterface::set_arrayInfo(&array_interface);
 
22417  LoopTransformInterface::set_astInterface(fa);
 
22419  LoopTransformInterface::set_sideEffectInfo(annot);
 
22422  DoublyLinkedListWrap<AstNodePtr> rRef1, wRef1;
 
22423  CollectDoublyLinkedList<AstNodePtr> crRef1(rRef1),cwRef1(wRef1);
 
22424  AstNodePtr s1 = AstNodePtrImpl(stmt);
 
22427  if (!AnalyzeStmtRefs(fa, s1, cwRef1, crRef1))
 
22432    mlog[Sawyer::Message::Common::DEBUG] << 
"Function: " << funcDef->get_declaration()->get_qualified_name() << 
" calls at least one function that has not been annotated." << endl;
 
22437  for (DoublyLinkedEntryWrap<AstNodePtr>* p = rRef1.First(); p != 0; )
 
22439    DoublyLinkedEntryWrap<AstNodePtr>* p1 = p;
 
22441    AstNodePtr cur = p1->GetEntry();
 
22442    SgNode* sgRef = AstNodePtrImpl(cur).get_ptr();
 
22443   ROSE_ASSERT(sgRef != NULL);
 
22444    readRefs.push_back(sgRef);
 
22449  for (DoublyLinkedEntryWrap<AstNodePtr>* p = wRef1.First(); p != 0; )
 
22451    DoublyLinkedEntryWrap<AstNodePtr>* p1 = p;
 
22453    AstNodePtr cur = p1->GetEntry();
 
22454    SgNode* sgRef = AstNodePtrImpl(cur).get_ptr();
 
22455    ROSE_ASSERT(sgRef != NULL);
 
22456    writeRefs.push_back(sgRef);
 
 
22469static bool skipSomeRefs(
SgNode* n)
 
22472  return (isSgThisExp(n)||isSgArrowExp(n)||isSgDotExp(n));
 
22478  ROSE_ASSERT(stmt != NULL);
 
22479  vector <SgNode* > readRefs, writeRefs;
 
22483  vector<SgNode*>::iterator iter = readRefs.begin();
 
22484  for (; iter!=readRefs.end();iter++)
 
22486    SgNode* current = *iter;
 
22489    ROSE_ASSERT (current != NULL);
 
22492    if (!name) 
continue;
 
22495    readVars.insert(name);
 
22498  vector<SgNode*>::iterator iterw = writeRefs.begin();
 
22499  for (; iterw!=writeRefs.end();iterw++)
 
22501    SgNode* current = *iterw;
 
22502    ROSE_ASSERT (current != NULL);
 
22504    if (!name) 
continue;
 
22508    writeVars.insert(name);
 
 
22516  ROSE_ASSERT(stmt != NULL);
 
22517  set<SgInitializedName*> readVars, writeVars;
 
22522    set_difference(readVars.begin(), readVars.end(),
 
22523        writeVars.begin(), writeVars.end(),
 
22524        std::inserter(readOnlyVars, readOnlyVars.begin()));
 
22534          readOnlyVars.insert (v_ref->get_symbol()->get_declaration());
 
 
22544  set<SgInitializedName*> temp;
 
22547  for (set<SgInitializedName*>::const_iterator iter = temp.begin();
 
22548      iter!=temp.end(); iter++)
 
22550    SgSymbol* symbol = (*iter)->get_symbol_from_symbol_table () ;
 
22551    ROSE_ASSERT(symbol != NULL );
 
22552    ROSE_ASSERT(isSgVariableSymbol(symbol));
 
22553    readOnlySymbols.insert(isSgVariableSymbol(symbol));
 
 
22561  bool result = 
false;
 
22562  ROSE_ASSERT(ref != NULL);
 
22574    ROSE_ASSERT(grandparent);
 
22575    if (isSgFunctionCallExp(grandparent)) 
 
22581      size_t param_index = 0;
 
22583      SgExpressionPtrList expList = isSgExprListExp(ref->
get_parent())->get_expressions();
 
22584      Rose_STL_Container<SgExpression*>::const_iterator iter= expList.begin();
 
22585      for (; iter!=expList.end(); iter++)
 
22593      SgExpression* func_exp = isSgFunctionCallExp(grandparent)->get_function();
 
22594      ROSE_ASSERT (func_exp);
 
22599        SgInitializedNamePtrList nameList = funcDecl->get_args();
 
22604        if (param_index >= nameList.size() ||isSgTypeEllipse(nameList[param_index]->get_type()) )
 
22606          if (isSgReferenceType(ref))
 
22610        if (isSgReferenceType(nameList[param_index]->get_type()))
 
22615      else if (isSgDotExp (func_exp) || isSgArrowExp(func_exp)) 
 
22618        ROSE_ASSERT (binOp);
 
22620        ROSE_ASSERT (mfuncRef);
 
22622        ROSE_ASSERT (mfuncDecl);
 
22623        SgInitializedNamePtrList nameList = mfuncDecl->get_args();
 
22625        if (isSgReferenceType(nameList[param_index]->get_type()))
 
 
22640  Rose_STL_Container <SgNode*> var_refs = NodeQuery::querySubTree (
const_cast<SgStatement *
> (s), V_SgVarRefExp);
 
22642  Rose_STL_Container<SgNode*>::iterator iter = var_refs.begin();
 
22643  for (; iter!=var_refs.end(); iter++)
 
22646    ROSE_ASSERT(ref != NULL);
 
22653      varSetB.insert(ref);
 
22659      ROSE_ASSERT(grandparent);
 
22660      if (isSgFunctionCallExp(grandparent)) 
 
22663        int param_index =0;
 
22664        SgExpressionPtrList expList = isSgExprListExp(ref->
get_parent())->get_expressions();
 
22665        Rose_STL_Container<SgExpression*>::const_iterator iter= expList.begin();
 
22666        for (; iter!=expList.end(); iter++)
 
22674        SgFunctionRefExp * funcRef = isSgFunctionRefExp(isSgFunctionCallExp(grandparent)->get_function());
 
22676        SgInitializedNamePtrList nameList = funcDecl->get_args();
 
22678        if (isSgReferenceType(nameList[param_index]->get_type()))
 
22680          varSetB.insert(ref);
 
22686      varSetB.insert(ref);
 
 
22690#ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT 
22695  static LivenessAnalysis* liv = NULL; 
 
22699  static DFAnalysis * defuse = NULL; 
 
22703    ROSE_ASSERT(project != NULL);
 
22704    defuse = 
new DefUseAnalysis(project);
 
22707  ROSE_ASSERT(defuse != NULL);
 
22708  defuse->run(debug);
 
22711    defuse->dfaToDOT();
 
22714  liv = 
new LivenessAnalysis(debug,(DefUseAnalysis*)defuse);
 
22715  ROSE_ASSERT(liv != NULL);
 
22717  std::vector <FilteredCFGNode < IsDFAFilter > > dfaFunctions;
 
22718  NodeQuerySynthesizedAttributeType vars =
 
22719          NodeQuery::querySubTree(project, V_SgFunctionDefinition);
 
22720  NodeQuerySynthesizedAttributeType::const_iterator i;
 
22721  bool abortme=
false;
 
22723  for (i= vars.begin(); i!=vars.end();++i)
 
22726    ROSE_ASSERT(func != NULL);
 
22730      string funcName = func->get_declaration()->get_qualified_name().str();
 
22731      cout<< 
" .. running liveness analysis for function: " << funcName << endl;
 
22733    FilteredCFGNode <IsDFAFilter> rem_source = liv->run(func,abortme);
 
22735    liv->fixupStatementsINOUT(func);
 
22736    if (rem_source.getNode()!=NULL)
 
22737      dfaFunctions.push_back(rem_source);
 
22743    cout << 
"Writing out liveness analysis results into var.dot... " << endl;
 
22744    std::ofstream f2(
"var.dot");
 
22745    dfaToDot(f2, 
string(
"var"), dfaFunctions, (DefUseAnalysis*)defuse, liv);
 
22749    cerr<<
"Error: Liveness analysis is ABORTING ." << endl;
 
 
22757#ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT 
22761  ROSE_ASSERT(liv != NULL);
 
22762  ROSE_ASSERT(loop != NULL);
 
22764  std::vector<SgInitializedName*> liveIns0, liveOuts0; 
 
22774  CFGNode cfgnode(forstmt,2);
 
22775  FilteredCFGNode<IsDFAFilter> filternode= FilteredCFGNode<IsDFAFilter> (cfgnode);
 
22779  ROSE_ASSERT(filternode.getNode()==forstmt);
 
22782  vector<FilteredCFGEdge < IsDFAFilter > > out_edges = filternode.outEdges();
 
22783  ROSE_ASSERT(out_edges.size()==2);
 
22784  vector<FilteredCFGEdge < IsDFAFilter > >::iterator iter= out_edges.begin();
 
22786  for (; iter!=out_edges.end();iter++)
 
22788    FilteredCFGEdge < IsDFAFilter > edge= *iter;
 
22792    if (edge.condition()==eckTrue)
 
22794      SgNode* firstnode= edge.target().getNode();
 
22795      liveIns0 = liv->getIn(firstnode);
 
22797      for (std::vector<SgInitializedName*>::iterator iter = liveIns0.begin();
 
22798          iter!=liveIns0.end(); iter++)
 
22801        liveIns.insert(*iter);
 
22806    else if (edge.condition()==eckFalse)
 
22808      SgNode* firstnode= edge.target().getNode();
 
22809      liveOuts0 = liv->getIn(firstnode);
 
22811      for (std::vector<SgInitializedName*>::iterator iter = liveOuts0.begin();
 
22812          iter!=liveOuts0.end(); iter++)
 
22816        liveOuts.insert(*iter);
 
22821      cerr<<
"Unexpected CFG out edge type for SgForStmt!"<<endl;
 
 
22830static bool isAssignReduction (
SgVarRefExp* ref_exp1, 
SgVarRefExp* ref_exp2, OmpSupport::omp_construct_enum& optype)
 
22832  bool isReduction = 
false;
 
22834  ROSE_ASSERT (ref_exp1!= NULL);
 
22835  ROSE_ASSERT (ref_exp2!= NULL);
 
22836  ROSE_ASSERT (ref_exp1-> get_symbol() == ref_exp2-> get_symbol());
 
22842  if (stmt != stmt2) 
return false; 
 
22849  if (exp_stmt && isSgAssignOp(exp_stmt->get_expression()))
 
22852    assign_lhs = isSgAssignOp(exp_stmt->get_expression())->
get_lhs_operand();
 
22853    assign_rhs = isSgAssignOp(exp_stmt->get_expression())->
get_rhs_operand();
 
22854    ROSE_ASSERT(assign_lhs && assign_rhs);
 
22862      SgBinaryOp * binop = isSgBinaryOp(assign_rhs);
 
22868        if( !((op_lhs==ref_exp1)||(op_lhs==ref_exp2))
 
22869            && !((op_rhs==ref_exp1)||(op_rhs==ref_exp2)))
 
22872        bool isOnLeft = 
false; 
 
22873        if ((op_lhs==ref_exp1)||   
 
22874            (op_lhs==ref_exp2))
 
22880              optype = OmpSupport::e_reduction_plus;
 
22881              isReduction = 
true;
 
22884          case V_SgMultiplyOp:
 
22886              optype = OmpSupport::e_reduction_mul;
 
22887              isReduction = 
true;
 
22890          case V_SgSubtractOp: 
 
22892              optype = OmpSupport::e_reduction_minus;
 
22895                isReduction = 
true;
 
22901              optype = OmpSupport::e_reduction_bitand ;
 
22902              isReduction = 
true;
 
22907              optype = OmpSupport::e_reduction_bitxor;
 
22908              isReduction = 
true;
 
22913              optype = OmpSupport::e_reduction_bitor;
 
22914              isReduction = 
true;
 
22919              optype = OmpSupport::e_reduction_logand;
 
22920              isReduction = 
true;
 
22925              optype = OmpSupport::e_reduction_logor;
 
22926              isReduction = 
true;
 
22935  return isReduction;
 
22944  bool matchStmt1 = 
false;
 
22945  bool matchStmt2 = 
false;
 
22952  ROSE_ASSERT (ref1 != NULL);
 
22953  ROSE_ASSERT (ref2 != NULL);
 
22954  ROSE_ASSERT (ref1-> get_symbol() == ref2-> get_symbol());
 
22962  if (stmt1 == stmt2) 
return false;
 
22985    bool matchBody = 
false;
 
22986    bool matchCondition= 
false;
 
22987    if (
SgIfStmt * if_stmt = isSgIfStmt (if_cond_stmt->get_parent()) )
 
22989      if (
SgStatement* body = if_stmt->get_true_body())
 
22994          ROSE_ASSERT(stmt2 != NULL);
 
22995          if ( ((block->get_statements()).size() == 1) && stmt2->
get_scope() == block )
 
23006      if (
SgExprStatement* cond_exp_stmt = isSgExprStatement (if_stmt->get_conditional()) )
 
23008        SgExpression* cond_exp = cond_exp_stmt->get_expression();
 
23009        if (
SgBinaryOp * binop = isSgBinaryOp (cond_exp))
 
23014            if (isSgLessThanOp (binop))
 
23016              optype = OmpSupport::e_reduction_max;
 
23017              matchCondition= 
true;
 
23019            else if (isSgGreaterThanOp(binop))
 
23021              optype = OmpSupport::e_reduction_min;
 
23022              matchCondition= 
true;
 
23028            if (isSgLessThanOp (binop))
 
23030              optype = OmpSupport::e_reduction_min;
 
23031              matchCondition= 
true;
 
23033            else if (isSgGreaterThanOp(binop))
 
23035              optype = OmpSupport::e_reduction_max;
 
23036              matchCondition= 
true;
 
23043    matchStmt1 = matchBody && matchCondition;
 
23047  return (matchStmt2 && matchStmt1);
 
23054static bool isSingleAppearanceReduction(
SgVarRefExp* ref1, OmpSupport::omp_construct_enum& optype )
 
23056  bool isReduction = 
false;
 
23058  ROSE_ASSERT (ref1 != NULL);
 
23064  if (isSgExprStatement(stmt))
 
23066    SgExpression* exp = isSgExprStatement(stmt)->get_expression();
 
23068    if (isSgPlusPlusOp(exp)) 
 
23071      optype = OmpSupport::e_reduction_plus;
 
23072      isReduction = 
true;
 
23074    else if (isSgMinusMinusOp(exp)) 
 
23076      optype = OmpSupport::e_reduction_minus;
 
23077      isReduction = 
true;
 
23088            case V_SgPlusAssignOp:
 
23090                optype = OmpSupport::e_reduction_plus;
 
23091                isReduction = 
true;
 
23094            case V_SgMultAssignOp:
 
23096                optype = OmpSupport::e_reduction_mul;
 
23097                isReduction = 
true;
 
23100            case V_SgMinusAssignOp:
 
23102                optype = OmpSupport::e_reduction_minus;
 
23103                isReduction = 
true;
 
23106            case V_SgAndAssignOp:
 
23108                optype = OmpSupport::e_reduction_bitand;
 
23109                isReduction = 
true;
 
23112            case V_SgXorAssignOp:
 
23114                optype = OmpSupport::e_reduction_bitxor;
 
23115                isReduction = 
true;
 
23118            case V_SgIorAssignOp:
 
23120                optype = OmpSupport::e_reduction_bitor;
 
23121                isReduction = 
true;
 
23130  return isReduction;
 
23162  std::set<SgInitializedName*> candidateVars; 
 
23164  std::map <SgInitializedName*, vector<SgVarRefExp* > > var_references;
 
23166  Rose_STL_Container<SgNode*> reflist = NodeQuery::querySubTree(loop, V_SgVarRefExp);
 
23168  ROSE_ASSERT(lbody != NULL);
 
23169  Rose_STL_Container<SgNode*>::iterator iter = reflist.begin();
 
23170  for (; iter!=reflist.end(); iter++)
 
23179    ROSE_ASSERT(var_scope != NULL);
 
23180    if ((
isScalarType(initname->get_type())) &&(initname !=loopindex)
 
23183      candidateVars.insert(initname);
 
23184      var_references[initname].push_back(ref_exp);
 
23189  std::set<SgInitializedName*>::iterator niter=candidateVars.begin();
 
23190  for (; niter!=candidateVars.end(); niter++)
 
23193    bool isReduction = 
false;
 
23194    OmpSupport::omp_construct_enum optype;
 
23196    if (var_references[initname].size()==1)
 
23198      mlog[Sawyer::Message::Common::DEBUG] << 
"Debug: SageInterface::ReductionRecognition() A candidate used once:"<<initname->get_name().getString()<<endl;
 
23199      SgVarRefExp* ref_exp = *(var_references[initname].begin());
 
23200      if (isSingleAppearanceReduction (ref_exp, optype))
 
23201        isReduction = 
true;
 
23204    else if (var_references[initname].size()==2)
 
23206      mlog[Sawyer::Message::Common::DEBUG] << 
"Debug: A candidate used twice:"<<initname->get_name().getString()<<endl;
 
23207      SgVarRefExp* ref_exp1 = *(var_references[initname].begin());
 
23208      SgVarRefExp* ref_exp2 = *(++var_references[initname].begin());
 
23211      if (isAssignReduction (ref_exp1, ref_exp2, optype) || isIfReduction (ref_exp1, ref_exp2, optype) )
 
23213        isReduction = 
true;
 
23219      results.insert(make_pair(initname,optype));
 
 
23226  ROSE_ASSERT(r!=NULL);
 
23227#ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT 
23228  ConstantFolding::constantFoldingOptimization(r,
false);
 
 
23238      virtual void visit (
SgNode * n)
 
23245          ROSE_ASSERT (name_attribute != NULL);
 
23253  exampleTraversal.
traverse(project, preorder);
 
 
23285    const SgInitializedNamePtrList&   orig_decls = params.
get_args();
 
23287    std::transform( orig_decls.begin(), orig_decls.end(), sg::sage_inserter(copy), sg::InitNameCloner(copy, fundef) );
 
23301    sg::swap_child(ll, rr, &SgFunctionDeclaration::get_definition,    &SgFunctionDeclaration::set_definition);
 
23302    sg::swap_child(ll, rr, &SgFunctionDeclaration::get_parameterList, &SgFunctionDeclaration::set_parameterList);
 
23312  std::pair<SgStatement*, SgInitializedName*>
 
23326    SgType*                   result_type = definingDeclaration.get_type()->get_return_type();
 
23331    SgFunctionDeclaration*    wrapperfn = SB::buildDefiningFunctionDeclaration(newName, result_type, ¶m_list, containing_scope);
 
23334    ROSE_ASSERT(wrapperdef);
 
23337    wrapperfn->set_exceptionSpecification(definingDeclaration.get_exceptionSpecification());
 
23341    swapDefiningElements(definingDeclaration, *wrapperfn);
 
23346    SgInitializedNamePtrList& param_decls = param_list.
get_args();
 
23348    std::transform( param_decls.begin(), param_decls.end(), sg::sage_inserter(*args), sg::VarRefBuilder(*wrapperdef) );
 
23350    SgFunctionCallExp*        callWrapped = SB::buildFunctionCallExp( newName, result_type, args, body );
 
23355    if (!isSgTypeVoid(result_type))
 
23358      SgVariableDeclaration*  res = SB::buildVariableDeclaration( 
"res", result_type, SB::buildAssignInitializer(callWrapped), body );
 
23365      callStatement = res;
 
23372      callStatement = SB::buildExprStatement(callWrapped);
 
23376    ROSE_ASSERT(callStatement);
 
23380    SgFunctionDeclaration*    wrapperfn_proto = SB::buildNondefiningFunctionDeclaration(wrapperfn, containing_scope, decorator_proto);
 
23386    return std::make_pair(callStatement, resultName);
 
23394    struct VarrefBuilder
 
23413    template <
class AstNode>
 
23414    struct VarrefCreator : VarrefBuilder
 
23419      VarrefCreator(AstNode& orig)
 
23423      SgVarRefExp* 
get()
 const { 
return VarrefBuilder::build(origin); }
 
23426    template <
class AstNode>
 
23427    VarrefCreator<AstNode>
 
23428    varrefCreator(AstNode& n)
 
23430      return VarrefCreator<AstNode>(n);
 
23440      return SB::buildMultiplyOp(lhs, SI::deepCopy(rhs));
 
23443    std::pair<std::vector<SgExpression*>, 
SgType*>
 
23444    get_C_array_dimensions_aux(
const SgArrayType& arr_type)
 
23450      std::vector<SgExpression*> indices;
 
23451      SgType*                    undertype = NULL;
 
23455      if (arrtype->get_index() == NULL)
 
23457        indices.push_back(SB::buildNullExpression());
 
23458        undertype = arrtype->get_base_type();
 
23459        arrtype = isSgArrayType(undertype);
 
23465        ROSE_ASSERT(indexexpr);
 
23467        indices.push_back(SI::deepCopy(indexexpr));
 
23468        undertype = arrtype->get_base_type();
 
23469        arrtype = isSgArrayType(undertype);
 
23472      ROSE_ASSERT((!indices.empty()) && undertype);
 
23473      return std::make_pair(indices, undertype);
 
23477    std::vector<SgExpression*>
 
23478    get_C_array_dimensions_aux(
const SgArrayType& arrtype, 
const VarrefBuilder& varrefBuilder)
 
23482      std::pair<std::vector<SgExpression*>, 
SgType*> res = get_C_array_dimensions_aux(arrtype);
 
23483      const std::vector<SgExpression*>::iterator     first = res.first.begin();
 
23486      if (isSgNullExpression(*first))
 
23494        const std::vector<SgExpression*>::iterator aa = first+1;
 
23495        const std::vector<SgExpression*>::iterator zz = res.first.end();
 
23497        SgExpression* sz_undertype = SB::buildSizeOfOp(res.second);
 
23498        SgExpression* denominator  = std::accumulate(aa, zz, sz_undertype, create_mulop);
 
23499        SgSizeOfOp*   sz_var       = SB::buildSizeOfOp(varrefBuilder.get());
 
23500        SgExpression* sz           = SB::buildDivideOp(sz_var, denominator);
 
23502        std::swap(*first, sz);
 
23510  std::vector<SgExpression*>
 
23513    return get_C_array_dimensions_aux(arrtype).first;
 
 
23516  std::vector<SgExpression*>
 
23519    return get_C_array_dimensions_aux(arrtype, varrefCreator(varref));
 
 
23522  std::vector<SgExpression*>
 
23525    return get_C_array_dimensions_aux(arrtype, varrefCreator(initname));
 
 
23532          set<unsigned int> sourceSequenceSet;
 
23534          void visit ( 
SgNode* astNode );
 
 
23542     if (fileInfo != NULL)
 
23544          unsigned int source_sequence_number = fileInfo->get_source_sequence_number();
 
23546          printf (
"In CollectSourceSequenceNumbers::visit(): source_sequence_number = %" PRIuPTR 
" \n",source_sequence_number);
 
23548          sourceSequenceSet.insert(source_sequence_number);
 
 
23558    traversal.
traverse(astNode,preorder);
 
23560    return traversal.sourceSequenceSet;
 
 
23647#ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT 
23649    if (collapsing_factor <= 1)
 
23662    ROSE_ASSERT (global_scope != NULL);
 
23671    bool *isPlus = 
new bool[collapsing_factor]; 
 
23675    std::vector<SgForStatement* > loops= SageInterface::querySubTree<SgForStatement>(target_loop,V_SgForStatement);
 
23676    ROSE_ASSERT(loops.size()>=collapsing_factor);
 
23692    ROSE_ASSERT(
getScope(target_loop)->get_parent()!= NULL);
 
23696    while(scope == NULL)
 
23698       parent = isSgStatement(parent->
get_parent());
 
23699       scope = isSgScopeStatement(parent);
 
23703    if (insert_target != NULL)
 
23708    ROSE_ASSERT(scope != NULL);
 
23711    for(
size_t i = 0; i < collapsing_factor; i ++)
 
23713        temp_target_loop = loops[i];
 
23718        if (!
isCanonicalForLoop(temp_target_loop, &ivar[i], &lb[i], &ub[i], &step[i], &orig_body[i], &isPlus[i]))
 
23720            cerr<<
"Error in SageInterface::loopCollapsing(): target loop is not canonical."<<endl;
 
23728            delete[] orig_body;
 
23729            delete[] total_iters;
 
23736        ROSE_ASSERT(ivar[i]&& lb[i] && ub[i] && step[i]);
 
23740        if(isPlus[i] == 
true)
 
23754        string iter_var_name= 
"_total_iters";
 
23775    new_var_list->append_expression(isSgVarRefExp(ub_exp));
 
23778    for(
unsigned int i = 0; i < collapsing_factor; i++)
 
23781        for(
unsigned int j = collapsing_factor - 1; j > i; j--)
 
23790        new_var_list->append_expression(isSgVarRefExp(interval[i]));
 
23800      ROSE_ASSERT(insert_target != NULL);
 
23805      new_var_list->append_expression(clps_index_ref);
 
23811     ROSE_ASSERT(body != NULL);
 
23814     std::vector<SgStatement*> new_stmt_list;
 
23825     for(
unsigned int i = 0; i < collapsing_factor - 1; i ++)
 
23827         if(isPlus[i] == 
true)
 
23833         new_stmt_list.push_back(assign_stmt);
 
23836         if(i != collapsing_factor - 2){ 
 
23837             string remain_var_name= 
"_remainder";
 
23838             remain_var_name = 
"__"+ ivar[i]->get_name().getString() + remain_var_name;
 
23841             new_stmt_list.push_back(loop_index_decl);
 
23847    if(isPlus[collapsing_factor - 1] == 
true)
 
23851     new_stmt_list.push_back(assign_stmt);
 
23863    ROSE_ASSERT(cond_stmt != NULL);
 
23870    target_loop = new_loop; 
 
23872   ConstantFolding::constantFoldingOptimization(scope->
get_parent(),
false);   
 
23878    delete [] orig_body;
 
23879    delete [] total_iters;
 
23880    delete [] interval;
 
23885    return new_var_list;
 
 
23904     RoseAst ast_of_original(tree2);
 
23913     while (i_copy != ast_of_copy.
end())
 
23916          printf (
"*i_copy = %p = %s \n",*i_copy,(*i_copy)->class_name().c_str());
 
23917          printf (
"*i_original = %p = %s \n",*i_original,(*i_original)->class_name().c_str());
 
23921          if ((*i_copy)->variantT() != (*i_original)->variantT())
 
23924               printf (
"ERROR: return from SageInterface::isStructurallyEquivalentAST(): (*i_copy)->variantT() != (*i_original)->variantT() \n");
 
23927               printf (
"Making this an error! \n");
 
23937          ROSE_ASSERT(i_original != ast_of_original.
end());
 
23942     ROSE_ASSERT(i_copy == ast_of_copy.
end() && i_original == ast_of_original.
end());
 
 
23962  lower_bound = NULL;
 
23963  upper_bound = NULL;
 
23967  const std::vector<SgStatement *> & init_stmts = for_init_stmt->
get_init_stmt();
 
23968  assert(init_stmts.size() == 1);
 
23970  assert(init_stmt != NULL);
 
23973  SgAssignOp * assign_init = isSgAssignOp(init);
 
23974  assert(assign_init != NULL);
 
23976  assert(iterator_init_ref != NULL);
 
23977  iterator = iterator_init_ref->get_symbol();
 
23978  assert(iterator != NULL);
 
23981  SgExprStatement * test_stmt = isSgExprStatement(for_loop->get_test());
 
23982  assert(test_stmt != NULL);
 
23988  while (isSgCastExp(lhs_exp)) lhs_exp = ((
SgCastExp *)lhs_exp)->get_operand_i();
 
23989  SgVarRefExp * lhs_var_ref = isSgVarRefExp(lhs_exp);
 
23990  bool lhs_it = (lhs_var_ref != NULL) && (lhs_var_ref->get_symbol() == iterator);
 
23993  while (isSgCastExp(rhs_exp)) rhs_exp = ((
SgCastExp *)rhs_exp)->get_operand_i();
 
23994  SgVarRefExp * rhs_var_ref = isSgVarRefExp(rhs_exp);
 
23996  bool rhs_it = (rhs_var_ref != NULL) && (rhs_var_ref->get_symbol() == iterator);
 
24004  assert(lhs_it != rhs_it);
 
24013    case V_SgGreaterOrEqualOp:
 
24014      inclusive = lhs_it;
 
24017    case V_SgGreaterThanOp:
 
24018      inclusive = !lhs_it;
 
24021    case V_SgLessOrEqualOp:
 
24022      inclusive = lhs_it;
 
24023      reversed = !lhs_it;
 
24025    case V_SgLessThanOp:
 
24026      inclusive = !lhs_it;
 
24027      reversed = !lhs_it;
 
24029    case V_SgEqualityOp:
 
24030    case V_SgNotEqualOp:
 
24036  switch (increment->variantT()) {
 
24037    case V_SgPlusPlusOp:
 
24041    case V_SgMinusMinusOp:
 
24045    case V_SgPlusAssignOp:
 
24050      assert(var_ref_lhs != NULL && var_ref_lhs->get_symbol() == iterator);
 
24055    case V_SgMinusAssignOp:
 
24060      assert(var_ref_lhs != NULL && var_ref_lhs->get_symbol() == iterator);
 
24070      assert(inc_assign_lhs != NULL && inc_assign_lhs->get_symbol() == iterator);
 
24073      assert(inc_assign_rhs != NULL);
 
24075      if (inc_assign_rhs_lhs != NULL && inc_assign_rhs_lhs->get_symbol() == iterator)
 
24078      if (inc_assign_rhs_rhs != NULL && inc_assign_rhs_rhs->get_symbol() == iterator)
 
 
24099#ifdef ROSE_BUILD_JAVA_LANGUAGE_SUPPORT 
24106    jstring temp_directory = (jstring) Rose::Frontend::Java::Ecj::currentEnvironment -> CallObjectMethod(::currentJavaTraversalClass, Rose::Frontend::Java::Ecj::getTempDirectoryMethod);
 
24108    const char *utf8 = Rose::Frontend::Java::Ecj::currentEnvironment -> GetStringUTFChars(temp_directory, NULL);
 
24110    string directory_name = utf8;
 
24111    Rose::Frontend::Java::Ecj::currentEnvironment -> ReleaseStringUTFChars(temp_directory, utf8);
 
24113    list<string> sourcepath = project -> get_Java_sourcepath();
 
24114    sourcepath.push_back(directory_name); 
 
24115    project -> set_Java_sourcepath(sourcepath);
 
24117    return directory_name;
 
 
24125    string command = string(
"rm -fr ") + directory_name;
 
24126    int status = system(command.c_str());
 
24127    ROSE_ASSERT(status == 0);
 
 
24138    project -> get_sourceFileNameList().push_back(filename);
 
24139    Rose_STL_Container<std::string> arg_list = project -> get_originalCommandLineArgumentList();
 
24140    arg_list.push_back(filename);
 
24143    int error_code = 0; 
 
24144    SgFile *file = determineFileType(arg_list, error_code, project);
 
24146    ROSE_ASSERT(sourcefile);
 
24147    sourcefile -> set_parent(project);
 
24152    project -> get_fileList_ptr() -> get_listOfFiles().push_back(sourcefile);
 
24153    ROSE_ASSERT(sourcefile == isSgSourceFile((*project)[filename]));
 
24155    sourcefile -> build_Java_AST(arg_list, project -> get_originalCommandLineArgumentList());
 
24158        project -> get_fileList_ptr() -> get_listOfFiles().pop_back(); 
 
24159        ROSE_ASSERT(sourcefile != isSgSourceFile((*project)[filename]));
 
24163     ROSE_ASSERT(file->get_preprocessorDirectivesAndCommentsList() != NULL);
 
 
24174    string command = 
"package " + package_name + 
";";
 
24179    jstring temp_file = (jstring) Rose::Frontend::Java::Ecj::currentEnvironment -> CallObjectMethod(Rose::Frontend::Java::Ecj::currentJavaTraversalClass,
 
24180                                                                                                    Rose::Frontend::Java::Ecj::createTempFileMethod,
 
24181                                                                                                    Rose::Frontend::Java::Ecj::currentEnvironment -> NewStringUTF(command.c_str()));
 
24183    const char *utf8 = Rose::Frontend::Java::Ecj::currentEnvironment -> GetStringUTFChars(temp_file, NULL);
 
24185    string filename = (string) utf8;
 
24186    Rose::Frontend::Java::Ecj::currentEnvironment -> ReleaseStringUTFChars(temp_file, utf8);
 
24190    return package_name;
 
 
24199    string command = 
"import " + import_string + 
";";
 
24204    jstring temp_file = (jstring) Rose::Frontend::Java::Ecj::currentEnvironment -> CallObjectMethod(Rose::Frontend::Java::Ecj::currentJavaTraversalClass,
 
24205                                                                                                    Rose::Frontend::Java::Ecj::createTempFileMethod,
 
24206                                                                                                    Rose::Frontend::Java::Ecj::currentEnvironment -> NewStringUTF(command.c_str()));
 
24208    const char *utf8 = Rose::Frontend::Java::Ecj::currentEnvironment -> GetStringUTFChars(temp_file, NULL);
 
24210    string filename = (string) utf8;
 
24211    Rose::Frontend::Java::Ecj::currentEnvironment -> ReleaseStringUTFChars(temp_file, utf8);
 
24215    return import_string;
 
 
24227    jstring temp_file = (jstring) Rose::Frontend::Java::Ecj::currentEnvironment -> CallObjectMethod(Rose::Frontend::Java::Ecj::currentJavaTraversalClass,
 
24228                                                                                                    Rose::Frontend::Java::Ecj::createTempNamedFileMethod,
 
24229                                                                                                    Rose::Frontend::Java::Ecj::currentEnvironment -> NewStringUTF(file_name.c_str()),
 
24230                                                                                                    Rose::Frontend::Java::Ecj::currentEnvironment -> NewStringUTF(file_content.c_str()));
 
24232    const char *utf8 = Rose::Frontend::Java::Ecj::currentEnvironment -> GetStringUTFChars(temp_file, NULL);
 
24234    string filename = (string) utf8;
 
24235    Rose::Frontend::Java::Ecj::currentEnvironment -> ReleaseStringUTFChars(temp_file, utf8);
 
 
24245    ROSE_ASSERT(scope);
 
24247    for (
int index = 0, length = package_name.size(); index < length; index++) {
 
24249        for (n = index; n < length; n++) {
 
24250            if (package_name[n] == 
'.') {
 
24254        string name = package_name.substr(index, n - index);
 
24256        SgClassSymbol *package_symbol = scope -> lookup_class_symbol(name);
 
24257        if (package_symbol == NULL) { 
 
24261        SgJavaPackageDeclaration *package_declaration = isSgJavaPackageDeclaration(package_symbol -> get_declaration() -> get_definingDeclaration());
 
24262        ROSE_ASSERT(package_declaration);
 
24263        package_definition = package_declaration -> get_definition();
 
24264        ROSE_ASSERT(package_definition);
 
24265        scope = package_definition;
 
24270    return package_definition;
 
 
24278    SgGlobal *global_scope = project -> get_globalScopeAcrossFiles();
 
24280    if (package_definition == NULL) { 
 
24286        if (create_directory) {
 
24287            Rose::Frontend::Java::Ecj::currentEnvironment -> CallObjectMethod(Rose::Frontend::Java::Ecj::currentJavaTraversalClass,
 
24288                                                                              Rose::Frontend::Java::Ecj::createTempNamedDirectoryMethod,
 
24289                                                                              Rose::Frontend::Java::Ecj::currentEnvironment -> NewStringUTF(package_name.c_str()));
 
24295    return package_definition;
 
 
24302    ROSE_ASSERT(package_definition);
 
24303    SgClassSymbol *class_symbol = package_definition -> lookup_class_symbol(class_name);
 
24306                                                  : isSgClassDeclaration(class_symbol -> get_declaration() -> get_definingDeclaration()));
 
24307    if ((! class_declaration) || (! class_declaration -> attributeExists(
"complete"))) { 
 
24308        string qualified_name = package_definition -> get_qualified_name().getString() + 
"." + class_name;
 
24310        class_symbol = package_definition -> lookup_class_symbol(class_name);
 
24313    class_declaration = (class_symbol == NULL
 
24315                                       : isSgClassDeclaration(class_symbol -> get_declaration() -> get_definingDeclaration()));
 
24317    return class_declaration;
 
 
24333    SgClassDeclaration *class_declaration = isSgClassDeclaration(class_type -> get_declaration() -> get_definingDeclaration());
 
24334    ROSE_ASSERT(class_declaration);
 
24335    SgClassDefinition *scope = isSgClassDefinition(class_declaration -> get_scope());
 
24336    while (scope && (! isSgJavaPackageDeclaration(scope -> get_parent()))) {
 
24337        class_declaration = isSgClassDeclaration(scope -> get_parent());
 
24338        ROSE_ASSERT(class_declaration);
 
24339        scope = isSgClassDefinition(class_declaration -> get_scope());
 
24346    string class_name = class_declaration -> 
get_name().getString();
 
 
24355    ROSE_ASSERT(class_definition);
 
24357    ROSE_ASSERT(type_list);
 
24359    ROSE_ASSERT(string_array_type);
 
24360    type_list -> append_argument(string_array_type);
 
24366    SgFunctionSymbol *method_symbol = class_definition -> lookup_function_symbol(
"main", member_function_type);
 
24368    return (method_symbol == NULL ? NULL : isSgMemberFunctionDeclaration(method_symbol -> get_declaration()));
 
 
24376    SgClassDeclaration *class_declaration = isSgClassDeclaration(class_type -> get_declaration() -> get_definingDeclaration());
 
24377    ROSE_ASSERT(class_declaration);
 
 
24390  ROSE_ASSERT  (old_sym != NULL);
 
24391  ROSE_ASSERT  (new_sym != NULL);
 
24392  ROSE_ASSERT (old_sym != new_sym);
 
24393  ROSE_ASSERT  (scope != NULL);
 
24395  Rose_STL_Container<SgNode*> nodeList = NodeQuery::querySubTree(scope, V_SgVarRefExp);
 
24396  for (Rose_STL_Container<SgNode *>::iterator i = nodeList.begin(); i != nodeList.end(); i++)
 
24399    if (vRef->get_symbol() == old_sym)
 
24400      vRef->set_symbol(new_sym);
 
 
24413     bool result = 
true;
 
24415     bool includingSelf = 
false;
 
24418     if (sourceFile == NULL)
 
24420          printf (
"In SageInterface::statementCanBeTransformed(): sourceFile not found \n");
 
24424     ROSE_ASSERT(sourceFile != NULL);
 
24426     if (sourceFile != NULL && sourceFile->get_unparse_tokens() == 
true && sourceFile->get_unparseHeaderFiles() == 
true)
 
24430          string source_filename = stmt->getFilenameString();
 
24432          printf (
"In SageInterface::statementCanBeTransformed(): source_filename = %s \n",source_filename.c_str());
 
24433          printf (
" --- Rose::includeFileMapForUnparsing.size()                   = %zu \n",Rose::includeFileMapForUnparsing.size());
 
24437          if (EDG_ROSE_Translation::edg_include_file_map.find(source_filename) != EDG_ROSE_Translation::edg_include_file_map.end())
 
24439               SgIncludeFile* include_file = EDG_ROSE_Translation::edg_include_file_map[source_filename];
 
24440               ROSE_ASSERT(include_file != NULL);
 
24442               printf (
"include_file->get_can_be_supported_using_token_based_unparsing() = %s \n",include_file->get_can_be_supported_using_token_based_unparsing() ? 
"true" : 
"false");
 
24444               if (include_file->get_can_be_supported_using_token_based_unparsing() == 
false)
 
24447                    printf (
"NOTE: Transformations of this statement cannot be supported using the header file unparsing with token unparsing options! \n");
 
24457               printf (
"Not found in Rose::includeFileMapForUnparsing: source_filename = %s \n",source_filename.c_str());
 
24460               printf (
"Exiting as a test! \n");
 
24466          printf (
"Error: In statementCanBeTransformed(): this might be an issue! \n");
 
 
24479  ROSE_ASSERT (decl!= NULL);
 
24480  ROSE_ASSERT (target_scope != NULL);
 
24481  ROSE_ASSERT (target_scope != decl->
get_scope());
 
24488  if (isSgIfStmt (target_scope))
 
24491    if (target_scope == )
 
24501    case V_SgBasicBlock:
 
24513    case V_SgForStatement:
 
24517        ROSE_ASSERT(stmt != NULL);
 
24518        SgStatementPtrList& stmt_list = stmt->get_init_stmt();
 
24522        if (stmt_list.size() !=1)
 
24524          cerr<<
"Error in moveVariableDeclaration(): only single init statement is handled for SgForStatement now."<<endl;
 
24525          ROSE_ASSERT (stmt_list.size() ==1);
 
24528        ROSE_ASSERT (exp_stmt != NULL);
 
24529        SgAssignOp* assign_op = isSgAssignOp(exp_stmt->get_expression());
 
24530        ROSE_ASSERT (assign_op != NULL);
 
24540        if (init_name->get_initptr() != NULL)
 
24542        init_name->set_initptr(initor);
 
24545        stmt_list.insert (stmt_list.begin(),  decl );
 
24551        cerr<<
"Error. Unhandled target scope type:"<<target_scope->
class_name()<<endl;
 
24552        ROSE_ASSERT  (
false);
 
24558  ROSE_ASSERT(sym != NULL);
 
24560  if (orig_scope != target_scope)
 
24565    init_name->set_scope(target_scope);
 
24567    orig_scope->remove_symbol(sym);
 
24572  ROSE_ASSERT (target_scope->symbol_exists(sym));
 
 
24582   subtreeVal.hasValue_ = 
true;
 
24584   if (isSgIntVal(valExp)) {
 
24585     subtreeVal.value_ = isSgIntVal(valExp)->get_value();
 
24586   } 
else if (isSgLongIntVal(valExp)) {
 
24587     subtreeVal.value_ = isSgLongIntVal(valExp)->get_value();
 
24588   } 
else if (isSgLongLongIntVal(valExp)) {
 
24589     subtreeVal.value_ = isSgLongLongIntVal(valExp)->get_value();
 
24590   } 
else if (isSgShortVal(valExp)) {
 
24591     subtreeVal.value_ = isSgShortVal(valExp)->get_value();
 
24592   } 
else if (isSgUnsignedIntVal(valExp)) {
 
24593     subtreeVal.value_ = isSgUnsignedIntVal(valExp)->get_value();
 
24594   } 
else if (isSgUnsignedLongVal(valExp)) {
 
24595     subtreeVal.value_ = isSgUnsignedLongVal(valExp)->get_value();
 
24596   } 
else if (isSgUnsignedLongLongIntVal(valExp)) {
 
24597     subtreeVal.value_ = isSgUnsignedLongLongIntVal(valExp)->get_value();
 
24598   } 
else if (isSgUnsignedShortVal(valExp)) {
 
24599     subtreeVal.value_ = isSgUnsignedShortVal(valExp)->get_value();
 
24605   if (isSgModifierType(vRef->get_type()) == NULL) {
 
24608     val.hasValue_ = 
false;
 
24611   if (isSgModifierType(vRef->get_type())->
get_typeModifier().get_constVolatileModifier().isConst()) {
 
24617     if (isSgAssignInitializer(ini)) {
 
24622       return variableEval.
traverse(rhs);
 
24626   val.hasValue_ = 
false;
 
24632   if (isSgExpression(node) != NULL) {
 
24634     if (valueExp != NULL) {
 
24635       return this->getValueExpressionValue(valueExp);
 
24639     if (varRefExp != NULL) {
 
24641       return evaluateVariableReference(varRefExp);
 
24644     if (isSgAssignInitializer(node)) {
 
24645       if(synList.at(0).hasValue_){
 
24646         return synList.at(0);
 
24650         val.hasValue_ = 
false;
 
24655     evaluatedValue.hasValue_ = 
false;
 
24656     evaluatedValue.value_ = -1;
 
24658    if(synList.size() != 2){
 
24659      for(SynthesizedAttributesList::iterator it = synList.begin(); it != synList.end(); ++it){
 
24660        std::cout << 
"Node: " << node->unparseToString() << 
"\n" << (*it).value_ << std::endl;
 
24661        std::cout << 
"Parent: " << node->get_parent()->unparseToString() << std::endl;
 
24662        std::cout << 
"Parent, Parent: " << node->get_parent()->get_parent()->unparseToString() << std::endl;
 
24666     for (SynthesizedAttributesList::iterator it = synList.begin(); it != synList.end(); ++it) {
 
24667       if((*it).hasValue_){
 
24668         if (isSgAddOp(node)) {
 
24669           assert(synList.size() == 2);
 
24670           evaluatedValue.value_ = synList[0].value_ + synList[1].value_ ;
 
24671           evaluatedValue.hasValue_ = 
true;
 
24672         } 
else if (isSgSubtractOp(node)) {
 
24673           assert(synList.size() == 2);
 
24674           evaluatedValue.value_ = synList[0].value_  - synList[1].value_ ;
 
24675           evaluatedValue.hasValue_ = 
true;
 
24676         } 
else if (isSgMultiplyOp(node)) {
 
24677           assert(synList.size() == 2);
 
24678           evaluatedValue.value_ = synList[0].value_  * synList[1].value_ ;
 
24679           evaluatedValue.hasValue_ = 
true;
 
24680         } 
else if (isSgDivideOp(node)) {
 
24681           assert(synList.size() == 2);
 
24682           evaluatedValue.value_ = synList[0].value_  / synList[1].value_ ;
 
24683           evaluatedValue.hasValue_ = 
true;
 
24684         } 
else if (isSgModOp(node)) {
 
24685           assert(synList.size() == 2);
 
24686           evaluatedValue.value_ = synList[0].value_  % synList[1].value_ ;
 
24687           evaluatedValue.hasValue_ = 
true;
 
24690         std::cerr << 
"Expression is not evaluatable" << std::endl;
 
24691         evaluatedValue.hasValue_ = 
false;
 
24692         evaluatedValue.value_ = -1;
 
24693         return evaluatedValue;
 
24696     evaluatedValue.hasValue_ = 
true;
 
24697     return evaluatedValue;
 
24700   evaluatedValue.hasValue_ = 
false;
 
24701   evaluatedValue.value_ = -1;
 
24702   return evaluatedValue;
 
 
 
24715  class TypeEquivalenceChecker {
 
24717     TypeEquivalenceChecker(
bool profile, 
bool useSemanticEquivalence)
 
24718       : profile_(profile), useSemanticEquivalence_(useSemanticEquivalence),
 
24719         namedType_(0), pointerType_(0), arrayType_(0), functionType_(0)
 
24725       if (isSgTypedefType(t)) {
 
24727         node = isSgTypedefType(t)->
stripType(SgType::STRIP_TYPEDEF_TYPE);
 
24729     if(useSemanticEquivalence_){
 
24730       if(isSgModifierType(t)){
 
24732         ROSE_ASSERT(modType != NULL);
 
24739          std::cout << 
"Hit volatile type, stripping of modifier type" << std::endl;
 
24740          node = modType->get_base_type();
 
24744        std::cout << 
"Hit restrict type, stripping of modifier type" << std::endl;
 
24745        node = modType->get_base_type();
 
24749  ROSE_ASSERT(node != NULL);
 
24754  bool equal = 
false;
 
24755  if(t1 == NULL || t2 == NULL){
 
24756    std::string wasNull;
 
24762    std::cerr << 
"ERROR: " << wasNull << 
" was NULL" << std::endl;
 
24775       i != subT1.
end() && j != subT2.
end(); ++i, ++j) {
 
24780   nodeT1 = getBasetypeIfApplicable(nodeT1);
 
24781   nodeT2 = getBasetypeIfApplicable(nodeT2);
 
24785      if(isSgModifierType(nodeT1)){
 
24789        if(modT1.get_constVolatileModifier().isConst() != modT2.get_constVolatileModifier().isConst()){
 
24792        if(modT1.get_constVolatileModifier().isVolatile() != modT2.get_constVolatileModifier().isVolatile()){
 
24795      } 
else if (isSgNamedType(nodeT1)) {      
 
24799        i.skipChildrenOnForward();
 
24800        j.skipChildrenOnForward();
 
24806        if(!c1->get_autonomous_declaration()){
 
24809        if (!c2->get_autonomous_declaration()){
 
24818      } 
else if (isSgPointerType(nodeT1)) {
 
24825        return typesAreEqual(t1->get_base_type(), t2->get_base_type());
 
24827      } 
else if(isSgReferenceType(nodeT1)){
 
24831        return typesAreEqual(t1->get_base_type(), t2->get_base_type());
 
24832      } 
else if (isSgArrayType(nodeT1)) {
 
24839        bool arrayBaseIsEqual = typesAreEqual(a1->get_base_type(), a2->get_base_type());
 
24843        bool arrayIndexExpressionIsEquivalent = 
false;
 
24844        if(t1Index.hasValue_ && t2Index.hasValue_){
 
24845          if(t1Index.value_ == t2Index.value_){
 
24846            arrayIndexExpressionIsEquivalent = 
true;
 
24849        bool arraysAreEqual = (arrayBaseIsEqual && arrayIndexExpressionIsEquivalent);
 
24850        return arraysAreEqual;
 
24851      } 
else if (isSgFunctionType(nodeT1)) {
 
24859        if(typesAreEqual(funcTypeA->get_return_type(), funcTypeB->get_return_type())) {
 
24869          for(SgTypePtrList::const_iterator ii = funcTypeA->
get_arguments().begin(),
 
24876            if(!typesAreEqual((*ii), (*jj))) {
 
24896  std::cerr << 
"This feature for now is available with autotools only!" << std::endl;
 
24901int getNamedTypeCount() {
 
24905int getPointerTypeCount() {
 
24906  return pointerType_;
 
24909int getArrayTypeCount() {
 
24913int getFunctionTypeCount() {
 
24914  return functionType_;
 
24918     bool profile_, useSemanticEquivalence_;
 
24919     int namedType_, pointerType_, arrayType_, functionType_;
 
24922TypeEquivalenceChecker tec(
false, 
false);
 
24923return tec.typesAreEqual(typeA, typeB);
 
 
24927std::set<SgStatement*>
 
24936               StatementTraversal() : count (0) {}
 
24937               void visit (
SgNode* node)
 
24942                         returnset.insert(statement);
 
24948               std::set<SgStatement*> returnset;
 
24952     StatementTraversal traversal;
 
24953     traversal.traverse(node, preorder);
 
24955     return traversal.returnset;
 
 
24958std::set<SgStatement*>
 
24965     printf (
"In collectModifiedStatements(): node = %p = %s \n",node,node->
class_name().c_str());
 
24971               StatementTraversal() : count (0) {}
 
24972               void visit (
SgNode* node)
 
24977                         returnset.insert(statement);
 
24983               std::set<SgStatement*> returnset;
 
24987     StatementTraversal traversal;
 
24988     traversal.traverse(node, preorder);
 
24990     return traversal.returnset;
 
 
25000     printf (
"In outputFileIds(): node = %p = %s \n",node,node->
class_name().c_str());
 
25006               LocatedNodeTraversal() {}
 
25007               void visit (
SgNode* node)
 
25010                    if (locatedNode != NULL)
 
25013                         printf (
"In outputFileIds(): isModified() == %s: locatedNode = %p = %s \n",locatedNode->
get_isModified() ? 
"true" : 
"false",locatedNode,locatedNode->
class_name().c_str());
 
25014                         printf (
" --- file id = %d physical_file_id = %d \n",node->
get_file_info()->get_file_id(),node->
get_file_info()->get_physical_file_id());
 
25020                         if (initializedName != NULL)
 
25022                              printf (
"In outputFileIds(): isModified() == %s: initializedName = %p = %s \n",initializedName->
get_isModified() ? 
"true" : 
"false",initializedName,initializedName->
class_name().c_str());
 
25023                              printf (
" --- file id = %d physical_file_id = %d \n",initializedName->
get_file_info()->get_file_id(),initializedName->
get_file_info()->get_physical_file_id());
 
25030     LocatedNodeTraversal traversal;
 
25031     traversal.traverse(node, preorder);
 
25034     printf (
"Exiting as a test! \n");
 
 
25040std::set<SgLocatedNode*>
 
25047     printf (
"In collectModifiedLocatedNodes(): node = %p = %s \n",node,node->
class_name().c_str());
 
25053               LocatedNodeTraversal() : count (0) {}
 
25054               void visit (
SgNode* node)
 
25057                    if (locatedNode != NULL && locatedNode->
get_isModified() == 
true)
 
25060                         printf (
"In collectModifiedLocatedNodes(): isModified() == true: locatedNode = %p = %s \n",locatedNode,locatedNode->
class_name().c_str());
 
25062                         returnset.insert(locatedNode);
 
25068               std::set<SgLocatedNode*> returnset;
 
25072     LocatedNodeTraversal traversal;
 
25073     traversal.traverse(node, preorder);
 
25075     return traversal.returnset;
 
 
25086     printf (
"In resetModifiedLocatedNodes(): modifiedNodeSet.size() = %zu \n",modifiedNodeSet.size());
 
25089     std::set<SgLocatedNode*>::const_iterator i = modifiedNodeSet.begin();
 
25090     while (i != modifiedNodeSet.end())
 
25094          printf (
"Marking node = %p = %s as modified \n",node,node->
class_name().c_str());
 
 
25109     printf (
"\n\n##################################################### \n");
 
25110     printf (
"Report on modified statements: label = %s \n",label.c_str());
 
25113     if (sourceFile != NULL)
 
25115          printf (
"   --- (SgSourceFile) filename = %s \n",sourceFile->
getFileName().c_str());
 
25119          SgGlobal* globalScope = isSgGlobal(node);
 
25120          if (globalScope != NULL)
 
25122               sourceFile = isSgSourceFile(globalScope->
get_parent());
 
25123               printf (
"   --- (SgGlobal) filename = %s \n",sourceFile->
getFileName().c_str());
 
25127     ROSE_ASSERT(node != NULL);
 
25131     printf (
"In reportModifiedStatements(): collection.size() = %zu \n",collection.size());
 
25134     std::set<SgStatement*>::iterator i = collection.begin();
 
25135     while (i != collection.end())
 
25138          string filename = (*i)->get_file_info()->get_filename();
 
25141          if (filename == 
"transformation")
 
25144               printf (
"   --- filename == transformation: sourceFile = %p using physical filename \n",sourceFile);
 
25147               SgSourceFile* sourceFile = TransformationSupport::getSourceFile(*i);
 
25148               if (sourceFile != NULL)
 
25154          printf (
"   --- filename = %s modified statement = %p = %s \n",filename.c_str(),(*i),(*i)->class_name().c_str());
 
25162     printf (
"########################################################## \n");
 
25163     printf (
"reportModifiedStatements(): Called using label = %s \n",label.c_str());
 
25165     printf (
"########################################################## \n\n\n");
 
25168     printf (
"Exiting as a test! \n");
 
25169     ROSE_ASSERT(
false);
 
 
25181     printf (
"\n\n##################################################### \n");
 
25182     printf (
"Report on modified locatedNodes: label = %s \n",label.c_str());
 
25185     if (sourceFile != NULL)
 
25187          printf (
"   --- (SgSourceFile) filename = %s \n",sourceFile->
getFileName().c_str());
 
25191          SgGlobal* globalScope = isSgGlobal(node);
 
25192          if (globalScope != NULL)
 
25194               sourceFile = isSgSourceFile(globalScope->
get_parent());
 
25195               printf (
"   --- (SgGlobal) filename = %s \n",sourceFile->
getFileName().c_str());
 
25199     ROSE_ASSERT(node != NULL);
 
25203     printf (
"In reportModifiedLocatedNode(): collection.size() = %zu \n",collection.size());
 
25206     std::set<SgLocatedNode*>::iterator i = collection.begin();
 
25207     while (i != collection.end())
 
25210          string filename = (*i)->get_file_info()->get_filename();
 
25213          if (filename == 
"transformation")
 
25216               printf (
"   --- filename == transformation: sourceFile = %p using physical filename \n",sourceFile);
 
25219               SgSourceFile* sourceFile = TransformationSupport::getSourceFile(*i);
 
25220               if (sourceFile != NULL)
 
25226          printf (
"   --- filename = %s modified locatedNode = %p = %s \n",filename.c_str(),(*i),(*i)->class_name().c_str());
 
25234     printf (
"########################################################## \n");
 
25235     printf (
"reportModifiedLocatedNodes(): Called using label = %s \n",label.c_str());
 
25237     printf (
"########################################################## \n\n\n");
 
25240     printf (
"Exiting as a test! \n");
 
25241     ROSE_ASSERT(
false);
 
 
25255     ROSE_ASSERT(locatedNode != NULL);
 
25259     curprint (
"/* Inside of printOutComments() */");
 
25262     if (comments != NULL)
 
25265          printf (
"Found attached comments (at %p of type: %s): \n",locatedNode,locatedNode->
class_name().c_str());
 
25266          curprint (
"/* Inside of printOutComments(): comments != NULL */");
 
25269          AttachedPreprocessingInfoType::iterator i;
 
25270          for (i = comments->begin(); i != comments->end(); i++)
 
25272               ROSE_ASSERT ( (*i) != NULL );
 
25273               printf (
"          Attached Comment (relativePosition=%s): %s \n",
 
25276                    PreprocessingInfo::relativePositionName((*i)->getRelativePosition()).c_str(),
 
25277                    (*i)->getString().c_str());
 
25278               printf (
"Comment/Directive getNumberOfLines = %d getColumnNumberOfEndOfString = %d \n",(*i)->getNumberOfLines(),(*i)->getColumnNumberOfEndOfString());
 
25282               (*i)->get_file_info()->display(
"comment/directive location");
 
25289          printf (
"In SageInterface::printOutComments(): No attached comments (at %p of type: %s): \n",locatedNode,locatedNode->
class_name().c_str());
 
 
25299     bool returnValue = 
false;
 
25301     ROSE_ASSERT(currentPreprocessingInfo != NULL);
 
25303     PreprocessingInfo::DirectiveType directive = currentPreprocessingInfo->getTypeOfDirective();
 
25305     if (directive == PreprocessingInfo::C_StyleComment ||
 
25306         directive == PreprocessingInfo::CplusplusStyleComment ||
 
25307         directive == PreprocessingInfo::FortranStyleComment ||
 
25308         directive == PreprocessingInfo::CpreprocessorBlankLine ||
 
25309         directive == PreprocessingInfo::ClinkageSpecificationStart ||
 
25310         directive == PreprocessingInfo::ClinkageSpecificationEnd)
 
25312         returnValue = 
true;
 
25315     return returnValue;
 
 
25318std::vector<SgC_PreprocessorDirectiveStatement*>
 
25321     std::vector<SgC_PreprocessorDirectiveStatement*> directiveList;
 
25326     if (comments != 
nullptr)
 
25328          AttachedPreprocessingInfoType::iterator i; 
 
25329          for (i = comments->begin (); i != comments->end(); i++)
 
25338                    ROSE_ASSERT(directive != NULL);
 
25339                    directiveList.push_back(directive);
 
25342               printf (
"directiveList.size() = %zu \n",directiveList.size());
 
25346     return directiveList;
 
 
25355     printf (
"In translateScopeToUseCppDeclarations(): declarationsOnly = %s scope = %p = %s \n",declarationsOnly ? 
"true" : 
"false",scope,scope->
class_name().c_str());
 
25357     std::map<SgStatement*,std::vector<SgC_PreprocessorDirectiveStatement*> > directiveMap;
 
25359     if (declarationsOnly == 
true)
 
25363          SgDeclarationStatementPtrList::iterator i = declarationList.begin();
 
25364          while (i != declarationList.end())
 
25367               ROSE_ASSERT(declaration != NULL);
 
25371               printf (
"attachDirectives.size() = %zu \n",attachDirectives.size());
 
25373               if (attachDirectives.empty() == 
false)
 
25375                    directiveMap.insert(std::pair<
SgStatement*,std::vector<SgC_PreprocessorDirectiveStatement*> >(declaration,attachDirectives));
 
25387          SgStatementPtrList::iterator i = statementList.begin();
 
25388          while (i != statementList.end())
 
25391               ROSE_ASSERT(statement != NULL);
 
25395               printf (
"attachDirectives.size() = %zu \n",attachDirectives.size());
 
25397               if (attachDirectives.empty() == 
false)
 
25399                    directiveMap.insert(std::pair<
SgStatement*,std::vector<SgC_PreprocessorDirectiveStatement*> >(statement,attachDirectives));
 
25406     printf (
"directiveMap.size() = %zu \n",directiveMap.size());
 
25408     printf (
"Processing the directiveMap: \n");
 
25409     std::map<SgStatement*,std::vector<SgC_PreprocessorDirectiveStatement*> >::iterator i = directiveMap.begin();
 
25410     while (i != directiveMap.end())
 
25413          std::vector<SgC_PreprocessorDirectiveStatement*> directives = i->second;
 
25415          printf (
"statement = %p = %s \n",statement,statement->
class_name().c_str());
 
25416          printf (
"directives.size() = %zu \n",directives.size());
 
25418          std::vector<SgC_PreprocessorDirectiveStatement*>::iterator j = directives.begin();
 
25419          while (j != directives.end())
 
25428          ROSE_ASSERT(comments != NULL);
 
25430          AttachedPreprocessingInfoType deleteList;
 
25435          AttachedPreprocessingInfoType::iterator k;
 
25436          for (k = comments->begin(); k != comments->end(); k++)
 
25439               ROSE_ASSERT ( (*k) != NULL );
 
25440               printf (
"          Attached Comment (relativePosition=%s): %s\n",
 
25441                    ((*k)->getRelativePosition() == PreprocessingInfo::before) ? 
"before" : 
"after",
 
25442                    (*k)->getString().c_str());
 
25443               printf (
"translateScopeToUseCppDeclarations(): Comment/Directive getNumberOfLines = %d getColumnNumberOfEndOfString = %d \n",(*k)->getNumberOfLines(),(*k)->getColumnNumberOfEndOfString());
 
25450                    printf (
"Do NOT delete *k = %p = %s \n",*k,(*k)->getString().c_str());
 
25454                    printf (
"DO delete *k = %p = %s \n",*k,(*k)->getString().c_str());
 
25456                    deleteList.push_back(*k);
 
25462          printf (
"Iterate over the deleteList: deleteList.size() = %zu comments->size() = %zu \n",deleteList.size(),comments->size());
 
25463          AttachedPreprocessingInfoType::iterator m = deleteList.begin();
 
25464          while (m != deleteList.end())
 
25468               comments->erase(std::remove(comments->begin(), comments->end(), *m), comments->end());
 
25470               printf (
" --- comments->size() = %zu \n",comments->size());
 
25482     printf (
"Leaving translateScopeToUseCppDeclarations(): scope = %p = %s \n",scope,scope->
class_name().c_str());
 
 
25492               CppTranslationTraversal() {}
 
25493               void visit (
SgNode* node)
 
25495                    printf (
"In CppTranslationTraversal::visit(): node = %p = %s \n",node,node->
class_name().c_str());
 
25498                    SgGlobal* globalScope = isSgGlobal(scope);
 
25499                    if (globalScope != NULL)
 
25501                         printf (
"In CppTranslationTraversal::visit(): processing scope = %p = %s \n",scope,scope->
class_name().c_str());
 
25508                              printf (
"In SageInterface::translateToUseCppDeclarations(): Currently skipping all but global scope! \n");
 
25515     CppTranslationTraversal traversal;
 
25517     printf (
"In translateToUseCppDeclarations(): Calling traversal.traverse() \n");
 
25521     traversal.traverse(n, postorder);
 
25523     printf (
"Leaving translateToUseCppDeclarations(): DONE: Calling traversal.traverse() \n");
 
 
25530  cout<<
"--------------"<<endl;
 
25534    cout<<
"file info:\t ";
 
25535    lnode->get_file_info()->display();
 
25536    cout<<
"\n unparseToString:\t ";
 
25537    lnode->unparseToString();
 
 
25548static void serialize(SgTemplateArgumentPtrList& plist, 
string& prefix, 
bool hasRemaining, ostringstream& out, 
string& edgeLabel)
 
25551  out<< (hasRemaining?
"|---": 
"|___");
 
25554  out<<
" "<<edgeLabel<<
" ->";
 
25556  out<<
"@"<<&plist<<
" "<< 
"SgTemplateArgumentPtrList ";
 
25560  int last_non_null_child_idx =-1;
 
25561  for (
int i = (
int) (plist.size())-1; i>=0; i--)
 
25565      last_non_null_child_idx = i;
 
25570  for (
size_t i=0; i< plist.size(); i++ )
 
25572    bool n_hasRemaining=
false;
 
25574    if (i+1 < plist.size())
 
25575      n_hasRemaining=
true;
 
25577    if ((
int)i< last_non_null_child_idx) n_hasRemaining = 
true;
 
25579    string suffix= hasRemaining? 
"|   " : 
"    ";
 
25580    string n_prefix = prefix+suffix;
 
25581    string n_edge_label=
"";
 
25583      serialize (plist[i], n_prefix, n_hasRemaining, out,n_edge_label);
 
25596  out<< (hasRemaining?
"|---": 
"|___");
 
25598  out<<
" "<<edgeLabel<<
" ->";
 
25601    out<<
" NULL "<<endl;
 
25606  out<<
"@"<<node<<
" "<< node->
class_name()<<
" ";
 
25612    out<< lnode->get_file_info()->get_filename() <<
" "<<lnode->get_file_info()->get_line()<<
":"<<lnode->get_file_info()->get_col();
 
25614    AttachedPreprocessingInfoType *comments =
 
25615      lnode->getAttachedPreprocessingInfo ();
 
25617    if (comments != NULL)
 
25620      out<<
" AttachedPreprocessingInfoType@"<<comments;
 
25622      AttachedPreprocessingInfoType::iterator i;
 
25624      for (i = comments->begin (); i != comments->end (); i++)
 
25626        if (i!=comments->begin ())
 
25629        out<<counter++<<
" ";
 
25638            out<<*i<<
" classification="<<PreprocessingInfo::directiveTypeName((*i)->getTypeOfDirective ()). c_str ();
 
25639            out<<
" string="<<(*i)->getString ().c_str ();
 
25640            out<<
" relative pos=" ; 
 
25642            if ((*i)->getRelativePosition () == PreprocessingInfo::inside)
 
25644            else if ((*i)->getRelativePosition () == PreprocessingInfo::before)
 
25658    out<<
" first nondefining decl@"<< v->get_firstNondefiningDeclaration();
 
25659    out<<
" defining decl@"<< v->get_definingDeclaration();
 
25663    out<<
" value="<< f->get_value() <<
" declaration="<<f->get_declaration() << 
" name="<< f->get_name().getString();
 
25670    out<<
" renamed_function "<< f->get_renamed_function();
 
25673    out<<
" name="<< f->get_name() << 
" renamed decl "<<f->get_renamed() ;
 
25685    out<<
" enumType="<< f->get_enumType();
 
25693    out<<
" is_general_access"<< v->get_is_general_access();
 
25696    out<<
" is_anonymous:"<< v->get_is_anonymous ();
 
25701    out<<
" is_protected"<< v->get_is_protected();
 
25707    out<<
" type@"<< v->get_type();
 
25708    out<<
" initializer@"<< v->get_initializer();
 
25709    out<<
" scope@"<< v->get_scope();
 
25715    out<<
" template class decl@"<< f->get_templateDeclaration();
 
25718    out<<
" assoc. class decl@"<< f->get_associatedClassDeclaration();
 
25722    out<<
" member function decl@"<< ctor->get_declaration();
 
25725  if (
SgIntVal* v= isSgIntVal(node))
 
25726    out<<
" value="<< v->get_value() <<
" valueString="<< v->get_valueString();
 
25729    out<<
" value="<< v->get_value() <<
" valueString="<< v->get_valueString();
 
25732    out<<
" value="<< v->get_value() <<
" valueString="<< v->get_valueString();
 
25735    out<<
" value="<< v->get_value() <<
" valueString="<< v->get_valueString();
 
25738    out<<
" value="<< v->get_value() <<
" valueString="<< v->get_valueString();
 
25741    out<<
" value="<< v->get_value() <<
" valueString="<< v->get_valueString();
 
25744    out<<
" value="<< v->get_value() <<
" valueString="<< v->get_valueString();
 
25747    out<<
" value="<< v->get_value() <<
" valueString="<< v->get_valueString();
 
25750    out<<
" value="<< v->get_value() <<
" valueString="<< v->get_valueString();
 
25753    out<<
" value="<< v->get_value() <<
" valueString="<< v->get_valueString();
 
25756    out<<
" value="<< v->get_value() <<
" valueString="<< v->get_valueString();
 
25759    out<<
" init name@"<< var_ref->get_symbol()->get_declaration() <<
" symbol name="<<var_ref->get_symbol()->get_name();
 
25762    out<<
" member func decl@"<< func_ref->get_symbol_i()->get_declaration();
 
25765    out<<
" template member func decl@"<< cnode->get_templateDeclaration();
 
25770    out<<
" func decl@"<< sym->get_declaration() << 
" func sym name="<<sym->
get_name();
 
25776    out<<
" ada renaming decl@"<< renaming_decl;
 
25782    out<<
" base_type@"<< v->get_base_type();
 
25787    out<<
" base_type@"<< v->get_base_type();
 
25790    out<<
" base_type@"<< v->get_base_type();
 
25793    out<<
" type@"<< v->get_type();
 
25796    out<<
" attribute@"<< v->get_attribute();
 
25799    out<<
" namespaceDeclaration="<< v->get_namespaceDeclaration();
 
25805  int total_count = children.size();
 
25806  int current_index=0;
 
25809  int last_non_null_child_idx =-1;
 
25810  for (
int i = (
int) (children.size())-1; i>=0; i--)
 
25814      last_non_null_child_idx = i;
 
25822  if (isSgTemplateInstantiationDecl (node))
 
25829    SgTemplateArgumentPtrList& plist = sn->get_templateArguments();
 
25830     bool n_hasRemaining=
false;
 
25831    if (last_non_null_child_idx>-1) n_hasRemaining = 
true;
 
25832    string suffix= hasRemaining? 
"|   " : 
"    ";
 
25833    string n_prefix = prefix+suffix;
 
25834    string n_edge_label= 
"";
 
25835    serialize_list(plist, 
"SgTemplateArgumentPtrList", n_prefix, n_hasRemaining, out, n_edge_label);
 
25839    SgExpressionPtrList& plist = import_stmt->get_import_list();
 
25840    bool n_hasRemaining=
false;
 
25841    if (last_non_null_child_idx>-1) n_hasRemaining = 
true;
 
25842    string suffix= hasRemaining? 
"|   " : 
"    ";
 
25843    string n_prefix = prefix+suffix;
 
25844    string n_edge_label= 
"";
 
25845    serialize_list(plist, 
"SgExpressionPtrList", n_prefix, n_hasRemaining, out, n_edge_label);
 
25851  for (
size_t i =0; i< children.size(); i++)
 
25853    bool n_hasRemaining=
false;
 
25855    if (current_index+1<total_count)
 
25856      n_hasRemaining=
true;
 
25859    if ((
int)i<last_non_null_child_idx) n_hasRemaining = 
true;
 
25861    string suffix= hasRemaining? 
"|   " : 
"    ";
 
25862    string n_prefix = prefix+suffix;
 
25864      serialize (children[i], n_prefix, n_hasRemaining, out, successorNames[i]);
 
 
25873  serialize(node, prefix, 
false, oss, label);
 
 
25894  serialize(node, prefix, 
false, oss, label);
 
25896  textfile.open(filename, ios::out);
 
25897  textfile<<oss.str();
 
25902    textfile<<
"Types encountered ...."<<endl;
 
25903    ostringstream oss2;
 
25904    VariantVector vv(V_SgType);
 
25905    Rose_STL_Container<SgNode*> tnodes= NodeQuery::queryMemoryPool(vv);
 
25906    for (Rose_STL_Container<SgNode*>::const_iterator i = tnodes.begin(); i != tnodes.end(); ++i)
 
25908      serialize (*i, prefix, 
false, oss2, label);
 
25910    textfile<<oss2.str();
 
 
25918  saveToPDF(node, 
string(
"temp.pdf.json") );
 
 
25924  ROSE_ASSERT(node != NULL);
 
 
25931  bool rtval = 
false;
 
25932  ROSE_ASSERT (node != NULL);
 
25936    string fname = finfo->get_filenameString();
 
25937    string buildtree_str1 = string(
"include-staging/gcc_HEADERS");
 
25938    string buildtree_str2 = string(
"include-staging/g++_HEADERS");
 
25939    string installtree_str1 = string(
"include/edg/gcc_HEADERS");
 
25940    string installtree_str2 = string(
"include/edg/g++_HEADERS");
 
25941    string system_headers = string(
"/usr/include");
 
25943    if ((fname.find (buildtree_str1, 0) != string::npos) ||
 
25944        (fname.find (buildtree_str2, 0) != string::npos) ||
 
25945        (fname.find (installtree_str1, 0) != string::npos) ||
 
25946        (fname.find (installtree_str2, 0) != string::npos) ||
 
25947        (fname.find (system_headers, 0) != string::npos)
 
 
25960     bool returnValue = 
false;
 
25963     ROSE_ASSERT(fileInfo != NULL);
 
25964     string filename = fileInfo->get_filenameString();
 
25967     printf (
"In SageInterface::insideHeader(): node = %s line: %d column: %d file: %s \n",node->
class_name().c_str(),fileInfo->
get_line(),fileInfo->
get_col(),filename.c_str());
 
25972     if (EDG_ROSE_Translation::edg_include_file_map.find(filename) == EDG_ROSE_Translation::edg_include_file_map.end())
 
25975          printf (
"This is NOT in the EDG_ROSE_Translation::edg_include_file_map \n");
 
25981          printf (
"This IS in the EDG_ROSE_Translation::edg_include_file_map \n");
 
25983          returnValue = 
true;
 
25986     return returnValue;
 
 
25993  ROSE_ASSERT(return_type != NULL);
 
25994  ROSE_ASSERT(typeList != NULL);
 
25996  ROSE_ASSERT(fTable);
 
26001  SgFunctionType* funcType = isSgFunctionType(fTable->lookup_function_type(typeName));
 
 
26011  ROSE_ASSERT (lhs != NULL);
 
26012  ROSE_ASSERT (rhs != NULL);
 
26017  SgType* rt1 = lhs->get_return_type();
 
26018  SgType* rt2 = rhs->get_return_type();
 
26025    if (f1_arg_types.size() == f2_arg_types.size())
 
26029      size_t counter = 0;
 
26032      for (
size_t i=0; i< f1_arg_types.size(); i++)
 
26040      if (counter == f1_arg_types.size())
 
 
26062     ROSE_ASSERT(lhs != NULL);
 
26063     ROSE_ASSERT(rhs != NULL);
 
26065     bool isSame = 
false;
 
26068     static int counter = 0;
 
26070     const SgType & X = *lhs;
 
26071     const SgType & Y = *rhs;
 
26079#define DEBUG_TYPE_EQUIVALENCE 0 
26081#if DEBUG_TYPE_EQUIVALENCE 
26082     printf (
"In SageInterface::isEquivalentType(): evaluation of type equivalence for lhs and rhs: counter = %d \n",counter);
 
26087#if DEBUG_TYPE_EQUIVALENCE || 0 
26090          printf (
"In SageInterface::isEquivalentType(): evaluation of type equivalence for lhs and rhs: counter = %d \n",counter);
 
26096#if DEBUG_TYPE_EQUIVALENCE || 0 
26102     printf (
"Output of type chain for lhs: \n");
 
26103     for (
size_t i = 0; i < X_typeChain.size(); i++)
 
26105          SgType* element_type = X_typeChain[i];
 
26106          printf (
"X_element_type = %p = %s \n",element_type,element_type->
class_name().c_str());
 
26107          printf (
"   --- X_element_type unparseToString: = %s \n",element_type->
unparseToString().c_str());
 
26109          if (modifierType != NULL)
 
26113               printf (
"   --- type chain modifier: %s \n",s.c_str());
 
26114               printf (
"   --- type chain modifier: unparseToString: %s \n",modifierType->
unparseToString().c_str());
 
26118     printf (
"Output of type chain for rhs: \n");
 
26119     for (
size_t i = 0; i < Y_typeChain.size(); i++)
 
26121          SgType* element_type = Y_typeChain[i];
 
26122          printf (
"Y_element_type = %p = %s \n",element_type,element_type->
class_name().c_str());
 
26123          printf (
"   --- Y_element_type unparseToString: = %s \n",element_type->
unparseToString().c_str());
 
26125          if (modifierType != NULL)
 
26129               printf (
"   --- type chain modifier: %s \n",s.c_str());
 
26130               printf (
"   --- type chain modifier: unparseToString: %s \n",modifierType->
unparseToString().c_str());
 
26141     if (counter >= 280)
 
26144          printf (
"In SageInterface::isEquivalentType(): counter = %d: type chain X_element_type = %s = %p Y_element_type = %s = %p \n",counter,X.
class_name().c_str(),lhs,Y.
class_name().c_str(),rhs);
 
26156          printf (
"ERROR: In SageInterface::isEquivalentType(): recursive limit exceeded for : counter = %d \n",counter);
 
26167     SgReferenceType* X_referenceType = isSgReferenceType(X_element_type);
 
26168     SgReferenceType* Y_referenceType = isSgReferenceType(Y_element_type);
 
26170     if (X_referenceType != NULL && Y_referenceType != NULL)
 
26172          X_element_type = X_referenceType->get_base_type();
 
26173          Y_element_type = Y_referenceType->get_base_type();
 
26184          SgPointerType* X_pointerType = isSgPointerType(X_element_type);
 
26185          SgPointerType* Y_pointerType = isSgPointerType(Y_element_type);
 
26187          if (X_pointerType != NULL && Y_pointerType != NULL)
 
26189               X_element_type = X_pointerType->get_base_type();
 
26190               Y_element_type = Y_pointerType->get_base_type();
 
26201               SgArrayType* X_arrayType = isSgArrayType(X_element_type);
 
26202               SgArrayType* Y_arrayType = isSgArrayType(Y_element_type);
 
26205               if (X_arrayType != NULL && Y_arrayType != NULL)
 
26207                    X_element_type = X_arrayType->get_base_type();
 
26208                    Y_element_type = Y_arrayType->get_base_type();
 
26210                    SgExpression* X_array_index_expression = X_arrayType->get_index();
 
26211                    SgExpression* Y_array_index_expression = Y_arrayType->get_index();
 
26213                    if (X_array_index_expression == Y_array_index_expression)
 
26215#if DEBUG_TYPE_EQUIVALENCE || 0 
26216                         printf (
"In SageInterface::isEquivalentType(): counter = %d: Need to check the array size for static equivalence \n",counter);
 
26227#if DEBUG_TYPE_EQUIVALENCE || 0 
26228                         printf (
"In SageInterface::isEquivalentType(): counter = %d Need more complex test for expression equivalence \n",counter);
 
26231                         printf (
"   --- array index expressions: str1 = %s str2 = %s \n",str1.c_str(),str2.c_str());
 
26243                    SgNonrealType* X_templateType = isSgNonrealType(X_element_type);
 
26244                    SgNonrealType* Y_templateType = isSgNonrealType(Y_element_type);
 
26247                    if (X_templateType != NULL && Y_templateType != NULL)
 
26249                         string X_name = X_templateType->
get_name();
 
26250                         string Y_name = Y_templateType->
get_name();
 
26252                         SgNonrealDecl* X_templateDecl = isSgNonrealDecl(X_templateType->get_declaration());
 
26253                         ROSE_ASSERT(X_templateDecl != NULL);
 
26254                         SgNonrealDecl* Y_templateDecl = isSgNonrealDecl(Y_templateType->get_declaration());
 
26255                         ROSE_ASSERT(Y_templateDecl != NULL);
 
26257                         int X_template_parameter_position = X_templateDecl->get_template_parameter_position();
 
26258                         int Y_template_parameter_position = Y_templateDecl->get_template_parameter_position();
 
26263#if DEBUG_TYPE_EQUIVALENCE 
26266                         printf (
"In SageInterface::isEquivalentType(): case SgNonrealType:\n");
 
26267                         printf (
"  -- X_name = %s Y_name = %s\n", X_name.c_str(),Y_name.c_str());
 
26268                         printf (
"  -- X_template_parameter_position = %d Y_template_parameter_position = %d\n", X_template_parameter_position,Y_template_parameter_position);
 
26269                         printf (
"  -- X_parent = %p (%s) Y_parent = %p (%s)\n", X_parent, X_parent ? X_parent->
class_name().c_str() : 
"", Y_parent, Y_parent ? Y_parent->
class_name().c_str() : 
"");
 
26270                         printf (
"  -- X_parent_parent = %p (%s) Y_parent_parent = %p (%s)\n", X_parent_parent, X_parent_parent ? X_parent_parent->
class_name().c_str() : 
"", Y_parent_parent, Y_parent_parent ? Y_parent_parent->
class_name().c_str() : 
"");
 
26271                         printf (
"  -- X_templateDecl->get_mangled_name() = %s\n", X_templateDecl->get_mangled_name().str());
 
26272                         printf (
"  -- Y_templateDecl->get_mangled_name() = %s\n", Y_templateDecl->get_mangled_name().str());
 
26274                         bool value = (X_parent == Y_parent);
 
26276                         if (value && X_templateDecl->get_is_template_param() && Y_templateDecl->get_is_template_param()) {
 
26277                           value = (X_template_parameter_position == Y_template_parameter_position);
 
26278                         } 
else if (value && X_templateDecl->get_is_class_member() && Y_templateDecl->get_is_class_member()) {
 
26279                           value = (X_name == Y_name);
 
26291                         printf (
"Nothing to do here since we have explored all uniform pairs of intermediate types possible: isSame = %s \n",isSame ? 
"true" : 
"false");
 
26297#if DEBUG_TYPE_EQUIVALENCE 
26298                         printf (
"In SageInterface::isEquivalentType(): loop: Nothing to do here since we have explored all uniform pairs of intermediate types possible: isSame = %s \n",isSame ? 
"true" : 
"false");
 
26305     SgModifierType* X_modifierType = isSgModifierType(X_element_type);
 
26306     SgModifierType* Y_modifierType = isSgModifierType(Y_element_type);
 
26308#if DEBUG_TYPE_EQUIVALENCE 
26309     printf (
"In SageInterface::isEquivalentType(): counter = %d: type chain X_element_type = %p = %s Y_element_type = %p = %s \n",
 
26310          counter,X_element_type,X_element_type->
class_name().c_str(),Y_element_type,Y_element_type->
class_name().c_str());
 
26313     if (X_modifierType != NULL && Y_modifierType != NULL)
 
26316#if DEBUG_TYPE_EQUIVALENCE 
26317          printf (
"In SageInterface::isEquivalentType(): loop: these are the both SgModifierType nodes: isSame = %s \n",isSame ? 
"true" : 
"false");
 
26319          if (X_modifierType == Y_modifierType)
 
26322#if DEBUG_TYPE_EQUIVALENCE 
26323               printf (
"In SageInterface::isEquivalentType(): loop: these are the same modifier type: isSame = %s \n",isSame ? 
"true" : 
"false");
 
26330#if DEBUG_TYPE_EQUIVALENCE 
26331                    printf (
"In SageInterface::isEquivalentType(): loop: these are equivalent modifiers: check the base type: isSame = %s \n",isSame ? 
"true" : 
"false");
 
26335                    isSame = 
isEquivalentType(X_modifierType->get_base_type(),Y_modifierType->get_base_type());
 
26339#if DEBUG_TYPE_EQUIVALENCE 
26340                    printf (
"In SageInterface::isEquivalentType(): loop: these are not equivalent modifier types: check for default settings: isSame = %s \n",isSame ? 
"true" : 
"false");
 
26343                    bool skippingOverIdentityModifier = 
false;
 
26347#if DEBUG_TYPE_EQUIVALENCE 
26348                         printf (
"In SageInterface::isEquivalentType(): loop: found self-similar setting for lhs: isSame = %s \n",isSame ? 
"true" : 
"false");
 
26350                         X_element_type = X_modifierType->get_base_type();
 
26353                         skippingOverIdentityModifier = 
true;
 
26358#if DEBUG_TYPE_EQUIVALENCE 
26359                         printf (
"In SageInterface::isEquivalentType(): loop: found self-similar setting for rhs: isSame = %s \n",isSame ? 
"true" : 
"false");
 
26361                         Y_element_type = Y_modifierType->get_base_type();
 
26364                         skippingOverIdentityModifier = 
true;
 
26368#if DEBUG_TYPE_EQUIVALENCE 
26369                    printf (
"In SageInterface::isEquivalentType(): loop: skippingOverIdentityModifier = %s \n",skippingOverIdentityModifier ? 
"true" : 
"false");
 
26374                    if (skippingOverIdentityModifier == 
true)
 
26376#if DEBUG_TYPE_EQUIVALENCE 
26377                         printf (
"In SageInterface::isEquivalentType(): loop: recursive call on different adjusted modifier types: before recursive call to compare base types: isSame = %s \n",isSame ? 
"true" : 
"false");
 
26386#if DEBUG_TYPE_EQUIVALENCE 
26387                         printf (
"In SageInterface::isEquivalentType(): loop: no progress was made in resolving the base type, so returning isSame set to false: isSame = %s \n",isSame ? 
"true" : 
"false");
 
26391#if DEBUG_TYPE_EQUIVALENCE 
26392                    printf (
"In SageInterface::isEquivalentType(): loop: these are different modifier types: after recursive call to compare base types: isSame = %s \n",isSame ? 
"true" : 
"false");
 
26401          if (X_modifierType != NULL || Y_modifierType != NULL)
 
26403               bool isReduceable = 
false;
 
26405               if (X_modifierType != NULL && X_modifierType->
get_typeModifier().isIdentity() == 
true)
 
26407#if DEBUG_TYPE_EQUIVALENCE 
26408                    printf (
"In SageInterface::isEquivalentType(): loop: found default setting for lhs: isSame = %s \n",isSame ? 
"true" : 
"false");
 
26410                    X_element_type = X_modifierType->get_base_type();
 
26411                    isReduceable = 
true;
 
26414               if (Y_modifierType != NULL && Y_modifierType->
get_typeModifier().isIdentity() == 
true)
 
26416#if DEBUG_TYPE_EQUIVALENCE 
26417                    printf (
"In SageInterface::isEquivalentType(): loop: found default setting for rhs: isSame = %s \n",isSame ? 
"true" : 
"false");
 
26419                    Y_element_type = Y_modifierType->get_base_type();
 
26420                    isReduceable = 
true;
 
26424#if DEBUG_TYPE_EQUIVALENCE 
26425               printf (
"In SageInterface::isEquivalentType(): loop: these are different modifier types: after recursive call to compare base types: isReduceable = %s \n",isReduceable ? 
"true" : 
"false");
 
26427               if (isReduceable == 
true)
 
26439#if DEBUG_TYPE_EQUIVALENCE 
26440               printf (
"In SageInterface::isEquivalentType(): loop: these are different modifier types: after recursive call to compare base types: isReduceable = %s isSame = %s \n",
 
26441                    isReduceable ? 
"true" : 
"false",isSame ? 
"true" : 
"false");
 
26450               if (X_element_type == Y_element_type)
 
26453#if DEBUG_TYPE_EQUIVALENCE || 0 
26455                    printf (
"In SageInterface::isEquivalentType(): resolved to equal types: isSame = %s lhs = %p = %s rhs = %p = %s \n",
 
26458#if DEBUG_TYPE_EQUIVALENCE || 0 
26461                    const SgTypedefType* lhs_typedefType = isSgTypedefType(lhs);
 
26462                    const SgTypedefType* rhs_typedefType = isSgTypedefType(rhs);
 
26464                    if (lhs_typedefType != NULL || rhs_typedefType != NULL)
 
26467                         if (lhs_typedefType != NULL)
 
26469                              printf (
"lhs was a typedef: lhs = %p = %s \n",lhs,lhs->
unparseToString().c_str());
 
26471                         if (rhs_typedefType != NULL)
 
26473                              printf (
"rhs was a typedef: rhs = %p = %s \n",rhs,rhs->
unparseToString().c_str());
 
26476                         printf (
"   --- one was a typedef: lhs = %p = %s \n",lhs,lhs->
unparseToString().c_str());
 
26477                         printf (
"   --- one was a typedef: rhs = %p = %s \n",rhs,rhs->
unparseToString().c_str());
 
26488                    SgReferenceType* X_referenceType = isSgReferenceType(X_element_type);
 
26489                    SgReferenceType* Y_referenceType = isSgReferenceType(Y_element_type);
 
26491                    if (X_referenceType != NULL || Y_referenceType != NULL)
 
26494                         if (X_referenceType != NULL)
 
26496                              X_element_type = X_referenceType->get_base_type();
 
26500                              isReduceable = 
false;
 
26503                         if (Y_referenceType != NULL)
 
26505                              Y_element_type = Y_referenceType->get_base_type();
 
26509                              isReduceable = 
false;
 
26512                         if (isReduceable == 
true)
 
26533#if DEBUG_TYPE_EQUIVALENCE 
26534                         printf (
"In SageInterface::isEquivalentType(): loop: evaluation of inner types: isSame = %s \n",isSame ? 
"true" : 
"false");
 
26538                         SgPointerType* X_pointerType = isSgPointerType(X_element_type);
 
26539                         SgPointerType* Y_pointerType = isSgPointerType(Y_element_type);
 
26541                         if (X_pointerType != NULL || Y_pointerType != NULL)
 
26544                              if (X_pointerType != NULL)
 
26546                                   X_element_type = X_pointerType->get_base_type();
 
26550                                   isReduceable = 
false;
 
26553                              if (Y_pointerType != NULL)
 
26555                                   Y_element_type = Y_pointerType->get_base_type();
 
26559                                   isReduceable = 
false;
 
26562                              if (isReduceable == 
true)
 
26583#if DEBUG_TYPE_EQUIVALENCE 
26584                              printf (
"In SageInterface::isEquivalentType(): loop: evaluation of inner types: isSame = %s \n",isSame ? 
"true" : 
"false");
 
26588                              SgArrayType* X_arrayType = isSgArrayType(X_element_type);
 
26589                              SgArrayType* Y_arrayType = isSgArrayType(Y_element_type);
 
26591                              if (X_arrayType != NULL || Y_arrayType != NULL)
 
26594                                   if (X_arrayType != NULL)
 
26596                                        X_element_type = X_arrayType->get_base_type();
 
26600                                        isReduceable = 
false;
 
26603                                   if (Y_arrayType != NULL)
 
26605                                        Y_element_type = Y_arrayType->get_base_type();
 
26609                                        isReduceable = 
false;
 
26612                                   if (isReduceable == 
true)
 
26633#if DEBUG_TYPE_EQUIVALENCE 
26634                                   printf (
"In SageInterface::isEquivalentType(): loop: evaluation of inner types: isSame = %s \n",isSame ? 
"true" : 
"false");
 
26638                                   SgFunctionType* X_functionType = isSgFunctionType(X_element_type);
 
26639                                   SgFunctionType* Y_functionType = isSgFunctionType(Y_element_type);
 
26641                                   if (X_functionType != NULL || Y_functionType != NULL)
 
26643                                        bool value = ( (X_functionType != NULL && Y_functionType != NULL) && (X_functionType == Y_functionType) );
 
26646#if DEBUG_TYPE_EQUIVALENCE || 0 
26647                                        printf (
"In SageInterface::isEquivalentType(): loop: Process case of SgFunctionType: value = %s \n",value ? 
"true" : 
"false");
 
26665                                        if (X_memberFunctionType != NULL || Y_memberFunctionType != NULL)
 
26668                                             printf (
"This should be unreachable code \n");
 
26672                                             bool value = ( (X_memberFunctionType != NULL && Y_memberFunctionType != NULL) && (X_memberFunctionType == Y_memberFunctionType) );
 
26673#if DEBUG_TYPE_EQUIVALENCE || 0 
26674                                             printf (
"In SageInterface::isEquivalentType(): loop: Process case of SgMemberFunctionType: value = %s \n",value ? 
"true" : 
"false");
 
26687                                             bool X_isReduceable = 
true;
 
26688                                             if (isSgTypeSignedLong(X_element_type)  != NULL ||
 
26689                                                 isSgTypeUnsignedInt(X_element_type) != NULL ||
 
26690                                                 isSgTypeBool(X_element_type) != NULL ||
 
26691                                                 isSgTypeInt(X_element_type) != NULL)
 
26693                                                  X_isReduceable = 
false;
 
26696                                             bool Y_isReduceable = 
true;
 
26697                                             if (isSgTypeSignedLong(Y_element_type)  != NULL ||
 
26698                                                 isSgTypeUnsignedInt(Y_element_type) != NULL ||
 
26699                                                 isSgTypeBool(Y_element_type) != NULL ||
 
26700                                                 isSgTypeInt(Y_element_type) != NULL)
 
26702                                                  Y_isReduceable = 
false;
 
26704#if DEBUG_TYPE_EQUIVALENCE || 0 
26705                                             printf (
"In SageInterface::isEquivalentType(): loop: Process default case: X_isReduceable = %s Y_isReduceable = %s \n",
 
26706                                                  X_isReduceable ? 
"true" : 
"false",Y_isReduceable ? 
"true" : 
"false");
 
26708                                             if (X_isReduceable == 
true || Y_isReduceable == 
true)
 
26722#if DEBUG_TYPE_EQUIVALENCE || 0 
26723                                                  printf (
"In SageInterface::isEquivalentType(): loop: Process default case: X_element_type = %p = %s Y_element_type = %p = %s \n",
 
26724                                                       X_element_type,X_element_type->
class_name().c_str(),Y_element_type,Y_element_type->
class_name().c_str());
 
26729                                                  isSame = (X_element_type == Y_element_type);
 
26749#if DEBUG_TYPE_EQUIVALENCE || 0 
26750     printf (
"In SageInterface::isEquivalentType(): isSame = %s \n",isSame ? 
"true" : 
"false");
 
26753#if DEBUG_TYPE_EQUIVALENCE || 0 
26754     if (counter == 1 && isSame == 
true)
 
26756          printf (
"In SageInterface::isEquivalentType(): counter = %d: isSame = %s type chain X_element_type = %s Y_element_type = %s \n",counter,isSame ? 
"true" : 
"false",X.
class_name().c_str(),Y.
class_name().c_str());
 
26763          printf (
"   --- Output of type chain for lhs: \n");
 
26764          for (
size_t i = 0; i < X_typeChain.size(); i++)
 
26766               SgType* element_type = X_typeChain[i];
 
26767               printf (
"   --- --- X_element_type = %p = %s \n",element_type,element_type->
class_name().c_str());
 
26769               if (modifierType != NULL)
 
26773                    printf (
"   --- type chain modifier: %s \n",s.c_str());
 
26777          printf (
"   --- Output of type chain for rhs: \n");
 
26778          for (
size_t i = 0; i < Y_typeChain.size(); i++)
 
26780               SgType* element_type = Y_typeChain[i];
 
26781               printf (
"   --- --- Y_element_type = %p = %s \n",element_type,element_type->
class_name().c_str());
 
26783               if (modifierType != NULL)
 
26787                    printf (
"   --- --- type chain modifier: %s \n",s.c_str());
 
26796          if (isSame == 
true)
 
26799               printf (
"   --- isSame = %s \n",isSame ? 
"true" : 
"false");
 
26802               printf (
"   --- --- X_element_type = %p = %s = %s \n",X_element_type,X_element_type->
class_name().c_str(),X_element_type->
unparseToString().c_str());
 
26803               printf (
"   --- --- Y_element_type = %p = %s = %s \n",Y_element_type,Y_element_type->
class_name().c_str(),Y_element_type->
unparseToString().c_str());
 
26808               printf (
"   --- isSame = %s \n",isSame ? 
"true" : 
"false");
 
26813          printf (
"   --- counter = %d \n",counter);
 
 
26830     bool retval = 
false;
 
26839     retval = function->get_marked_as_edg_normalization();
 
26847     if (templateInstantiationFunction != NULL)
 
26852          if (templateFunctionDeclaration != NULL)
 
26863          printf (
"   --- case of templateInstantiationFunction: retval = %s \n",retval ? 
"true" : 
"false");
 
26868          if (templateInstantiationMemberFunction != NULL)
 
26871               templateInstantiationMemberFunction = isSgTemplateInstantiationMemberFunctionDecl(templateInstantiationMemberFunction->
get_firstNondefiningDeclaration());
 
26873               if (templateMemberFunctionDeclaration != NULL)
 
26884               printf (
"   --- case of templateInstantiationMemberFunction: retval = %s \n",retval ? 
"true" : 
"false");
 
26896  printf(
"In detectCycleInType():\n");
 
26897  printf(
" -- from = %s\n", from.c_str());
 
26898  printf(
" -- type = %p (%s)\n", type, type->
class_name().c_str());
 
26900  std::vector<SgType *> seen_types;
 
26902  while (type != NULL) {
 
26905    ROSE_ASSERT(type != NULL);
 
26907    std::vector<SgType *>::const_iterator it = std::find(seen_types.begin(), seen_types.end(), type);
 
26908    if (it != seen_types.end()) {
 
26909      printf(
"ERROR: Cycle found in type = %p (%s):\n", type, type->
class_name().c_str());
 
26911      for (; it != seen_types.end(); it++) {
 
26912        printf(
"  [%zd] %p (%s)\n", i, *it, (*it)->class_name().c_str());
 
26915      printf(
"-> detectCycleInType() was called from: %s\n", from.c_str());
 
26918    seen_types.push_back(type);
 
26928    if (isSgPointerMemberType(type) != NULL)
 
26935      type = modType->get_base_type();
 
26936    } 
else if ( refType ) {
 
26937      type = refType->get_base_type();
 
26938    } 
else if ( pointType ) {
 
26939      type = pointType->get_base_type();
 
26942    } 
else if ( arrayType ) {
 
26943      type = arrayType->get_base_type();
 
26944    } 
else if ( typedefType ) {
 
26949    ROSE_ASSERT(type != NULL);
 
 
26970               std::vector<SgFunctionDeclaration*> functionList;
 
26973               string filenameWithPath;
 
26976               TransformFunctionDefinitionsTraversal(): sourceFile(NULL), sourceFileId(-99) {}
 
26978               void visit (
SgNode* node)
 
26981                    printf (
"In convertFunctionDefinitionsToFunctionPrototypes visit(): node = %p = %s \n",node,node->
class_name().c_str());
 
26984                    if (temp_sourceFile != NULL)
 
26986                         sourceFile       = temp_sourceFile;
 
26990                         filenameWithPath = sourceFile->get_sourceFileNameWithPath();
 
26992                         printf (
"Found source file: id = %d name = %s \n",sourceFileId,sourceFile->get_sourceFileNameWithPath().c_str());
 
26997                    if (functionDeclaration != NULL)
 
27000                         ROSE_ASSERT(sourceFile != NULL);
 
27003                         if (functionDeclaration == definingFunctionDeclaration)
 
27006                              printf (
"Found a defining function declaration: functionDeclaration = %p = %s name = %s \n",
 
27007                                   functionDeclaration,functionDeclaration->
class_name().c_str(),functionDeclaration->get_name().str());
 
27009                              printf (
" --- recorded source file: id = %d name = %s \n",sourceFileId,sourceFile->get_sourceFileNameWithPath().c_str());
 
27010                              printf (
" --- source file: file_info: id = %d name = %s \n",
 
27015                              bool isInSourceFile = (filenameWithPath == functionDeclaration->
get_file_info()->get_filenameString());
 
27017                              printf (
" --- isInSourceFile = %s \n",isInSourceFile ? 
"true" : 
"false");
 
27021                              if (isInSourceFile == 
true && functionDeclarationScope != NULL)
 
27024                                   printf (
" --- Found a defining function declaration: functionDeclarationScope = %p = %s \n",
 
27025                                        functionDeclarationScope,functionDeclarationScope->
class_name().c_str());
 
27029                                   functionList.push_back(functionDeclaration);
 
27037     TransformFunctionDefinitionsTraversal traversal;
 
27038     traversal.traverse(node, preorder);
 
27040     std::vector<SgFunctionDeclaration*> & functionList = traversal.functionList;
 
27043     printf (
"In convertFunctionDefinitionsToFunctionPrototypes(): functionList.size() = %zu \n",functionList.size());
 
27046     std::vector<SgFunctionDeclaration*>::iterator i = functionList.begin();
 
27047     while (i != functionList.end())
 
27050          ROSE_ASSERT(functionDeclaration != NULL);
 
27053          ROSE_ASSERT(nondefiningFunctionDeclaration != NULL);
 
27056          printf (
" --- Removing function declaration: functionDeclaration = %p = %s name = %s \n",
 
27057               functionDeclaration,functionDeclaration->
class_name().c_str(),functionDeclaration->get_name().str());
 
27067     printf (
"In convertFunctionDefinitionsToFunctionPrototypes(): exiting as a test! \n");
 
27078     ROSE_ASSERT(scope != NULL);
 
27080     printf (
"Output the statements in scope = %p = %s \n",scope,scope->
class_name().c_str());
 
27084     for (
size_t i = 0; i < statementList.size(); i++)
 
27091     printf (
"Exiting as a test at the end of evaluation of global scope! \n");
 
 
27104     printf (
"In SageInterface::buildFunctionPrototype(): functionDeclaration = %p = %s name = %s \n",
 
27105          functionDeclaration,functionDeclaration->
class_name().c_str(),functionDeclaration->get_name().str());
 
27109     bool isConstructor = 
false;
 
27111     if (tmp_memberFunctionDeclaration != NULL)
 
27113          isConstructor = tmp_memberFunctionDeclaration->get_specialFunctionModifier().isConstructor();
 
27116          if (isConstructor == 
true)
 
27118               printf (
"Skipping case of constructors (in building prototype from defining function declaration) \n");
 
27128     SgName name                         = functionDeclaration->get_name();
 
27129     SgType* return_type                 = functionDeclaration->get_type()->get_return_type();
 
27137     printf (
"In SageInterface::buildFunctionPrototype(): functionDeclaration = %p \n",functionDeclaration);
 
27138     printf (
"In SageInterface::buildFunctionPrototype(): functionDeclaration->get_firstNondefiningDeclaration() = %p \n",functionDeclaration->
get_firstNondefiningDeclaration());
 
27139     printf (
"In SageInterface::buildFunctionPrototype(): functionDeclaration->get_definingDeclaration()         = %p \n",functionDeclaration->
get_definingDeclaration());
 
27143     for (
size_t i = 0; i < functionDeclaration->get_args().size(); i++)
 
27147         printf (
"In SageInterface::buildFunctionPrototype(): functionDeclaration->get_args(): (i = %zu) arg = %p = %s isDefaultArgument = %s \n",
 
27148              i,arg,arg->get_name().str(),arg->
get_file_info()->isDefaultArgument() ? 
"true" : 
"false");
 
27149         printf (
" --- arg->get_initializer() = %p \n",arg->get_initializer());
 
27153              printf (
"NOTE: default argument (i = %zu) not reproduced in function prototype: arg = %p = %s \n",i,arg,arg->get_name().str());
 
27166     if (templateInstantiationFunctionDecl == NULL)
 
27173          if (templateInstantiationMemberFunctionDecl == NULL)
 
27182     bool isTemplateInstantiationMemberFunctionDecl = 
false;
 
27187     bool buildTemplateInstantiation     = 
false;
 
27188     SgTemplateArgumentPtrList* templateArgumentsList = NULL;
 
27193     ROSE_ASSERT(param_list == NULL || param_list->
get_parent() == NULL);
 
27195     switch (functionDeclaration->
variantT())
 
27197          case V_SgTemplateMemberFunctionDeclaration:
 
27200               printf (
"This function to replace the defining declaration with a non-defining declaration does not yet support template member functions \n");
 
27203               ROSE_ASSERT(original_templateMemberFunctionDeclaration != NULL);
 
27207               unsigned int functionConstVolatileFlags = 0;
 
27209               ROSE_ASSERT(original_templateMemberFunctionDeclaration->get_type() != NULL);
 
27214               SgMemberFunctionType* memberFunctionType = isSgMemberFunctionType(original_templateMemberFunctionDeclaration->get_type());
 
27215               ROSE_ASSERT(memberFunctionType != NULL);
 
27217               functionConstVolatileFlags = memberFunctionType->get_mfunc_specifier();
 
27223               SgTemplateParameterPtrList templateParameterList = original_templateMemberFunctionDeclaration->get_templateParameters();
 
27226               templateMemberFunctionDeclaration =
 
27229               printf (
"ERROR: Template functions are not yet supported! \n");
 
27232               nondefiningFunctionDeclaration = templateMemberFunctionDeclaration;
 
27234               ROSE_ASSERT(nondefiningFunctionDeclaration != NULL);
 
27237               if (isConstructor == 
true)
 
27239                    templateMemberFunctionDeclaration->get_specialFunctionModifier().setConstructor();
 
27245          case V_SgTemplateFunctionDeclaration:
 
27248               printf (
"This function to replace the defining declaration with a non-defining declaration does not yet support template functions \n");
 
27251               ROSE_ASSERT(original_templateFunctionDeclaration != NULL);
 
27259               SgTemplateParameterPtrList templateParameterList = original_templateFunctionDeclaration->get_templateParameters();
 
27263               printf (
"ERROR: Template functions are not yet supported! \n");
 
27266               nondefiningFunctionDeclaration = templateFunctionDeclaration;
 
27268               ROSE_ASSERT(nondefiningFunctionDeclaration != NULL);
 
27274          case V_SgTemplateInstantiationMemberFunctionDecl:
 
27276               buildTemplateInstantiation = 
true;
 
27278               isTemplateInstantiationMemberFunctionDecl = 
true;
 
27281               ROSE_ASSERT(templateInstantiationMemberFunctionDecl != NULL);
 
27284               printf (
"name from functionDeclaration->get_name(): name                                       = %s \n",name.str());
 
27286               printf (
"name from templateInstantiationMemberFunctionDecl->get_templateName(): template_name  = %s \n",templateInstantiationMemberFunctionDecl->
get_templateName().str());
 
27288               if (templateDeclaration != NULL)
 
27290                    printf (
"name from templateInstantiationMemberFunctionDecl->get_template_declaration()->get_name(): template_name  = %s \n",templateDeclaration->get_name().str());
 
27291                    printf (
"name from templateInstantiationMemberFunctionDecl->get_template_declaration()->get_template_name(): template_name  = %s \n",templateDeclaration->
get_template_name().str());
 
27298               printf (
"In case V_SgTemplateInstantiationMemberFunctionDecl: using name = %s \n",name.str());
 
27303          case V_SgMemberFunctionDeclaration:
 
27306               printf (
"This function to replace the defining declaration with a non-defining declaration does not yet support member functions \n");
 
27309               ROSE_ASSERT(original_memberFunctionDeclaration != NULL);
 
27317               unsigned int functionConstVolatileFlags = 0;
 
27319               ROSE_ASSERT(original_memberFunctionDeclaration->get_type() != NULL);
 
27328               bool buildPrototype = isTemplateInstantiationMemberFunctionDecl || original_memberFunctionDeclaration->
get_parent() == original_memberFunctionDeclaration->
get_scope();
 
27330               printf (
"In SageInterface::buildFunctionPrototype(): buildPrototype = %s \n",buildPrototype ? 
"true" : 
"false");
 
27332               if (buildPrototype == 
true)
 
27334                    SgMemberFunctionType* memberFunctionType = isSgMemberFunctionType(original_memberFunctionDeclaration->get_type());
 
27335                    ROSE_ASSERT(memberFunctionType != NULL);
 
27337                    printf (
"original_memberFunctionDeclaration->get_parent() == original_memberFunctionDeclaration->get_scope() \n");
 
27339                    functionConstVolatileFlags = memberFunctionType->get_mfunc_specifier();
 
27341                    memberFunctionDeclaration =
 
27343                              ( name, return_type, param_list, scope, python_decoratorList, functionConstVolatileFlags,
 
27344                                buildTemplateInstantiation,templateArgumentsList );
 
27346                    printf (
"ERROR: Member functions are not yet supported! \n");
 
27350                    if (isConstructor == 
true)
 
27352                         memberFunctionDeclaration->get_specialFunctionModifier().setConstructor();
 
27355                    nondefiningFunctionDeclaration = memberFunctionDeclaration;
 
27357                    ROSE_ASSERT(nondefiningFunctionDeclaration != NULL);
 
27363                    printf (
"NOTE: Member functions defined outside of their class can not be output as member function prototypes (not allowed in C++) \n");
 
27367                    nondefiningFunctionDeclaration = NULL;
 
27369                    nondefiningFunctionDeclaration = NULL;
 
27371                    replaceWithEmptyDeclaration = 
true;
 
27373                    ROSE_ASSERT(emptyDeclaration != NULL);
 
27382                    printf (
"Exiting as a test! \n");
 
27392          case V_SgFunctionDeclaration:
 
27395               nondefiningFunctionDeclaration = 
buildNondefiningFunctionDeclaration (name, return_type, param_list, scope, python_decoratorList, buildTemplateInstantiation,templateArgumentsList);
 
27396               ROSE_ASSERT(nondefiningFunctionDeclaration != NULL);
 
27401          case V_SgTemplateInstantiationFunctionDecl:
 
27404               buildTemplateInstantiation = 
true;
 
27406               ROSE_ASSERT(templateInstantiationFunctionDecl != NULL);
 
27409               printf (
"name from functionDeclaration->get_name(): name                                       = %s \n",name.str());
 
27411               printf (
"name from templateInstantiationFunctionDecl->get_templateName(): template_name  = %s \n",templateInstantiationFunctionDecl->
get_templateName().str());
 
27413               if (templateDeclaration != NULL)
 
27415                    printf (
"name from templateInstantiationFunctionDecl->get_template_declaration()->get_name(): template_name  = %s \n",templateDeclaration->get_name().str());
 
27416                    printf (
"name from templateInstantiationFunctionDecl->get_template_declaration()->get_template_name(): template_name  = %s \n",templateDeclaration->
get_template_name().str());
 
27421               printf (
"In case V_SgTemplateInstantiationFunctionDecl: using name = %s \n",name.str());
 
27423               nondefiningFunctionDeclaration = 
buildNondefiningFunctionDeclaration (name, return_type, param_list, scope, python_decoratorList, buildTemplateInstantiation,templateArgumentsList);
 
27424               ROSE_ASSERT(nondefiningFunctionDeclaration != NULL);
 
27443     ROSE_ASSERT(param_list == NULL || param_list->
get_parent() != NULL);
 
27449     if (nondefiningFunctionDeclaration != NULL)
 
27454               printf (
"Setting the firstNondefiningDeclaration \n");
 
27462               printf (
"Setting the definingDeclaration \n");
 
27471          if (nondefiningFunctionDeclaration != NULL)
 
27481     return nondefiningFunctionDeclaration;
 
 
27490     ROSE_ASSERT(functionDeclaration != NULL);
 
27493     printf (
"****************************************************************** \n");
 
27494     printf (
"Attached comments and CPP directives: defining functionDeclaration \n");
 
27496     printf (
"****************************************************************** \n");
 
27504     if (nondefiningFunctionDeclaration != NULL)
 
27515     if (templateInstantiationFunctionDecl == NULL)
 
27517          if (nondefiningFunctionDeclaration != NULL)
 
27520               nondefiningFunctionDeclaration->get_declarationModifier() = functionDeclaration->get_declarationModifier();
 
27523               nondefiningFunctionDeclaration->get_functionModifier()        = functionDeclaration->get_functionModifier();
 
27524               nondefiningFunctionDeclaration->get_specialFunctionModifier() = functionDeclaration->get_specialFunctionModifier();
 
27526               nondefiningFunctionDeclaration->set_linkage( functionDeclaration->get_linkage() );
 
27527               nondefiningFunctionDeclaration->set_externBrace( functionDeclaration->get_externBrace() );
 
27529               ROSE_ASSERT(nondefiningFunctionDeclaration->get_forward() == 
true);
 
27532               int file_id = functionDeclaration->
get_file_info()->get_physical_file_id();
 
27533               nondefiningFunctionDeclaration->
get_file_info()->set_physical_file_id(file_id);
 
27549               ROSE_ASSERT(nondefiningFunctionDeclaration->
get_parent() != NULL);
 
27555          nondefiningFunctionDeclaration = NULL;
 
27559     if (functionDeclaration->get_declarationModifier().get_storageModifier().
isStatic() == 
true)
 
27561          ROSE_ASSERT(nondefiningFunctionDeclaration->get_declarationModifier().get_storageModifier().
isStatic() == 
true);
 
27565     return nondefiningFunctionDeclaration;
 
 
27569std::vector<SgFunctionDeclaration*>
 
27581               std::vector<SgFunctionDeclaration*> functionList;
 
27582               FunctionDefinitionsTraversal() {}
 
27584               void visit (
SgNode* node)
 
27587                    if (functionDeclaration != NULL)
 
27593                         if (functionDeclaration == definingFunctionDeclaration)
 
27597                              if (functionDeclarationScope != NULL)
 
27599                                   functionList.push_back(functionDeclaration);
 
27607     FunctionDefinitionsTraversal traversal;
 
27609     traversal.traverseWithinFile(node, preorder);
 
27611     std::vector<SgFunctionDeclaration*> & functionList = traversal.functionList;
 
27613     return functionList;
 
 
27620     ROSE_ASSERT(node != NULL);
 
27623     std::vector<SgFunctionDeclaration*>::iterator i = functionList.begin();
 
27625     while (i != functionList.end())
 
27628          ROSE_ASSERT(functionDeclaration != NULL);
 
 
27646     ROSE_ASSERT(node != 
nullptr);
 
27652               void visit (
SgNode* node)
 
27655                    if (variableDeclaration != NULL)
 
27658                         SgExpression* initializer = initializedName->get_initializer();
 
27660                         printf (
"variableDeclaration = %p initializedName = %p = %s initializer = %p \n",
 
27661                              variableDeclaration,initializedName,initializedName->get_name().str(),initializer);
 
27663                         if (initializer != NULL)
 
27665                              printf (
" --- initializer = %s \n",initializer->
class_name().c_str());
 
27672       CheckInitializerTraversal traversal;
 
27673       traversal.traverse(node, preorder);
 
 
27681    void setResult(
SgType*)         {  }
 
27683    void handle(
SgNode& n, 
SgNode&) { SG_UNEXPECTED_NODE(n); }
 
27685    template <
class SageDeclarationStatement>
 
27691      setResult(n.get_type());
 
27694    template <
class SageNode>
 
27695    void handle(SageNode& n)
 
27708  SgGlobal * gsaf = project->get_globalScopeAcrossFiles();
 
27709  ROSE_ASSERT(gsaf != 
nullptr);
 
27711  ROSE_ASSERT(st != 
nullptr);
 
27713  ROSE_ASSERT(hmm != 
nullptr);
 
27717  ROSE_ASSERT(st != 
nullptr);
 
27718  hmm = st->get_table();
 
27719  ROSE_ASSERT(hmm != 
nullptr);
 
27723  ROSE_ASSERT(st != 
nullptr);
 
27724  hmm = st->get_table();
 
27725  ROSE_ASSERT(hmm != 
nullptr);
 
 
27745  int match_count = 0;
 
27746  ROSE_ASSERT (root);
 
27750  Rose_STL_Container<SgNode*> nodeList = NodeQuery::querySubTree(root, V_SgArrowExp);
 
27754  boost::unordered::unordered_map <SgNode*, bool> visited;
 
27757  for (Rose_STL_Container<SgNode *>::reverse_iterator i = nodeList.rbegin(); i != nodeList.rend(); i++)
 
27760    if (visited.count(*i)==1)
 
27769      cerr<<
"SageInterface::normalizeArrowExpWithAddressOfLeftOperand() expects SgArrowExp while encountering "<<(*i)->class_name()<<
"@"<<(*i) <<endl;
 
27770      ROSE_ASSERT (a_exp);
 
27773    if (transformationGeneratedOnly)
 
27781      if (
SgVarRefExp* left = isSgVarRefExp(address_op->get_operand())) 
 
27794  return match_count;
 
 
27804               Traversal() : found(
false) {}
 
27805               void visit (
SgNode* node)
 
27807                    SgCastExp* castExpression = isSgCastExp(node);
 
27808                    if (castExpression != NULL)
 
27812                         if (initializer == NULL)
 
27817                                   printf (
" --- Found a SgCastExp marked as a transformation: castExpression = %p \n",castExpression);
 
27820                                   printf (
"Exiting as a test! \n");
 
27821                                   ROSE_ASSERT(
false);
 
27827                                   printf (
" --- SgCastExp (but not marked as a transformation) node = %p = %s \n",node,node->
class_name().c_str());
 
27835                              printf (
" --- SgCastExp (but from an initializer) node = %p = %s \n",node,node->
class_name().c_str());
 
27842                         printf (
" --- node = %p = %s \n",node,node->
class_name().c_str());
 
27849     printf (
"In findFirstSgCastExpMarkedAsTransformation(): s = %s \n",s.c_str());
 
27853     Traversal traversal;
 
27854     traversal.traverse(n, preorder);
 
27857     printf (
"In findFirstSgCastExpMarkedAsTransformation(): s = %s traversal.found = %s \n",s.c_str(),traversal.found ? 
"true" : 
"false");
 
27861     if (traversal.found == 
true)
 
27863          printf (
"In findFirstSgCastExpMarkedAsTransformation(): returning false \n");
 
27868     return traversal.found;
 
 
27879   ROSE_ASSERT (info != NULL);
 
27880    PreprocessingInfo::DirectiveType dtype= info->getTypeOfDirective();
 
27881    if (dtype == PreprocessingInfo::CpreprocessorIfdefDeclaration  ||
 
27882        dtype == PreprocessingInfo::CpreprocessorIfndefDeclaration ||
 
27883        dtype == PreprocessingInfo::CpreprocessorIfDeclaration )
 
27887    else if (dtype==PreprocessingInfo::CpreprocessorElseDeclaration||
 
27888             dtype==PreprocessingInfo::CpreprocessorElifDeclaration)
 
27892    else if (dtype==PreprocessingInfo::CpreprocessorEndifDeclaration)
 
27901static void moveInofListToNewPlace(AttachedPreprocessingInfoType* infoList, 
int cidx, set <AttachedPreprocessingInfoType*>& relatedInfoList, 
SgLocatedNode* lnode, 
int &retVal)
 
27906     relatedInfoList.insert (infoList);
 
27910     info->setRelativePosition(PreprocessingInfo::after);
 
27917     (*infoList)[cidx]= NULL;
 
27924   ROSE_ASSERT(lnode);
 
27930   vector < pair< AttachedPreprocessingInfoType*, int> > empty_entries; 
 
27931   for(;ast_i!=ast.
end();++ast_i) {
 
27933       if (current ==NULL ) 
 
27937       if (infoList == NULL) 
continue;
 
27939       int commentIndex=0;
 
27940       for (Rose_STL_Container<PreprocessingInfo*>::iterator ci = (*infoList).begin(); ci != (*infoList).end(); ci++)
 
27946               empty_entries.push_back( make_pair (infoList, commentIndex) );
 
27952   for (
auto ki = empty_entries.rbegin(); ki != empty_entries.rend(); ki ++)
 
27954     AttachedPreprocessingInfoType* infoList =  (*ki).first;
 
27955     int cidx=  (*ki).second;
 
27958     ROSE_ASSERT (info==NULL);
 
27961     AttachedPreprocessingInfoType::iterator k = infoList->begin();
 
27962     infoList->erase(k+cidx);
 
 
27972static std::unordered_map <PreprocessingInfo*, SageInterface::PreprocessingInfoData> infoMap;
 
27977  if (current == NULL)
 
27983  vector<PreprocessingInfo*> afterList;
 
27986    AttachedPreprocessingInfoType* comments = locatedNode->getAttachedPreprocessingInfo();
 
27988    if (comments != 
nullptr)
 
27990      AttachedPreprocessingInfoType::iterator i;
 
27992      for (i = comments->begin (); i != comments->end (); i++)
 
27998        data.container=comments;
 
28000        data.depth = depth;
 
28003        if (info->getRelativePosition () == PreprocessingInfo::before)
 
28005          infoList.push_back (info);
 
28006          infoMap[info] = data;
 
28011        else if (info->getRelativePosition () == PreprocessingInfo::after
 
28012              || info->getRelativePosition () == PreprocessingInfo::inside
 
28015          afterList.push_back (info); 
 
28016          infoMap[info] = data;
 
28020         mlog[Sawyer::Message::Common::WARN] <<
"Warning: unhandled relative position value:" <<info->getRelativePosition () <<endl;
 
28031  for (
auto c: children)
 
28035  for (
auto fi : afterList)
 
28036    infoList.push_back(fi);
 
 
28050    ROSE_ASSERT(lnode);
 
28066   vector < pair< AttachedPreprocessingInfoType*, int> > keepers; 
 
28070   unordered_map < PreprocessingInfo * , vector< pair<AttachedPreprocessingInfoType*, int>> > associated_directives;
 
28075   vector< pair<AttachedPreprocessingInfoType*, int>> associated_erase;
 
28083   vector<PreprocessingInfo*> candidateInfoList;
 
28088   for (
auto candidate: candidateInfoList)
 
28095     if (infoMap[info].depth ==0)
 
28098     int commentIndex = infoMap[info].index;
 
28099     AttachedPreprocessingInfoType* infoList = infoMap[info].container;
 
28102     if ( isBeginDirective(info) == 1)
 
28104       keepers.push_back(make_pair (infoList,commentIndex));
 
28107     else if (isBeginDirective(info) == 2)
 
28112       if (keepers.size()==0)
 
28113         keepers.push_back(make_pair (infoList, commentIndex));
 
28114       else if (isBeginDirective( (*(keepers.back().first))[keepers.back().second]  )!=1 ) 
 
28116         keepers.push_back(make_pair (infoList,commentIndex));
 
28118       else if(isBeginDirective( (*(keepers.back().first))[keepers.back().second] )==1 ) 
 
28120         PreprocessingInfo* begin_info = (*(keepers.back().first))[keepers.back().second];
 
28122         associated_directives[begin_info].push_back(make_pair (infoList,commentIndex));
 
28126     else if ( isBeginDirective(info) == -1)
 
28128       bool neutralized = 
false;
 
28130       if (keepers.size()>0)
 
28132         AttachedPreprocessingInfoType* comments = keepers.back().first;
 
28133         int idx = keepers.back().second;
 
28135         if(isBeginDirective( (*comments)[idx] )==1)
 
28137           keepers.pop_back();
 
28138           neutralized = 
true;
 
28143         keepers.push_back(make_pair (infoList,commentIndex));
 
28151   for(;ast_i!=ast.
end();++ast_i) {
 
28153       if (current ==NULL ) 
 
28157       if (infoList == NULL) 
continue;
 
28159       int commentIndex=0;
 
28160       for (Rose_STL_Container<PreprocessingInfo*>::iterator ci = (*infoList).begin(); ci != (*infoList).end(); ci++)
 
28162           ROSE_ASSERT(*ci != NULL);
 
28168           if ( isBeginDirective(info) == 1)
 
28170               keepers.push_back(make_pair (infoList,commentIndex));
 
28173           else if (isBeginDirective(info) == 2)
 
28178               if (keepers.size()==0)
 
28179                    keepers.push_back(make_pair (infoList,commentIndex));
 
28180               else if (isBeginDirective( (*(keepers.back().first))[keepers.back().second]  )!=1 ) 
 
28182                  keepers.push_back(make_pair (infoList,commentIndex));
 
28184               else if(isBeginDirective( (*(keepers.back().first))[keepers.back().second] )==1 ) 
 
28186                       PreprocessingInfo* begin_info = (*(keepers.back().first))[keepers.back().second];
 
28188                  associated_directives[begin_info].push_back(make_pair (infoList,commentIndex));
 
28192           else if ( isBeginDirective(info) == -1)
 
28194              bool neutralized = 
false;
 
28196               if (keepers.size()>0)
 
28198                  AttachedPreprocessingInfoType* comments = keepers.back().first;
 
28199                  int idx = keepers.back().second;
 
28201                  if(isBeginDirective( (*comments)[idx] )==1)
 
28203                      keepers.pop_back();
 
28204                      neutralized = 
true;
 
28209                   keepers.push_back(make_pair (infoList,commentIndex));
 
28216   set <AttachedPreprocessingInfoType*> relatedInfoList; 
 
28219   for (
auto ki = keepers.begin(); ki != keepers.end(); ki ++)
 
28221     AttachedPreprocessingInfoType* infoList =  (*ki).first;
 
28222     int cidx=  (*ki).second;
 
28224     relatedInfoList.insert (infoList);
 
28228     info->setRelativePosition(PreprocessingInfo::after);
 
28235     if (associated_directives.count (info)!=0)
 
28237        vector<pair<AttachedPreprocessingInfoType*,int>> a_list_vec =  associated_directives[info];
 
28238        for (
auto vec_i  = a_list_vec.rbegin(); vec_i != a_list_vec.rend(); vec_i ++  )
 
28240           AttachedPreprocessingInfoType* a_infoList =  (*vec_i).first;
 
28241           int aidx=  (*vec_i).second;
 
28242           moveInofListToNewPlace (a_infoList, aidx, relatedInfoList, lnode, retVal);
 
28243           associated_erase.push_back(make_pair (a_infoList, aidx));
 
28249     (*infoList)[cidx]= NULL;
 
 
to specify a construct using a specifier Can be used alone or with parent handles when relative speci...
virtual void * getNode() const
Get the raw IR node associated with the current abstract node.
Base class for all IR node attribute values.
Attribute Evaluator for synthesized attributes.
SynthesizedAttributeType traverse(SgNode *node)
evaluates attributes on the entire AST
Attribute storing an SgNode.
Class for traversing the AST.
void traverse(SgNode *node, Order treeTraversalOrder)
traverse the entire AST. Order defines preorder (preorder) or postorder (postorder) traversal....
void visit(SgNode *astNode)
this method is called at every traversed node.
void visit(SgNode *astNode)
visitor function for each node to collect non-builtin types' declarations
void visit(SgNode *astNode)
this method is called at every traversed node.
For preprocessing information including source comments, include , if, define, etc.
RelativePositionType
MK: Enum type to store if the directive goes before or after the corresponding line of source code.
Interface for iterating over an AST.
iterator begin()
Iterator positioned at root of subtree.
iterator end()
Iterator positioned at the end of the traversal.
const Digest & digest() override
Return the digest.
void insert(const std::string &)
Insert data into the digest.
uint64_t toU64()
Returns the hash as a 64 bit int.
void visit(SgNode *node)
this method is called at every traversed node.
Interface for creating a statement whose computation writes its answer into a given variable.
A persistent attribute to represent a unique name for an expression.
SgName get_name() const override
Access function for getting name from declarations or types internally.
Base class for binary files.
SgAsmGenericHeaderList *const & get_headers() const
Property: List of all headers in file.
SgAsmInterpretationPtrList const & get_interpretations() const
Property: Interpretation list.
Represents an interpretation of a binary container.
This class represents the concept of a C Assembler statement.
This class represents the rhs of a variable declaration which includes an optional assignment (e....
void set_operand(SgExpression *exp)
This sets the rhs expression.
SgExpression * get_operand() const
Returns the rhs.
This class represents the concept of a block (not a basic block from control flow analysis).
const SgStatementPtrList & get_statements() const
Returns a const STL list by reference.
static void traverseMemoryPoolNodes(ROSE_VisitTraversal &visit)
FOR INTERNAL USE Support for visitor pattern over all IR nodes by type of IR node.
This class represents the notion of a binary operator. It is derived from a SgExpression because oper...
SgExpression * get_lhs_operand() const
returns SgExpression pointer to the lhs operand associated with this binary operator.
void set_rhs_operand(SgExpression *exp)
This function allows the p_rhs_operand pointer to be set (used internally).
void set_lhs_operand(SgExpression *exp)
This function allows the p_lhs_operand pointer to be set (used internally).
SgExpression * get_rhs_operand_i() const
returns SgExpression pointer to the operand associated with this binary operator.
SgExpression * get_lhs_operand_i() const
returns SgExpression pointer to the operand associated with this binary operator.
virtual VariantT variantT() const override
returns new style SageIII enum values
SgExpression * get_rhs_operand() const
returns SgExpression pointer to the rhs operand associated with this binary operator.
This class represents a boolean value (expression value).
This class represents the notion of a break statement (typically used in a switch statment).
virtual std::string class_name() const override
returns a string representing the class name
virtual VariantT variantT() const override
returns new style SageIII enum values
This class represents the concept of a C and C++ case option (used within a switch statement).
SgStatement * get_body() const
Returns pointer to a SgBasicBlock object.
void set_key(SgExpression *key)
Access function for pointer to SgExpression object wrapped by SgExpressionRoot in p_key_root.
void set_body(SgStatement *body)
Access function for p_body.
SgExpression * get_key() const
Returns pointer to a SgExpression object wrapped by SgExpressionRoot in p_key_root.
This class represents a cast of one type to another.
SgType * get_type() const override
unparsing support for pragmas
This class represents the concept of a catch within a try-catch construct used in C++ exception handl...
void set_body(SgStatement *body)
Access function for p_body.
SgStatement * get_body() const
Access function for p_body.
This class represents the concept of a class declaration statement. It includes the concept of an ins...
void set_scope(SgScopeStatement *scope) override
Support for setting scopes (only meaningful on IR statements that store the scope explicitly).
virtual std::string class_name() const override
returns a string representing the class name
virtual SgSymbol * get_symbol_from_symbol_table() const override
FOR INTERNAL USE Get the associated symbol from the symbol table in the stored scope....
SgScopeStatement * get_scope() const override
Returns scope of current statement.
This class represents the concept of a class definition in C++.
SgClassDeclaration * get_declaration() const
returns the class declaration associated with this class decinition.
const SgDeclarationStatementPtrList & get_members() const
Returns a const list to the data member declarations.
virtual std::string class_name() const override
returns a string representing the class name
This class represents the concept of a C++ expression built from a class name.
SgClassSymbol * get_symbol() const
Returns pointer to SgSymbol.
This class represents the concept of a class name within the compiler.
SgName get_name() const override
Access function for getting name from declarations or types internally.
virtual std::string class_name() const override
returns a string representing the class name
virtual VariantT variantT() const override
returns new style SageIII enum values
static SgClassType * createType(SgDeclarationStatement *decl=NULL, SgExpression *optional_fortran_type_kind=NULL)
more sophisticated version for more complex types like SgClassType (types whose constructors take par...
This class represents the concept of a C trinary conditional expression (e.g. "test ?...
SgExpression * get_true_exp() const
Access function for p_true_exp.
void set_false_exp(SgExpression *false_exp)
Access function for p_false_exp.
SgExpression * get_conditional_exp() const
Access function for p_conditional_exp.
SgExpression * get_false_exp() const
Access function for p_false_exp.
void set_true_exp(SgExpression *true_exp)
Access function for p_true_exp.
void set_conditional_exp(SgExpression *conditional_exp)
Access function for p_conditional_exp.
This class represents the call of a class constructor to initialize a variable. For example "Foo foo;...
SgType * get_expression_type() const
Access function for p_expression_type, returns pointer to SgType associated with constructor.
This class represents the concept of a C or C++ continue statement.
Supporting class from copy mechanism within ROSE.
This class represents the concept of a contructor initializer list (used in constructor (member funct...
bool isFriend() const
declaration modifier is friend.
This class represents the concept of a declaration statement.
SgSymbol * search_for_symbol_from_symbol_table() const
User interface for retrieving the associated symbol from the declaration.
void set_definingDeclaration(SgDeclarationStatement *definingDeclaration)
This is an access function for the SgDeclarationStatement::p_definingDeclaration data member (see tha...
void set_firstNondefiningDeclaration(SgDeclarationStatement *firstNondefiningDeclaration)
This is an access function for the SgDeclarationStatement::p_firstNondefiningDeclaration data member ...
SgDeclarationStatement * get_definingDeclaration() const
This is an access function for the SgDeclarationStatement::p_definingDeclaration data member (see tha...
virtual VariantT variantT() const override
returns new style SageIII enum values
virtual std::string class_name() const override
returns a string representing the class name
bool isForward() const
Returns boolean value indicating if this is a forward declaration.
SgDeclarationStatement * get_firstNondefiningDeclaration() const
This is an access function for the SgDeclarationStatement::p_firstNondefiningDeclaration data member ...
virtual SgSymbol * get_symbol_from_symbol_table() const override
FOR INTERNAL USE Get the associated symbol from the symbol table in the stored scope....
bool hasAssociatedSymbol() const
Returns boolean value true of this type of declaration has an associated sysmbol.
SgName get_template_name() const
This function returns the template name (taken from the template declaration for the class,...
This class represents the concept of a C or C++ default case within a switch statement.
void set_body(SgStatement *body)
Access function for p_body.
SgStatement * get_body() const
Returns pointer to SgBasicBlock.
This class represents a directory within a projects file structure of files and directories.
This class represents the concept of a do-while statement.
SgStatement * get_condition() const
Access function for p_condition.
SgStatement * get_body() const
Access function for p_body.
void set_condition(SgStatement *condition)
Access function for p_condition.
void set_body(SgStatement *body)
Access function for p_body.
This class represents the notion of an value (expression value).
This class represents the concept of an enum declaration.
SgScopeStatement * get_scope() const override
Access function for p_scope.
SgName get_name() const
Access function for p_name.
void set_scope(SgScopeStatement *scope) override
Access function for p_scope.
const SgInitializedNamePtrList & get_enumerators() const
Access function for p_enumerators.
This class represents the concept of a C and C++ expression list.
int replace_expression(SgExpression *o, SgExpression *n) override
This class represents the base class of all the expressions within this grammar.
This class represents the concept of a C or C++ statement which contains a expression.
This class represents the notion of an expression. Expressions are derived from SgLocatedNodes,...
virtual std::string class_name() const override
returns a string representing the class name
void set_need_paren(bool need_paren)
This function allows the p_need_paren flag to be set (used internally).
virtual VariantT variantT() const override
returns new style SageIII enum values
virtual SgType * get_type() const
unparsing support for pragmas
virtual int replace_expression(SgExpression *oldChild, SgExpression *newChild)
This class represents the base class of all the expressions within this grammar.
virtual const char * sage_class_name() const override
virtual Sg_File_Info * get_file_info(void) const override
Interface function to implement original SAGE interface to SgFile_Info objects.
void set_lvalue(bool lvalue)
This function allows the p_lvalue flag to be set (used internally).
bool get_lvalue() const
Returns a bool value if the current expression is assigned to.
This class represents a source file for a project (which may contian many source files and or directo...
std::string getFileName() const
associated filename
Sg_File_Info * get_file_info() const override
Access function calling get_startOfConstruct(), provided to support older interface.
This class represents the notion of an value (expression value).
This class represents the variable declaration or variable initialization withn a for loop.
const SgStatementPtrList & get_init_stmt() const
Returns const reference to a SgStatementPtrList (typedef to a STL list).
This class represents the concept of a for loop.
SgExpression * get_test_expr() const
Access function for p_test_expr_root.
SgForInitStatement * get_for_init_stmt() const
Access function for p_for_init_stmt.
void set_loop_body(SgStatement *loop_body)
Access function for p_loop_body.
SgStatement * get_loop_body() const
Access function for p_loop_body.
void set_for_init_stmt(SgForInitStatement *for_init_stmt)
Access function for p_for_init_stmt.
This class represents the concept of a C++ function call (which is an expression).
SgFunctionSymbol * getAssociatedFunctionSymbol() const
Returns the associated function symbol, if it can be resolved statically.
SgFunctionDeclaration * getAssociatedFunctionDeclaration() const
Returns the associated function declaration, if it can be resolved statically.
virtual std::string class_name() const override
returns a string representing the class name
This class represents the concept of a function declaration statement.
SgScopeStatement * get_scope() const override
Returns scope of current statement.
virtual SgSymbol * get_symbol_from_symbol_table() const override
FOR INTERNAL USE Get the associated symbol from the symbol table in the stored scope....
bool isTemplateFunction() const
Determines if function is a template or non-template function.
void set_scope(SgScopeStatement *scope) override
Support for setting scopes (only meaningful on IR statements that store the scope explicitly).
virtual std::string class_name() const override
returns a string representing the class name
virtual VariantT variantT() const override
returns new style SageIII enum values
This class represents the concept of a scope in C++ (e.g. global scope, fuction scope,...
virtual std::string class_name() const override
returns a string representing the class name
SgBasicBlock * get_body() const
Access function for p_body.
This class represents the concept of a declaration list.
const SgInitializedNamePtrList & get_args() const
Access function for p_args.
const SgTypePtrList & get_arguments() const
Get a const list of input types (types of the parameters list) to this function type (from a cost fun...
This class represents the function being called and must be assembled in the SgFunctionCall with the ...
SgFunctionDeclaration * getAssociatedFunctionDeclaration() const
Returns the associated function declaration, if it can be resolved statically.
SgName get_name() const override
Access function for getting name from declarations or types internally.
This class represents the function type table (stores all function types so that they can be shared i...
SgSymbolTable * get_function_type_table() const
Returns pointer to SgSymbolTable used for function type symbols only.
This class represents a type for all functions.
virtual std::string class_name() const override
returns a string representing the class name
const SgTypePtrList & get_arguments() const
This is a const convience access function to the STL container of types in the child IR node (SgFunct...
virtual SgName get_mangled(void) const override
Mangled name support for unparser support.
This class represents the concept of a namespace definition.
virtual std::string class_name() const override
returns a string representing the class name
const SgDeclarationStatementPtrList & get_declarations() const
Returns a const list to the global scope declarations.
This class represents the concept of a C or C++ goto statement.
SgLabelStatement * get_label() const
Returns pointer to SgLabelStatement where control flow will be transfered during execution.
void set_label(SgLabelStatement *label)
Access function for p_label.
InheritedAttributeType traverse(SgGraphNode *basenode, SgIncidenceDirectedGraph *g, InheritedAttributeType inheritedValue, InheritedAttributeType nullInherit, SgGraphNode *endnode, bool insep=false, bool pcHk=false)
This is the function that is used by the user directly to start the algorithm.
This class represents the concept of an "if" construct.
void set_false_body(SgStatement *false_body)
Access function for p_false_body.
virtual std::string class_name() const override
returns a string representing the class name
void set_true_body(SgStatement *true_body)
Access function for p_true_body.
SgStatement * get_conditional() const
Access function for p_conditional.
SgStatement * get_true_body() const
Access function for p_true_body.
SgStatement * get_false_body() const
Access function for p_false_body.
void set_conditional(SgStatement *conditional)
Access function for p_conditional.
This class represents the notion of a declared variable.
SgName get_qualified_name() const
Returns the name with appropriate qualified names representing nested scopes.
SgSymbol * get_symbol_from_symbol_table() const
Get the associated SgSymbol from the symbol table located in the scope, without considering possible ...
virtual std::string class_name() const override
returns a string representing the class name
SgDeclarationStatement * get_declaration() const
Equal operator : it checks if all the data members are the same or point to the same objects.
This class represents the notion of an initializer for a variable declaration or expression in a func...
This class represents the concept of a C or C++ label statement.
SgName get_label() const
Returns SgName by value.
SgScopeStatement * get_scope() const override
Returns scope of current statement.
void set_scope(SgScopeStatement *scope) override
Support for setting scopes (only meaningful on IR statements that store the scope explicitly).
label_type_enum
Type of label used (fortran only)
SgName get_name() const override
Access function for getting name from declarations or types internally.
virtual std::string class_name() const override
returns a string representing the class name
virtual VariantT variantT() const override
returns new style SageIII enum values
This class represents the notion of an expression or statement which has a position within the source...
virtual std::string class_name() const override
returns a string representing the class name
virtual const char * sage_class_name() const override
Sg_File_Info * get_endOfConstruct() const override
New function interface for Sg_File_Info data stores ending location of contruct (typically the closin...
void setTransformation()
Allow IR nodes (mostly SgLocatedNode) to be marked as a transformation.
virtual void addNewAttribute(std::string s, AstAttribute *a) override
Add a new attribute represented by the named string.
void set_endOfConstruct(Sg_File_Info *endOfConstruct)
This function sets the current source location position of the end of the current construct.
Sg_File_Info * get_startOfConstruct() const override
New function interface for Sg_File_Info data stores starting location of contruct (typically the open...
void addToAttachedPreprocessingInfo(PreprocessingInfo *prepInfoPtr, PreprocessingInfo::RelativePositionType locationInList=PreprocessingInfo::after)
This function adds comment or CPP directives to the current IR node.
virtual AstAttribute * getAttribute(std::string s) const override
Returns attribute of name 's'.
void set_startOfConstruct(Sg_File_Info *startOfConstruct)
This function sets the current source location position of the start of the current construct.
bool isCompilerGenerated() const
Simple test for if this is a compiler generated node.
void insertToAttachedPreprocessingInfo(PreprocessingInfo *prepInfoPtr, PreprocessingInfo *anchorInfoPtr, bool insertAfter=true)
Insert prepInfo After (or before if last parameter is false) an anchor info ptr in the list of prepro...
virtual VariantT variantT() const override
returns new style SageIII enum values
void setOutputInCodeGeneration()
Allow IR nodes (mostly SgLocatedNode) to be marked as to when the information was unavilable in the f...
virtual Sg_File_Info * get_file_info() const override
Interface function to implement original SAGE interface to SgFile_Info objects.
bool isTransformation() const
Simple test for if this is a part of a transformation.
AttachedPreprocessingInfoType *& getAttachedPreprocessingInfo(void)
Computes the number of nodes in the defined subtree of the AST.
This class represents the notion of an value (expression value).
This class represents the concept of a member function declaration statement.
virtual std::string class_name() const override
returns a string representing the class name
virtual VariantT variantT() const override
returns new style SageIII enum values
This class represents the member function being called and must be assembled in the SgFunctionCall wi...
SgMemberFunctionDeclaration * getAssociatedMemberFunctionDeclaration() const
This is helpful in chasing down the associated declaration to this member function reference.
SgName get_name() const override
Access function for getting name from declarations or types internally.
SgTypeModifier & get_typeModifier()
Access function for modifier.
This class represents strings within the IR nodes.
virtual SgName get_name() const
Gets name of the type (useful for debugging, unparsing, etc.)
SgName get_qualified_name() const
Used for the SgNamedType object (base class for the SgClassType, SgTypedefType and the SgEnumType obj...
This class represents the concept of a C++ namespace alias declaration statement.
SgName get_name() const
Access function for p_name.
SgNamespaceDeclarationStatement * get_namespaceDeclaration() const
Access function for p_namespaceDeclaration.
This class represents the concept of a C++ namespace declaration.
virtual SgSymbol * get_symbol_from_symbol_table() const override
FOR INTERNAL USE Get the associated symbol from the symbol table in the stored scope....
SgName get_name() const
Access function for p_name.
SgNamespaceDefinitionStatement * get_definition() const
Returns pointer to SgNamespaceDefinitionStatement.
This class represents the concept of a namespace definition.
This class represents the concept of a namespace name within the compiler.
This class represents the base class for all IR nodes within Sage III.
static SgTypeTable * get_globalTypeTable()
Access function for symbol table specific to non-function types.
virtual std::vector< std::string > get_traversalSuccessorNamesContainer() const
container of names of variables or container indices used used in the traversal to access AST success...
SgNode * get_parent() const
Access function for parent node.
void set_isModified(bool isModified)
All nodes in the AST contain a isModified flag used to track changes to the AST.
virtual std::vector< SgNode * > get_traversalSuccessorContainer() const
container of pointers to AST successor nodes used in the traversal overridden in every class by gener...
virtual VariantT variantT() const
returns new style SageIII enum values
void set_parent(SgNode *parent)
All nodes in the AST contain a reference to a parent node.
virtual std::string unparseToString(SgUnparse_Info *info) const
This function unparses the AST node (excluding comments and unnecessary white space)
virtual std::string class_name() const
returns a string representing the class name
static std::map< SgNode *, std::string > & get_globalMangledNameMap()
Access function for performance optimizing global mangled name map.
virtual void checkDataMemberPointersIfInMemoryPool()
FOR INTERNAL USE This is used in internal tests to verify that all IR nodes are allocated from the he...
virtual AstAttribute * getAttribute(std::string s) const
Returns attribute of name 's'.
static SgFunctionTypeTable * get_globalFunctionTypeTable()
Access function for symbol table specific to function types.
virtual Sg_File_Info * get_file_info(void) const
File information containing filename, line number, column number, and if the SgNode is a part of a ne...
virtual bool attributeExists(std::string s) const
Tests if attribute of name 's' is present.
virtual std::vector< std::pair< SgNode *, std::string > > returnDataMemberPointers() const
FOR INTERNAL USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
virtual void addNewAttribute(std::string s, AstAttribute *a)
Add a new attribute represented by the named string.
static std::map< std::string, uint64_t > & get_shortMangledNameCache()
Access function for lower level optimizing of global mangled name map.
bool get_isModified() const
Acess function for isModified flag.
SgName get_name() const override
Support for some classes which have pure virtual function in base classes.
This class represents the concept of a C Assembler statement (untested).
Sg_File_Info * get_startOfConstruct() const override
New function interface for Sg_File_Info data stores starting location of contruct (typically the open...
This class represents a source project, with a list of SgFile objects and global information about th...
std::vector< std::string > getAbsolutePathFileNames() const
This function generates a list of files resolved to absolute paths (symbolic links should not be reso...
static void visitRepresentativeNode(ROSE_VisitTraversal &visit)
FOR INTERNAL USE Support for type-based traversal.
static int get_verbose(void)
DQ: Modified to accept a value on the command line (no longer a boolean variable) value of 0 means qu...
This class represents a OLD concept of the structure require for qualified names when they were in th...
This class represents the concept of a C Assembler statement (untested).
This class represents the concept of a scope in C++ (e.g. global scope, fuction scope,...
bool supportsDefiningFunctionDeclaration()
Reports if scope can support defining function declarations. Not all scopes permit function declarati...
const SgStatementPtrList generateStatementList() const
Generate s list of statements from either the existing list of statements or the list of declarations...
bool isNamedScope()
Some scopes have associated names for purposed of name qualification. This returns true if the scope ...
SgSymbolTable * get_symbol_table() const
Returns a pointer to the locally strored SgSymbolTable.
virtual const char * sage_class_name() const override
SgDeclarationStatementPtrList & getDeclarationList()
Gets reference to internal STL list of pointers to SgDeclarationStatement objects (only defined for s...
SgStatementPtrList & getStatementList()
Gets reference to internal STL list of pointers to SgStatement objects (only defined for scopes conta...
void append_statement(SgStatement *stmt)
Higher level function to handle statements and declarations is scopes.
void set_symbol_table(SgSymbolTable *symbol_table)
Sets the pointer to the locally strored SgSymbolTable.
virtual std::string class_name() const override
returns a string representing the class name
bool statementExistsInScope(SgStatement *statement)
Test for existence of statement is scope.
bool containsOnlyDeclarations() const
This function is used to indicate if either the getDeclarationList() or getStatementList() can be cal...
void insert_symbol(const SgName &n, SgSymbol *s)
Puts a SgSymbol object into the local symbol table.
virtual VariantT variantT() const override
returns new style SageIII enum values
virtual SgName get_qualified_name() const
Returns SgName (a string) representing the name of the current scope.
This class represents the "sizeof()" operator (applied to any type).
static void traverseMemoryPoolNodes(ROSE_VisitTraversal &visit)
FOR INTERNAL USE Support for visitor pattern over all IR nodes by type of IR node.
This class represents the notion of a statement.
virtual std::string class_name() const override
returns a string representing the class name
void insert_statement(SgStatement *target, SgStatement *newstmt, bool inFront=true)
This function inserts a single statement at the position indicated by target.
virtual void set_scope(SgScopeStatement *newScope)
Support for setting scopes (only meaningful on IR statements that store the scope explicitly).
virtual bool hasExplicitScope() const
Support for where the scope is explicitly required.
virtual SgSymbol * get_symbol_from_symbol_table() const
Get the associated symbol from the symbol table in the stored scope.
virtual SgScopeStatement * get_scope(void) const
Returns scope of current statement.
void remove_statement(SgStatement *)
This function removes the target statement from the AST.
virtual std::vector< SgNode * > get_traversalSuccessorContainer() const override
container of pointers to AST successor nodes used in the traversal overridden in every class by gener...
void replace_statement(SgStatement *target, SgStatement *newstmt)
This function replaces the target statement with a single statement.
virtual VariantT variantT() const override
returns new style SageIII enum values
bool isStatic() const
Storage modifier is static (always false for the SgStorageModifier in the SgInitializedName).
This class represents the base class of a numbr of IR nodes that don't otherwise fit into the existin...
virtual std::string class_name() const override
returns a string representing the class name
virtual VariantT variantT() const override
returns new style SageIII enum values
This class represents the concept of a switch.
void set_item_selector(SgStatement *item_selector)
Access function for p_item_selector.
SgStatement * get_body() const
Access function for p_body.
SgStatement * get_item_selector() const
Access function for p_item_selector_root.
void set_body(SgStatement *body)
Access function for p_body.
This class represents the symbol tables used in both SgScopeStatement and the SgFunctionTypeSymbolTab...
std::set< SgNode * > get_symbols() const
Complexity O(n)
void print(std::string label, VariantT nodeType=V_SgSymbol)
Outputs symbol table information (useful for debugging)
int size() const
Computes the number of symbols in the symbol table (forced to count them, I think,...
void remove(const SgSymbol *symbol)
Complexity O(n)
This class represents the concept of a name within the compiler.
virtual std::string class_name() const override
returns a string representing the class name
virtual VariantT variantT() const override
returns new style SageIII enum values
virtual SgName get_name() const =0
Access function for getting name from declarations or types internally.
virtual SgType * get_type() const =0
This function returns the type associated with the named entity.
This class represents template argument within the use of a template to build an instantiation.
SgExpression * get_expression() const
This function returns argumentExpression.
SgType * get_type() const
This function returns argumentType.
SgTemplateArgument::template_argument_enum get_argumentType() const
This function returns argumentType.
@ template_template_argument
@ start_of_pack_expansion_argument
This class represents the concept of a template declaration.
SgName get_string() const
Returns stringified template declaration.
virtual std::string class_name() const override
returns a string representing the class name
SgName get_name() const
Returns name of template declaration.
SgScopeStatement * get_scope() const override
Returns scope of current statement.
virtual SgSymbol * get_symbol_from_symbol_table() const override
FOR INTERNAL USE Get the associated symbol from the symbol table in the stored scope....
virtual VariantT variantT() const override
returns new style SageIII enum values
This class represents the concept of an instantiated class template.
virtual std::string class_name() const override
returns a string representing the class name
virtual SgSymbol * get_symbol_from_symbol_table() const override
FOR INTERNAL USE Get the associated symbol from the symbol table in the stored scope....
SgName get_templateName() const
Returns name of class template, the name excludes template arguments.
SgTemplateClassDeclaration * get_templateDeclaration() const
Returns pointer to SgTemplateDeclaration from which instantiation is generated.
This class represents the concept of a class definition in C++.
This class represents the concept of a C++ template instantiation directive.
SgDeclarationStatement * get_declaration() const
Returns pointer to SgDeclarationStatement.
This class represents the concept of an instantiation of function template.
virtual std::string class_name() const override
returns a string representing the class name
const SgTemplateArgumentPtrList & get_templateArguments() const
Returns pointer to STL list of pointers to SgTemplateArgument objects.
SgTemplateFunctionDeclaration * get_templateDeclaration() const
Returns pointer to SgTemplateDeclaration from which instantiation is generated.
SgName get_templateName() const
Returns name of instantiated function template, name includes template arguments.
This class represents the concept of an instantiation of member function template or a member functio...
virtual std::string class_name() const override
returns a string representing the class name
const SgTemplateArgumentPtrList & get_templateArguments() const
Returns pointer to STL list of pointers to SgTemplateArgument objects.
SgName get_templateName() const
Returns name of instantiated function template, name includes template arguments.
SgTemplateMemberFunctionDeclaration * get_templateDeclaration() const
Returns pointer to SgTemplateDeclaration from which instantiation is generated.
virtual VariantT variantT() const override
returns new style SageIII enum values
This class represents the "this" operator (can be applied to any member data).
Supporting class for "Deep" copies of the AST.
static SgTypeBool * createType(SgExpression *optional_fortran_type_kind=nullptr)
example of type used where construction is particularly simple
static SgTypeInt * createType(int sz=0, SgExpression *optional_fortran_type_kind=NULL)
more sophisticated version for more complex types like SgTypeInt (types whose constructors take param...
static SgTypeUnknown * createType(SgExpression *optional_fortran_type_kind=nullptr)
example of type used where construction is particularly simple
static SgTypeVoid * createType(SgExpression *optional_fortran_type_kind=nullptr)
example of type used where construction is particularly simple
This class represents the base class for all types.
std::vector< SgType * > getInternalTypes() const
Generate a container of types hidden in the input type.
SgType * stripType(unsigned char bit_array=STRIP_MODIFIER_TYPE|STRIP_REFERENCE_TYPE|STRIP_RVALUE_REFERENCE_TYPE|STRIP_POINTER_TYPE|STRIP_ARRAY_TYPE|STRIP_TYPEDEF_TYPE|STRIP_POINTER_MEMBER_TYPE) const
Returns hidden type beneath layers of typedefs, pointers, references, modifiers, array representation...
virtual std::string class_name() const override
returns a string representing the class name
virtual VariantT variantT() const override
returns new style SageIII enum values
This class represents the notion of a typedef declaration.
SgScopeStatement * get_scope() const override
Returns scope of current statement.
virtual SgSymbol * get_symbol_from_symbol_table() const override
FOR INTERNAL USE Get the associated symbol from the symbol table in the stored scope....
SgDeclarationStatement * get_baseTypeDefiningDeclaration() const
Returns the defining declaration if get_typedefBaseTypeContainsDefiningDeclaration() is true,...
void set_scope(SgScopeStatement *scope) override
Support for setting scopes (only meaningful on IR statements that store the scope explicitly).
SgType * get_base_type() const
This is used in the SgTypedefType object (is not associated with a base_type data field)
void set_operand_i(SgExpression *operand_i)
This function allows the p_operand_i pointer to be set (used internally).
SgExpression * get_operand() const
returns SgExpression pointer to the operand associated with this unary operator.
This class represents the concept of a C++ using declaration.
SgDeclarationStatement * get_declaration() const
Access function for p_declaration.
SgInitializedName * get_initializedName() const
Access function for p_initializedName.
This class represents the concept of a C++ using directive.
SgNamespaceDeclarationStatement * get_namespaceDeclaration() const
Access function for p_namespaceDeclaration.
This class represents the notion of an value (expression value).
virtual VariantT variantT() const override
returns new style SageIII enum values
virtual std::string class_name() const override
returns a string representing the class name
This class represents the variable refernece in expressions.
static void traverseMemoryPoolNodes(ROSE_VisitTraversal &visit)
FOR INTERNAL USE Support for visitor pattern over all IR nodes by type of IR node.
This class represents the concept of a C or C++ variable declaration.
const SgInitializedNamePtrList & get_variables() const
Access function for p_variables.
SgDeclarationStatement * get_baseTypeDefiningDeclaration() const
Returns the defining declaration if get_variableDeclarationContainsBaseTypeDefiningDeclaration() is t...
bool get_variableDeclarationContainsBaseTypeDefiningDeclaration() const
Access function for p_variableDeclarationContainsBaseTypeDefiningDeclaration.
This class represents the definition (initialization) of a variable.
SgInitializedName * get_vardefn() const
Access function for SgInitializedName stored in p_vardefn.
This class represents the concept of a variable name within the compiler (a shared container for the ...
virtual std::string class_name() const override
returns a string representing the class name
SgName get_name() const override
Access function for getting name from declarations or types internally.
This class represents the concept of a do-while statement.
SgStatement * get_condition() const
Access function for p_condition.
void set_condition(SgStatement *condition)
Access function for p_condition.
SgStatement * get_body() const
Access function for p_body.
void set_body(SgStatement *body)
Access function for p_body.
This class represents the location of the code associated with the IR node in the original source cod...
void setTransformation()
Marks an IR node to be a transformation if it is not one already.
const char * get_filename() const
Returns filename of source code associated with IR node.
bool isOutputInCodeGeneration() const
Returns true only if required to be unparsed in generated code.
int get_line() const
Returns the line number of the associated code for this IR node.
bool isCompilerGenerated() const
Returns true only if compiler generated (either by the front-end or by ROSE).
int get_col() const
Returns the column number of the associated code for this IR node.
static Sg_File_Info * generateDefaultFileInfoForTransformationNode()
Static function to return new Sg_File_Info object set to default values appropriate for transformatio...
bool isTransformation() const
Access function for classification bit field.
bool isShared() const
Returns true only if shared internally (either by the front-end or by ROSE).
static Sg_File_Info * generateDefaultFileInfo()
Static function to return new Sg_File_Info object set to default values.
void setOutputInCodeGeneration()
Marks IR node as compiler generated but required in the generated source (e.g. requied templates).
Hash table support for symbol tables within ROSE.
ROSE_DLL_API abstract_handle * buildAbstractHandle(SgNode *snode)
A default builder function handles all details: file use name, others use numbering
ROSE_DLL_API std::vector< std::string > generateSourceFilenames(std::vector< std::string > argList, bool binaryMode)
Build the list of isolated file names from the command line.
ROSE_UTIL_API void removeAllFileNamesExcept(std::vector< std::string > &argv, std::vector< std::string > filenameList, std::string exceptFilename)
Remove file names specified in filenameList from argv, except for 'exceptFilename'.
void edgePointerReplacement(replacement_map_t const &)
For all nodes in the memory pool, it looks for the edges in the replacement map. If a match is found ...
ROSE_DLL_API std::string toBase62String(uint64_t)
Converts a 64 bit int to base 62.
ROSE_DLL_API Sawyer::Message::Facility mlog
Diagnostic facility for the ROSE library as a whole.
void serialize(std::ostream &output, Graph &graph)
Serialize a graph into a stream of bytes.
ROSE_UTIL_API std::string stripFileSuffixFromFileName(const std::string &fileNameWithSuffix)
Get the file name without the ".suffix".
ROSE_UTIL_API std::string numberToString(long long)
Convert an integer to a string.
ROSE_UTIL_API std::string copyEdit(const std::string &inputString, const std::string &oldToken, const std::string &newToken)
Replace all occurrences of a string with another string.
ROSE_UTIL_API std::string stripPathFromFileName(const std::string &fileNameWithPath)
Returns the last component of a path in a filesystem.
SgStatement * getPreviousStatement(SgStatement *targetStatement, bool climbOutScope=true)
Functions to move to SgStatement object in SAGE III later.
Functions that build an AST.
ROSE_DLL_API SgAddOp * buildAddOp(SgExpression *lhs=NULL, SgExpression *rhs=NULL)
ROSE_DLL_API SgFunctionDeclaration * buildNondefiningFunctionDeclaration(const SgName &name, SgType *return_type, SgFunctionParameterList *parlist, SgScopeStatement *scope=NULL, SgExprListExp *decoratorList=NULL, bool buildTemplateInstantiation=false, SgTemplateArgumentPtrList *templateArgumentsList=NULL, SgStorageModifier::storage_modifier_enum sm=SgStorageModifier::e_default)
Build a prototype for a function, handle function type, symbol etc transparently.
SourcePositionClassification
intended to be a private member, don't access it directly. could be changed any time
@ e_sourcePosition_last
Specify as source position to be filled in as part of AST construction in the front-end.
@ e_sourcePositionNullPointers
Classify as compiler generated code (e.g. template instantiation).
@ e_sourcePositionCompilerGenerated
Classify as a transformation.
@ e_sourcePositionFrontendConstruction
Set pointers to Sg_File_Info objects to NULL.
@ e_sourcePositionDefault
Error value for enum.
@ e_sourcePositionTransformation
Default source position.
ROSE_DLL_API SgPragma * buildPragma(const std::string &name)
Build SgPragma.
ROSE_DLL_API SourcePositionClassification getSourcePositionClassificationMode()
Get the current source position classification (defines how IR nodes built by the SageBuilder interfa...
ROSE_DLL_API SgEqualityOp * buildEqualityOp(SgExpression *lhs=NULL, SgExpression *rhs=NULL)
ROSE_DLL_API SgTemplateMemberFunctionDeclaration * buildNondefiningTemplateMemberFunctionDeclaration(const SgName &name, SgType *return_type, SgFunctionParameterList *parlist, SgScopeStatement *scope, SgExprListExp *decoratorList, unsigned int functionConstVolatileFlags, SgTemplateParameterPtrList *templateParameterList)
Build a variable declaration, handle symbol table transparently.
ROSE_DLL_API SgLabelStatement * buildLabelStatement(const SgName &name, SgStatement *stmt=NULL, SgScopeStatement *scope=NULL)
Build a label statement, name is the label's name. Handling label symbol and scope internally.
ROSE_DLL_API SgAddressOfOp * buildAddressOfOp(SgExpression *op=NULL)
ROSE_DLL_API SgTemplateFunctionDeclaration * buildNondefiningTemplateFunctionDeclaration(const SgName &name, SgType *return_type, SgFunctionParameterList *parlist, SgScopeStatement *scope=NULL, SgExprListExp *decoratorList=NULL, SgTemplateParameterPtrList *templateParameterList=NULL)
Build a variable declaration, handle symbol table transparently.
ROSE_DLL_API SgMultiplyOp * buildMultiplyOp(SgExpression *lhs=NULL, SgExpression *rhs=NULL)
ROSE_DLL_API SgGotoStatement * buildGotoStatement(SgLabelStatement *label=NULL)
Build a goto statement.
ROSE_DLL_API std::string display(SourcePositionClassification &scp)
display function for debugging
ROSE_DLL_API SgLabelRefExp * buildLabelRefExp(SgLabelSymbol *s)
Build a Fortran numeric label ref exp.
ROSE_DLL_API SgLessOrEqualOp * buildLessOrEqualOp(SgExpression *lhs=NULL, SgExpression *rhs=NULL)
ROSE_DLL_API SgSubtractOp * buildSubtractOp(SgExpression *lhs=NULL, SgExpression *rhs=NULL)
ROSE_DLL_API SgMemberFunctionType * buildMemberFunctionType(SgType *return_type, SgFunctionParameterTypeList *typeList, SgScopeStatement *struct_name, unsigned int mfunc_specifier)
Built in simple types.
ROSE_DLL_API SgWhileStmt * buildWhileStmt(SgStatement *condition, SgStatement *body, SgStatement *else_body=NULL)
Build while statement.
ROSE_DLL_API SgForStatement * buildForStatement(SgStatement *initialize_stmt, SgStatement *test, SgExpression *increment, SgStatement *loop_body, SgStatement *else_body=NULL)
Build a for statement, assume none of the arguments is NULL.
ROSE_DLL_API SgEmptyDeclaration * buildEmptyDeclaration()
Build an empty declaration (useful for adding precission to comments and CPP handling under token-bas...
ROSE_DLL_API SgConditionalExp * buildConditionalExp(SgExpression *test=NULL, SgExpression *a=NULL, SgExpression *b=NULL)
Build a conditional expression ?:
ROSE_DLL_API SgTypeInt * buildIntType()
Built in simple types.
SourcePositionClassification SourcePositionClassificationMode
C++ SageBuilder namespace specific state for storage of the source code position state (used to contr...
ROSE_DLL_API SgMinusOp * buildMinusOp(SgExpression *op=NULL)
ROSE_DLL_API SgExprListExp * buildExprListExp(SgExpression *expr1=NULL, SgExpression *expr2=NULL, SgExpression *expr3=NULL, SgExpression *expr4=NULL, SgExpression *expr5=NULL, SgExpression *expr6=NULL, SgExpression *expr7=NULL, SgExpression *expr8=NULL, SgExpression *expr9=NULL, SgExpression *expr10=NULL)
Build a SgExprListExp, used for function call parameter list etc.
ROSE_DLL_API SgPlusAssignOp * buildPlusAssignOp(SgExpression *lhs=NULL, SgExpression *rhs=NULL)
ROSE_DLL_API SgVarRefExp * buildVarRefExp(const SgName &name, SgScopeStatement *scope=NULL)
Build SgVarRefExp based on a variable's Sage name. It will lookup the name in the symbol table intern...
bool symbol_table_case_insensitive_semantics
Support for construction of case sensitive/insensitive symbol table handling in scopes.
ROSE_DLL_API SgDotExp * buildDotExp(SgExpression *lhs=NULL, SgExpression *rhs=NULL)
ROSE_DLL_API SgAssignInitializer * buildAssignInitializer(SgExpression *operand_i=NULL, SgType *expression_type=NULL)
Build the rhs of a variable declaration which includes an assignment.
ROSE_DLL_API SgArrayType * getUniqueJavaArrayType(SgType *, int)
Build a SgFile node and attach it to SgProject.
ROSE_DLL_API SgVariableDeclaration * buildVariableDeclaration(const SgName &name, SgType *type, SgInitializer *varInit=NULL, SgScopeStatement *scope=NULL)
Build a variable declaration, handle symbol table transparently.
ROSE_DLL_API SgScopeStatement * topScopeStack()
intended to be a private member, don't access it directly. could be changed any time
ROSE_DLL_API SgNullExpression * buildNullExpression()
Build a null expression, set file info as the default one.
ROSE_DLL_API SgGreaterOrEqualOp * buildGreaterOrEqualOp(SgExpression *lhs=NULL, SgExpression *rhs=NULL)
ROSE_DLL_API SgReferenceType * buildReferenceType(SgType *base_type=nullptr)
Build a reference type.
ROSE_DLL_API SgExprStatement * buildExprStatement(SgExpression *exp=NULL)
Build a SgExprStatement, set File_Info automatically.
ROSE_DLL_API SgIfStmt * buildIfStmt(SgStatement *conditional, SgStatement *true_body, SgStatement *false_body)
Build if statement.
ROSE_DLL_API SgFunctionParameterList * buildFunctionParameterList(SgInitializedName *in1=NULL, SgInitializedName *in2=NULL, SgInitializedName *in3=NULL, SgInitializedName *in4=NULL, SgInitializedName *in5=NULL, SgInitializedName *in6=NULL, SgInitializedName *in7=NULL, SgInitializedName *in8=NULL, SgInitializedName *in9=NULL, SgInitializedName *in10=NULL)
Build an empty SgFunctionParameterList, possibly with some initialized names filled in.
ROSE_DLL_API SgPointerDerefExp * buildPointerDerefExp(SgExpression *op=NULL)
ROSE_DLL_API SgTypeBool * buildBoolType()
Built in simple types.
ROSE_DLL_API SgAssignOp * buildAssignOp(SgExpression *lhs=NULL, SgExpression *rhs=NULL)
ROSE_DLL_API SgPointerType * buildPointerType(SgType *base_type=nullptr)
Build a pointer type.
ROSE_DLL_API SgBoolValExp * buildBoolValExp(int value=0)
Build a bool value expression, the name convention of SgBoolValExp is little different from others fo...
ROSE_DLL_API SgName appendTemplateArgumentsToName(const SgName &name, const SgTemplateArgumentPtrList &templateArgumentsList)
DQ (7/27/2012): changed semantics from removing the template arguments in names to adding the templat...
ROSE_DLL_API SgFunctionParameterTypeList * buildFunctionParameterTypeList(SgFunctionParameterList *paralist)
Build SgFunctionParameterTypeList from SgFunctionParameterList.
ROSE_DLL_API SgLessThanOp * buildLessThanOp(SgExpression *lhs=NULL, SgExpression *rhs=NULL)
ROSE_DLL_API SgCastExp * buildCastExp(SgExpression *operand_i=NULL, SgType *expression_type=NULL, SgCastExp::cast_type_enum cast_type=SgCastExp::e_C_style_cast)
Build a type casting expression.
ROSE_DLL_API SgMinusAssignOp * buildMinusAssignOp(SgExpression *lhs=NULL, SgExpression *rhs=NULL)
ROSE_DLL_API SgDivideOp * buildDivideOp(SgExpression *lhs=NULL, SgExpression *rhs=NULL)
ROSE_DLL_API SgBasicBlock * buildBasicBlock(SgStatement *stmt1=NULL, SgStatement *stmt2=NULL, SgStatement *stmt3=NULL, SgStatement *stmt4=NULL, SgStatement *stmt5=NULL, SgStatement *stmt6=NULL, SgStatement *stmt7=NULL, SgStatement *stmt8=NULL, SgStatement *stmt9=NULL, SgStatement *stmt10=NULL)
Build a SgBasicBlock, setting file info internally.
ROSE_DLL_API SgModOp * buildModOp(SgExpression *lhs=NULL, SgExpression *rhs=NULL)
ROSE_DLL_API SgExprStatement * buildAssignStatement(SgExpression *lhs, SgExpression *rhs)
Build an assignment statement from lefthand operand and right hand operand.
ROSE_DLL_API SgMemberFunctionDeclaration * buildNondefiningMemberFunctionDeclaration(const SgName &name, SgType *return_type, SgFunctionParameterList *parlist, SgScopeStatement *scope, SgExprListExp *decoratorList, unsigned int functionConstVolatileFlags, bool buildTemplateInstantiation, SgTemplateArgumentPtrList *templateArgumentsList)
Build a prototype member function declaration.
ROSE_DLL_API SgMemberFunctionDeclaration * buildDefaultConstructor(SgClassType *classType)
Build a variable declaration, handle symbol table transparently.
ROSE_DLL_API SgCommaOpExp * buildCommaOpExp(SgExpression *lhs=NULL, SgExpression *rhs=NULL)
ROSE_DLL_API SgIntVal * buildIntVal(int value=0)
Build an integer value expression.
SgDeclarationStatement * associatedDeclaration(const SgSymbol &n)
returns the associated declaration for symbol n or nullptr if there is none.
Functions that are useful when operating on the AST.
ROSE_DLL_API void checkSgNodePointers()
Function to delete AST subtree's nodes only, users must take care of any dangling pointers,...
ROSE_DLL_API bool isLastStatement(SgStatement *stmt)
Check if a statement is the last statement within its closed scope.
ROSE_DLL_API bool isUnionDeclaration(SgNode *node)
Check if a SgNode is a declaration for a union.
ROSE_DLL_API void translateScopeToUseCppDeclarations(SgScopeStatement *scope)
Connect variable reference to the right variable symbols when feasible, return the number of referenc...
void initializeIfStmt(SgIfStmt *ifstmt, SgStatement *conditional, SgStatement *true_body, SgStatement *false_body)
Support function used for variable declarations in conditionals.
ROSE_DLL_API void deepDelete(SgNode *root)
Deep delete a sub AST tree. It uses postorder traversal to delete each child node....
void annotateExpressionsWithUniqueNames(SgProject *project)
Generate unique names for expressions and attach the names as persistent attributes ("UniqueNameAttri...
ROSE_DLL_API bool hasMultipleInitStatmentsOrExpressions(SgForStatement *for_loop)
Check if a for loop uses C99 style initialization statement with multiple expressions like for (int i...
ROSE_DLL_API void fixNamespaceDeclaration(SgNamespaceDeclarationStatement *structDecl, SgScopeStatement *scope)
Fix symbols, parent and scope pointers. Used internally within appendStatment(), insertStatement() et...
void serialize(SgNode *node, std::string &prefix, bool hasRemaining, std::ostringstream &out, std::string &edgeLabel)
we have two serialize() functions, one for a single node, the other for a list of pointers
ROSE_DLL_API void deleteExpressionTreeWithOriginalExpressionSubtrees(SgNode *root)
Special purpose function for deleting AST expression tress containing valid original expression trees...
void setSourcePositionAsTransformation(SgNode *node)
DQ (5/1/2012): New function with improved name.
ROSE_DLL_API void insertStatementList(SgStatement *targetStmt, const std::vector< SgStatement * > &newStmts, bool insertBefore=true)
Insert a list of statements before or after the target statement within the.
void whereAmI(SgNode *node)
Diagnostic function for tracing back through the parent list to understand at runtime where in the AS...
ROSE_DLL_API SgStatement * getLastStatement(SgScopeStatement *scope)
get the last statement within a scope, return NULL if it does not exit
ROSE_DLL_API void addStepToLoopBody(SgScopeStatement *loopStmt, SgStatement *step)
Add a step statement to the end of a loop body Add a new label to the end of the loop,...
ROSE_DLL_API bool is_UPC_dynamic_threads()
ROSE_DLL_API SgFunctionDeclaration * getFunctionDeclaration(SgFunctionCallExp *functionCallExp)
Find a node by type using upward traversal.
ROSE_DLL_API bool is_mixed_Fortran_and_C_language()
ROSE_DLL_API void addTextForUnparser(SgNode *astNode, std::string s, AstUnparseAttribute::RelativePositionType inputlocation)
Add a string to be unparsed to support code generation for back-end specific tools or compilers.
ROSE_DLL_API std::string getTempDirectory(SgProject *project)
Create a temporary directory if it does not yet exist and return its name.
ROSE_DLL_API void displayScope(SgScopeStatement *scope)
Find a node by type using upward traversal.
ROSE_DLL_API bool is_Jovial_language()
ROSE_DLL_API SgMemberFunctionDeclaration * findJavaMain(SgClassDefinition *)
Find a main method in a Java class.
ROSE_DLL_API bool is_Cxx_language()
void resetScopeNumbers(SgFunctionDefinition *functionDeclaration)
Assigns unique numbers to each SgScopeStatement of a function.
ROSE_DLL_API SgFunctionDeclaration * replaceDefiningFunctionDeclarationWithFunctionPrototype(SgFunctionDeclaration *functionDeclaration)
Function to delete AST subtree's nodes only, users must take care of any dangling pointers,...
ROSE_DLL_API bool hasSameGlobalScope(SgStatement *statement_1, SgStatement *statement_2)
This is supporting the recognition of functions in header files from two different ASTs.
SgCommaOpExp * insertBeforeUsingCommaOp(SgExpression *new_exp, SgExpression *anchor_exp)
Insert an expression (new_exp )before another expression (anchor_exp) has possible side effects,...
ROSE_DLL_API void fixFunctionDeclaration(SgFunctionDeclaration *stmt, SgScopeStatement *scope)
Fix the symbol table and set scope (only if scope in declaration is not already set).
ROSE_DLL_API std::string preprocessImport(SgProject *, std::string)
Using the import_string parameter, create a file with the relevant import statement; translate the fi...
ROSE_DLL_API bool collectReadWriteRefs(SgStatement *stmt, std::vector< SgNode * > &readRefs, std::vector< SgNode * > &writeRefs, bool useCachedDefUse=false)
Collect all read and write references within stmt, which can be a function, a scope statement,...
ROSE_DLL_API void prependStatementList(const std::vector< SgStatement * > &stmt, SgScopeStatement *scope=NULL)
prepend a list of statements to the beginning of the current scope, handling side effects as appropri...
ROSE_DLL_API SgInitializer * getInitializerOfExpression(SgExpression *n)
Get the initializer containing an expression if it is within an initializer.
ROSE_DLL_API std::vector< SgInitializedName * > getInParameters(const SgInitializedNamePtrList ¶ms)
Get a vector of Jovial input parameters from the function parameter list (may work for Fortran in the...
ROSE_DLL_API bool language_may_contain_nondeclarations_in_scope()
ROSE_DLL_API std::set< SgStatement * > collectTransformedStatements(SgNode *node)
This collects the statements that are marked as transformed (useful in debugging).
ROSE_DLL_API void cleanupNontransformedBasicBlockNode()
Remove unused basic block IR nodes added as part of normalization.
ROSE_DLL_API bool skipTranslateToUseCppDeclaration(PreprocessingInfo *currentPreprocessingInfo)
Connect variable reference to the right variable symbols when feasible, return the number of referenc...
ROSE_DLL_API AbstractHandle::abstract_handle * buildAbstractHandle(SgNode *)
Build an abstract handle from an AST node, reuse previously built handle when possible.
ROSE_DLL_API void insertStatementListBefore(SgStatement *targetStmt, const std::vector< SgStatement * > &newStmts)
Insert a list of statements before a target statement.
ROSE_DLL_API void fixStructDeclaration(SgClassDeclaration *structDecl, SgScopeStatement *scope)
Fix symbols, parent and scope pointers. Used internally within appendStatment(), insertStatement() et...
void recursivePrintCurrentAndParent(SgNode *n)
Recursively print current and parent nodes. used within gdb to probe the context of a node.
ROSE_DLL_API void appendExpressionList(SgExprListExp *, const std::vector< SgExpression * > &)
Append an expression list to a SgExprListExp, set the parent pointers also.
ROSE_DLL_API void collectReadOnlySymbols(SgStatement *stmt, std::set< SgVariableSymbol * > &readOnlySymbols, bool coarseGrain=true)
Collect read only variable symbols within a statement. The statement can be either of a function,...
bool isOverloaded(SgFunctionDeclaration *functionDeclaration)
Return true if function is overloaded.
ROSE_DLL_API int set_name(SgInitializedName *initializedNameNode, SgName new_name)
set_name of symbol in symbol table.
ROSE_DLL_API SgClassDefinition * findOrInsertJavaPackage(SgProject *, std::string, bool create_directory=false)
Process a qualified package name, if needed, and return its package definition.
ROSE_DLL_API SgClassDeclaration * findOrImportJavaClass(SgProject *, SgClassDefinition *package_definition, std::string)
If the class_name already exists in the scope, return it.
ROSE_DLL_API SgVariableSymbol * getFirstVarSym(SgVariableDeclaration *decl)
Get the variable symbol for the first initialized name of a declaration stmt.
ROSE_DLL_API bool templateArgumentEquivalence(SgTemplateArgument *arg1, SgTemplateArgument *arg2)
Verify that 2 SgTemplateArgument are equivalent (same type, same expression, or same template declara...
ROSE_DLL_API SgFunctionDeclaration * findFirstDefiningFunctionDecl(SgScopeStatement *scope)
Find the first defining function declaration statement in a scope.
ROSE_DLL_API bool is_Jvm_language()
void addMessageStatement(SgStatement *stmt, std::string message)
Function to add "C" style comment to statement.
ROSE_DLL_API bool isLoopIndexVariable(SgInitializedName *ivar, SgNode *subtree_root)
Check if a SgInitializedName is used as a loop index within a AST subtree This function will use a bo...
SgInitializedName & getFirstVariable(SgVariableDeclaration &vardecl)
convenience function that returns the first initialized name in a list of variable declarations.
void initializeSwitchStatement(SgSwitchStatement *switchStatement, SgStatement *item_selector, SgStatement *body)
Support function used for variable declarations in conditionals.
SgExprListExp * loopCollapsing(SgForStatement *target_loop, size_t collapsing_factor)
Add a step statement to the end of a loop body Add a new label to the end of the loop,...
ROSE_DLL_API void fixStatement(SgStatement *stmt, SgScopeStatement *scope)
A wrapper containing fixes (fixVariableDeclaration(),fixStructDeclaration(), fixLabelStatement(),...
ROSE_DLL_API SgStatement * copyStatement(SgStatement *s)
Deep copy a statement.
ROSE_DLL_API int eraseNullPreprocessingInfo(SgLocatedNode *lnode)
Dumps a located node's preprocessing information.
ROSE_DLL_API bool isCanonicalDoLoop(SgFortranDo *loop, SgInitializedName **ivar, SgExpression **lb, SgExpression **ub, SgExpression **step, SgStatement **body, bool *hasIncrementalIterationSpace, bool *isInclusiveUpperBound)
Check if a Fortran Do loop has a complete canonical form: Do I=1, 10, 1.
SgCommaOpExp * insertAfterUsingCommaOp(SgExpression *new_exp, SgExpression *anchor_exp, SgStatement **temp_decl=NULL, SgVarRefExp **temp_ref=NULL)
Insert an expression (new_exp ) after another expression (anchor_exp) has possible side effects,...
ROSE_DLL_API SgTemplateVariableSymbol * lookupTemplateVariableSymbolInParentScopes(const SgName &name, SgTemplateParameterPtrList *tplparams, SgTemplateArgumentPtrList *tplargs, SgScopeStatement *currentScope=NULL)
Find a symbol in current and ancestor scopes for a given variable name, starting from top of ScopeSta...
ROSE_DLL_API void moveUpPreprocessingInfo(SgStatement *stmt_dst, SgStatement *stmt_src, PreprocessingInfo::RelativePositionType src_position=PreprocessingInfo::undef, PreprocessingInfo::RelativePositionType dst_position=PreprocessingInfo::undef, bool usePrepend=false)
Identical to movePreprocessingInfo(), except for the stale name and confusing order of parameters....
ROSE_DLL_API SgStatement * lastStatementOfScopeWithTokenInfo(SgScopeStatement *scope, std::map< SgNode *, TokenStreamSequenceToNodeMapping * > &tokenStreamSequenceMap)
Used to support token unparsing (when the output the trailing token sequence).
ROSE_DLL_API void cutPreprocessingInfo(SgLocatedNode *src_node, PreprocessingInfo::RelativePositionType pos, AttachedPreprocessingInfoType &save_buf)
Cut preprocessing information from a source node and save it into a buffer. Used in combination of pa...
ROSE_DLL_API bool normalizeForLoopTest(SgForStatement *loop)
Normalize a for loop's test expression i<x is normalized to i<= (x-1) and i>x is normalized to i>= (x...
bool declarationPreceedsDefinition(SgDeclarationStatement *nonDefiningDeclaration, SgDeclarationStatement *definingDeclaration)
Check if a defining declaration comes before of after the non-defining declaration.
ROSE_DLL_API bool isSameFunction(SgFunctionDeclaration *func1, SgFunctionDeclaration *func2)
Check if two function declarations refer to the same one. Two function declarations are the same when...
std::vector< SgVariableSymbol * > getSymbolsUsedInExpression(SgExpression *expr)
Find referenced symbols within an expression.
ROSE_DLL_API bool isStructDeclaration(SgNode *node)
Check if a SgNode is a declaration for a structure.
ROSE_DLL_API void moveVariableDeclaration(SgVariableDeclaration *decl, SgScopeStatement *target_scope)
Move a variable declaration to a new scope, handle symbol, special scopes like For loop,...
ROSE_DLL_API std::string preprocessPackage(SgProject *, std::string)
Using the package_name, create a file with a package statement, translate it in order to load the pac...
ROSE_DLL_API void setOneSourcePositionForTransformation(SgNode *root)
Set current node's source position as transformation generated.
NodeType * deepCopy(const NodeType *subtree)
A template function for deep copying a subtree. It is also used to create deepcopy functions with spe...
void clearMangledNameCache(SgGlobal *globalScope)
Support for faster mangled name generation (caching avoids recomputation).
std::vector< SgStatement * > getSwitchCases(SgSwitchStatement *sw)
Query a subtree to get all nodes of a given type, with an appropriate downcast.
ROSE_DLL_API bool isScalarType(SgType *t)
Is this a scalar type?
ROSE_DLL_API void changeBreakStatementsToGotos(SgStatement *loopOrSwitch)
If the given statement contains any break statements in its body, add a new label below the statement...
ROSE_DLL_API SgFunctionDefinition * getEnclosingFunctionDefinition(SgNode *astNode, const bool includingSelf=false)
Find a node by type using upward traversal.
ROSE_DLL_API bool is_CAF_language()
ROSE_DLL_API void printOutComments(SgLocatedNode *locatedNode)
Connect variable reference to the right variable symbols when feasible, return the number of referenc...
ROSE_DLL_API void ReductionRecognition(SgForStatement *loop, std::set< std::pair< SgInitializedName *, OmpSupport::omp_construct_enum > > &results)
Recognize and collect reduction variables and operations within a C/C++ loop, following OpenMP 3....
ROSE_DLL_API bool loopUnrolling(SgForStatement *loop, size_t unrolling_factor)
Unroll a target loop with a specified unrolling factor. It handles steps larger than 1 and adds a fri...
ROSE_DLL_API void setLoopCondition(SgScopeStatement *loop, SgStatement *cond)
Set the condition statement of a loop, including While-loop, For-loop, and Do-While-loop.
bool ROSE_DLL_API isStatic(SgDeclarationStatement *stmt)
Check if a declaration has a "static' modifier.
PreprocessingInfo * attachComment(SgSourceFile *source_file, const std::string &content, PreprocessingInfo::DirectiveType directive_type=PreprocessingInfo::C_StyleComment, PreprocessingInfo::RelativePositionType position=PreprocessingInfo::before)
Build and attach comment onto the global scope of a source file.
ROSE_DLL_API SgClassDefinition * getEnclosingClassDefinition(SgNode *astnode, const bool includingSelf=false)
Get the closest class definition enclosing the specified AST node,.
ROSE_DLL_API bool mergeDeclarationAndAssignment(SgVariableDeclaration *decl, SgExprStatement *assign_stmt, bool removeAssignStmt=true)
Merge a variable assignment statement into a matching variable declaration statement....
ROSE_DLL_API void checkAccessPermissions(SgNode *)
Recursively print current and parent nodes. used within gdb to probe the context of a node.
ROSE_DLL_API std::vector< SgFunctionDeclaration * > generateFunctionDefinitionsList(SgNode *node)
Function to delete AST subtree's nodes only, users must take care of any dangling pointers,...
ROSE_DLL_API void replaceMacroCallsWithExpandedStrings(SgPragmaDeclaration *target)
Check if a pragma declaration node has macro calls attached, if yes, replace macro calls within the p...
std::string generateUniqueNameForUseAsIdentifier(SgDeclarationStatement *declaration)
Generate a useful name to support construction of identifiers from declarations.
ROSE_DLL_API bool isRestrictType(SgType *t)
Is this a restrict type?
ROSE_DLL_API std::string generateProjectName(const SgProject *project, bool supressSuffix=false)
Added mechanism to generate project name from list of file names.
ROSE_DLL_API void resetInternalMapsForTargetStatement(SgStatement *sourceStatement)
Reset internal data structures used for token-based unparsing and macro summaries based on modificati...
ROSE_DLL_API bool is_Cuda_language()
ROSE_DLL_API bool isLambdaCapturedVariable(SgVarRefExp *varRef)
check if a variable reference is this->a[i] inside of a lambda function
ROSE_DLL_API int instrumentEndOfFunction(SgFunctionDeclaration *func, SgStatement *s)
Instrument(Add a statement, often a function call) into a function right before the return points,...
ROSE_DLL_API SgInitializedName * getFirstInitializedName(SgVariableDeclaration *decl)
Get the first initialized name of a declaration statement.
void setSourcePositionPointersToNull(SgNode *node)
Set the source code positon for the current (input) node.
ROSE_DLL_API SgBasicBlock * ensureBasicBlockAsBodyOfDoWhile(SgDoWhileStmt *ws)
Check if the body of a 'do .. while' statement is a SgBasicBlock, create one if not.
ROSE_DLL_API void reportModifiedStatements(const std::string &label, SgNode *node)
Connect variable reference to the right variable symbols when feasible, return the number of referenc...
ROSE_DLL_API std::vector< SgInitializedName * > getOutParameters(const SgInitializedNamePtrList ¶ms)
Get a vector of Jovial output parameters from the function parameter list (may work for Fortran in th...
ROSE_DLL_API void setSourcePositionForTransformation(SgNode *root)
Recursively set source position info(Sg_File_Info) as transformation generated.
ROSE_DLL_API SgGlobal * getGlobalScope(const SgNode *astNode)
Traverse back through a node's parents to find the enclosing global scope.
ROSE_DLL_API void insertStatementListAfter(SgStatement *targetStmt, const std::vector< SgStatement * > &newStmt)
Insert a list of statements after a target statement.
ROSE_DLL_API bool isMain(const SgNode *node)
Check if a SgNode is a main() function declaration.
std::map< std::string, int > local_name_collision_map
Global map of name collisions to support generateUniqueNameForUseAsIdentifier() function.
ROSE_DLL_API void fixClassDeclaration(SgClassDeclaration *classDecl, SgScopeStatement *scope)
Fix symbols, parent and scope pointers. Used internally within appendStatment(), insertStatement() et...
ROSE_DLL_API int collectVariableReferencesInArrayTypes(SgLocatedNode *root, Rose_STL_Container< SgNode * > ¤tVarRefList)
Collect variable references in array types. The default NodeQuery::querySubTree() will miss variables...
SgBasicBlock * ensureBasicBlockAsBodyOfCaseOption(SgCaseOptionStmt *cs)
Check if the body of a 'case option' statement is a SgBasicBlock, create one if not.
void checkForInitializers(SgNode *node)
Collect all read and write references within stmt, which can be a function, a scope statement,...
ROSE_DLL_API void removeUnusedLabels(SgNode *top, bool keepChild=false)
Remove labels which are not targets of any goto statements: its child statement is also removed by de...
ROSE_DLL_API SgProject * getProject()
Get the current SgProject IR Node.
ROSE_DLL_API SgBasicBlock * ensureBasicBlockAsBodyOfUpcForAll(SgUpcForAllStatement *fs)
Check if the body of a 'upc_forall' statement is a SgBasicBlock, create one if not.
ROSE_DLL_API SgClassDeclaration * getEnclosingClassDeclaration(SgNode *astNode)
Get the closest class declaration enclosing the specified AST node,.
ROSE_DLL_API void insertStatement(SgStatement *targetStmt, SgStatement *newStmt, bool insertBefore=true, bool autoMovePreprocessingInfo=true)
Insert a statement before or after the target statement within the target's scope....
ROSE_DLL_API void listHeaderFiles(SgIncludeFile *includeFile)
return path prefix for subtree of include files.
ROSE_DLL_API void markSubtreeToBeUnparsedTreeTraversal(SgNode *root, int physical_file_id)
Recursively print current and parent nodes. used within gdb to probe the context of a node.
void saveToPDF(SgNode *node, std::string filename)
Save AST into a pdf file. Start from a node to find its enclosing file node. The entire file's AST wi...
ROSE_DLL_API bool normalizeForLoopInitDeclaration(SgForStatement *loop)
Normalize loop init stmt by promoting the single variable declaration statement outside of the for lo...
void detectCycleInType(SgType *type, const std::string &from)
Collect all read and write references within stmt, which can be a function, a scope statement,...
ROSE_DLL_API void deleteAST(SgNode *node)
Function to delete AST subtree's nodes only, users must take care of any dangling pointers,...
ROSE_DLL_API bool statementCanBeTransformed(SgStatement *stmt)
If header file unparsing and token-based unparsing are used, then some statements in header files use...
ROSE_DLL_API SgStatement * getNextStatement(SgStatement *currentStmt)
Get next statement within the same scope of current statement.
ROSE_DLL_API std::set< SgLabelStatement * > findUnusedLabels(SgNode *top)
Find unused labels which are not targets of any goto statements.
ROSE_DLL_API void setExtern(SgDeclarationStatement *stmt)
Set a declaration as extern.
ROSE_DLL_API void deleteAllNodes()
Function to delete AST subtree's nodes only, users must take care of any dangling pointers,...
ROSE_DLL_API bool templateArgumentListEquivalence(const SgTemplateArgumentPtrList &list1, const SgTemplateArgumentPtrList &list2)
Verify that 2 SgTemplateArgumentPtrList are equivalent.
ROSE_DLL_API LivenessAnalysis * call_liveness_analysis(SgProject *project, bool debug=false)
Call liveness analysis on an entire project.
ROSE_DLL_API void reportModifiedLocatedNodes(const std::string &label, SgNode *node)
Connect variable reference to the right variable symbols when feasible, return the number of referenc...
ROSE_DLL_API void fixTemplateDeclaration(SgTemplateDeclaration *stmt, SgScopeStatement *scope)
Fix the symbol table and set scope (only if scope in declaration is not already set).
SgType * getBoolType(SgNode *n)
Get the right bool type according to C or C++ language input.
void clearSharedGlobalScopes(SgProject *project)
Collect all read and write references within stmt, which can be a function, a scope statement,...
void initializeWhileStatement(SgWhileStmt *whileStatement, SgStatement *condition, SgStatement *body, SgStatement *else_body)
Support function used for variable declarations in conditionals.
ROSE_DLL_API void setSourcePosition(SgNode *node)
Set the source code positon for the current (input) node.
ROSE_DLL_API void setPragma(SgPragmaDeclaration *decl, SgPragma *pragma)
Set a pragma of a pragma declaration. handle memory release for preexisting pragma,...
ROSE_DLL_API void insertStatementListBeforeFirstNonDeclaration(const std::vector< SgStatement * > &newStmts, SgScopeStatement *scope)
Insert statements before the first non-declaration statement in a scope. If the scope has no non-decl...
ROSE_DLL_API bool isPostfixOperator(SgExpression *exp)
Is an overloaded operator a postfix operator. (e.g. ).
ROSE_DLL_API SgStatement * findSurroundingStatementFromSameFile(SgStatement *targetStmt, bool &surroundingStatementPreceedsTargetStatement)
Supporting function to comment relocation in insertStatement() and removeStatement().
SgNamespaceDefinitionStatement * enclosingNamespaceScope(SgDeclarationStatement *declaration)
Find the enclosing namespace of a declaration.
ROSE_DLL_API SgStatement * getLoopBody(SgScopeStatement *loop)
Routines to get and set the body of a loop.
ROSE_DLL_API bool is_mixed_C_and_Cxx_language()
bool isStructurallyEquivalentAST(SgNode *tree1, SgNode *tree2)
Collect all read and write references within stmt, which can be a function, a scope statement,...
ROSE_DLL_API PreprocessingInfo * insertHeader(SgSourceFile *source_file, const std::string &header_file_name, bool isSystemHeader, bool asLastHeader)
Insert #include "filename" or #include <filename> (system header) onto the global scope of a source f...
void printAST2TextFile(SgNode *node, const char *filename, bool printType=true)
Pretty print AST horizontally, output to a specified text file. If printType is set to false,...
ROSE_DLL_API SgFunctionSymbol * lookupTemplateFunctionSymbolInParentScopes(const SgName &functionName, SgFunctionType *ftype, SgTemplateParameterPtrList *tplparams, SgScopeStatement *currentScope=NULL)
Find a symbol in current and ancestor scopes for a given variable name, starting from top of ScopeSta...
ROSE_DLL_API bool is_language_case_insensitive()
ROSE_DLL_API void replaceStatement(SgStatement *oldStmt, SgStatement *newStmt, bool movePreprocessinInfo=false)
Replace a statement with another. Move preprocessing information from oldStmt to newStmt if requested...
ROSE_DLL_API void recordNormalizations(SgStatement *s)
Record where normalization have been done so that we can preform denormalizations as required for the...
ROSE_DLL_API bool loopInterchange(SgForStatement *loop, size_t depth, size_t lexicoOrder)
Interchange/permutate a n-level perfectly-nested loop rooted at 'loop' using a lexicographical order ...
void printAST(SgNode *node)
Pretty print AST horizontally, output to std output.
ROSE_DLL_API SgFunctionSymbol * lookupTemplateMemberFunctionSymbolInParentScopes(const SgName &functionName, SgFunctionType *ftype, SgTemplateParameterPtrList *tplparams, SgScopeStatement *currentScope=NULL)
Find a symbol in current and ancestor scopes for a given variable name, starting from top of ScopeSta...
ROSE_DLL_API bool is_PHP_language()
ROSE_DLL_API bool isEqualToIntConst(SgExpression *e, int value)
Check if a SgIntVal node has a given value.
ROSE_DLL_API void insertStatementBeforeFirstNonDeclaration(SgStatement *newStmt, SgScopeStatement *scope, bool movePreprocessingInfo=true)
Insert a statement before the first non-declaration statement in a scope. If the scope has no non-dec...
ROSE_DLL_API SgFunctionSymbol * lookupFunctionSymbolInParentScopes(const SgName &functionName, SgScopeStatement *currentScope=NULL)
look up the first matched function symbol in parent scopes given only a function name,...
ROSE_DLL_API void appendStatementWithDependentDeclaration(SgDeclarationStatement *decl, SgGlobal *scope, SgStatement *original_statement, bool excludeHeaderFiles)
Append a copy ('decl') of a function ('original_statement') into a 'scope', include any referenced de...
ROSE_DLL_API bool insideHeader(SgLocatedNode *node)
Check if a node is from a header file.
ROSE_DLL_API void markSubtreeToBeUnparsed(SgNode *root, int physical_file_id)
Recursively print current and parent nodes. used within gdb to probe the context of a node.
ROSE_DLL_API bool isDataMemberReference(SgVarRefExp *varRefExp)
Find a node by type using upward traversal.
ROSE_DLL_API bool collectReadWriteVariables(SgStatement *stmt, std::set< SgInitializedName * > &readVars, std::set< SgInitializedName * > &writeVars, bool coarseGrain=true)
Collect unique variables which are read or written within a statement. Note that a variable can be bo...
ROSE_DLL_API void constantFolding(SgNode *r)
Constant folding an AST subtree rooted at 'r' (replacing its children with their constant values,...
std::vector< SgBreakStmt * > findBreakStmts(SgStatement *code, const std::string &fortranLabel="")
Find break statements inside a particular statement, stopping at nested loops or switches.
ROSE_DLL_API SgFile * getEnclosingFileNode(SgNode *astNode)
get the SgFile node from current node
ROSE_DLL_API void setStatic(SgDeclarationStatement *stmt)
Set a declaration as static.
ROSE_DLL_API bool doLoopNormalization(SgFortranDo *loop)
Normalize a Fortran Do loop. Make the default increment expression (1) explicit.
ROSE_DLL_API SgFile * preprocessCompilationUnit(SgProject *, std::string, std::string, bool unparse=true)
Using the file_content string, create a file with the content in question; build its AST and add it t...
ROSE_DLL_API void removeLabeledGotos(SgNode *top)
Remove labeled goto statements.
std::map< SgNode *, std::string > local_node_to_name_map
Global map of name collisions to support generateUniqueNameForUseAsIdentifier() function.
std::vector< SgGotoStatement * > findGotoStmts(SgStatement *scope, SgLabelStatement *l)
Query a subtree to get all nodes of a given type, with an appropriate downcast.
ROSE_DLL_API bool mergeDeclarationWithAssignment(SgVariableDeclaration *decl, SgExprStatement *assign_stmt)
Merge a declaration statement into a matching followed variable assignment. Callers should make sure ...
ROSE_DLL_API bool isAssignmentStatement(SgNode *_s, SgExpression **lhs=NULL, SgExpression **rhs=NULL, bool *readlhs=NULL)
Check if a SgNode _s is an assignment statement (any of =,+=,-=,&=,/=, ^=, etc)
ROSE_DLL_API bool normalizeCaseAndDefaultBlocks(SgSwitchStatement *switchStmt)
Normalize the structure of case and default blocks within a switch statement.
ROSE_DLL_API void outputSharedNodes(SgNode *node)
Find a node by type using upward traversal.
bool ROSE_DLL_API isAncestor(SgNode *node1, SgNode *node2)
check if node1 is a strict ancestor of node 2. (a node is not considered its own ancestor)
ROSE_DLL_API SgScopeStatement * getEnclosingScope(SgNode *n, const bool includingSelf=false)
Get the enclosing scope from a node n.
ROSE_DLL_API SgNonrealSymbol * lookupNonrealSymbolInParentScopes(const SgName &name, SgScopeStatement *currentScope=NULL, SgTemplateParameterPtrList *templateParameterList=NULL, SgTemplateArgumentPtrList *templateArgumentList=NULL)
Find a symbol in current and ancestor scopes for a given variable name, starting from top of ScopeSta...
ROSE_DLL_API SgSwitchStatement * findEnclosingSwitch(SgStatement *s)
Find the closest switch outside a given statement (normally used for case and default statements)
ROSE_DLL_API void removeAllOriginalExpressionTrees(SgNode *top)
Set original expression trees to NULL for SgValueExp or SgCastExp expressions, so you can change the ...
ROSE_DLL_API std::vector< SgNode * > astIntersection(SgNode *original, SgNode *copy, SgCopyHelp *help=NULL)
Compute the intersection set for two ASTs.
ROSE_DLL_API bool isPrefixOperator(SgExpression *exp)
Is an overloaded operator a prefix operator (e.g. address operator X * operator&(),...
ROSE_DLL_API void setLhsOperand(SgExpression *target, SgExpression *lhs)
set left hand operand for binary expressions, transparently downcasting target expressions when neces...
ROSE_DLL_API std::vector< SgC_PreprocessorDirectiveStatement * > translateStatementToUseCppDeclarations(SgStatement *statement, SgScopeStatement *scope)
Connect variable reference to the right variable symbols when feasible, return the number of referenc...
ROSE_DLL_API int suggestNextNumericLabel(SgFunctionDefinition *func_def)
Suggest next usable (non-conflicting) numeric label value for a Fortran function definition scope.
ROSE_DLL_API std::set< SgStatement * > collectModifiedStatements(SgNode *node)
This collects the statements that are marked as modified (a flag automatically set by all set_* gener...
ROSE_DLL_API SgFunctionDeclaration * getEnclosingFunctionDeclaration(SgNode *astNode, const bool includingSelf=false)
Find the enclosing function declaration, including its derived instances like isSgProcedureHeaderStat...
SgFunctionDeclaration * findFunctionDeclaration(SgNode *root, std::string name, SgScopeStatement *scope, bool isDefining)
Topdown traverse a subtree from root to find the first function declaration matching the given name,...
ROSE_DLL_API bool isPrefixOperatorName(const SgName &functionName)
Check for proper names of possible prefix operators (used in isPrefixOperator()).
ROSE_DLL_API void setLoopStride(SgNode *loop, SgExpression *stride)
Set the stride(step) of a loop 's incremental expression, regardless the expression types (i+=s; i= i...
ROSE_DLL_API bool isInSubTree(SgExpression *subtree, SgExpression *exp)
Find a node by type using upward traversal.
ROSE_DLL_API bool forLoopNormalization(SgForStatement *loop, bool foldConstant=true)
Normalize a for loop, return true if successful.
unsigned long long getIntegerConstantValue(SgValueExp *expr)
Get the constant value from a constant integer expression; abort on everything else.
ROSE_DLL_API bool is_UPC_language()
ROSE_DLL_API void checkSymbolTables(SgNode *)
Recursively print current and parent nodes. used within gdb to probe the context of a node.
ROSE_DLL_API void updateDefiningNondefiningLinks(SgFunctionDeclaration *func, SgScopeStatement *scope)
Update defining and nondefining links due to a newly introduced function declaration....
ROSE_DLL_API SgNode * deepCopyNode(const SgNode *subtree)
Deep copy an arbitrary subtree.
SgBasicBlock * ensureBasicBlockAsBodyOfDefaultOption(SgDefaultOptionStmt *cs)
Check if the body of a 'default option' statement is a SgBasicBlock, create one if not.
ROSE_DLL_API void getLiveVariables(LivenessAnalysis *liv, SgForStatement *loop, std::set< SgInitializedName * > &liveIns, std::set< SgInitializedName * > &liveOuts)
get liveIn and liveOut variables for a for loop from liveness analysis result liv.
ROSE_DLL_API void resetModifiedLocatedNodes(const std::set< SgLocatedNode * > &modifiedNodeSet)
Use the set of IR nodes and set the isModified flag in each IR node to true.
ROSE_DLL_API SgNode * replaceWithPattern(SgNode *anchor, SgNode *new_pattern)
Replace an anchor node with a specified pattern subtree with optional SgVariantExpression....
ROSE_DLL_API bool ROSE_DLL_API isJovialOutParam(SgInitializedName *name)
True if a parameter name is a Jovial output parameter.
ROSE_DLL_API void moveForStatementIncrementIntoBody(SgForStatement *f)
Add a step statement to the end of a loop body Add a new label to the end of the loop,...
ROSE_DLL_API SgBasicBlock * ensureBasicBlockAsBodyOfOmpBodyStmt(SgOmpBodyStatement *ompbodyStmt)
Check if the body of a SgOmpBodyStatement is a SgBasicBlock, create one if not.
ROSE_DLL_API bool is_Python_language()
ROSE_DLL_API bool is_mixed_Fortran_and_Cxx_language()
ROSE_DLL_API SgStatement * getLoopCondition(SgScopeStatement *loop)
Routines to get the condition of a loop. It recognize While-loop, For-loop, and Do-While-loop.
ROSE_DLL_API SgEnumSymbol * lookupEnumSymbolInParentScopes(const SgName &name, SgScopeStatement *currentScope=NULL)
Find a symbol in current and ancestor scopes for a given variable name, starting from top of ScopeSta...
std::pair< SgVariableDeclaration *, SgExpression * > createTempVariableAndReferenceForExpression(SgExpression *expression, SgScopeStatement *scope)
Function to delete AST subtree's nodes only, users must take care of any dangling pointers,...
ROSE_DLL_API SgTypedefSymbol * lookupTypedefSymbolInParentScopes(const SgName &name, SgScopeStatement *currentScope=NULL)
Find a symbol in current and ancestor scopes for a given variable name, starting from top of ScopeSta...
ROSE_DLL_API SgBasicBlock * ensureBasicBlockAsBodyOfWhile(SgWhileStmt *ws)
Check if the body of a 'while' statement is a SgBasicBlock, create one if not.
ROSE_DLL_API SgBasicBlock * ensureBasicBlockAsBodyOfFor(SgForStatement *fs)
Check if the body of a 'for' statement is a SgBasicBlock, create one if not.
ROSE_DLL_API PreprocessingInfo * attachArbitraryText(SgLocatedNode *target, const std::string &text, PreprocessingInfo::RelativePositionType position=PreprocessingInfo::before)
Attach an arbitrary string to a located node. A workaround to insert irregular statements or vendor-s...
ROSE_DLL_API void markNodeToBeUnparsed(SgNode *node, int physical_file_id)
Recursively print current and parent nodes. used within gdb to probe the context of a node.
ROSE_DLL_API bool isConstantTrue(SgExpression *e)
Check if a bool or int constant expression evaluates to be a true value.
std::map< std::string, SgNode * > local_name_to_node_map
Global map of name collisions to support generateUniqueNameForUseAsIdentifier() function.
ROSE_DLL_API bool is_binary_executable()
void changeAllBodiesToBlocks(SgNode *top, bool createEmptyBody=true)
Fix up ifs, loops, while, switch, Catch, OmpBodyStatement, etc. to have blocks as body components....
void dumpPreprocInfo(SgLocatedNode *locatedNode)
Dumps a located node's preprocessing information.
void fixupReferencesToSymbols(const SgScopeStatement *this_scope, SgScopeStatement *copy_scope, SgCopyHelp &help)
All the symbol table references in the copied AST need to be reset after rebuilding the copied scope'...
ROSE_DLL_API void moveDeclarationToAssociatedNamespace(SgDeclarationStatement *declarationStatement)
Relocate the declaration to be explicitly represented in its associated namespace (required for some ...
ROSE_DLL_API bool isCanonicalForLoop(SgNode *loop, SgInitializedName **ivar=NULL, SgExpression **lb=NULL, SgExpression **ub=NULL, SgExpression **step=NULL, SgStatement **body=NULL, bool *hasIncrementalIterationSpace=NULL, bool *isInclusiveUpperBound=NULL)
Check if a for-loop has a canonical form, return loop index, bounds, step, and body if requested.
ROSE_DLL_API bool isArrayReference(SgExpression *ref, SgExpression **arrayNameExp=NULL, std::vector< SgExpression * > **subscripts=NULL)
Check if an expression is an array access (SgPntrArrRefExp). If so, return its name expression and su...
ROSE_DLL_API void insertStatementAfterLastDeclaration(SgStatement *stmt, SgScopeStatement *scope)
Insert a statement after the last declaration within a scope. The statement will be prepended to the ...
ROSE_DLL_API void destroyTempDirectory(std::string)
Use the system command to remove a temporary directory and all its containing files.
void serialize_list(T &plist, std::string T_name, std::string &prefix, bool hasRemaining, std::ostringstream &out, std::string &edgeLabel)
Query a subtree to get all nodes of a given type, with an appropriate downcast.
void resetMangledNameCache(SgGlobal *globalScope)
Recursively print current and parent nodes. used within gdb to probe the context of a node.
ROSE_DLL_API SgTemplateInstantiationMemberFunctionDecl * buildForwardFunctionDeclaration(SgTemplateInstantiationMemberFunctionDecl *memberFunctionInstantiation)
Generate a non-defining (forward) declaration from a defining function declaration.
ROSE_DLL_API bool is_Fortran_language()
ROSE_DLL_API SgVariableSymbol * lookupVariableSymbolInParentScopes(const SgName &name, SgScopeStatement *currentScope=NULL)
Find a symbol in current and ancestor scopes for a given variable name, starting from top of ScopeSta...
ROSE_DLL_API void outputFileIds(SgNode *node)
Connect variable reference to the right variable symbols when feasible, return the number of referenc...
ROSE_DLL_API SgExprStatement * splitVariableDeclaration(SgVariableDeclaration *decl)
Split a variable declaration with an rhs assignment into two statements: a declaration and an assignm...
ROSE_DLL_API SgStatement * getFirstStatement(SgScopeStatement *scope, bool includingCompilerGenerated=false)
Get the first statement within a scope, return NULL if it does not exist. Skip compiler-generated sta...
ROSE_DLL_API SgNamespaceSymbol * lookupNamespaceSymbolInParentScopes(const SgName &name, SgScopeStatement *currentScope=NULL)
Find a symbol in current and ancestor scopes for a given variable name, starting from top of ScopeSta...
ROSE_DLL_API bool isExtern(SgDeclarationStatement *stmt)
Check if a declaration has an "extern" modifier.
std::string extractPragmaKeyword(const SgPragmaDeclaration *)
Extract a SgPragmaDeclaration's leading keyword . For example "#pragma omp parallel" has a keyword of...
ROSE_DLL_API SgTemplateClassSymbol * lookupTemplateClassSymbolInParentScopes(const SgName &name, SgTemplateParameterPtrList *templateParameterList, SgTemplateArgumentPtrList *templateArgumentList, SgScopeStatement *cscope=NULL)
Find a symbol in current and ancestor scopes for a given variable name, starting from top of ScopeSta...
ROSE_DLL_API bool isEquivalentFunctionType(const SgFunctionType *lhs, const SgFunctionType *rhs)
Test if two types are equivalent SgFunctionType nodes.
ROSE_DLL_API void setLoopLowerBound(SgNode *loop, SgExpression *lb)
Set the lower bound of a loop header for (i=lb; ...)
void guardNode(SgLocatedNode *target, std::string guard)
Add preproccessor guard around a given node.
bool checkTypesAreEqual(SgType *typeA, SgType *typeB)
Collect all read and write references within stmt, which can be a function, a scope statement,...
ROSE_DLL_API bool isReferenceType(SgType *t)
Is this type a const or non-const reference type? (Handles typedefs correctly)
ROSE_DLL_API void moveCommentsToNewStatement(SgStatement *sourceStatement, const std::vector< int > &indexList, SgStatement *destinationStatement, bool destinationStatementPreceedsSourceStatement)
Relocate comments and CPP directives from one statement to another.
ROSE_DLL_API SgStatement * getEnclosingStatement(SgNode *n)
Find the closest enclosing statement, including the given node.
ROSE_DLL_API void translateToUseCppDeclarations(SgNode *n)
Connect variable reference to the right variable symbols when feasible, return the number of referenc...
ROSE_DLL_API void changeContinuesToGotos(SgStatement *stmt, SgLabelStatement *label)
Change continue statements in a given block of code to gotos to a label.
void outputGlobalFunctionTypeSymbolTable()
Output function type symbols in global function type symbol table.
ROSE_DLL_API SgScopeStatement * findEnclosingLoop(SgStatement *s, const std::string &fortranLabel="", bool stopOnSwitches=false)
Find the closest loop outside the given statement; if fortranLabel is not empty, the Fortran label of...
std::pair< SgVariableDeclaration *, SgExpression * > createTempVariableForExpression(SgExpression *expression, SgScopeStatement *scope, bool initializeInDeclaration, SgAssignOp **reEvaluate=NULL)
Given an expression, generates a temporary variable whose initializer optionally evaluates that expre...
bool isBodyStatement(SgStatement *s)
Check if a statement is a (true or false) body of a container-like parent, such as For,...
bool functionCallExpressionPreceedsDeclarationWhichAssociatesScope(SgFunctionCallExp *functionCall)
Recursively print current and parent nodes. used within gdb to probe the context of a node.
ROSE_DLL_API void convertAllForsToWhiles(SgNode *top)
Add a step statement to the end of a loop body Add a new label to the end of the loop,...
ROSE_DLL_API bool isConstantFalse(SgExpression *e)
Check if a bool or int constant expression evaluates to be a false value.
ROSE_DLL_API void outputLocalSymbolTables(SgNode *node)
Output the local symbol tables.
ROSE_DLL_API void preOrderCollectPreprocessingInfo(SgNode *current, std::vector< PreprocessingInfo * > &infoList, int depth)
Dumps a located node's preprocessing information.
ROSE_DLL_API SgMemberFunctionDeclaration * getDefaultDestructor(SgClassDeclaration *classDeclaration)
Get the default destructor from the class declaration.
void collectVarRefs(SgLocatedNode *root, std::vector< SgVarRefExp * > &result)
Collect all variable references in a subtree.
ROSE_DLL_API void setOperand(SgExpression *target, SgExpression *operand)
Set operands for expressions with single operand, such as unary expressions. handle file info,...
ROSE_DLL_API SgMemberFunctionDeclaration * getDefaultConstructor(SgClassDeclaration *classDeclaration)
Get the default constructor from the class declaration.
ROSE_DLL_API SgInitializedName * getLoopIndexVariable(SgNode *loop)
Return the loop index variable for a for loop.
ROSE_DLL_API SgAssignInitializer * splitExpression(SgExpression *from, std::string newName="")
Replace an expression with a temporary variable and an assignment statement.
ROSE_DLL_API void replaceVariableReferences(SgVariableSymbol *old_sym, SgVariableSymbol *new_sym, SgScopeStatement *scope)
Replace all variable references to an old symbol in a scope to being references to a new symbol.
ROSE_DLL_API bool is_OpenCL_language()
ROSE_DLL_API bool normalizeForLoopIncrement(SgForStatement *loop)
Add a step statement to the end of a loop body Add a new label to the end of the loop,...
ROSE_DLL_API SgVariableSymbol * appendArg(SgFunctionParameterList *, SgInitializedName *)
Append an argument to SgFunctionParameterList, transparently set parent,scope, and symbols for argume...
ROSE_DLL_API bool unnormalizeForLoopInitDeclaration(SgForStatement *loop)
Undo the normalization of for loop's C99 init declaration. Previous record of normalization is used t...
ROSE_DLL_API SgStatement * getPreviousStatement(SgStatement *currentStmt, bool climbOutScope=true)
Get previous statement of the current statement. It may return a previous statement of a parent scope...
ROSE_DLL_API void removeJumpsToNextStatement(SgNode *)
Remove jumps whose label is immediately after the jump. Used to clean up inlined code fragments.
bool isPrototypeInScope(SgScopeStatement *scope, SgFunctionDeclaration *functionDeclaration, SgDeclarationStatement *startingAtDeclaration)
Assigns unique numbers to each SgScopeStatement of a function.
ROSE_DLL_API int moveUpInnerDanglingIfEndifDirective(SgLocatedNode *lnode)
Extract sequences like " #endif #endif ...  #if | #ifdef| #ifndef" buried inside subtree of lnode.
SgDeclarationStatement * getNonInstantiatonDeclarationForClass(SgTemplateInstantiationMemberFunctionDecl *memberFunctionInstantiation)
Recursively print current and parent nodes. used within gdb to probe the context of a node.
ROSE_DLL_API bool isConstType(SgType *t)
Is this a const type?
SgFunctionDeclaration * getDeclarationOfNamedFunction(SgExpression *func)
Given a SgExpression that represents a named function (or bound member function), return the mentione...
ROSE_DLL_API bool is_C99_language()
ROSE_DLL_API bool addDefaultConstructorIfRequired(SgClassType *classType, int physical_file_id=Sg_File_Info::TRANSFORMATION_FILE_ID)
Get the default destructor from the class declaration.
ROSE_DLL_API void movePreprocessingInfo(SgStatement *stmt_src, SgStatement *stmt_dst, PreprocessingInfo::RelativePositionType src_position=PreprocessingInfo::undef, PreprocessingInfo::RelativePositionType dst_position=PreprocessingInfo::undef, bool usePrepend=false)
Move preprocessing information of stmt_src to stmt_dst, Only move preprocessing information from the ...
ROSE_DLL_API int fixVariableReferences(SgNode *root, bool cleanUnusedSymbol=true)
Connect variable reference to the right variable symbols when feasible, return the number of referenc...
ROSE_DLL_API bool isUseByAddressVariableRef(SgVarRefExp *ref)
Check if a variable reference is used by its address: including &a expression and foo(a) when type2 f...
struct const_int_expr_t evaluateConstIntegerExpression(SgExpression *expr)
The function tries to evaluate const integer expressions (such as are used in array dimension sizes)....
ROSE_DLL_API SgBasicBlock * ensureBasicBlockAsTrueBodyOfIf(SgIfStmt *ifs)
Check if the true body of a 'if' statement is a SgBasicBlock, create one if not.
ROSE_DLL_API void replaceExpression(SgExpression *oldExp, SgExpression *newExp, bool keepOldExp=false)
Replace an expression with another, used for variable reference substitution and others....
ROSE_DLL_API SgBasicBlock * ensureBasicBlockAsFalseBodyOfIf(SgIfStmt *ifs, bool createEmptyBody=true)
Check if the false body of a 'if' statement is a SgBasicBlock, create one if not when the flag is tru...
ROSE_DLL_API SgExprListExp * getEnclosingExprListExp(SgNode *astNode, const bool includingSelf=false)
Get the enclosing SgExprListExp (used as part of function argument index evaluation in subexpressions...
ROSE_DLL_API void appendStatement(SgStatement *stmt, SgScopeStatement *scope=NULL)
Append a statement to the end of the current scope, handle side effect of appending statements,...
ROSE_DLL_API SgFunctionDeclaration * buildFunctionPrototype(SgFunctionDeclaration *functionDeclaration)
Function to delete AST subtree's nodes only, users must take care of any dangling pointers,...
void addVarRefExpFromArrayDimInfo(SgNode *astNode, Rose_STL_Container< SgNode * > &NodeList_t)
Find all SgPntrArrRefExp under astNode, then add SgVarRefExp (if any) of SgPntrArrRefExp's dim_info i...
ROSE_DLL_API bool loopTiling(SgForStatement *loopNest, size_t targetLevel, size_t tileSize)
Tile the n-level (starting from 1) loop of a perfectly nested loop nest using tiling size s.
std::string generateUniqueName(const SgNode *node, bool ignoreDifferenceBetweenDefiningAndNondefiningDeclarations)
Generate unique name from C and C++ constructs. The name may contain space.
ROSE_DLL_API SgGlobal * getFirstGlobalScope(SgProject *project)
return the first global scope under current project
ROSE_DLL_API void setOneSourcePositionNull(SgNode *node)
Set current node's source position as NULL.
ROSE_DLL_API void setRhsOperand(SgExpression *target, SgExpression *rhs)
set left hand operand for binary expression
std::pair< SgStatement *, SgInitializedName * > wrapFunction(SgFunctionDeclaration &definingDeclaration, SgName newName)
moves the body of a function f to a new function f; f's body is replaced with code that forwards the ...
ROSE_DLL_API bool is_mixed_Fortran_and_C_and_Cxx_language()
ROSE_DLL_API bool isVolatileType(SgType *t)
Is this a volatile type?
void clearUnusedVariableSymbols(SgNode *root=NULL)
Clear those variable symbols with unknown type (together with initialized names) which are also not r...
ROSE_DLL_API void fixVariableDeclaration(SgVariableDeclaration *varDecl, SgScopeStatement *scope)
Patch up symbol, scope, and parent information when a SgVariableDeclaration's scope is known.
ROSE_DLL_API SgSymbol * lookupSymbolInParentScopesIgnoringAliasSymbols(const SgName &name, SgScopeStatement *currentScope=NULL, SgTemplateParameterPtrList *templateParameterList=NULL, SgTemplateArgumentPtrList *templateArgumentList=NULL)
Find a symbol in current and ancestor scopes for a given variable name, starting from top of ScopeSta...
std::string generateUniqueVariableName(SgScopeStatement *scope, std::string baseName="temp")
Generate a name like temp# that is unique in the current scope and any parent and children scopes.
ROSE_DLL_API int gensym_counter
An internal counter for generating unique SgName.
ROSE_DLL_API void splitExpressionIntoBasicBlock(SgExpression *expr)
Split long expressions into blocks of statements.
void reset_name_collision_map()
Reset map variables used to support generateUniqueNameForUseAsIdentifier() function.
ROSE_DLL_API SgFunctionDefinition * getEnclosingProcedure(SgNode *n, const bool includingSelf=false)
Find the function definition.
std::vector< SgExpression * > get_C_array_dimensions(const SgArrayType &arrtype)
returns the array dimensions in an array as defined for arrtype
ROSE_DLL_API void replaceSubexpressionWithStatement(SgExpression *from, SageInterface::StatementGenerator *to)
Similar to replaceExpressionWithStatement, but with more restrictions.
ROSE_DLL_API void wrapAllTemplateInstantiationsInAssociatedNamespaces(SgProject *root)
Function to delete AST subtree's nodes only, users must take care of any dangling pointers,...
std::string get_name(const SgNode *node)
Generate a useful name to describe the SgNode.
ROSE_DLL_API void setLoopUpperBound(SgNode *loop, SgExpression *ub)
Set the upper bound of a loop header,regardless the condition expression type. for (i=lb; i op up,...
ROSE_DLL_API bool isMemberFunctionMemberReference(SgMemberFunctionRefExp *memberFunctionRefExp)
Find a node by type using upward traversal.
ROSE_DLL_API SgClassDefinition * findJavaPackage(SgScopeStatement *, std::string)
Look for a qualified package name in the given scope and return its package definition.
ROSE_DLL_API bool isOmpStatement(SgNode *)
Check if a node is SgOmp*Statement.
ROSE_DLL_API bool is_Ada_language()
std::string addMangledNameToCache(SgNode *astNode, const std::string &mangledName)
Recursively print current and parent nodes. used within gdb to probe the context of a node.
ROSE_DLL_API bool is_C_language()
ROSE_DLL_API std::list< SgClassType * > getClassTypeChainForMemberReference(SgExpression *refExp)
Find a node by type using upward traversal.
ROSE_DLL_API void collectUseByAddressVariableRefs(const SgStatement *s, std::set< SgVarRefExp * > &varSetB)
Collect variable references involving use by address: including &a expression and foo(a) when type2 f...
std::vector< SgContinueStmt * > findContinueStmts(SgStatement *code, const std::string &fortranLabel="")
Find all continue statements inside a particular statement, stopping at nested loops.
std::string getMangledNameFromCache(SgNode *astNode)
Recursively print current and parent nodes. used within gdb to probe the context of a node.
ROSE_DLL_API std::vector< SgDeclarationStatement * > sortSgNodeListBasedOnAppearanceOrderInSource(const std::vector< SgDeclarationStatement * > &nodevec)
Reorder a list of declaration statements based on their appearance order in source files.
ROSE_DLL_API std::set< SgLocatedNode * > collectModifiedLocatedNodes(SgNode *node)
This collects the SgLocatedNodes that are marked as modified (a flag automatically set by all set_* g...
SgExpression * forallMaskExpression(SgForAllStatement *stmt)
Get the mask expression from the header of a SgForAllStatement.
void clearScopeNumbers(SgFunctionDefinition *functionDefinition)
Clears the cache of scope,integer pairs for the input function.
ROSE_DLL_API SgInitializedName * convertRefToInitializedName(SgNode *current, bool coarseGrain=true)
Variable references can be introduced by SgVarRef, SgPntrArrRefExp, SgInitializedName,...
ROSE_DLL_API SgNode * getSgNodeFromAbstractHandleString(const std::string &input_string)
Obtain a matching SgNode from an abstract handle string.
ROSE_DLL_API void moveStatementsBetweenBlocks(SgBasicBlock *sourceBlock, SgBasicBlock *targetBlock)
Move statements in first block to the second block (preserves order and rebuilds the symbol table).
ROSE_DLL_API bool templateDefinitionIsInClass(SgTemplateInstantiationMemberFunctionDecl *memberFunctionDeclaration)
Return true if template definition is in the class, false if outside of class.
ROSE_DLL_API void fixLabelStatement(SgLabelStatement *label_stmt, SgScopeStatement *scope)
Fix symbol table for SgLabelStatement. Used Internally when the label is built without knowing its ta...
ROSE_DLL_API void replaceExpressionWithStatement(SgExpression *from, SageInterface::StatementGenerator *to)
Replace a given expression with a list of statements produced by a generator.
ROSE_DLL_API void convertForToWhile(SgForStatement *f)
Add a step statement to the end of a loop body Add a new label to the end of the loop,...
ROSE_DLL_API void insertStatementBefore(SgStatement *targetStmt, SgStatement *newStmt, bool autoMovePreprocessingInfo=true)
Insert a statement before a target statement.
ROSE_DLL_API bool findFirstSgCastExpMarkedAsTransformation(SgNode *n, const std::string &s)
Recursively print current and parent nodes. used within gdb to probe the context of a node.
ROSE_DLL_API void dumpInfo(SgNode *node, std::string desc="")
Dump information about a SgNode for debugging.
ROSE_DLL_API void convertFunctionDefinitionsToFunctionPrototypes(SgNode *node)
XXX This function operates on the new file used to support outlined function definitions....
ROSE_DLL_API void appendStatementList(const std::vector< SgStatement * > &stmt, SgScopeStatement *scope=NULL)
Append a list of statements to the end of the current scope, handle side effect of appending statemen...
SgNamedType * getDeclaredType(const SgDeclarationStatement *declaration)
Returns the type introduced by a declaration.
ROSE_DLL_API bool isIndexOperator(SgExpression *exp)
Is an overloaded operator an index operator (also referred to as call or subscript operators)....
ROSE_DLL_API SgBasicBlock * ensureBasicBlockAsBodyOfCatch(SgCatchOptionStmt *cos)
Check if the body of a 'catch' statement is a SgBasicBlock, create one if not.
std::vector< SgFile * > generateFileList()
Returns STL vector of SgFile IR node pointers.
ROSE_DLL_API int normalizeArrowExpWithAddressOfLeftOperand(SgNode *root, bool transformationGeneratedOnly=true)
Convert all code within root matching the patern of (&left)->right, and translate them into left....
bool hasTemplateSyntax(const SgName &name)
Collect all read and write references within stmt, which can be a function, a scope statement,...
ROSE_DLL_API void moveToSubdirectory(std::string directoryName, SgFile *file)
Move file to be generated in a subdirectory (will be generated by the unparser).
ROSE_DLL_API bool isAddressTaken(SgExpression *refExp)
Find a node by type using upward traversal.
ROSE_DLL_API bool hasSimpleChildrenList(SgScopeStatement *scope)
Check if a scope statement has a simple children statement list so insert additional statements under...
ROSE_DLL_API SgFunctionDeclaration * findMain(SgNode *currentNode)
top-down traversal from current node to find the main() function declaration
ROSE_DLL_API SgClassSymbol * lookupClassSymbolInParentScopes(const SgName &name, SgScopeStatement *currentScope=NULL, SgTemplateArgumentPtrList *templateArgumentList=NULL)
Find a symbol in current and ancestor scopes for a given variable name, starting from top of ScopeSta...
ROSE_DLL_API void removeConsecutiveLabels(SgNode *top)
Remove consecutive labels.
ROSE_DLL_API void setLoopBody(SgScopeStatement *loop, SgStatement *body)
Add a step statement to the end of a loop body Add a new label to the end of the loop,...
bool getForLoopInformations(SgForStatement *for_loop, SgVariableSymbol *&iterator, SgExpression *&lower_bound, SgExpression *&upper_bound, SgExpression *&stride)
ROSE_DLL_API void appendExpression(SgExprListExp *, SgExpression *)
Append an expression to a SgExprListExp, set the parent pointer also.
ROSE_DLL_API bool isLambdaFunction(SgFunctionDeclaration *func)
Check if a function declaration is a C++11 lambda function.
ROSE_DLL_API SgBasicBlock * ensureBasicBlockAsBodyOfSwitch(SgSwitchStatement *ws)
Check if the body of a 'switch' statement is a SgBasicBlock, create one if not.
ROSE_DLL_API void prependStatement(SgStatement *stmt, SgScopeStatement *scope=NULL)
Prepend a statement to the beginning of the current scope, handling side effects as appropriate.
ROSE_DLL_API bool isCallToParticularFunction(SgFunctionDeclaration *decl, SgExpression *e)
Recursively print current and parent nodes. used within gdb to probe the context of a node.
ROSE_DLL_API bool ROSE_DLL_API isMutable(SgInitializedName *name)
True if an SgInitializedName is "mutable' (has storage modifier set)
ROSE_DLL_API bool isCopyConstructible(SgType *type)
Is a type copy constructible? This may not quite work properly.
ROSE_DLL_API SgVariableSymbol * prependArg(SgFunctionParameterList *, SgInitializedName *)
Prepend an argument to SgFunctionParameterList.
ROSE_DLL_API void setSourcePositionAtRootAndAllChildren(SgNode *root)
Set the source code positon for the subtree (including the root).
ROSE_DLL_API SgExpression * copyExpression(SgExpression *e)
Deep copy an expression.
void setParameterList(actualFunction *func, SgFunctionParameterList *paralist)
Set parameter list for a function declaration, considering existing parameter list etc.
SgStatement * findLastDeclarationStatement(SgScopeStatement *scope, bool includePragma=false)
Find the last declaration statement within a scope (if any). This is often useful to decide where to ...
ROSE_DLL_API bool insideSystemHeader(SgLocatedNode *node)
Set source position info(Sg_File_Info) as transformation generated for all SgNodes in memory pool.
std::vector< SgDeclarationStatement * > getDependentDeclarations(SgStatement *stmt)
Get a statement's dependent declarations which declares the types used in the statement....
SgBasicBlock * makeSingleStatementBodyToBlock(SgStatement *singleStmt)
Make a single statement body to be a basic block. Its parent is if, while, catch, or upc_forall etc.
void computeUniqueNameForUseAsIdentifier(SgNode *astNode)
Traversal to set the global map of names to node and node to names.collisions to support generateUniq...
ROSE_DLL_API void collectReadOnlyVariables(SgStatement *stmt, std::set< SgInitializedName * > &readOnlyVars, bool coarseGrain=true)
Collect read only variables within a statement. The statement can be either of a function,...
std::string generateUniqueNameForUseAsIdentifier_support(SgDeclarationStatement *declaration)
Global map of name collisions to support generateUniqueNameForUseAsIdentifier() function.
ROSE_DLL_API PreprocessingInfo * findHeader(SgSourceFile *source_file, const std::string &header_file_name, bool isSystemHeader)
Find the preprocessingInfo node representing #include <header.h> or #include "header....
ROSE_DLL_API void myRemoveStatement(SgStatement *stmt)
A special purpose statement removal function, originally from inlinerSupport.h, Need Jeremiah's atten...
ROSE_DLL_API SgScopeStatement * getScope(const SgNode *astNode)
Get the closest scope from astNode. Return astNode if it is already a scope.
ROSE_DLL_API bool isStrictIntegerType(SgType *t)
Check if a type is an integral type, only allowing signed/unsigned short, int, long,...
ROSE_DLL_API bool is_Java_language()
ROSE_DLL_API void insertStatementAfter(SgStatement *targetStmt, SgStatement *newStmt, bool autoMovePreprocessingInfo=true)
Insert a statement after a target statement, Move around preprocessing info automatically by default.
ROSE_DLL_API bool isEquivalentType(const SgType *lhs, const SgType *rhs)
Test for equivalence of types independent of access permissions (private or protected modes for membe...
ROSE_DLL_API bool isTemplateInstantiationNode(SgNode *node)
Function to delete AST subtree's nodes only, users must take care of any dangling pointers,...
ROSE_DLL_API void removeStatement(SgStatement *stmt, bool autoRelocatePreprocessingInfo=true)
Remove a statement from its attach point of the AST. Automatically keep its associated preprocessing ...
ROSE_DLL_API SgOmpClauseBodyStatement * findEnclosingOmpClauseBodyStatement(SgStatement *s)
Find enclosing OpenMP clause body statement from s. If s is already one, return it directly.
ROSE_DLL_API bool scopeHasStatementsFromSameFile(SgScopeStatement *scope)
This function supports the token-based unparsing when used with unparsing of header files to know whe...
ROSE_DLL_API SgSourceFile * getEnclosingSourceFile(SgNode *n, const bool includingSelf=false)
Find enclosing source file node.
void rebuildSymbolTable(SgScopeStatement *scope)
Regenerate the symbol table.
ROSE_DLL_API SgSymbol * lookupSymbolInParentScopes(const SgName &name, SgScopeStatement *currentScope=NULL, SgTemplateParameterPtrList *templateParameterList=NULL, SgTemplateArgumentPtrList *templateArgumentList=NULL)
Find a symbol in current and ancestor scopes for a given variable name, starting from top of ScopeSta...
void setBaseTypeDefiningDeclaration(SgVariableDeclaration *var_decl, SgDeclarationStatement *base_decl)
a better version for SgVariableDeclaration::set_baseTypeDefininingDeclaration(), handling all side ef...
ROSE_DLL_API void pastePreprocessingInfo(SgLocatedNode *dst_node, PreprocessingInfo::RelativePositionType pos, AttachedPreprocessingInfoType &saved_buf)
Paste preprocessing information from a buffer to a destination node. Used in combination of cutPrepro...
ROSE_DLL_API SgStatement * lastFrontEndSpecificStatement(SgGlobal *globalScope)
Function to delete AST subtree's nodes only, users must take care of any dangling pointers,...
ROSE_DLL_API SgFunctionType * findFunctionType(SgType *return_type, SgFunctionParameterTypeList *typeList)
Find the function type matching a function signature plus a given return type.
std::set< unsigned int > collectSourceSequenceNumbers(SgNode *astNode)
Collect all read and write references within stmt, which can be a function, a scope statement,...
ROSE_DLL_API bool is_OpenMP_language()
ROSE_DLL_API std::set< SgNode * > getFrontendSpecificNodes()
Find a node by type using upward traversal.
ROSE_DLL_API bool mergeAssignmentWithDeclaration(SgExprStatement *assign_stmt, SgVariableDeclaration *decl, bool removeAssignStmt=true)
Merge an assignment into its upstream declaration statement. Callers should make sure the merge is se...
ROSE_DLL_API void setFortranNumericLabel(SgStatement *stmt, int label_value, SgLabelSymbol::label_type_enum label_type=SgLabelSymbol::e_start_label_type, SgScopeStatement *label_scope=NULL)
Set a numerical label for a Fortran statement. The statement should have a enclosing function definit...
ROSE_DLL_API SgType * lookupNamedTypeInParentScopes(const std::string &type_name, SgScopeStatement *scope=NULL)
Lookup a named type based on its name, bottomup searching from a specified scope. Note name collison ...
ROSE_DLL_API SgFile * processFile(SgProject *, std::string, bool unparse=false)
Invoke JavaRose to translate a given file and put the resulting AST in the global space of the projec...
bool get(const Word *words, size_t idx)
Return a single bit.
void swap_child(SageNode &lhs, SageNode &rhs, SageChild *(SageNode::*getter)() const, void(SageNode::*setter)(SageChild *))
swaps children (of equal kind) between two ancestor nodes of the same type
std::remove_const< typenamestd::remove_reference< RoseVisitor >::type >::type dispatch(RoseVisitor &&rv, SgNode *n)
uncovers the type of SgNode and passes it to an function "handle" in RoseVisitor.
This file implements generic (template) sage query functions Currently this includes functions for: