Commit 0a6969ad by John F. Carr Committed by Jeff Law

tree.c, tree.h: Change tree_code_type, tree_code_length, and tree_code_name from…

tree.c, tree.h: Change tree_code_type, tree_code_length, and tree_code_name from pointers to arrays.

        * tree.c, tree.h: Change tree_code_type, tree_code_length, and
        tree_code_name from pointers to arrays.
        * tree.c: Remove standard_tree_code_* variables, no longer used.
        * print-tree.c: Remove declaration of tree_code_name.

        * cp/lex.c (init_lex): Update for tree_code_* changes.
        * objc/objc-act.c (init_objc): Likewise.

        * tree.def, cp/cp-tree.def, objc/objc-tree.def: Update for tree_code
        changes.

From-SVN: r17061
parent c55dcc7d
Thu Dec 11 23:50:17 1997 John F. Carr <jfc@mit.edu>
* tree.c, tree.h: Change tree_code_type, tree_code_length, and
tree_code_name from pointers to arrays.
* tree.c: Remove standard_tree_code_* variables, no longer used.
* print-tree.c: Remove declaration of tree_code_name.
* cp/lex.c (init_lex): Update for tree_code_* changes.
* objc/objc-act.c (init_objc): Likewise.
* tree.def, cp/cp-tree.def, objc/objc-tree.def: Update for tree_code
changes.
Thu Dec 11 23:34:54 1997 Fred Fish <fnf@ninemoons.com>
* config.sub: Add support for BeOS target.
......
......@@ -27,43 +27,43 @@ Boston, MA 02111-1307, USA. */
Operand 0 is the object within which the offset is taken.
Operand 1 is the offset. The language independent OFFSET_REF
just won't work for us. */
DEFTREECODE (OFFSET_REF, "offset_ref", "r", 2)
DEFTREECODE (OFFSET_REF, "offset_ref", 'r', 2)
/* For DELETE_EXPR, operand 0 is the store to be destroyed.
Operand 1 is the value to pass to the destroying function
saying whether the store should be deallocated as well. */
DEFTREECODE (DELETE_EXPR, "dl_expr", "e", 2)
DEFTREECODE (VEC_DELETE_EXPR, "vec_dl_expr", "e", 2)
DEFTREECODE (DELETE_EXPR, "dl_expr", 'e', 2)
DEFTREECODE (VEC_DELETE_EXPR, "vec_dl_expr", 'e', 2)
/* Value is reference to particular overloaded class method.
Operand 0 is the class name (an IDENTIFIER_NODE);
operand 1 is the field (also an IDENTIFIER_NODE).
The COMPLEXITY field holds the class level (usually 0). */
DEFTREECODE (SCOPE_REF, "scope_ref", "r", 2)
DEFTREECODE (SCOPE_REF, "scope_ref", 'r', 2)
/* When composing an object with a member, this is the result.
Operand 0 is the object. Operand 1 is the member (usually
a dereferenced pointer to member). */
DEFTREECODE (MEMBER_REF, "member_ref", "r", 2)
DEFTREECODE (MEMBER_REF, "member_ref", 'r', 2)
/* Type conversion operator in C++. TREE_TYPE is type that this
operator converts to. Operand is expression to be converted. */
DEFTREECODE (TYPE_EXPR, "type_expr", "e", 1)
DEFTREECODE (TYPE_EXPR, "type_expr", 'e', 1)
/* For NEW_EXPR, operand 0 is function which performs initialization,
operand 1 is argument list to initialization function,
and operand 2 is the slot which was allocated for this expression. */
DEFTREECODE (NEW_EXPR, "nw_expr", "e", 3)
DEFTREECODE (VEC_NEW_EXPR, "vec_nw_expr", "e", 3)
DEFTREECODE (NEW_EXPR, "nw_expr", 'e', 3)
DEFTREECODE (VEC_NEW_EXPR, "vec_nw_expr", 'e', 3)
/* A throw expression. operand 0 is the expression, if there was one,
else it is NULL_TREE. */
DEFTREECODE (THROW_EXPR, "throw_expr", "e", 1)
DEFTREECODE (THROW_EXPR, "throw_expr", 'e', 1)
/* Initialization of a vector, used in build_new. Operand 0 is the target
of the initialization, operand 1 is the initializer, and operand 2 is
the number of elements. */
DEFTREECODE (VEC_INIT_EXPR, "vec_init_expr", "e", 3)
DEFTREECODE (VEC_INIT_EXPR, "vec_init_expr", 'e', 3)
/* Template definition. The following fields have the specified uses,
although there are other macros in cp-tree.h that should be used for
......@@ -80,18 +80,18 @@ DEFTREECODE (VEC_INIT_EXPR, "vec_init_expr", "e", 3)
DECL_RESULT decl for object to be created
(e.g., FUNCTION_DECL with tmpl parms used)
*/
DEFTREECODE (TEMPLATE_DECL, "template_decl", "d", 0)
DEFTREECODE (TEMPLATE_DECL, "template_decl", 'd', 0)
/* Index into a template parameter list. This parameter must be a type.
Use TYPE_FIELDS to find parmlist and index. */
DEFTREECODE (TEMPLATE_TYPE_PARM, "template_type_parm", "t", 0)
DEFTREECODE (TEMPLATE_TYPE_PARM, "template_type_parm", 't', 0)
/* A type designated by 'typename T::t'. */
DEFTREECODE (TYPENAME_TYPE, "typename_type", "t", 0)
DEFTREECODE (TYPENAME_TYPE, "typename_type", 't', 0)
/* Index into a template parameter list. This parameter must not be a
type. */
DEFTREECODE (TEMPLATE_CONST_PARM, "template_const_parm", "c", 3)
DEFTREECODE (TEMPLATE_CONST_PARM, "template_const_parm", 'c', 3)
/* A thunk is a stub function.
......@@ -101,17 +101,17 @@ DEFTREECODE (TEMPLATE_CONST_PARM, "template_const_parm", "c", 3)
(which is an ADDR_EXPR whose operand is a FUNCTION_DECL).
Other kinds of thunks may be defined later. */
DEFTREECODE (THUNK_DECL, "thunk_decl", "d", 0)
DEFTREECODE (THUNK_DECL, "thunk_decl", 'd', 0)
/* A namespace declaration. */
DEFTREECODE (NAMESPACE_DECL, "namespace_decl", "d", 0)
DEFTREECODE (NAMESPACE_DECL, "namespace_decl", 'd', 0)
/* A using declaration. DECL_INITIAL contains the specified scope.
This is not an alias, but is later expanded into multiple aliases. */
DEFTREECODE (USING_DECL, "using_decl", "d", 0)
DEFTREECODE (USING_DECL, "using_decl", 'd', 0)
/* An un-parsed default argument. Looks like an IDENTIFIER_NODE. */
DEFTREECODE (DEFAULT_ARG, "default_arg", "c", 2)
DEFTREECODE (DEFAULT_ARG, "default_arg", 'c', 2)
/* A template-id, like foo<int>. The first operand is the template.
The second is the list of explicitly specified arguments. The
......@@ -119,51 +119,51 @@ DEFTREECODE (DEFAULT_ARG, "default_arg", "c", 2)
overloaded functions and templates if the template-id refers to
a global template. If the template-id refers to a member template,
the template will will be an IDENTIFIER_NODE. */
DEFTREECODE (TEMPLATE_ID_EXPR, "template_id_expr", "e", 2)
DEFTREECODE (TEMPLATE_ID_EXPR, "template_id_expr", 'e', 2)
/* A whole bunch of tree codes for the initial, superficial parsing of
templates. */
DEFTREECODE (LOOKUP_EXPR, "lookup_expr", "e", 2)
DEFTREECODE (MODOP_EXPR, "modop_expr", "e", 3)
DEFTREECODE (CAST_EXPR, "cast_expr", "1", 1)
DEFTREECODE (REINTERPRET_CAST_EXPR, "reinterpret_cast_expr", "1", 1)
DEFTREECODE (CONST_CAST_EXPR, "const_cast_expr", "1", 1)
DEFTREECODE (STATIC_CAST_EXPR, "static_cast_expr", "1", 1)
DEFTREECODE (DYNAMIC_CAST_EXPR, "dynamic_cast_expr", "1", 1)
DEFTREECODE (SIZEOF_EXPR, "sizeof_expr", "1", 1)
DEFTREECODE (ARROW_EXPR, "arrow_expr", "e", 1)
DEFTREECODE (DOTSTAR_EXPR, "dotstar_expr", "e", 2)
DEFTREECODE (TYPEID_EXPR, "typeid_expr", "e", 1)
DEFTREECODE (EXPR_STMT, "expr_stmt", "e", 1)
DEFTREECODE (COMPOUND_STMT, "compound_stmt", "e", 1)
DEFTREECODE (DECL_STMT, "decl_stmt", "e", 3)
DEFTREECODE (IF_STMT, "if_stmt", "e", 3)
DEFTREECODE (FOR_STMT, "for_stmt", "e", 4)
DEFTREECODE (WHILE_STMT, "while_stmt", "e", 2)
DEFTREECODE (DO_STMT, "do_stmt", "e", 2)
DEFTREECODE (RETURN_STMT, "return_stmt", "e", 1)
DEFTREECODE (BREAK_STMT, "break_stmt", "e", 0)
DEFTREECODE (CONTINUE_STMT, "continue_stmt", "e", 0)
DEFTREECODE (SWITCH_STMT, "switch_stmt", "e", 2)
DEFTREECODE (GOTO_STMT, "goto_stmt", "e", 1)
DEFTREECODE (CTOR_INITIALIZER, "ctor_initializer", "e", 2)
DEFTREECODE (CASE_LABEL, "case_label", "e", 2)
DEFTREECODE (RETURN_INIT, "return_init", "e", 2)
DEFTREECODE (TRY_BLOCK, "try_stmt", "e", 2)
DEFTREECODE (HANDLER, "catch_stmt", "e", 2)
DEFTREECODE (IDENTITY_CONV, "identity_conv", "e", 1)
DEFTREECODE (LVALUE_CONV, "lvalue_conv", "e", 1)
DEFTREECODE (QUAL_CONV, "qual_conv", "e", 1)
DEFTREECODE (STD_CONV, "std_conv", "e", 1)
DEFTREECODE (PTR_CONV, "ptr_conv", "e", 1)
DEFTREECODE (PMEM_CONV, "pmem_conv", "e", 1)
DEFTREECODE (BASE_CONV, "base_conv", "e", 1)
DEFTREECODE (REF_BIND, "ref_bind", "e", 1)
DEFTREECODE (USER_CONV, "user_conv", "e", 4)
DEFTREECODE (AMBIG_CONV, "ambig_conv", "e", 1)
DEFTREECODE (RVALUE_CONV, "rvalue_conv", "e", 1)
DEFTREECODE (TAG_DEFN, "tag_defn", "e", 0)
DEFTREECODE (LOOKUP_EXPR, "lookup_expr", 'e', 2)
DEFTREECODE (MODOP_EXPR, "modop_expr", 'e', 3)
DEFTREECODE (CAST_EXPR, "cast_expr", '1', 1)
DEFTREECODE (REINTERPRET_CAST_EXPR, "reinterpret_cast_expr", '1', 1)
DEFTREECODE (CONST_CAST_EXPR, "const_cast_expr", '1', 1)
DEFTREECODE (STATIC_CAST_EXPR, "static_cast_expr", '1', 1)
DEFTREECODE (DYNAMIC_CAST_EXPR, "dynamic_cast_expr", '1', 1)
DEFTREECODE (SIZEOF_EXPR, "sizeof_expr", '1', 1)
DEFTREECODE (ARROW_EXPR, "arrow_expr", 'e', 1)
DEFTREECODE (DOTSTAR_EXPR, "dotstar_expr", 'e', 2)
DEFTREECODE (TYPEID_EXPR, "typeid_expr", 'e', 1)
DEFTREECODE (EXPR_STMT, "expr_stmt", 'e', 1)
DEFTREECODE (COMPOUND_STMT, "compound_stmt", 'e', 1)
DEFTREECODE (DECL_STMT, "decl_stmt", 'e', 3)
DEFTREECODE (IF_STMT, "if_stmt", 'e', 3)
DEFTREECODE (FOR_STMT, "for_stmt", 'e', 4)
DEFTREECODE (WHILE_STMT, "while_stmt", 'e', 2)
DEFTREECODE (DO_STMT, "do_stmt", 'e', 2)
DEFTREECODE (RETURN_STMT, "return_stmt", 'e', 1)
DEFTREECODE (BREAK_STMT, "break_stmt", 'e', 0)
DEFTREECODE (CONTINUE_STMT, "continue_stmt", 'e', 0)
DEFTREECODE (SWITCH_STMT, "switch_stmt", 'e', 2)
DEFTREECODE (GOTO_STMT, "goto_stmt", 'e', 1)
DEFTREECODE (CTOR_INITIALIZER, "ctor_initializer", 'e', 2)
DEFTREECODE (CASE_LABEL, "case_label", 'e', 2)
DEFTREECODE (RETURN_INIT, "return_init", 'e', 2)
DEFTREECODE (TRY_BLOCK, "try_stmt", 'e', 2)
DEFTREECODE (HANDLER, "catch_stmt", 'e', 2)
DEFTREECODE (IDENTITY_CONV, "identity_conv", 'e', 1)
DEFTREECODE (LVALUE_CONV, "lvalue_conv", 'e', 1)
DEFTREECODE (QUAL_CONV, "qual_conv", 'e', 1)
DEFTREECODE (STD_CONV, "std_conv", 'e', 1)
DEFTREECODE (PTR_CONV, "ptr_conv", 'e', 1)
DEFTREECODE (PMEM_CONV, "pmem_conv", 'e', 1)
DEFTREECODE (BASE_CONV, "base_conv", 'e', 1)
DEFTREECODE (REF_BIND, "ref_bind", 'e', 1)
DEFTREECODE (USER_CONV, "user_conv", 'e', 4)
DEFTREECODE (AMBIG_CONV, "ambig_conv", 'e', 1)
DEFTREECODE (RVALUE_CONV, "rvalue_conv", 'e', 1)
DEFTREECODE (TAG_DEFN, "tag_defn", 'e', 0)
......@@ -361,8 +361,8 @@ my_get_run_time ()
#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
char *cplus_tree_code_type[] = {
"x",
char cplus_tree_code_type[] = {
'x',
#include "cp-tree.def"
};
#undef DEFTREECODE
......@@ -461,18 +461,9 @@ init_lex ()
init_cplus_expand ();
tree_code_type
= (char **) realloc (tree_code_type,
sizeof (char *) * LAST_CPLUS_TREE_CODE);
tree_code_length
= (int *) realloc (tree_code_length,
sizeof (int) * LAST_CPLUS_TREE_CODE);
tree_code_name
= (char **) realloc (tree_code_name,
sizeof (char *) * LAST_CPLUS_TREE_CODE);
bcopy ((char *)cplus_tree_code_type,
(char *)(tree_code_type + (int) LAST_AND_UNUSED_TREE_CODE),
(LAST_CPLUS_TREE_CODE - (int)LAST_AND_UNUSED_TREE_CODE) * sizeof (char *));
bcopy (cplus_tree_code_type,
tree_code_type + (int) LAST_AND_UNUSED_TREE_CODE,
(int)LAST_CPLUS_TREE_CODE - (int)LAST_AND_UNUSED_TREE_CODE);
bcopy ((char *)cplus_tree_code_length,
(char *)(tree_code_length + (int) LAST_AND_UNUSED_TREE_CODE),
(LAST_CPLUS_TREE_CODE - (int)LAST_AND_UNUSED_TREE_CODE) * sizeof (int));
......
......@@ -86,8 +86,8 @@ Boston, MA 02111-1307, USA. */
#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
char *objc_tree_code_type[] = {
"x",
char objc_tree_code_type[] = {
'x',
#include "objc-tree.def"
};
#undef DEFTREECODE
......@@ -8022,19 +8022,9 @@ init_objc ()
gcc_obstack_init (&util_obstack);
util_firstobj = (char *) obstack_finish (&util_obstack);
tree_code_type
= (char **) xrealloc (tree_code_type,
sizeof (char *) * LAST_OBJC_TREE_CODE);
tree_code_length
= (int *) xrealloc (tree_code_length,
sizeof (int) * LAST_OBJC_TREE_CODE);
tree_code_name
= (char **) xrealloc (tree_code_name,
sizeof (char *) * LAST_OBJC_TREE_CODE);
bcopy ((char *) objc_tree_code_type,
(char *) (tree_code_type + (int) LAST_CODE),
(((int) LAST_OBJC_TREE_CODE - (int) LAST_CODE)
* sizeof (char *)));
bcopy (objc_tree_code_type,
tree_code_type + (int) LAST_CODE,
(int) LAST_OBJC_TREE_CODE - (int) LAST_CODE);
bcopy ((char *) objc_tree_code_length,
(char *) (tree_code_length + (int) LAST_CODE),
(((int) LAST_OBJC_TREE_CODE - (int) LAST_CODE)
......
......@@ -22,16 +22,16 @@ Boston, MA 02111-1307, USA. */
/* Objective-C types. */
DEFTREECODE (CLASS_INTERFACE_TYPE, "class_interface_type", "t", 0)
DEFTREECODE (CLASS_IMPLEMENTATION_TYPE, "class_implementation_type", "t", 0)
DEFTREECODE (CATEGORY_INTERFACE_TYPE, "category_interface_type", "t", 0)
DEFTREECODE (CATEGORY_IMPLEMENTATION_TYPE,"category_implementation_type","t",0)
DEFTREECODE (PROTOCOL_INTERFACE_TYPE, "protocol_interface_type", "t", 0)
DEFTREECODE (CLASS_INTERFACE_TYPE, "class_interface_type", 't', 0)
DEFTREECODE (CLASS_IMPLEMENTATION_TYPE, "class_implementation_type", 't', 0)
DEFTREECODE (CATEGORY_INTERFACE_TYPE, "category_interface_type", 't', 0)
DEFTREECODE (CATEGORY_IMPLEMENTATION_TYPE,"category_implementation_type",'t',0)
DEFTREECODE (PROTOCOL_INTERFACE_TYPE, "protocol_interface_type", 't', 0)
/* Objective-C decls. */
DEFTREECODE (KEYWORD_DECL, "keyword_decl", "d", 0)
DEFTREECODE (INSTANCE_METHOD_DECL, "instance_method_decl", "d", 0)
DEFTREECODE (CLASS_METHOD_DECL, "class_method_decl", "d", 0)
DEFTREECODE (KEYWORD_DECL, "keyword_decl", 'd', 0)
DEFTREECODE (INSTANCE_METHOD_DECL, "instance_method_decl", 'd', 0)
DEFTREECODE (CLASS_METHOD_DECL, "class_method_decl", 'd', 0)
/* Objective-C constants. */
DEFTREECODE (OBJC_STRING_CST, "objc_string_cst", "c", 3)
DEFTREECODE (OBJC_STRING_CST, "objc_string_cst", 'c', 3)
/* Prints out tree in human readable form - GNU C-compiler
Copyright (C) 1990, 91, 93, 94, 95, 1996 Free Software Foundation, Inc.
Copyright (C) 1990, 91, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
......@@ -23,8 +23,6 @@ Boston, MA 02111-1307, USA. */
#include "tree.h"
#include <stdio.h>
extern char **tree_code_name;
extern char *mode_name[];
void print_node ();
......@@ -541,9 +539,8 @@ print_node (file, prefix, node, indent)
case '2':
case 'r':
case 's':
switch (TREE_CODE (node))
if (TREE_CODE (node) == BIND_EXPR)
{
case BIND_EXPR:
print_node (file, "vars", TREE_OPERAND (node, 0), indent + 4);
print_node (file, "body", TREE_OPERAND (node, 1), indent + 4);
print_node (file, "block", TREE_OPERAND (node, 2), indent + 4);
......@@ -570,6 +567,8 @@ print_node (file, prefix, node, indent)
break;
case RTL_EXPR:
first_rtl = 0;
default:
break;
}
for (i = 0; i < len; i++)
{
......@@ -689,6 +688,10 @@ print_node (file, prefix, node, indent)
case OP_IDENTIFIER:
print_node (file, "op1", TREE_PURPOSE (node), indent + 4);
print_node (file, "op2", TREE_VALUE (node), indent + 4);
break;
default:
break;
}
break;
......
......@@ -189,7 +189,7 @@ struct momentary_level *momentary_stack;
#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
char *standard_tree_code_type[] = {
char tree_code_type[MAX_TREE_CODES] = {
#include "tree.def"
};
#undef DEFTREECODE
......@@ -200,7 +200,7 @@ char *standard_tree_code_type[] = {
#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
int standard_tree_code_length[] = {
int tree_code_length[MAX_TREE_CODES] = {
#include "tree.def"
};
#undef DEFTREECODE
......@@ -209,27 +209,11 @@ int standard_tree_code_length[] = {
Used for printing out the tree and error messages. */
#define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
char *standard_tree_code_name[] = {
char *tree_code_name[MAX_TREE_CODES] = {
#include "tree.def"
};
#undef DEFTREECODE
/* Table indexed by tree code giving a string containing a character
classifying the tree code. Possibilities are
t, d, s, c, r, e, <, 1 and 2. See tree.def for details. */
char **tree_code_type;
/* Table indexed by tree code giving number of expression
operands beyond the fixed part of the node structure.
Not used for types or decls. */
int *tree_code_length;
/* Table indexed by tree code giving name of tree code, as a string. */
char **tree_code_name;
/* Statistics-gathering stuff. */
typedef enum
{
......@@ -942,15 +926,7 @@ resume_momentary (yes)
void
init_tree_codes ()
{
tree_code_type = (char **) xmalloc (sizeof (standard_tree_code_type));
tree_code_length = (int *) xmalloc (sizeof (standard_tree_code_length));
tree_code_name = (char **) xmalloc (sizeof (standard_tree_code_name));
bcopy ((char *) standard_tree_code_type, (char *) tree_code_type,
sizeof (standard_tree_code_type));
bcopy ((char *) standard_tree_code_length, (char *) tree_code_length,
sizeof (standard_tree_code_length));
bcopy ((char *) standard_tree_code_name, (char *) tree_code_name,
sizeof (standard_tree_code_name));
}
/* Return a newly allocated node of code CODE.
......@@ -3906,8 +3882,7 @@ simple_cst_equal (t1, t2)
handled above. If this is a language-specific tree code, we can't
trust what might be in the operand, so say we don't know
the situation. */
if ((int) code1
>= sizeof standard_tree_code_type / sizeof standard_tree_code_type[0])
if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
return -1;
switch (TREE_CODE_CLASS (code1))
......
......@@ -47,16 +47,17 @@ enum tree_code {
constant, `d' for a decl, `t' for a type, `s' for a statement,
and `x' for anything else (TREE_LIST, IDENTIFIER, etc). */
extern char **tree_code_type;
#define TREE_CODE_CLASS(CODE) (*tree_code_type[(int) (CODE)])
#define MAX_TREE_CODES 256
extern char tree_code_type[MAX_TREE_CODES];
#define TREE_CODE_CLASS(CODE) tree_code_type[(int) (CODE)]
/* Number of argument-words in each kind of tree-node. */
extern int *tree_code_length;
extern int tree_code_length[MAX_TREE_CODES];
/* Names of tree components. */
extern char **tree_code_name;
extern char *tree_code_name[MAX_TREE_CODES];
/* Codes that identify the various built in functions
so that expand_call can identify them quickly. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment