SgName Unparser_Nameq::generateNameQualifierSupport ( SgScopeStatement* scope, const SgUnparse_Info& info, bool qualificationOfType ) { // DQ (5/28/2011): We need this information to be passed in from the outside (qualificationOfType): // qualificationOfName == true implies this is name qualification for a name vs a type. // qualificationOfName == false implies this is name qualification for a type. // note that the complete minimally qualified name is stored and retrieved from the map using // either SgNode::get_globalQualifiedNameMapForNames() or SgNode::get_globalQualifiedNameMapForTypes(). // bool qualificationOfType = false; SgName qualifiedName; // If the name qualification length required is zero then we can return an empty string and avoid the logic below. if (info.get_name_qualification_length() > 0) { // DQ (5/28/2011): Adding support for qualified name lookup. SgNode* nameQualificationReferenceNode = info.get_reference_node_for_qualification(); if (nameQualificationReferenceNode != NULL) { if (qualificationOfType == false) { std::map<SgNode*,std::string>::iterator i = SgNode::get_globalQualifiedNameMapForNames().find(nameQualificationReferenceNode); if (i != SgNode::get_globalQualifiedNameMapForNames().end()) { qualifiedName = i->second; } else { printf ("key not found in node map nameQualificationReferenceNode = %s \n",nameQualificationReferenceNode->class_name().c_str()); ROSE_ASSERT(false); } } else { std::map<SgNode*,std::string>::iterator i = SgNode::get_globalQualifiedNameMapForTypes().find(nameQualificationReferenceNode); if (i != SgNode::get_globalQualifiedNameMapForTypes().end()) { qualifiedName = i->second; } else { // Debugging support... printf ("key not found in type map nameQualificationReferenceNode = %s \n",nameQualificationReferenceNode->class_name().c_str()); // Extra Debugging support... switch(nameQualificationReferenceNode->variantT()) { case V_SgInitializedName: { SgInitializedName* initializedName = isSgInitializedName(nameQualificationReferenceNode); printf ("initializedName = %s \n",initializedName->get_name().str()); break; } default: { printf ("Default reached in switch(nameQualificationReferenceNode->variantT()) \n"); ROSE_ASSERT(false); } } ROSE_ASSERT(false); } } } else { // This should be an error. printf ("Error: nameQualificationReferenceNode == NULL but info.get_name_qualification_length() = %d \n",info.get_name_qualification_length()); ROSE_ASSERT(false); } } else { // printf ("return empty qualified name since info.get_name_qualification_length() == 0 \n"); } return qualifiedName; }
SgName Unparser_Nameq::generateNameQualifier( SgDeclarationStatement* declarationStatement, const SgUnparse_Info & info, bool qualificationOfType ) { // This unparser support for name qualification is C++ specific. #if 0 printf ("In Unparser_Nameq::generateNameQualifier(): qualificationOfType = %s \n",qualificationOfType ? "true" : "false"); printf ("In Unparser_Nameq::generateNameQualifier(): info.get_name_qualification_length() = %d \n",info.get_name_qualification_length()); printf ("In Unparser_Nameq::generateNameQualifier(): info.get_type_elaboration_required() = %s \n",info.get_type_elaboration_required() ? "true" : "false"); printf ("In Unparser_Nameq::generateNameQualifier(): info.get_global_qualification_required() = %s \n",info.get_global_qualification_required() ? "true" : "false"); #endif ROSE_ASSERT(declarationStatement != NULL); return generateNameQualifierSupport(declarationStatement->get_scope(),info,qualificationOfType); }