#ifdef OBJCPLUS
#include "cp-dmp-tree.c"
#else
#include "c-dmp-tree.c"
#endif
#include "objc-act.h"
int objc_dump_tree_p (FILE *, const char *, tree, int);
lang_dump_tree_p_t objc_prev_lang_dump_tree_p = NULL;
#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) \
static void print_ ## SYM (FILE *file, const char *annotation, tree node, int indent);
#include "objc-tree.def"
#undef DEFTREECODE
static void
print_CLASS_INTERFACE_TYPE (file, annotation, node, indent)
FILE *file ATTRIBUTE_UNUSED;
const char *annotation ATTRIBUTE_UNUSED;
tree node ATTRIBUTE_UNUSED;
int indent ATTRIBUTE_UNUSED;
{
tree n;
if (CLASS_SUPER_NAME (node))
fprintf (file, " super-name=%s",
IDENTIFIER_POINTER (CLASS_SUPER_NAME (node)));
fprintf (file, " ivars=");
fprintf (file, HOST_PTR_PRINTF,
HOST_PTR_PRINTF_VALUE (CLASS_IVARS (node)));
fprintf (file, " raw_ivars=");
fprintf (file, HOST_PTR_PRINTF,
HOST_PTR_PRINTF_VALUE (CLASS_RAW_IVARS (node)));
fprintf (file, " own_ivars=");
fprintf (file, HOST_PTR_PRINTF,
HOST_PTR_PRINTF_VALUE (CLASS_OWN_IVARS (node)));
print_type (file, annotation, node, indent);
(void)node_seen (node, TRUE);
for (n = CLASS_PROTOCOL_LIST (node); n; n = TREE_CHAIN (n))
print_type (file, NULL, TREE_VALUE (n), indent + INDENT);
for (n = CLASS_CATEGORY_LIST (node); n; n = TREE_CHAIN (n))
print_type (file, NULL, TREE_VALUE (n), indent + INDENT);
dump_tree (file, annotation, CLASS_STATIC_TEMPLATE (node),
indent + INDENT);
for (n = CLASS_CLS_METHODS (node); n; n = TREE_CHAIN (n))
dump_tree (file, NULL, n, indent + INDENT);
for (n = CLASS_NST_METHODS (node); n; n = TREE_CHAIN (n))
dump_tree (file, NULL, n, indent + INDENT);
}
static void
print_CLASS_IMPLEMENTATION_TYPE (file, annotation, node, indent)
FILE *file ATTRIBUTE_UNUSED;
const char *annotation ATTRIBUTE_UNUSED;
tree node ATTRIBUTE_UNUSED;
int indent ATTRIBUTE_UNUSED;
{
print_CLASS_INTERFACE_TYPE (file, annotation, node, indent);
}
static void
print_CATEGORY_INTERFACE_TYPE (file, annotation, node, indent)
FILE *file ATTRIBUTE_UNUSED;
const char *annotation ATTRIBUTE_UNUSED;
tree node ATTRIBUTE_UNUSED;
int indent ATTRIBUTE_UNUSED;
{
tree n;
fprintf (file, " cat-name=%s",
IDENTIFIER_POINTER (CLASS_SUPER_NAME (node)));
print_type (file, annotation, node, indent);
(void)node_seen (node, TRUE);
for (n = CLASS_PROTOCOL_LIST (node); n; n = TREE_CHAIN (n))
dump_tree (file, NULL, TREE_VALUE (n), indent + INDENT);
for (n = CLASS_CLS_METHODS (node); n; n = TREE_CHAIN (n))
dump_tree (file, NULL, n, indent + INDENT);
for (n = CLASS_NST_METHODS (node); n; n = TREE_CHAIN (n))
dump_tree (file, NULL, n, indent + INDENT);
}
static void
print_CATEGORY_IMPLEMENTATION_TYPE (file, annotation, node, indent)
FILE *file ATTRIBUTE_UNUSED;
const char *annotation ATTRIBUTE_UNUSED;
tree node ATTRIBUTE_UNUSED;
int indent ATTRIBUTE_UNUSED;
{
print_CATEGORY_INTERFACE_TYPE (file, annotation, node, indent);
}
static void
print_PROTOCOL_INTERFACE_TYPE (file, annotation, node, indent)
FILE *file ATTRIBUTE_UNUSED;
const char *annotation ATTRIBUTE_UNUSED;
tree node ATTRIBUTE_UNUSED;
int indent ATTRIBUTE_UNUSED;
{
tree n;
fprintf (file, " fwd-decl=");
fprintf (file, HOST_PTR_PRINTF,
HOST_PTR_PRINTF_VALUE (PROTOCOL_FORWARD_DECL (node)));
fprintf (file, " defined=%d", PROTOCOL_DEFINED (node));
print_type (file, annotation, node, indent);
(void)node_seen (node, TRUE);
for (n = PROTOCOL_LIST (node); n; n = TREE_CHAIN (n))
dump_tree (file, NULL, TREE_VALUE (n), indent + INDENT);
for (n = PROTOCOL_CLS_METHODS (node); n; n = TREE_CHAIN (n))
dump_tree (file, NULL, n, indent + INDENT);
for (n = PROTOCOL_NST_METHODS (node); n; n = TREE_CHAIN (n))
dump_tree (file, NULL, n, indent + INDENT);
}
static void
print_KEYWORD_DECL (file, annotation, node, indent)
FILE *file ATTRIBUTE_UNUSED;
const char *annotation ATTRIBUTE_UNUSED;
tree node ATTRIBUTE_UNUSED;
int indent ATTRIBUTE_UNUSED;
{
fprintf (file, " key=%s",
IDENTIFIER_POINTER (KEYWORD_KEY_NAME (node)));
fprintf (file, " arg=%s",
IDENTIFIER_POINTER (KEYWORD_ARG_NAME (node)));
print_type (file, annotation, node, indent);
(void)node_seen (node, TRUE);
}
static void
print_INSTANCE_METHOD_DECL (file, annotation, node, indent)
FILE *file ATTRIBUTE_UNUSED;
const char *annotation ATTRIBUTE_UNUSED;
tree node ATTRIBUTE_UNUSED;
int indent ATTRIBUTE_UNUSED;
{
fprintf (file, " args=");
fprintf (file, HOST_PTR_PRINTF,
HOST_PTR_PRINTF_VALUE (METHOD_SEL_ARGS (node)));
fprintf (file, " addl=");
fprintf (file, HOST_PTR_PRINTF,
HOST_PTR_PRINTF_VALUE (METHOD_ADD_ARGS (node)));
if (METHOD_ENCODING (node))
fprintf (file, " encode=%s",
IDENTIFIER_POINTER (METHOD_ENCODING (node)));
print_decl (file, annotation, node, indent);
if (METHOD_DEFINITION (node))
dump_tree (file, annotation, METHOD_DEFINITION (node),
indent + INDENT);
(void)node_seen (node, TRUE);
}
static void
print_CLASS_METHOD_DECL (file, annotation, node, indent)
FILE *file ATTRIBUTE_UNUSED;
const char *annotation ATTRIBUTE_UNUSED;
tree node ATTRIBUTE_UNUSED;
int indent ATTRIBUTE_UNUSED;
{
print_INSTANCE_METHOD_DECL (file, annotation, node, indent);
}
static void
print_CLASS_REFERENCE_EXPR (file, annotation, node, indent)
FILE *file ATTRIBUTE_UNUSED;
const char *annotation ATTRIBUTE_UNUSED;
tree node ATTRIBUTE_UNUSED;
int indent ATTRIBUTE_UNUSED;
{
fprintf (file, " ident=");
fprintf (file, HOST_PTR_PRINTF,
HOST_PTR_PRINTF_VALUE (TREE_OPERAND (node, 0)));
(void)node_seen (node, TRUE);
}
static void
print_MESSAGE_SEND_EXPR (file, annotation, node, indent)
FILE *file ATTRIBUTE_UNUSED;
const char *annotation ATTRIBUTE_UNUSED;
tree node ATTRIBUTE_UNUSED;
int indent ATTRIBUTE_UNUSED;
{
fprintf (file, " receiver=");
fprintf (file, HOST_PTR_PRINTF,
HOST_PTR_PRINTF_VALUE (TREE_OPERAND (node, 0)));
fprintf (file, " sel_name=%s",
IDENTIFIER_POINTER (TREE_OPERAND (node, 1)));
fprintf (file, " args=");
fprintf (file, HOST_PTR_PRINTF,
HOST_PTR_PRINTF_VALUE (TREE_OPERAND (node, 2)));
(void)node_seen (node, TRUE);
}
int
objc_dump_tree_p (file, annotation, node, indent)
FILE *file;
const char *annotation ATTRIBUTE_UNUSED;
tree node;
int indent;
{
switch (TREE_CODE (node))
{
#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) \
case SYM: print_ ## SYM (file, annotation, node, indent); break;
#include "objc-tree.def"
#undef DEFTREECODE
default:
return objc_prev_lang_dump_tree_p (file, annotation, node, indent);
}
return 1;
}
#if 0
cd $gcc3/gcc; \
cc -no-cpp-precomp -c -DIN_GCC -g \
-W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wtraditional -pedantic -Wno-long-long \
-DHAVE_CONFIG_H \
-I$gcc3obj \
-I. \
-Iobjc \
-Iconfig \
-I../include \
objc/objc-dmp-tree.c -o ~/tmp.o -w
#endif