本文整理汇总了C++中SgType::containsInternalTypes方法的典型用法代码示例。如果您正苦于以下问题:C++ SgType::containsInternalTypes方法的具体用法?C++ SgType::containsInternalTypes怎么用?C++ SgType::containsInternalTypes使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SgType
的用法示例。
在下文中一共展示了SgType::containsInternalTypes方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: querySolverGrammarElementFromVariantVector
// DQ (4/7/2004): Added to support more general lookup of data in the AST (vector of variants)
void* querySolverGrammarElementFromVariantVector ( SgNode * astNode, VariantVector targetVariantVector, NodeQuerySynthesizedAttributeType* returnNodeList )
{
// This function extracts type nodes that would not be traversed so that they can
// accumulated to a list. The specific nodes collected into the list is controlled
// by targetVariantVector.
ROSE_ASSERT (astNode != NULL);
#if 0
printf ("Inside of void* querySolverGrammarElementFromVariantVector() astNode = %p = %s \n",astNode,astNode->class_name().c_str());
#endif
Rose_STL_Container<SgNode*> nodesToVisitTraverseOnlyOnce;
pushNewNode (returnNodeList,targetVariantVector,astNode);
vector<SgNode*> succContainer = astNode->get_traversalSuccessorContainer();
vector<pair<SgNode*,string> > allNodesInSubtree = astNode->returnDataMemberPointers();
#if 0
printf ("succContainer.size() = %zu \n",succContainer.size());
printf ("allNodesInSubtree.size() = %zu \n",allNodesInSubtree.size());
#endif
if ( succContainer.size() != allNodesInSubtree.size() )
{
for (vector<pair<SgNode*,string> >::iterator iItr = allNodesInSubtree.begin(); iItr!= allNodesInSubtree.end(); ++iItr )
{
#if 0
if ( iItr->first != NULL )
{
// printf ("iItr->first = %p = %s \n",iItr->first,iItr->first->class_name().c_str());
printf ("iItr->first = %p \n",iItr->first);
printf ("iItr->first = %p = %s \n",iItr->first,iItr->first->class_name().c_str());
}
#endif
// DQ (7/27/2014): Check if this is always non-NULL.
// ROSE_ASSERT(iItr->first != NULL);
#if 0
if (iItr->first != NULL)
{
// printf ("In querySolverGrammarElementFromVariantVector(): iItr->first->variantT() = %d class_name = %s \n",iItr->first->variantT(),iItr->first->class_name().c_str());
printf ("In querySolverGrammarElementFromVariantVector(): iItr->first = %p \n",iItr->first);
printf ("In querySolverGrammarElementFromVariantVector(): iItr->first->class_name = %s \n",iItr->first->class_name().c_str());
printf ("In querySolverGrammarElementFromVariantVector(): iItr->first->variantT() = %d \n",(int)iItr->first->variantT());
}
else
{
printf ("In querySolverGrammarElementFromVariantVector(): iItr->first == NULL \n");
}
#endif
SgType* type = isSgType(iItr->first);
if ( type != NULL )
{
// DQ (1/13/2011): If we have not already seen this entry then we have to chase down possible nested types.
// if (std::find(succContainer.begin(),succContainer.end(),iItr->first) == succContainer.end() )
if (std::find(succContainer.begin(),succContainer.end(),type) == succContainer.end() )
{
// DQ (1/30/2010): Push the current type onto the list first, then any internal types...
pushNewNode (returnNodeList,targetVariantVector,type);
// Are there any other places where nested types can be found...?
// if ( isSgPointerType(iItr->first) != NULL || isSgArrayType(iItr->first) != NULL || isSgReferenceType(iItr->first) != NULL || isSgTypedefType(iItr->first) != NULL || isSgFunctionType(iItr->first) != NULL || isSgModifierType(iItr->first) != NULL)
// if (type->containsInternalTypes() == true)
if (type->containsInternalTypes() == true)
{
#if 0
printf ("If we have not already seen this entry then we have to chase down possible nested types. \n");
// ROSE_ASSERT(false);
#endif
Rose_STL_Container<SgType*> typeVector = type->getInternalTypes();
#if 0
printf ("----- typeVector.size() = %zu \n",typeVector.size());
#endif
Rose_STL_Container<SgType*>::iterator i = typeVector.begin();
while(i != typeVector.end())
{
#if 0
printf ("----- internal type = %s \n",(*i)->class_name().c_str());
#endif
// DQ (1/16/2011): This causes a test in tests/roseTests/programAnalysisTests/variableLivenessTests
// to fail with error "Error :: Number of nodes = 37 should be : 36"
// Add this type to the return list of types.
pushNewNode (returnNodeList,targetVariantVector,*i);
i++;
}
}
// DQ (1/30/2010): Move this code to the top of the basic block.
// pushNewNode (returnNodeList,targetVariantVector,iItr->first);
// pushNewNode (returnNodeList,targetVariantVector,type);
}
}
}
}
//.........这里部分代码省略.........