Annotation of gcc/print-tree.c, revision 1.1

1.1     ! root        1: /* Prints out tree in human readable form - GNU C-compiler
        !             2:    Copyright (C) 1990, 1991 Free Software Foundation, Inc.
        !             3: 
        !             4: This file is part of GNU CC.
        !             5: 
        !             6: GNU CC is free software; you can redistribute it and/or modify
        !             7: it under the terms of the GNU General Public License as published by
        !             8: the Free Software Foundation; either version 2, or (at your option)
        !             9: any later version.
        !            10: 
        !            11: GNU CC is distributed in the hope that it will be useful,
        !            12: but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            14: GNU General Public License for more details.
        !            15: 
        !            16: You should have received a copy of the GNU General Public License
        !            17: along with GNU CC; see the file COPYING.  If not, write to
        !            18: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
        !            19: 
        !            20: 
        !            21: #include "config.h"
        !            22: #include "tree.h"
        !            23: #include <stdio.h>
        !            24: 
        !            25: extern char **tree_code_name;
        !            26: 
        !            27: extern char *mode_name[];
        !            28: 
        !            29: void print_node ();
        !            30: void indent_to ();
        !            31: 
        !            32: /* Define the hash table of nodes already seen.
        !            33:    Such nodes are not repeated; brief cross-references are used.  */
        !            34: 
        !            35: #define HASH_SIZE 37
        !            36: 
        !            37: struct bucket
        !            38: {
        !            39:   tree node;
        !            40:   struct bucket *next;
        !            41: };
        !            42: 
        !            43: static struct bucket **table;
        !            44: 
        !            45: /* Print the node NODE on standard error, for debugging.
        !            46:    Most nodes referred to by this one are printed recursively
        !            47:    down to a depth of six.  */
        !            48: 
        !            49: void
        !            50: debug_tree (node)
        !            51:      tree node;
        !            52: {
        !            53:   char *object = (char *) oballoc (0);
        !            54:   table = (struct bucket **) oballoc (HASH_SIZE * sizeof (struct bucket *));
        !            55:   bzero (table, HASH_SIZE * sizeof (struct bucket *));
        !            56:   print_node (stderr, "", node, 0);
        !            57:   table = 0;
        !            58:   obfree (object);
        !            59:   fprintf (stderr, "\n");
        !            60: }
        !            61: 
        !            62: /* Print a node in brief fashion, with just the code, address and name.  */
        !            63: 
        !            64: void
        !            65: print_node_brief (file, prefix, node, indent)
        !            66:      FILE *file;
        !            67:      char *prefix;
        !            68:      tree node;
        !            69:      int indent;
        !            70: {
        !            71:   char class;
        !            72: 
        !            73:   if (node == 0)
        !            74:     return;
        !            75: 
        !            76:   class = TREE_CODE_CLASS (TREE_CODE (node));
        !            77: 
        !            78:   /* Always print the slot this node is in, and its code, address and
        !            79:      name if any.  */
        !            80:   if (indent > 0)
        !            81:     fprintf (file, " ");
        !            82:   fprintf (file, "%s <%s %x", prefix,
        !            83:           tree_code_name[(int) TREE_CODE (node)], (int) node);
        !            84: 
        !            85:   if (class == 'd')
        !            86:     {
        !            87:       if (DECL_NAME (node))
        !            88:        fprintf (file, " %s", IDENTIFIER_POINTER (DECL_NAME (node)));
        !            89:     }
        !            90:   else if (class == 't')
        !            91:     {
        !            92:       if (TYPE_NAME (node))
        !            93:        {
        !            94:          if (TREE_CODE (TYPE_NAME (node)) == IDENTIFIER_NODE)
        !            95:            fprintf (file, " %s", IDENTIFIER_POINTER (TYPE_NAME (node)));
        !            96:          else if (TREE_CODE (TYPE_NAME (node)) == TYPE_DECL
        !            97:                   && DECL_NAME (TYPE_NAME (node)))
        !            98:            fprintf (file, " %s",
        !            99:                     IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (node))));
        !           100:        }
        !           101:     }
        !           102:   if (TREE_CODE (node) == IDENTIFIER_NODE)
        !           103:     fprintf (file, " %s", IDENTIFIER_POINTER (node));
        !           104:   /* We might as well always print the value of an integer.  */
        !           105:   if (TREE_CODE (node) == INTEGER_CST)
        !           106:     {
        !           107:       if (TREE_INT_CST_HIGH (node) == 0)
        !           108:        fprintf (file, " %1u", TREE_INT_CST_LOW (node));
        !           109:       else if (TREE_INT_CST_HIGH (node) == -1
        !           110:               && TREE_INT_CST_LOW (node) != 0)
        !           111:        fprintf (file, " -%1u", -TREE_INT_CST_LOW (node));
        !           112:       else
        !           113:        fprintf (file, " 0x%x%08x",
        !           114:                 TREE_INT_CST_HIGH (node),
        !           115:                 TREE_INT_CST_LOW (node));
        !           116:     }
        !           117:   if (TREE_CODE (node) == REAL_CST)
        !           118:     {
        !           119: #ifndef REAL_IS_NOT_DOUBLE
        !           120:       fprintf (file, " %e", TREE_REAL_CST (node));
        !           121: #else
        !           122:       {
        !           123:        int i;
        !           124:        char *p = (char *) &TREE_REAL_CST (node);
        !           125:        fprintf (file, " 0x");
        !           126:        for (i = 0; i < sizeof TREE_REAL_CST (node); i++)
        !           127:          fprintf (file, "%02x", *p++);
        !           128:        fprintf (file, "");
        !           129:       }
        !           130: #endif /* REAL_IS_NOT_DOUBLE */
        !           131:     }
        !           132: 
        !           133:   fprintf (file, ">");
        !           134: }
        !           135: 
        !           136: void
        !           137: indent_to (file, column)
        !           138:      FILE *file;
        !           139:      int column;
        !           140: {
        !           141:   int i;
        !           142: 
        !           143:   /* Since this is the long way, indent to desired column.  */
        !           144:   if (column > 0)
        !           145:     fprintf (file, "\n");
        !           146:   for (i = 0; i < column; i++)
        !           147:     fprintf (file, " ");
        !           148: }
        !           149: 
        !           150: /* Print the node NODE in full on file FILE, preceded by PREFIX,
        !           151:    starting in column INDENT.  */
        !           152: 
        !           153: void
        !           154: print_node (file, prefix, node, indent)
        !           155:      FILE *file;
        !           156:      char *prefix;
        !           157:      tree node;
        !           158:      int indent;
        !           159: {
        !           160:   int hash;
        !           161:   struct bucket *b;
        !           162:   enum machine_mode mode;
        !           163:   char class;
        !           164:   int len;
        !           165:   int first_rtl;
        !           166:   int i;
        !           167: 
        !           168:   if (node == 0)
        !           169:     return;
        !           170: 
        !           171:   class = TREE_CODE_CLASS (TREE_CODE (node));
        !           172: 
        !           173:   /* Don't get too deep in nesting.  If the user wants to see deeper,
        !           174:      it is easy to use the address of a lowest-level node
        !           175:      as an argument in another call to debug_tree.  */
        !           176: 
        !           177:   if (indent > 24)
        !           178:     {
        !           179:       print_node_brief (file, prefix, node, indent);
        !           180:       return;
        !           181:     }
        !           182: 
        !           183:   if (indent > 8 && (class == 't' || class == 'd'))
        !           184:     {
        !           185:       print_node_brief (file, prefix, node, indent);
        !           186:       return;
        !           187:     }
        !           188: 
        !           189:   /* It is unsafe to look at any other filds of an ERROR_MARK node. */
        !           190:   if (TREE_CODE (node) == ERROR_MARK)
        !           191:     {
        !           192:       print_node_brief (file, prefix, node, indent);
        !           193:       return;
        !           194:     }
        !           195: 
        !           196:   hash = ((int) node & ~(1 << (HOST_BITS_PER_INT - 1))) % HASH_SIZE;
        !           197: 
        !           198:   /* If node is in the table, just mention its address.  */
        !           199:   for (b = table[hash]; b; b = b->next)
        !           200:     if (b->node == node)
        !           201:       {
        !           202:        print_node_brief (file, prefix, node, indent);
        !           203:        return;
        !           204:       }
        !           205: 
        !           206:   /* Add this node to the table.  */
        !           207:   b = (struct bucket *) oballoc (sizeof (struct bucket));
        !           208:   b->node = node;
        !           209:   b->next = table[hash];
        !           210:   table[hash] = b;
        !           211: 
        !           212:   /* Indent to the specified column, since this is the long form.  */
        !           213:   indent_to (file, indent);
        !           214: 
        !           215:   /* Print the slot this node is in, and its code, and address.  */
        !           216:   fprintf (file, "%s <%s %x", prefix,
        !           217:           tree_code_name[(int) TREE_CODE (node)], (int) node);
        !           218: 
        !           219:   /* Print the name, if any.  */
        !           220:   if (class == 'd')
        !           221:     {
        !           222:       if (DECL_NAME (node))
        !           223:        fprintf (file, " %s", IDENTIFIER_POINTER (DECL_NAME (node)));
        !           224:     }
        !           225:   else if (class == 't')
        !           226:     {
        !           227:       if (TYPE_NAME (node))
        !           228:        {
        !           229:          if (TREE_CODE (TYPE_NAME (node)) == IDENTIFIER_NODE)
        !           230:            fprintf (file, " %s", IDENTIFIER_POINTER (TYPE_NAME (node)));
        !           231:          else if (TREE_CODE (TYPE_NAME (node)) == TYPE_DECL
        !           232:                   && DECL_NAME (TYPE_NAME (node)))
        !           233:            fprintf (file, " %s",
        !           234:                     IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (node))));
        !           235:        }
        !           236:     }
        !           237:   if (TREE_CODE (node) == IDENTIFIER_NODE)
        !           238:     fprintf (file, " %s", IDENTIFIER_POINTER (node));
        !           239: 
        !           240:   if (TREE_CODE (node) == INTEGER_CST)
        !           241:     {
        !           242:       if (indent <= 4)
        !           243:        print_node_brief (file, "type", TREE_TYPE (node), indent + 4);
        !           244:     }
        !           245:   else
        !           246:     {
        !           247:       print_node (file, "type", TREE_TYPE (node), indent + 4);
        !           248:       if (TREE_TYPE (node))
        !           249:        indent_to (file, indent + 3);
        !           250:     }
        !           251: 
        !           252:   /* If a permanent object is in the wrong obstack, or the reverse, warn.  */
        !           253:   if (object_permanent_p (node) != TREE_PERMANENT (node))
        !           254:     {
        !           255:       if (TREE_PERMANENT (node))
        !           256:        fputs (" !!permanent object in non-permanent obstack!!", file);
        !           257:       else
        !           258:        fputs (" !!non-permanent object in permanent obstack!!", file);
        !           259:       indent_to (file, indent + 3);
        !           260:     }
        !           261: 
        !           262:   if (TREE_SIDE_EFFECTS (node))
        !           263:     fputs (" side-effects", file);
        !           264:   if (TREE_READONLY (node))
        !           265:     fputs (" readonly", file);
        !           266:   if (TREE_CONSTANT (node))
        !           267:     fputs (" constant", file);
        !           268:   if (TREE_ADDRESSABLE (node))
        !           269:     fputs (" addressable", file);
        !           270:   if (TREE_THIS_VOLATILE (node))
        !           271:     fputs (" volatile", file);
        !           272:   if (TREE_UNSIGNED (node))
        !           273:     fputs (" unsigned", file);
        !           274:   if (TREE_ASM_WRITTEN (node))
        !           275:     fputs (" asm_written", file);
        !           276:   if (TREE_USED (node))
        !           277:     fputs (" used", file);
        !           278:   if (TREE_PERMANENT (node))
        !           279:     fputs (" permanent", file);
        !           280:   if (TREE_PUBLIC (node))
        !           281:     fputs (" public", file);
        !           282:   if (TREE_STATIC (node))
        !           283:     fputs (" static", file);
        !           284:   if (TREE_LANG_FLAG_0 (node))
        !           285:     fputs (" tree_0", file);
        !           286:   if (TREE_LANG_FLAG_1 (node))
        !           287:     fputs (" tree_1", file);
        !           288:   if (TREE_LANG_FLAG_2 (node))
        !           289:     fputs (" tree_2", file);
        !           290:   if (TREE_LANG_FLAG_3 (node))
        !           291:     fputs (" tree_3", file);
        !           292:   if (TREE_LANG_FLAG_4 (node))
        !           293:     fputs (" tree_4", file);
        !           294:   if (TREE_LANG_FLAG_5 (node))
        !           295:     fputs (" tree_5", file);
        !           296:   if (TREE_LANG_FLAG_6 (node))
        !           297:     fputs (" tree_6", file);
        !           298: 
        !           299:   /* DECL_ nodes have additional attributes.  */
        !           300: 
        !           301:   switch (TREE_CODE_CLASS (TREE_CODE (node)))
        !           302:     {
        !           303:     case 'd':
        !           304:       mode = DECL_MODE (node);
        !           305: 
        !           306:       if (TREE_EXTERNAL (node))
        !           307:        fputs (" external", file);
        !           308:       if (TREE_NONLOCAL (node))
        !           309:        fputs (" nonlocal", file);
        !           310:       if (TREE_REGDECL (node))
        !           311:        fputs (" regdecl", file);
        !           312:       if (TREE_INLINE (node))
        !           313:        fputs (" inline", file);
        !           314:       if (DECL_BIT_FIELD (node))
        !           315:        fputs (" bit-field", file);
        !           316:       if (DECL_VIRTUAL_P (node))
        !           317:        fputs (" virtual", file);
        !           318:       if (DECL_FROM_INLINE (node))
        !           319:        fputs (" from_inline", file);
        !           320:       if (DECL_IGNORED_P (node))
        !           321:        fputs (" ignored", file);
        !           322:       if (DECL_LANG_FLAG_0 (node))
        !           323:        fputs (" decl_0", file);
        !           324:       if (DECL_LANG_FLAG_1 (node))
        !           325:        fputs (" decl_1", file);
        !           326:       if (DECL_LANG_FLAG_2 (node))
        !           327:        fputs (" decl_2", file);
        !           328:       if (DECL_LANG_FLAG_3 (node))
        !           329:        fputs (" decl_3", file);
        !           330:       if (DECL_LANG_FLAG_4 (node))
        !           331:        fputs (" decl_4", file);
        !           332:       if (DECL_LANG_FLAG_5 (node))
        !           333:        fputs (" decl_5", file);
        !           334:       if (DECL_LANG_FLAG_6 (node))
        !           335:        fputs (" decl_6", file);
        !           336:       if (DECL_LANG_FLAG_7 (node))
        !           337:        fputs (" decl_7", file);
        !           338: 
        !           339:       fprintf (file, " %s", mode_name[(int) mode]);
        !           340: 
        !           341:       fprintf (file, " file %s line %d",
        !           342:               DECL_SOURCE_FILE (node), DECL_SOURCE_LINE (node));
        !           343: 
        !           344:       print_node (file, "size", DECL_SIZE (node), indent + 4);
        !           345:       indent_to (file, indent + 3);
        !           346:       fprintf (file, " align %d", DECL_ALIGN (node));
        !           347:       fprintf (file, " frame_size %d", DECL_FRAME_SIZE (node));
        !           348:       if (TREE_CODE (node) == FIELD_DECL)
        !           349:        print_node (file, "bitpos", DECL_FIELD_BITPOS (node), indent + 4);
        !           350:       print_node_brief (file, "context", DECL_CONTEXT (node), indent + 4);
        !           351: 
        !           352:       print_node (file, "arguments", DECL_ARGUMENTS (node), indent + 4);
        !           353:       print_node (file, "result", DECL_RESULT (node), indent + 4);
        !           354:       print_node_brief (file, "initial", DECL_INITIAL (node), indent + 4);
        !           355: 
        !           356:       print_lang_decl (file, node, indent);
        !           357: 
        !           358:       if (DECL_RTL (node) != 0)
        !           359:        {
        !           360:          indent_to (file, indent + 4);
        !           361:          print_rtl (file, DECL_RTL (node));
        !           362:        }
        !           363: 
        !           364:       if (DECL_SAVED_INSNS (node) != 0)
        !           365:        {
        !           366:          indent_to (file, indent + 4);
        !           367:          if (TREE_CODE (node) == PARM_DECL)
        !           368:            {
        !           369:              fprintf (file, "incoming-rtl ");
        !           370:              print_rtl (file, DECL_INCOMING_RTL (node));
        !           371:            }
        !           372:          else if (TREE_CODE (node) == FUNCTION_DECL)
        !           373:            fprintf (file, "saved-insns 0x%x", DECL_SAVED_INSNS (node));
        !           374:        }
        !           375: 
        !           376:       /* Print the decl chain only if decl is at second level.  */
        !           377:       if (indent == 4)
        !           378:        print_node (file, "chain", TREE_CHAIN (node), indent + 4);
        !           379:       else
        !           380:        print_node_brief (file, "chain", TREE_CHAIN (node), indent + 4);
        !           381:       break;
        !           382: 
        !           383:     case 't':
        !           384:       if (TYPE_NO_FORCE_BLK (node))
        !           385:        fputs (" no_force_blk", file);
        !           386:       if (TYPE_LANG_FLAG_0 (node))
        !           387:        fputs (" type_0", file);
        !           388:       if (TYPE_LANG_FLAG_1 (node))
        !           389:        fputs (" type_1", file);
        !           390:       if (TYPE_LANG_FLAG_2 (node))
        !           391:        fputs (" type_2", file);
        !           392:       if (TYPE_LANG_FLAG_3 (node))
        !           393:        fputs (" type_3", file);
        !           394:       if (TYPE_LANG_FLAG_4 (node))
        !           395:        fputs (" type_4", file);
        !           396:       if (TYPE_LANG_FLAG_5 (node))
        !           397:        fputs (" type_5", file);
        !           398:       if (TYPE_LANG_FLAG_6 (node))
        !           399:        fputs (" type_6", file);
        !           400: 
        !           401:       mode = TYPE_MODE (node);
        !           402:       fprintf (file, " %s", mode_name[(int) mode]);
        !           403: 
        !           404:       print_node (file, "size", TYPE_SIZE (node), indent + 4);
        !           405:       indent_to (file, indent + 3);
        !           406: 
        !           407:       fprintf (file, " align %d", TYPE_ALIGN (node));
        !           408:       fprintf (file, " symtab %d", TYPE_SYMTAB_ADDRESS (node));
        !           409: 
        !           410:       if (TREE_CODE (node) == ARRAY_TYPE || TREE_CODE (node) == SET_TYPE)
        !           411:        print_node (file, "domain", TYPE_DOMAIN (node), indent + 4);
        !           412:       else if (TREE_CODE (node) == INTEGER_TYPE)
        !           413:        {
        !           414:          fprintf (file, " precision %d", TYPE_PRECISION (node));
        !           415:          print_node (file, "min", TYPE_MIN_VALUE (node), indent + 4);
        !           416:          print_node (file, "max", TYPE_MAX_VALUE (node), indent + 4);
        !           417:        }
        !           418:       else if (TREE_CODE (node) == ENUMERAL_TYPE)
        !           419:        {
        !           420:          fprintf (file, " precision %d", TYPE_PRECISION (node));
        !           421:          print_node (file, "min", TYPE_MIN_VALUE (node), indent + 4);
        !           422:          print_node (file, "max", TYPE_MAX_VALUE (node), indent + 4);
        !           423:          print_node (file, "values", TYPE_VALUES (node), indent + 4);
        !           424:        }
        !           425:       else if (TREE_CODE (node) == REAL_TYPE)
        !           426:        fprintf (file, " precision %d", TYPE_PRECISION (node));
        !           427:       else if (TREE_CODE (node) == RECORD_TYPE || TREE_CODE (node) == UNION_TYPE)
        !           428:        print_node (file, "fields", TYPE_FIELDS (node), indent + 4);
        !           429:       else if (TREE_CODE (node) == FUNCTION_TYPE || TREE_CODE (node) == METHOD_TYPE)
        !           430:        {
        !           431:          if (TYPE_METHOD_BASETYPE (node))
        !           432:            print_node_brief (file, "method basetype", TYPE_METHOD_BASETYPE (node), indent + 4);
        !           433:          print_node (file, "arg-types", TYPE_ARG_TYPES (node), indent + 4);
        !           434:        }
        !           435:       if (TYPE_CONTEXT (node))
        !           436:        print_node_brief (file, "context", TYPE_CONTEXT (node), indent + 4);
        !           437: 
        !           438:       print_lang_type (file, node, indent);
        !           439: 
        !           440:       if (TYPE_POINTER_TO (node) || TREE_CHAIN (node))
        !           441:        indent_to (file, indent + 3);
        !           442:       print_node_brief (file, "pointer_to_this", TYPE_POINTER_TO (node), indent + 4);
        !           443:       print_node_brief (file, "reference_to_this", TYPE_REFERENCE_TO (node), indent + 4);
        !           444:       print_node_brief (file, "chain", TREE_CHAIN (node), indent + 4);
        !           445:       break;
        !           446: 
        !           447:     case 'e':
        !           448:     case '<':
        !           449:     case '1':
        !           450:     case '2':
        !           451:     case 'r':
        !           452:     case 's':
        !           453:       switch (TREE_CODE (node))
        !           454:        {
        !           455:        case BLOCK:
        !           456:          print_node (file, "vars", BLOCK_VARS (node), indent + 4);
        !           457:          print_node (file, "tags", BLOCK_TYPE_TAGS (node), indent + 4);
        !           458:          print_node (file, "supercontext", BLOCK_SUPERCONTEXT (node), indent + 4);
        !           459:          print_node (file, "subblocks", BLOCK_SUBBLOCKS (node), indent + 4);
        !           460:          print_node (file, "chain", BLOCK_CHAIN (node), indent + 4);
        !           461:          return;
        !           462: 
        !           463:        case BIND_EXPR:
        !           464:          print_node (file, "vars", TREE_OPERAND (node, 0), indent + 4);
        !           465:          print_node (file, "body", TREE_OPERAND (node, 1), indent + 4);
        !           466:          return;
        !           467:        }
        !           468: 
        !           469:       first_rtl = len = tree_code_length[(int) TREE_CODE (node)];
        !           470:       /* These kinds of nodes contain rtx's, not trees,
        !           471:         after a certain point.  Print the rtx's as rtx's.  */
        !           472:       switch (TREE_CODE (node))
        !           473:        {
        !           474:        case SAVE_EXPR:
        !           475:          first_rtl = 2;
        !           476:          break;
        !           477:        case CALL_EXPR:
        !           478:          first_rtl = 2;
        !           479:          break;
        !           480:        case METHOD_CALL_EXPR:
        !           481:          first_rtl = 3;
        !           482:          break;
        !           483:        case WITH_CLEANUP_EXPR:
        !           484:          /* Should be defined to be 2.  */
        !           485:          first_rtl = 1;
        !           486:          break;
        !           487:        case RTL_EXPR:
        !           488:          first_rtl = 0;
        !           489:        }
        !           490:       for (i = 0; i < len; i++)
        !           491:        {
        !           492:          if (i >= first_rtl)
        !           493:            {
        !           494:              indent_to (file, indent + 4);
        !           495:              fprintf (file, "rtl %d ", i);
        !           496:              if (TREE_OPERAND (node, i))
        !           497:                print_rtl (file, TREE_OPERAND (node, i));
        !           498:              else
        !           499:                fprintf (file, "(nil)");
        !           500:              fprintf (file, "\n");
        !           501:            }
        !           502:          else
        !           503:            {
        !           504:              char temp[10];
        !           505: 
        !           506:              sprintf (temp, "arg %d", i);
        !           507:              print_node (file, temp, TREE_OPERAND (node, i), indent + 4);
        !           508:            }
        !           509:        }
        !           510:       break;
        !           511: 
        !           512:     case 'c':
        !           513:     case 'x':
        !           514:       switch (TREE_CODE (node))
        !           515:        {
        !           516:        case INTEGER_CST:
        !           517:          if (TREE_INT_CST_HIGH (node) == 0)
        !           518:            fprintf (file, " %1u", TREE_INT_CST_LOW (node));
        !           519:          else if (TREE_INT_CST_HIGH (node) == -1
        !           520:                   && TREE_INT_CST_LOW (node) != 0)
        !           521:            fprintf (file, " -%1u", -TREE_INT_CST_LOW (node));
        !           522:          else
        !           523:            fprintf (file, " 0x%x%08x",
        !           524:                     TREE_INT_CST_HIGH (node),
        !           525:                     TREE_INT_CST_LOW (node));
        !           526:          break;
        !           527: 
        !           528:        case REAL_CST:
        !           529: #ifndef REAL_IS_NOT_DOUBLE
        !           530:          fprintf (file, " %e", TREE_REAL_CST (node));
        !           531: #else
        !           532:          {
        !           533:            char *p = (char *) &TREE_REAL_CST (node);
        !           534:            fprintf (file, " 0x");
        !           535:            for (i = 0; i < sizeof TREE_REAL_CST (node); i++)
        !           536:              fprintf (file, "%02x", *p++);
        !           537:            fprintf (file, "");
        !           538:          }
        !           539: #endif /* REAL_IS_NOT_DOUBLE */
        !           540:          break;
        !           541: 
        !           542:        case COMPLEX_CST:
        !           543:          print_node (file, "real", TREE_REALPART (node), indent + 4);
        !           544:          print_node (file, "imag", TREE_IMAGPART (node), indent + 4);
        !           545:          break;
        !           546: 
        !           547:        case STRING_CST:
        !           548:          fprintf (file, " \"%s\"", TREE_STRING_POINTER (node));
        !           549:          break;
        !           550: 
        !           551:        case IDENTIFIER_NODE:
        !           552:          print_lang_identifier (file, node, indent);
        !           553:          break;
        !           554: 
        !           555:        case TREE_LIST:
        !           556:          print_node (file, "purpose", TREE_PURPOSE (node), indent + 4);
        !           557:          print_node (file, "value", TREE_VALUE (node), indent + 4);
        !           558:          print_node (file, "chain", TREE_CHAIN (node), indent + 4);
        !           559:          break;
        !           560: 
        !           561:        case TREE_VEC:
        !           562:          len = TREE_VEC_LENGTH (node);
        !           563:          for (i = 0; i < len; i++)
        !           564:            {
        !           565:              char temp[10];
        !           566:              sprintf (temp, "elt %d", i);
        !           567:              indent_to (file, indent + 4);
        !           568:              print_node_brief (file, temp, TREE_VEC_ELT (node, i), 0);
        !           569:            }
        !           570:          break;
        !           571: 
        !           572:        case OP_IDENTIFIER:
        !           573:          print_node (file, "op1", TREE_PURPOSE (node), indent + 4);
        !           574:          print_node (file, "op2", TREE_VALUE (node), indent + 4);
        !           575:        }
        !           576: 
        !           577:       break;
        !           578:     }
        !           579: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.