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
1.7.1