* treetree.c (init_c_lex): Follow change to c-common.h.

From-SVN: r63828
This commit is contained in:
Andreas Jaeger 2003-03-05 07:29:01 +01:00 committed by Andreas Jaeger
parent dc2b3526d4
commit 4e263cd91b
2 changed files with 131 additions and 127 deletions

View File

@ -1,3 +1,7 @@
2003-03-05 Andreas Jaeger <aj@suse.de>
* treetree.c (init_c_lex): Follow change to c-common.h.
2003-03-04 Tom Tromey <tromey@redhat.com>
* Make-lang.in (treelang.tags): New target.
@ -5,12 +9,12 @@
2003-03-01 Tim Josling <tej@melbpc.org.au>
Name clashes with rtl.h fixed.
* lex.l: Tokens PLUS, MINUS, RETURN changed to tl_PLUS tl_MINUS
tl_RETURN.
* parse.y: Ditto.
* parse.y: Ditto.
2003-02-24 Tim Josling <tej@melbpc.org.au>
* parse.y (my_yylex): New - ensure lexer time is charged to
@ -18,11 +22,11 @@
(yylex): redefine as invocation of my_yylex which then calls
flex-generated yylex.
(timevar.h): include.
2003-02-23 Tim Josling <tej@melbpc.org.au>
Fix garbage collection, add more error checking, force GC always.
* Make-lang.in (treelang/tree1.o): Depend on treelang/treetree.h
(treelang/treetree.o): Depend on treelang/parse.h

View File

