Ejemplo n.º 1
0
void 
DeleteSgTree( SgNode* root) {
  VariantVector vv1 = V_SgNode;
  //std::cout << "Number of nodes before: " << 
  // NodeQuery::queryMemoryPool(vv1).size() << std::endl;

  DeleteAST2 deleteTree;
  deleteTree.traverse(root,postorder);

  vector<SgNode*> vec = NodeQuery::queryMemoryPool(vv1);
  //std::cout << "Number of nodes after AST deletion: " << 
  // vec.size() << std::endl;

  vector<SgNode*>::const_iterator it = vec.begin();
  for (;it!=vec.end();++it) {
    SgNode* node = *it;
    // tps :: the following nodes are not deleted with the 
    // AST traversal. We can only delete some of them -
    // but not all within the memory pool traversal
    //cerr << "  Not deleted : " << node->class_name() ;
    if (!isSgAsmTypeByte(node) &&
	!isSgAsmTypeWord(node) &&
	!isSgAsmTypeDoubleWord(node) &&
	!isSgAsmTypeQuadWord(node) && 

	!isSgAsmType128bitFloat(node) && 
	!isSgAsmType80bitFloat(node) && 
	!isSgAsmTypeDoubleFloat(node) && 
	!isSgAsmTypeDoubleQuadWord(node) && 
	!isSgAsmTypeSingleFloat(node) && 
	!isSgAsmTypeVector(node) && 

	!isSgAsmGenericFile(node) &&
	!isSgAsmGenericHeader(node) &&
	!isSgAsmGenericSection(node) 
	) {
      //cerr << "    .. deleting. " ;
      delete node;
    }
    //cerr << endl;
  }

  //std::cout << "Number of nodes after Memory pool deletion: " << 
  // NodeQuery::queryMemoryPool(vv1).size() << std::endl;
  
}
Ejemplo n.º 2
0
int main(int argc, char** argv) {

    SgProject* project = frontend(argc,argv);
    ROSE_ASSERT(project);

    VariantVector vv1 = V_SgNode;
    vector<SgNode*> vec = NodeQuery::queryMemoryPool(vv1);
    std::cout << "Number of nodes before AST deleting: " <<
              vec.size() << std::endl;

    DeleteAST2 deleteTree;
    deleteTree.traverse(project,postorder);

    vec = NodeQuery::queryMemoryPool(vv1);
    std::cout << "Number of nodes after AST deletion: " <<
              vec.size() << std::endl;

    map<std::string, int> nodes;
    vector<SgNode*>::const_iterator it = vec.begin();
    for (; it!=vec.end(); ++it) {
        SgNode* node = *it;
        ROSE_ASSERT(node);
        std::string name  = node->class_name();
        nodes[name]++;
        delete node;
    }

    map<std::string, int>::const_iterator it2 = nodes.begin();
    for (; it2!=nodes.end(); ++it2) {
        string name = it2->first;
        int amount = it2->second;
        cout << "  Could not delete : " << name << "  -  " << amount << endl;
    }

    std::cout << "Number of nodes after deleting in Memory pool: " <<
              NodeQuery::queryMemoryPool(vv1).size() << std::endl;

    std::cout << ">> Rerunning frontend ..." << std::endl;

    project = frontend(argc,argv);
    ROSE_ASSERT(project);


}