void DotBuilder::doOperator(ASTOperator* element) { uint operatorType = element->getOperatorType(); ASTElement* left = element->getLeft(); ASTElement* right = element->getRight(); const char* opString = NULL; switch (operatorType) { case MOPERATOR_ASSIGN: opString = "="; break; case MOPERATOR_PLUS : opString = "+"; break; case MOPERATOR_MINUS : opString = "-"; break; case MOPERATOR_MUL : opString = "*"; break; case MOPERATOR_DIV : opString = "/"; break; case MOPERATOR_MOD : opString = "%"; break; case MOPERATOR_POW : opString = "^"; break; default: MP_ASSERT_NOT_REACHED(); } _sb.appendFormat(" N_%u [label=\"<L>|<F0>%s|<R>\"];\n", element->getElementId(), opString); _sb.appendFormat(" N_%u:L -> N_%u:F0;\n", element->getElementId(), left->getElementId()); _sb.appendFormat(" N_%u:R -> N_%u:F0;\n", element->getElementId(), right->getElementId()); doElement(left); doElement(right); }
void DotBuilder::doTransform(ASTTransform* element) { uint transformType = element->getTransformType(); ASTElement* child = element->getChild(); const char* opString = NULL; switch (transformType) { case MTRANSFORM_NONE : opString = ""; break; case MTRANSFORM_NEGATE: opString = "-"; break; default: MP_ASSERT_NOT_REACHED(); } _sb.appendFormat(" N_%u [label=\"<F0>%s\"];\n", element->getElementId(), opString); _sb.appendFormat(" N_%u -> N_%u:F0;\n", element->getElementId(), child->getElementId()); doElement(child); }