@ -1,4 +1,4 @@
/*
/*
TREELANG Compiler back end interface (treetree.c)
Called by the parser.
@ -9,8 +9,8 @@
Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, Free Software Foundation, Inc.
This code is based on toy.c written by Richard Kenner.
This code is based on toy.c written by Richard Kenner.
It was later modified by Jonathan Bartlett whose changes have all
been removed (by Tim Josling).
@ -38,7 +38,7 @@
In other words, you are welcome to use, share and improve this program.
You are forbidden to forbid anyone else to use, share and improve
what you give them. Help stamp out software-hoarding!
what you give them. Help stamp out software-hoarding!
---------------------------------------------------------------------------
@ -110,9 +110,9 @@ extern char **file_names;
#define LANG_HOOKS_INIT treelang_init
#undef LANG_HOOKS_NAME
#define LANG_HOOKS_NAME "GNU treelang"
#undef LANG_HOOKS_FINISH
#undef LANG_HOOKS_FINISH
#define LANG_HOOKS_FINISH treelang_finish
#undef LANG_HOOKS_DECODE_OPTION
#undef LANG_HOOKS_DECODE_OPTION
#define LANG_HOOKS_DECODE_OPTION treelang_decode_option
const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
@ -149,14 +149,14 @@ unsigned int tree_code_char_size = 0;
/* Return the tree stuff for this type TYPE_NUM. */
tree
tree_code_get_type (int type_num)
tree
tree_code_get_type (int type_num)
{
switch (type_num)
{
case SIGNED_CHAR:
return signed_char_type_node;
case UNSIGNED_CHAR:
return unsigned_char_type_node;
@ -164,10 +164,10 @@ tree_code_get_type (int type_num)
return integer_type_node;
case UNSIGNED_INT:
return unsigned_type_node;
return unsigned_type_node;
case VOID_TYPE:
return void_type_node;
return void_type_node;
default:
abort ();
@ -182,9 +182,9 @@ void
tree_code_if_start (tree exp, unsigned char* filename, int lineno)
{
tree cond_exp;
cond_exp = build (NE_EXPR,
TREE_TYPE (exp),
exp,
cond_exp = build (NE_EXPR,
TREE_TYPE (exp),
exp,
build1 (CONVERT_EXPR, TREE_TYPE (exp), integer_zero_node));
emit_line_note ((const char *)filename, lineno); /* Output the line number information. */
expand_start_cond (cond_exp, /* Exit-able if nonzero. */ 0);
@ -193,7 +193,7 @@ tree_code_if_start (tree exp, unsigned char* filename, int lineno)
/* Output the code for the else of an if statement. The else occurred
at line LINENO in file FILENAME. */
void
void
tree_code_if_else (unsigned char* filename, int lineno)
{
emit_line_note ((const char *)filename, lineno); /* Output the line number information. */
@ -203,7 +203,7 @@ tree_code_if_else (unsigned char* filename, int lineno)
/* Output the code for the end_if an if statement. The end_if (final brace) occurred
at line LINENO in file FILENAME. */
void
void
tree_code_if_end (unsigned char* filename, int lineno)
{
emit_line_note ((const char *)filename, lineno); /* Output the line number information. */
@ -214,7 +214,7 @@ tree_code_if_end (unsigned char* filename, int lineno)
STORAGE_CLASS, type of return variable is RET_TYPE, parameter lists
is PARMS, returns decl for this function. */
tree
tree
tree_code_create_function_prototype (unsigned char* chars,
unsigned int storage_class,
unsigned int ret_type,
@ -264,24 +264,24 @@ tree_code_create_function_prototype (unsigned char* chars,
/* Real name (optional). */
SET_DECL_ASSEMBLER_NAME (fn_decl, DECL_NAME (fn_decl));
TREE_PUBLIC (fn_decl) = 0;
DECL_EXTERNAL (fn_decl) = 0;
TREE_STATIC (fn_decl) = 0;
DECL_EXTERNAL (fn_decl) = 0;
TREE_STATIC (fn_decl) = 0;
switch (storage_class)
{
case STATIC_STORAGE:
TREE_PUBLIC (fn_decl) = 0;
TREE_PUBLIC (fn_decl) = 0;
break;
case EXTERNAL_DEFINITION_STORAGE:
TREE_PUBLIC (fn_decl) = 1;
TREE_STATIC (fn_decl) = 0;
TREE_STATIC (fn_decl) = 0;
DECL_EXTERNAL (fn_decl) = 0;
break;
case EXTERNAL_REFERENCE_STORAGE:
TREE_PUBLIC (fn_decl) = 0;
TREE_PUBLIC (fn_decl) = 0;
DECL_EXTERNAL (fn_decl) = 1;
break;
@ -302,8 +302,8 @@ tree_code_create_function_prototype (unsigned char* chars,
PREV_SAVED (as created by tree_code_create_function_prototype),
the function is at line number LINENO in file FILENAME. The
parameter details are in the lists PARMS. Returns nothing. */
void
tree_code_create_function_initial (tree prev_saved,
void
tree_code_create_function_initial (tree prev_saved,
unsigned char* filename,
int lineno,
struct prod_token_parm_item* parms)
@ -315,7 +315,7 @@ tree_code_create_function_initial (tree prev_saved,
tree parm_decl;
tree parm_list;
tree resultdecl;
struct prod_token_parm_item* this_parm;
struct prod_token_parm_item* this_parm;
struct prod_token_parm_item* parm;
fn_decl = prev_saved;
@ -336,7 +336,7 @@ tree_code_create_function_initial (tree prev_saved,
DECL_SOURCE_LINE (fn_decl) = lineno;
/* Prepare creation of rtl for a new function. */
resultdecl = DECL_RESULT (fn_decl) = build_decl (RESULT_DECL, NULL_TREE, TREE_TYPE (TREE_TYPE (fn_decl)));
DECL_CONTEXT (DECL_RESULT (fn_decl)) = fn_decl;
DECL_SOURCE_FILE (resultdecl) = (const char *)filename;
@ -348,10 +348,10 @@ tree_code_create_function_initial (tree prev_saved,
parm_list = NULL_TREE;
for (parm = parms; parm; parm = parm->tp.par.next)
{
parm_decl = build_decl (PARM_DECL, get_identifier
((const char*) (parm->tp.par.variable_name)),
parm_decl = build_decl (PARM_DECL, get_identifier
((const char*) (parm->tp.par.variable_name)),
get_type_for_numeric_type (parm->type));
/* Some languages have different nominal and real types. */
DECL_ARG_TYPE (parm_decl) = TREE_TYPE (parm_decl);
if (!DECL_ARG_TYPE (parm_decl))
@ -366,7 +366,7 @@ tree_code_create_function_initial (tree prev_saved,
/* Back into reverse order as the back end likes them. */
parm_list = nreverse (parm_list);
DECL_ARGUMENTS (fn_decl) = parm_list;
/* Save the decls for use when the args are referred to. */
@ -389,23 +389,23 @@ tree_code_create_function_initial (tree prev_saved,
make_decl_rtl (fn_decl, NULL);
/* Use filename/lineno from above. */
init_function_start (fn_decl, (const char *)filename, lineno);
init_function_start (fn_decl, (const char *)filename, lineno);
/* Create rtl for startup code of function, such as saving registers. */
expand_function_start (fn_decl, 0);
/* Function.c requires a push at the start of the function. that
looks like a bug to me but let's make it happy. */
(*lang_hooks.decls.pushlevel) (0);
/* Create rtl for the start of a new scope. */
expand_start_bindings (2);
/* Put the parameters into the symbol table. */
for (first_param = param_decl = nreverse (DECL_ARGUMENTS (fn_decl));
param_decl;
param_decl = next_param)
@ -423,23 +423,23 @@ tree_code_create_function_initial (tree prev_saved,
/* Force it to be output, else may be solely inlined. */
TREE_ADDRESSABLE (fn_decl) = 1;
/* Stop -O3 from deleting it. */
TREE_USED (fn_decl) = 1;
/* Add a new level to the debugger symbol table. */
(*lang_hooks.decls.pushlevel) (0);
/* Create rtl for the start of a new scope. */
expand_start_bindings (0);
emit_line_note ((const char *)filename, lineno); /* Output the line number information. */
}
/* Wrapup a function contained in file FILENAME, ending at line LINENO. */
void
void
tree_code_create_function_wrapup (unsigned char* filename,
int lineno)
{
@ -447,52 +447,52 @@ tree_code_create_function_wrapup (unsigned char* filename,
tree fn_decl;
fn_decl = current_function_decl;
emit_line_note ((const char *)filename, lineno); /* Output the line number information. */
/* Get completely built level from debugger symbol table. */
block = (*lang_hooks.decls.poplevel) (1, 0, 0);
/* Emit rtl for end of scope. */
expand_end_bindings (block, 0, 1);
/* Emit rtl for end of function. */
expand_function_end ((const char *)filename, lineno, 0);
/* Pop the level. */
block = (*lang_hooks.decls.poplevel) (1, 0, 1);
/* And attach it to the function. */
DECL_INITIAL (fn_decl) = block;
/* Emit rtl for end of scope. */
expand_end_bindings (block, 0, 1);
/* Call optimization and convert optimized rtl to assembly code. */
rest_of_compilation (fn_decl);
/* We are not inside of any scope now. */
current_function_decl = NULL_TREE;
}
/*
Create a variable.
The storage class is STORAGE_CLASS (eg LOCAL).
The name is CHARS/LENGTH.
The type is EXPRESSION_TYPE (eg UNSIGNED_TYPE).
The init tree is INIT.
/*
Create a variable.
The storage class is STORAGE_CLASS (eg LOCAL).
The name is CHARS/LENGTH.
The type is EXPRESSION_TYPE (eg UNSIGNED_TYPE).
The init tree is INIT.
*/
tree
tree
tree_code_create_variable (unsigned int storage_class,
unsigned char* chars,
unsigned int length,
@ -522,10 +522,10 @@ tree_code_create_variable (unsigned int storage_class,
DECL_INITIAL (var_decl) = build1 (CONVERT_EXPR, var_type, init);
else
DECL_INITIAL (var_decl) = NULL_TREE;
/* 4. Compute size etc. */
layout_decl (var_decl, 0);
if (TYPE_SIZE (var_type) == 0)
abort (); /* Did not calculate size. */
@ -546,27 +546,27 @@ tree_code_create_variable (unsigned int storage_class,
TREE_STATIC (var_decl) = 0;
TREE_PUBLIC (var_decl) = 0;
break;
case EXTERNAL_DEFINITION_STORAGE:
TREE_STATIC (var_decl) = 0;
TREE_STATIC (var_decl) = 0;
TREE_PUBLIC (var_decl) = 1;
break;
case EXTERNAL_REFERENCE_STORAGE:
DECL_EXTERNAL (var_decl) = 1;
TREE_PUBLIC (var_decl) = 0;
break;
default:
abort ();
}
/* This should really only be set if the variable is used. */
TREE_USED (var_decl) = 1;
/* Expand declaration and initial value if any. */
if (TREE_STATIC (var_decl))
if (TREE_STATIC (var_decl))
rest_of_decl_compilation (var_decl, 0, 0, 0);
else
{
@ -574,9 +574,9 @@ tree_code_create_variable (unsigned int storage_class,
if (DECL_INITIAL (var_decl))
expand_decl_init (var_decl);
}
return pushdecl (copy_node (var_decl));
}
@ -599,7 +599,7 @@ tree_code_generate_return (tree type, tree exp)
if (exp)
{
setret = build (MODIFY_EXPR, type, DECL_RESULT (current_function_decl),
setret = build (MODIFY_EXPR, type, DECL_RESULT (current_function_decl),
build1 (CONVERT_EXPR, type, exp));
TREE_SIDE_EFFECTS (setret) = 1;
TREE_USED (setret) = 1;
@ -611,12 +611,12 @@ tree_code_generate_return (tree type, tree exp)
/* Output the code for this expression statement CODE. */
void
tree_code_output_expression_statement (tree code,
void
tree_code_output_expression_statement (tree code,
unsigned char* filename, int lineno)
{
/* Output the line number information. */
emit_line_note ((const char *)filename, lineno);
emit_line_note ((const char *)filename, lineno);
TREE_USED (code) = 1;
TREE_SIDE_EFFECTS (code) = 1;
expand_expr_stmt (code);
@ -625,7 +625,7 @@ tree_code_output_expression_statement (tree code,
/* Return a tree for a constant integer value in the token TOK. No
size checking is done. */
tree
tree
tree_code_get_integer_value (unsigned char* chars, unsigned int length)
{
long long int val = 0;
@ -654,8 +654,8 @@ tree_code_get_integer_value (unsigned char* chars, unsigned int length)
/* Return the tree for an expresssion, type EXP_TYPE (see treetree.h)
with tree type TYPE and with operands1 OP1, OP2 (maybe), OP3 (maybe). */
tree
tree_code_get_expression (unsigned int exp_type,
tree
tree_code_get_expression (unsigned int exp_type,
tree type, tree op1, tree op2, tree op3 ATTRIBUTE_UNUSED)
{
tree ret1;
@ -667,8 +667,8 @@ tree_code_get_expression (unsigned int exp_type,
if (!op1 || !op2)
abort ();
operator = MODIFY_EXPR;
ret1 = build (operator, type,
op1,
ret1 = build (operator, type,
op1,
build1 (CONVERT_EXPR, type, op2));
break;
@ -676,21 +676,21 @@ tree_code_get_expression (unsigned int exp_type,
case EXP_PLUS:
operator = PLUS_EXPR;
goto binary_expression;
case EXP_MINUS:
operator = MINUS_EXPR;
goto binary_expression;
case EXP_EQUALS:
operator = EQ_EXPR;
goto binary_expression;
/* Expand a binary expression. Ensure the operands are the right type. */
binary_expression:
if (!op1 || !op2)
abort ();
ret1 = build (operator, type,
build1 (CONVERT_EXPR, type, op1),
ret1 = build (operator, type,
build1 (CONVERT_EXPR, type, op1),
build1 (CONVERT_EXPR, type, op2));
break;
@ -705,7 +705,7 @@ tree_code_get_expression (unsigned int exp_type,
else
ret1 = build1 (CONVERT_EXPR, type, op1);
break;
case EXP_FUNCTION_INVOCATION:
if (!op1 || !op2)
abort ();
@ -719,13 +719,13 @@ tree_code_get_expression (unsigned int exp_type,
default:
abort ();
}
return ret1;
}
/* Init parameter list and return empty list. */
tree
tree
tree_code_init_parameters (void)
{
return NULL_TREE;
@ -734,11 +734,11 @@ tree_code_init_parameters (void)
/* Add a parameter EXP whose expression type is EXP_PROTO to list
LIST, returning the new list. */
tree
tree
tree_code_add_parameter (tree list, tree proto_exp, tree exp)
{
tree new_exp;
new_exp = tree_cons (NULL_TREE,
new_exp = tree_cons (NULL_TREE,
build1 (CONVERT_EXPR, TREE_TYPE (proto_exp), exp),
NULL_TREE);
if (!list)
@ -751,45 +751,45 @@ tree_code_add_parameter (tree list, tree proto_exp, tree exp)
tree
get_type_for_numeric_type (unsigned int numeric_type)
{
int size1;
int sign1;
switch (numeric_type)
{
case VOID_TYPE:
return void_type_node;
case SIGNED_INT:
size1 = tree_code_int_size;
sign1 = 1;
break;
case UNSIGNED_INT:
size1 = tree_code_int_size;
sign1 = 0;
break;
case SIGNED_CHAR:
size1 = tree_code_char_size;
sign1 = 1;
break;
case UNSIGNED_CHAR:
size1 = tree_code_char_size;
sign1 = 0;
break;
default:
abort ();
}
return tree_code_get_numeric_type (size1, sign1);
}
/* Return tree representing a numeric type of size SIZE1 bits and
signed if SIGN1 != 0. */
tree
tree
tree_code_get_numeric_type (unsigned int size1, unsigned int sign1)
{
tree ret1;
@ -808,10 +808,10 @@ tree_code_get_numeric_type (unsigned int size1, unsigned int sign1)
else
ret1 = unsigned_char_type_node;
}
else
else
abort ();
return ret1;
return ret1;
}
/* Garbage Collection. */
@ -826,7 +826,7 @@ tree_ggc_storage_always_used (void * m)
if (*mm)
ggc_mark (*mm);
}
}
/* Following from c-lang.c. */
@ -857,8 +857,8 @@ check_function_format (int *status ATTRIBUTE_UNUSED,
/* Tell the c code we are not objective C. */
int
objc_comptypes (tree lhs ATTRIBUTE_UNUSED,
tree rhs ATTRIBUTE_UNUSED,
objc_comptypes (tree lhs ATTRIBUTE_UNUSED,
tree rhs ATTRIBUTE_UNUSED,
int reflexive ATTRIBUTE_UNUSED)
{
return 0;
@ -932,8 +932,8 @@ cpp_create_reader (enum c_lang lang ATTRIBUTE_UNUSED)
/* Should not be called for treelang. */
const char *
init_c_lex (const char *filename ATTRIBUTE_UNUSED)
void
init_c_lex (void)
{
abort ();
}
@ -973,7 +973,7 @@ handle_format_attribute (tree *node ATTRIBUTE_UNUSED,
int flags ATTRIBUTE_UNUSED,
bool *no_add_attrs ATTRIBUTE_UNUSED)
{
return NULL_TREE;
return NULL_TREE;
}
/* Should not be called for treelang. */
@ -1000,8 +1000,8 @@ cpp_handle_option (cpp_reader *pfile ATTRIBUTE_UNUSED,
/* Should not be called for treelang. */
void
cpp_assert (cpp_reader * cr ATTRIBUTE_UNUSED,
void
cpp_assert (cpp_reader * cr ATTRIBUTE_UNUSED,
const char *s ATTRIBUTE_UNUSED)
{
abort ();
@ -1113,7 +1113,7 @@ defer_fn (tree fn ATTRIBUTE_UNUSED)
/* Should not be called for treelang. */
cpp_options
cpp_options
*cpp_get_options (cpp_reader * cr ATTRIBUTE_UNUSED)
{
abort ();
@ -1121,10 +1121,10 @@ cpp_options
/* Should not be called for treelang. */
void
void
cpp_define (cpp_reader * cr ATTRIBUTE_UNUSED, const char * c ATTRIBUTE_UNUSED)
{
abort ();
abort ();
}
/* Should not be called for treelang. */
@ -1247,7 +1247,7 @@ treelang_init_decl_processing ()
tree id;
ridpointers = (tree *) ggc_calloc ((int) RID_MAX, sizeof (tree));
for (i = 0; i < N_reswords; i++)
{
id = get_identifier (reswords[i].word);