|
|
1.1 ! root 1: /* Prints out tree in human readable form - GNU C++ compiler ! 2: Copyright (C) 1992 Free Software Foundation, Inc. ! 3: Hacked by Michael Tiemann ([email protected]) ! 4: ! 5: This file is part of GNU CC. ! 6: ! 7: GNU CC is free software; you can redistribute it and/or modify ! 8: it under the terms of the GNU General Public License as published by ! 9: the Free Software Foundation; either version 2, or (at your option) ! 10: any later version. ! 11: ! 12: GNU CC is distributed in the hope that it will be useful, ! 13: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 14: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 15: GNU General Public License for more details. ! 16: ! 17: You should have received a copy of the GNU General Public License ! 18: along with GNU CC; see the file COPYING. If not, write to ! 19: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ ! 20: ! 21: ! 22: #include "config.h" ! 23: #include "tree.h" ! 24: #include <stdio.h> ! 25: #include "cp-tree.h" ! 26: ! 27: void ! 28: print_lang_decl (file, node, indent) ! 29: FILE *file; ! 30: tree node; ! 31: int indent; ! 32: { ! 33: if (!DECL_LANG_SPECIFIC (node)) ! 34: return; ! 35: /* A FIELD_DECL only has the flags structure, which we aren't displaying ! 36: anyways. */ ! 37: if (TREE_CODE (node) == FIELD_DECL) ! 38: return; ! 39: indent_to (file, indent + 3); ! 40: if (DECL_MAIN_VARIANT (node)) ! 41: fprintf (file, " decl-main-variant %x", DECL_MAIN_VARIANT (node)); ! 42: if (DECL_PENDING_INLINE_INFO (node)) ! 43: fprintf (file, " pending-inline-info %x", DECL_PENDING_INLINE_INFO (node)); ! 44: if (DECL_TEMPLATE_INFO (node)) ! 45: fprintf (file, " template-info %x", DECL_TEMPLATE_INFO (node)); ! 46: } ! 47: ! 48: void ! 49: print_lang_type (file, node, indent) ! 50: FILE *file; ! 51: register tree node; ! 52: int indent; ! 53: { ! 54: if (TREE_CODE (node) == TEMPLATE_TYPE_PARM) ! 55: { ! 56: print_node (file, "tinfo", TYPE_VALUES (node), indent + 4); ! 57: return; ! 58: } ! 59: ! 60: if (TREE_CODE (node) == UNINSTANTIATED_P_TYPE) ! 61: { ! 62: print_node (file, "template", UPT_TEMPLATE (node), indent + 4); ! 63: print_node (file, "parameters", UPT_PARMS (node), indent + 4); ! 64: return; ! 65: } ! 66: ! 67: if (! (TREE_CODE (node) == RECORD_TYPE ! 68: || TREE_CODE (node) == UNION_TYPE)) ! 69: return; ! 70: ! 71: if (!TYPE_LANG_SPECIFIC (node)) ! 72: return; ! 73: ! 74: indent_to (file, indent + 3); ! 75: ! 76: if (TYPE_NEEDS_CONSTRUCTOR (node)) ! 77: fputs ( "needs-constructor", file); ! 78: if (TYPE_NEEDS_DESTRUCTOR (node)) ! 79: fputs (" needs-destructor", file); ! 80: if (TYPE_HAS_CONVERSION (node)) ! 81: fputs (" has-type-conversion", file); ! 82: if (TYPE_HAS_INT_CONVERSION (node)) ! 83: fputs (" has-int-conversion", file); ! 84: if (TYPE_HAS_REAL_CONVERSION (node)) ! 85: fputs (" has-float-conversion", file); ! 86: if (TYPE_HAS_INIT_REF (node)) ! 87: fputs (" X(X&)", file); ! 88: if (TREE_GETS_NEW (node)) ! 89: fputs (" gets-new", file); ! 90: if (TREE_GETS_DELETE (node)) ! 91: fputs (" gets-delete", file); ! 92: if (TYPE_HAS_ASSIGNMENT (node)) ! 93: fputs (" has=", file); ! 94: if (TYPE_GETS_ASSIGNMENT (node)) ! 95: fputs (" gets=", file); ! 96: if (TYPE_HAS_ASSIGN_REF (node)) ! 97: fputs (" this=(X&)", file); ! 98: if (TYPE_GETS_ASSIGN_REF (node)) ! 99: fputs (" gets=(X&)", file); ! 100: if (TYPE_HAS_WRAPPER (node)) ! 101: fputs (" wrapper", file); ! 102: if (TYPE_OVERLOADS_METHOD_CALL_EXPR (node)) ! 103: fputs (" op->()", file); ! 104: if (TYPE_GETS_INIT_AGGR (node)) ! 105: fputs (" gets X(X, ...)", file); ! 106: if (TYPE_OVERLOADS_CALL_EXPR (node)) ! 107: fputs (" op()", file); ! 108: if (TYPE_OVERLOADS_ARRAY_REF (node)) ! 109: fputs (" op[]", file); ! 110: if (TYPE_OVERLOADS_ARROW (node)) ! 111: fputs (" op->", file); ! 112: if (TYPE_USES_MULTIPLE_INHERITANCE (node)) ! 113: fputs (" uses-multiple-inheritance", file); ! 114: ! 115: if (TREE_CODE (node) == RECORD_TYPE) ! 116: { ! 117: fprintf (file, " n_parents %d n_ancestors %d", ! 118: CLASSTYPE_N_BASECLASSES (node), ! 119: CLASSTYPE_N_SUPERCLASSES (node)); ! 120: fprintf (file, " use_template=%d", CLASSTYPE_USE_TEMPLATE (node)); ! 121: if (CLASSTYPE_INTERFACE_ONLY (node)) ! 122: fprintf (file, " interface-only"); ! 123: if (CLASSTYPE_INTERFACE_UNKNOWN (node)) ! 124: fprintf (file, " interface-unknown"); ! 125: print_node (file, "member-functions", CLASSTYPE_METHOD_VEC (node), ! 126: indent + 4); ! 127: print_node (file, "baselinks", ! 128: TYPE_BINFO_BASETYPES (node) ? CLASSTYPE_BASELINK_VEC (node) : NULL_TREE, ! 129: indent + 4); ! 130: } ! 131: } ! 132: ! 133: void ! 134: print_lang_identifier (file, node, indent) ! 135: FILE *file; ! 136: tree node; ! 137: int indent; ! 138: { ! 139: print_node (file, "global", IDENTIFIER_GLOBAL_VALUE (node), indent + 4); ! 140: print_node (file, "class", IDENTIFIER_CLASS_VALUE (node), indent + 4); ! 141: print_node (file, "local", IDENTIFIER_LOCAL_VALUE (node), indent + 4); ! 142: print_node (file, "label", IDENTIFIER_LABEL_VALUE (node), indent + 4); ! 143: print_node (file, "template", IDENTIFIER_TEMPLATE (node), indent + 4); ! 144: print_node (file, "implicit", IDENTIFIER_IMPLICIT_DECL (node), indent + 4); ! 145: print_node (file, "error locus", IDENTIFIER_ERROR_LOCUS (node), indent + 4); ! 146: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.