#include "toplev.h"
#include "tree-dump.h"
#include "langhooks.h"
+#include "tree-iterator.h"
static unsigned int queue (dump_info_p, tree, int);
static void dump_index (dump_info_p, unsigned int);
if (dni->binfo_p)
{
unsigned ix;
- tree bases = BINFO_BASETYPES (t);
- unsigned n_bases = bases ? TREE_VEC_LENGTH (bases): 0;
- tree accesses = BINFO_BASEACCESSES (t);
+ tree base;
+ VEC (tree) *accesses = BINFO_BASE_ACCESSES (t);
dump_child ("type", BINFO_TYPE (t));
- if (TREE_VIA_VIRTUAL (t))
+ if (BINFO_VIRTUAL_P (t))
dump_string (di, "virt");
- dump_int (di, "bases", n_bases);
- for (ix = 0; ix != n_bases; ix++)
+ dump_int (di, "bases", BINFO_N_BASE_BINFOS (t));
+ for (ix = 0; BINFO_BASE_ITERATE (t, ix, base); ix++)
{
- tree base = TREE_VEC_ELT (bases, ix);
- tree access = (accesses ? TREE_VEC_ELT (accesses, ix)
+ tree access = (accesses ? VEC_index (tree, accesses, ix)
: access_public_node);
const char *string = NULL;
}
else if (DECL_P (t))
{
+ expanded_location xloc;
/* All declarations have names. */
if (DECL_NAME (t))
dump_child ("name", DECL_NAME (t));
queue_and_dump_type (di, t);
dump_child ("scpe", DECL_CONTEXT (t));
/* And a source position. */
- if (DECL_SOURCE_FILE (t))
+ xloc = expand_location (DECL_SOURCE_LOCATION (t));
+ if (xloc.file)
{
- const char *filename = strrchr (DECL_SOURCE_FILE (t), '/');
+ const char *filename = strrchr (xloc.file, '/');
if (!filename)
- filename = DECL_SOURCE_FILE (t);
+ filename = xloc.file;
else
/* Skip the slash. */
++filename;
dump_maybe_newline (di);
fprintf (di->stream, "srcp: %s:%-6d ", filename,
- DECL_SOURCE_LINE (t));
+ xloc.line);
di->column += 6 + strlen (filename) + 8;
}
/* And any declaration can be compiler-generated. */
dump_child ("chan", TREE_CHAIN (t));
break;
+ case STATEMENT_LIST:
+ {
+ tree_stmt_iterator it;
+ for (i = 0, it = tsi_start (t); !tsi_end_p (it); tsi_next (&it), i++)
+ {
+ char buffer[32];
+ sprintf (buffer, "%u", i);
+ dump_child (buffer, tsi_stmt (it));
+ }
+ }
+ break;
+
case TREE_VEC:
dump_int (di, "lngt", TREE_VEC_LENGTH (t));
for (i = 0; i < TREE_VEC_LENGTH (t); ++i)
case INDIRECT_REF:
case CLEANUP_POINT_EXPR:
case SAVE_EXPR:
+ case REALPART_EXPR:
+ case IMAGPART_EXPR:
/* These nodes are unary, but do not have code class `1'. */
dump_child ("op 0", TREE_OPERAND (t, 0));
break;
case TRUTH_ORIF_EXPR:
case INIT_EXPR:
case MODIFY_EXPR:
- case COMPONENT_REF:
case COMPOUND_EXPR:
- case ARRAY_REF:
case PREDECREMENT_EXPR:
case PREINCREMENT_EXPR:
case POSTDECREMENT_EXPR:
dump_child ("op 1", TREE_OPERAND (t, 1));
break;
+ case COMPONENT_REF:
+ dump_child ("op 0", TREE_OPERAND (t, 0));
+ dump_child ("op 1", TREE_OPERAND (t, 1));
+ dump_child ("op 2", TREE_OPERAND (t, 2));
+ break;
+
+ case ARRAY_REF:
+ case ARRAY_RANGE_REF:
+ dump_child ("op 0", TREE_OPERAND (t, 0));
+ dump_child ("op 1", TREE_OPERAND (t, 1));
+ dump_child ("op 2", TREE_OPERAND (t, 2));
+ dump_child ("op 3", TREE_OPERAND (t, 3));
+ break;
+
case COND_EXPR:
dump_child ("op 0", TREE_OPERAND (t, 0));
dump_child ("op 1", TREE_OPERAND (t, 1));