//See visitNewArray in attr.cpp void Pretty::visitNewArray(JCNewArray* that) { print("new "); JCExpression* elementType = that->elementType.get(); //print base type part of elementType if (elementType->treeTag == Tree::TYPEARRAY) { //int[][] treeinfo::innermostType(elementType)->accept(this); } else { //int elementType->accept(this); } //print dimens if (that->dimens.size() > 0) { printTreeList(that->dimens, ",", "[", "]"); } //print array part of elementType if (elementType->treeTag == Tree::TYPEARRAY) { printBrackets(dynamic_cast<JCArrayTypeTree*>(elementType)); } //print init part printTreeList(that->elems, ",", " {", "}"); }
void Pretty::visitMethodDef(JCMethodDecl* that) { if (that->mods != nullptr) { that->mods->accept(this); } that->resType->accept(this); addSpace(); print(that->name.desc); addSpace(); printTreeList(that->params, ",", "(", ") "); that->body->accept(this); }
void Pretty::visitNewClass(JCNewClass* that) { print("new "); that->clazz->accept(this); printTreeList(that->arguments, ",", "(", ")"); }
void Pretty::visitApply(JCMethodInvocation* that) { that->meth->accept(this); printTreeList(that->args, ",", "(", ")"); }
void printTree(Object * tree, int indent) { if (getFlag(tree, FLAG_EXTERNAL)) { return; } int i; if (tree == 0) { for (i = 0; i < indent; i++) { printf(" "); } printf("Object: (null)\n"); return; } for (i = 0; i < indent; i++) { printf(" "); } printf("Object: name: \"%s\"\n", tree->name); indent += 1; for (i = 0; i < indent; i++) { printf(" "); } printf("fullname: \"%s\"\n", tree->fullname); for (i = 0; i < indent; i++) { printf(" "); } printf("parentScope: %s\n", tree->parentScope ? tree->parentScope->fullname : "(null)"); for (i = 0; i < indent; i++) { printf(" "); } printf("parentClass: %s\n", tree->parentClass ? tree->parentClass->fullname : "(null)"); for (i = 0; i < indent; i++) { printf(" "); } printf("category: "); printType(tree->category); printf("\n"); for (i = 0; i < indent; i++) { printf(" "); } printf("returnType: \"%s\"\n", tree->returnType); for (i = 0; i < indent; i++) { printf(" "); } printf("paramTypes: "); printSequential(tree->paramTypes, indent + 1, 0); for (i = 0; i < indent; i++) { printf(" "); } printf("definedSymbols: \n"); printTreeList(tree->definedSymbols, indent + 1); for (i = 0; i < indent; i++) { printf(" "); } printf("code: \n"); printSequential(tree->code, indent + 1, 1); }
//used to debug to file ( prints tree to file with fname ) void printTreeToFile(Object * tree, int indent, char *fname) { int i; for (i = 0; i < indent; i++) { printf(" "); } printf("Object: name: \"%s\"\n", tree->name); indent += 1; for (i = 0; i < indent; i++) { printf(" "); } printf("fullname: \"%s\"\n", tree->fullname); if (tree->parentScope == 0) { for (i = 0; i < indent; i++) { printf(" "); } printf("parentObject: (null)\n"); } else { for (i = 0; i < indent; i++) { printf(" "); } printf("parentObject: %s\n", tree->parentScope->fullname); } for (i = 0; i < indent; i++) { printf(" "); } printf("category: "); printType(tree->category); printf("\n"); for (i = 0; i < indent; i++) { printf(" "); } printf("returnType: \"%s\"\n", tree->returnType); for (i = 0; i < indent; i++) { printf(" "); } printf("paramTypes: "); printSequential(tree->paramTypes, indent + 1, 0); for (i = 0; i < indent; i++) { printf(" "); } printf("definedSymbols: \n"); printTreeList(tree->definedSymbols, indent + 1); for (i = 0; i < indent; i++) { printf(" "); } printf("code: \n"); printSequential(tree->code, indent + 1, 1); }