// // Created by ztuowen on 9/24/16. // #include "printer/generic.h" using namespace chill::printer; void GenericPrinter::print(std::string ident, chillAST_Node *n, std::ostream &o) { switch (n->getType()) { case CHILLAST_NODE_ARRAYSUBSCRIPTEXPR: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_BINARYOPERATOR: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_CALLEXPR: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_COMPOUNDSTMT: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_CSTYLEADDRESSOF: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_CSTYLECASTEXPR: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_CUDAFREE: printS(ident, dynamic_cast(n), o); break; // case CHILLAST_NODE_CUDAKERNELCALL: // printS(ident, dynamic_cast(n), o); // break; case CHILLAST_NODE_CUDAMALLOC: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_CUDAMEMCPY: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_CUDASYNCTHREADS: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_DECLREFEXPR: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_FLOATINGLITERAL: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_LOOP: // case CHILLAST_NODE_FORSTMT: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_FREE: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_FUNCTIONDECL: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_IFSTMT: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_IMPLICITCASTEXPR: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_INTEGERLITERAL: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_MACRODEFINITION: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_MALLOC: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_MEMBEREXPR: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_NOOP: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_NULL: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_PARENEXPR: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_PREPROCESSING: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_RECORDDECL: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_RETURNSTMT: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_SIZEOF: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_TRANSLATIONUNIT: // case CHILLAST_NODE_SOURCEFILE: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_TERNARYOPERATOR: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_TYPEDEFDECL: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_UNARYOPERATOR: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_VARDECL: printS(ident, dynamic_cast(n), o); break; case CHILLAST_NODE_UNKNOWN: default: CHILL_ERROR("Printing an unknown type of Node: %s\n", n->getTypeString()); } o.flush(); } int GenericPrinter::getPrec(chillAST_Node *n) { switch (n->getType()) { case CHILLAST_NODE_ARRAYSUBSCRIPTEXPR: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_BINARYOPERATOR: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_CALLEXPR: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_COMPOUNDSTMT: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_CSTYLEADDRESSOF: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_CSTYLECASTEXPR: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_CUDAFREE: return getPrecS(dynamic_cast(n)); // case CHILLAST_NODE_CUDAKERNELCALL: // return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_CUDAMALLOC: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_CUDAMEMCPY: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_CUDASYNCTHREADS: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_DECLREFEXPR: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_FLOATINGLITERAL: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_LOOP: // case CHILLAST_NODE_FORSTMT: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_FREE: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_FUNCTIONDECL: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_IFSTMT: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_IMPLICITCASTEXPR: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_INTEGERLITERAL: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_MACRODEFINITION: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_MALLOC: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_MEMBEREXPR: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_NOOP: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_NULL: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_PARENEXPR: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_PREPROCESSING: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_RECORDDECL: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_RETURNSTMT: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_SIZEOF: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_TRANSLATIONUNIT: // case CHILLAST_NODE_SOURCEFILE: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_TERNARYOPERATOR: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_TYPEDEFDECL: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_UNARYOPERATOR: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_VARDECL: return getPrecS(dynamic_cast(n)); case CHILLAST_NODE_UNKNOWN: default: CHILL_ERROR("Getting precedence an unknown type of Node: %s\n", n->getTypeString()); return INT8_MAX; } } void GenericPrinter::errorPrintS(std::string ident, chillAST_Node *n, std::ostream &o) { CHILL_ERROR("Unhandled case in printer: %s\n", n->getTypeString()); }