void FixupTemplateArguments::visit ( SgNode* node ) { ROSE_ASSERT(node != NULL); SgVariableDeclaration* variableDeclaration = isSgVariableDeclaration(node); if (variableDeclaration != NULL) { // Check the type of the variable declaration, and any template arguments if it is a template type with template arguments. // SgType* type = variableDeclaration->get_type(); // ROSE_ASSERT(type != NULL); SgInitializedName* initializedName = SageInterface::getFirstInitializedName(variableDeclaration); ROSE_ASSERT(initializedName != NULL); SgType* type = initializedName->get_type(); ROSE_ASSERT(type != NULL); #if 0 printf ("\n**************************************************************************** \n"); printf ("FixupTemplateArguments::visit(): variableDeclaration = %p = %s initializedName = %s \n",variableDeclaration,variableDeclaration->class_name().c_str(),initializedName->get_name().str()); printf (" --- type = %p = %s \n",type,type->class_name().c_str()); string filename = initializedName->get_file_info()->get_filename(); int linenumber = initializedName->get_file_info()->get_line(); printf (" --- filename = %s line = %d \n",filename.c_str(),linenumber); #endif SgScopeStatement* targetScope = variableDeclaration->get_scope(); ROSE_ASSERT(targetScope != NULL); #if 0 printf ("In FixupTemplateArguments::visit(): targetScope for variableDeclaration = %p = %s \n",targetScope,targetScope->class_name().c_str()); #endif // DQ (2/16/2017): Don't process code in template instantiations. SgTemplateInstantiationDefn* templateInstantiationDefn = isSgTemplateInstantiationDefn(targetScope); SgFunctionDeclaration* functionDeclaration = TransformationSupport::getFunctionDeclaration(targetScope); SgTemplateInstantiationFunctionDecl* templateInstantiationFunctionDec = isSgTemplateInstantiationFunctionDecl(functionDeclaration); SgTemplateInstantiationMemberFunctionDecl* templateInstantiationMemberFunctionDec = isSgTemplateInstantiationMemberFunctionDecl(functionDeclaration); // if (templateInstantiationDefn == NULL) if (templateInstantiationDefn == NULL && templateInstantiationFunctionDec == NULL && templateInstantiationMemberFunctionDec == NULL) { #if 1 // DQ (2/15/2017): When this is run, we cause transformations that cause ROSE to have an infinte loop. // Since this is a second (redundant) invocaion, we likely should just not run this. But it is not // clear if this truely fixes the problem that I am seeing. bool result = contains_private_type(type,targetScope); // DQ (3/25/2017): Added a trivial use to eliminate Clang warning about the return value not being used. // But it might be that we should not run the function, however this is a complex subject from last month // that I don't wish to revisit at the moment while being focused om eliminating warnings from Clang. ROSE_ASSERT(result == true || result == false); #endif #if 0 if (result == true) { printf ("******** contains private type: variableDeclaration = %p = %s initializedName = %s \n",variableDeclaration,variableDeclaration->class_name().c_str(),initializedName->get_name().str()); } #endif } #if 0 printf ("DONE: FixupTemplateArguments::visit(): variableDeclaration = %p = %s initializedName = %s \n",variableDeclaration,variableDeclaration->class_name().c_str(),initializedName->get_name().str()); #endif #if 0 printf ("Exiting as a test! \n"); ROSE_ASSERT(false); #endif } }
void visitorTraversal::visit (SgNode * n) { ROSE_ASSERT (n != NULL); switch (n->variantT()) { //some of SgScopeStatement case V_SgGlobal: case V_SgBasicBlock: case V_SgNamespaceDefinitionStatement: case V_SgClassDefinition: case V_SgFunctionDefinition: case V_SgTemplateInstantiationDefn: { GET_QUALIFIED_NAME(ScopeStatement) break; } //Some of SgDeclarationStatement case V_SgFunctionDeclaration: { GET_QUALIFIED_NAME(FunctionDeclaration) break; } case V_SgClassDeclaration: { GET_QUALIFIED_NAME(ClassDeclaration) break; } case V_SgEnumDeclaration: { GET_QUALIFIED_NAME(EnumDeclaration) break; } case V_SgNamespaceDeclarationStatement: { GET_QUALIFIED_NAME(NamespaceDeclarationStatement) break; } case V_SgTemplateDeclaration: { GET_QUALIFIED_NAME(TemplateDeclaration) break; } case V_SgTemplateInstantiationDecl: { GET_QUALIFIED_NAME(TemplateInstantiationDecl) break; } case V_SgMemberFunctionDeclaration: { GET_QUALIFIED_NAME(MemberFunctionDeclaration) break; } case V_SgTypedefDeclaration: { GET_QUALIFIED_NAME(TypedefDeclaration) break; } // special case here case V_SgVariableDeclaration: { SgVariableDeclaration * target = isSgVariableDeclaration(n); SgQualifiedNamePtrList & n_list = target-> get_qualifiedNameList (); SgQualifiedNamePtrList::const_iterator iter = n_list.begin(); for (; iter!=n_list.end(); iter++) { SgQualifiedName * q_name = *iter; ROSE_ASSERT (q_name != NULL); cout<< target->class_name()<<endl; cout<<"\tunparsed string is "<< target->unparseToString()<<endl; } break; } //Others case V_SgInitializedName: { GET_QUALIFIED_NAME(InitializedName) break; } case V_SgNamedType: { GET_QUALIFIED_NAME(NamedType) break; } default: { break; } } // end switch }