OutputExprTreeVisitor.cpp

Go to the documentation of this file.
00001 
00015 #include <OpenAnalysis/ExprTree/OutputExprTreeVisitor.hpp>
00016 
00017 static bool debug = false;
00018 
00019 namespace OA {
00020 
00021 
00022 OutputExprTreeVisitor::OutputExprTreeVisitor(IRHandlesIRInterface& ir)
00023         :mIR(ir)
00024 {
00025   mId = 0;
00026 }
00027 
00030 void OutputExprTreeVisitor::visitNode(ExprTree::Node&)
00031 {
00032     std::cout << "visitNode\n";
00033 }
00034 
00035 void OutputExprTreeVisitor::visitOpNode(ExprTree::OpNode& n)
00036 {
00037   int Id = mId;
00038   OpHandle opH = n.getHandle();
00039   ostringstream label;
00040   label << "ET OpNode ( " << mIR.toString(opH) << " )";
00041   sOutBuild->graphNodeStart(mId);
00042   sOutBuild->graphNodeLabel(label.str());
00043   mId++;
00044 
00045 
00046   if(n.num_children() >= 1)
00047   {
00048     // if so then visit each child
00049     OA_ptr<ExprTree::Node> cetNodePtr;
00050     ExprTree::ChildNodesIterator cNodesIter(n);
00051 
00052     for(;cNodesIter.isValid(); ++cNodesIter, ++mId) {
00053       cetNodePtr = cNodesIter.current();
00054  
00055       sOutBuild->graphEdgeStart();
00056         sOutBuild->graphEdgeLabelStart();
00057         sOutBuild->graphEdgeSourceNode(Id);
00058           cetNodePtr->acceptVisitor(*this);
00059         sOutBuild->graphEdgeLabelEnd();
00060     }
00061     
00062   } else {
00063       assert(0);
00064   }
00065 
00066   mId--;
00067 }
00068 
00069 void OutputExprTreeVisitor::visitCallNode(ExprTree::CallNode& n)
00070 {
00071     CallHandle call = n.getHandle();
00072     ostringstream label;
00073     label << "ET CallNode ( " << mIR.toString(call) << " )";
00074 
00075     sOutBuild->graphNodeStart(mId);
00076     sOutBuild->graphNodeLabel(label.str());
00077 }
00078 
00079 void OutputExprTreeVisitor::visitMemRefNode(ExprTree::MemRefNode& n)
00080 {
00081     MemRefHandle memref = n.getHandle();
00082     ostringstream label;
00083     label << "ET MemRefNode ( " << mIR.toString(memref) << " )";
00084 
00085     sOutBuild->graphNodeStart(mId);
00086     sOutBuild->graphNodeLabel(label.str());
00087 }
00088 
00089 void OutputExprTreeVisitor::visitConstSymNode(ExprTree::ConstSymNode& n)
00090 {
00091     ConstSymHandle simnode = n.getHandle();
00092     ostringstream label;
00093     label << "ET ConstSymNode ( " << mIR.toString(simnode) << " )";
00094 
00095     sOutBuild->graphNodeStart(mId);
00096     sOutBuild->graphNodeLabel(label.str());
00097 }
00098 
00099 void OutputExprTreeVisitor::visitConstValNode(ExprTree::ConstValNode& n)
00100 {
00101     ConstValHandle constval = n.getHandle();
00102     ostringstream label;
00103     label << "ET ConstValNode ( " << mIR.toString(constval) << " )";
00104 
00105     sOutBuild->graphNodeStart(mId);
00106     sOutBuild->graphNodeLabel(label.str());
00107 }
00108 
00109 void OutputExprTreeVisitor::output(IRHandlesIRInterface&)
00110 {
00111 }
00112 
00113 
00114 
00115 } // end of OA namespace
00116