1998-08-27 22:51:39 +02:00
|
|
|
|
/* Implement grant-file output & seize-file input for CHILL.
|
diagnostic.h (set_internal_error_function): Renamed.
* diagnostic.h (set_internal_error_function): Renamed.
* toplev.h (internal_error): Renamed from fatal.
(pfatal_with_name): Deleted.
(fatal_io_error): Now has printf-style arguments.
* diagnostic.c (pfatal_with_name): Deleted.
(fatal_io_error): Rework to have args in printf-style.
(set_internal_error_function): Renamed from set_fatal_function.
(internal_error): Renamed from fatal.
(error_recursion, fancy_abort): Call internal_error instead of fatal.
* dwarf2out.c (get_cfa_from_loc_descr): Likewise.
* emit-rtl.c (gen_realpart, gen_imagpart): Likewise.
* expr.c (check_max_integer_computation_mode, expand_expr): Likewise.
* flow.c (verify_flow_info): Likewise.
* config/arm/arm.c (thumb_unexpanded_epilogue): Likewise.
* config/mips/mips.c (save_restore_insns): Likewise.
* cp/init.c (build_java_class_ref): Likewise.
(dsp16xx_reg_class_from_letter): Likewise.
(limit_reload_class, double_reg_to_memory): Likewise.
(print_operand_address, emit_1600_code_shift): Likewise.
(gen_tst_reg, gen_compare_reg): Likewise.
* config/m68hc11/m68hc11.c (m68hc11_emit_libcall): Likewise.
* cp/decl.c (pushdecl): Likewise.
* java/check-init.c (check_init): Likewise.
* java/expr.c (java_lang_expand_expr): Likewise.
* java/jcf-parse.c (get_constant): Likewise.
* java/mangle.c (java_mangle_decl): Likewise.
* java/parse.y (make_nested_class_name, java_complete_lhs): Likewise.
(operator_string): Likewise.
* except.c (duplicate_eh_handlers): Call abort instead of fatal.
* flow.c (verify_flow_info): Likewise.
* ch/convert.c (convert): Likewise.
* ch/except.c (pop_handler, chill_check_no_handlers): Likewise.
* ch/expr.c (chill_expand_expr): Likewise.
* ch/parse.c (peek_token_, pushback_token, require): Likewise.
* config/arm/arm.c (thumb_load_double_from_address): Likewise.
* config/avr/avr.c (pttreg_to_str, unique_section): Likewise.
(avr_normalize_condition): Likewise.
* config/c4x/c4x.c (c4x_emit_libcall, c4x_valid_operands): Likewise.
* config/dsp16xx/dsp16xx.c (dsp16xx_reg_class_from_letter): Likewise.
(limit_reload_class, double_reg_to_memory): Likewise.
(print_operand_address, emit_1600_code_shift): Likewise.
(gen_tst_reg, gen_compare_reg): Likewise.
* config/m68hc11/m68hc11.c (m68hc11_emit_libcall): Likewise.
* cp/decl.c (pushdecl): Likewise.
* java/check-init.c (check_init): Likewise.
* java/class.c (build_class_ref): Likewise.
* java/constants.c (write_constant_pool): Likewise.
* java/decl.c (start_java_method): Likewise.
* java/expr.c (push_type, java_stack_pop, java_stack_swap): Likewise.
(java_stack_dup, encode_newarray_type): Likewise.
(build_java_array_length_access): Likewise.
(build_java_check_indexed_type, expand_java_pushc): Likewise.
(build_java_soft_divmod, build_invokeinterface): Likewise.
* java/java-tree.h (INNER_CLASS_P): Likewise.
* java/jcf-parse.c (parse_signature, get_name_constant): Likewise.
(give_name_to_class, get_class_constant): Likewise.
* java/jcf-write.c (CHECK_PUT, CHECK_OP, get_access_flags): Likewise.
(find_constant_index, generate_bytecode_conditional): Likewise.
(generate_bytecode_insns, perform_relocations): Likewise.
* java/lex.c (java_unget_unicode, java_lex): Likewise.
* java/mangle.c (mangle_type, mangle_record_type): Likewise.
(mangle_pointer_type, mangle_array_type, init_mangling): Likewise.
(finish_mangling): Likewise.
* java/parse.h (MARK_FINAL_PARMS): Likewise.
* java/parse.y (pop_current_osb, unreachable_stmt_error): Likewise.
(obtain_incomplete_type, java_complete_class): Likewise.
(java_check_regular_methods, java_complete_expand_method): Likewise.
(cut_identifier_in_qualified, check_deprecation): Likewise.
(patch_invoke, find_applicable_accessible_methods_list): Likewise.
(java_complete_lhs, lookup_name_in_blocks): Likewise.
(check_final_variable_indirect_assignment, build_unaryop): Likewise.
* java/typeck.c (set_local_type, parse_signature_type): Likewise.
(parse_signature_string, build_java_signature): Likewise;
(set_java_signature): Likewise.
* java/verify.c (type_stack_dup, CHECK_PC_IN_RANGE): Likewise.
* c-parse.in (methoddef): Call fatal_error instead of fatal.
* objc/objc-act.c (build_ivar_chain): Likewise.
* cp/except.c (decl_is_java_type): Likewise.
* cp/init.c (build_java_class_ref): Likewise.
* cp/init.c (build_new_1): Likewise.
* f/com.c (ffecom_init_0): Likewise.
* java/class.c (add_method, build_static_field_ref): Likewise.
* java/expr.c (build_known_method_ref, expand_invoke): Likewise.
* java/jcf-parse.c (get_constant, jcf_parse): Likewise.
* java/lex.c (java_new_new_lexer): Likewise.
* java/jv-scan.c (main): Likewise.
(fatal_error): Renamed from fatal.
* dwarfout.c (dwarfout_init): Call fatal_io_error instead of
pfatal_with_name.
* graph.c (clean_graph_dump_file): Likewise.
* profile.c (init_branch_prob): Likewise.
* ch/grant.c (write_grant_file): Likewise.
* ch/lex.c (init_parse, same_file, yywrap): Likewise.
* f/com.c (init_parse): Likewise.
* java/jcf-parse.c (yyparse): Likewise.
* objc/objc-act.c (objc_init): Likewise.
* java/jcf-parse.c (jcf_parse_source): Call fatal_io_error, not fatal.
(yyparse): Likewise.
* java/jcf-write.c (make_class_file_name, write_classfile): Likewise.
* java/lex.c (java_get_line_col): Likewise.
* hash.c (hash_allocate): Don't check for failure returns from
obstack functions that can't fail.
(hash_table_init_n, hash_table_init): Likewise; also now return void.
* hash.h (hash_table_init_n, hash_table_init): Now return void.
* cp/decl.c (build_typename_type): hash_table_init now returns void.
* ch/lang.c (GNU_xref_begin, GNU_xref_end): Deleted.
* ch/lex.c (convert_bitstring): Delete check for alloca failure.
* config/dsp16xx/dsp16xx.c (dsp16xx_invalid_register_for_compare):
Deleted.
* config/dsp16xx/dsp16xx.md (unnamed cmphi): Call abort instead of it.
* f/com.c (ffecom_decode_include_option_): Make errors non-fatal.
* f/lex.c (ffelex_cfelex_, ffelex_get_directive_line_): Likewise.
(ffelex_hash_): Likewise.
* config/arm/arm.c (arm_override_options): Likewise.
* config/avr/avr.c (avr_override_options): Likewise.
* config/c4x/c4x.c (c4x_expand_prologue): Likewise.
* config/dsp16xx/dsp16xx.c (function_prologue): Likewise.
* config/h8300/h8300.c (h8300_init_once): Likewise.
* config/mips/mips.c (override_options): Likewise.
* config/i386/i386.c (override_options): Likewise, rework.
* config/m68k/m68k.c (override_options): Likewise.
* cp/decl.c (init_decl_processing): Likewise.
* java/jcf-parse.c (load_class): Likewise.
* config/dsp16xx/dsp16xx.c (print_operand): Call output_operand_lossage
instead of fatal.
* config/mips/mips.c (print_operand): Likewise.
* java/lex.c (byteswap_init, need_byteswap): Only #ifdef HAVE_ICONV.
* objc/objc_act.c (objc_check_decl): Remove unneeded fatal call.
(get_object_reference): Likewise.
From-SVN: r39444
2001-02-05 00:18:43 +01:00
|
|
|
|
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
|
|
|
|
|
Free Software Foundation, Inc.
|
1998-08-27 22:51:39 +02:00
|
|
|
|
|
|
|
|
|
This file is part of GNU CC.
|
|
|
|
|
|
|
|
|
|
GNU CC is free software; you can redistribute it and/or modify
|
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
|
the Free Software Foundation; either version 2, or (at your option)
|
|
|
|
|
any later version.
|
|
|
|
|
|
|
|
|
|
GNU CC is distributed in the hope that it will be useful,
|
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
|
along with GNU CC; see the file COPYING. If not, write to
|
1999-01-11 14:17:38 +01:00
|
|
|
|
the Free Software Foundation, 59 Temple Place - Suite 330,
|
|
|
|
|
Boston, MA 02111-1307, USA. */
|
1998-08-27 22:51:39 +02:00
|
|
|
|
|
|
|
|
|
#include "config.h"
|
Warning fixes:
* Makefile.in (actions.o, convert.o, decl.o, expr.o, lang.o,
lex.o, loop.o, parse.o, satisfy.o, timing.o, tasking.o, tree.o,
typeck.o): Depend on system.h and toplev.h.
(except.o): Depend on toplev.h.
(grant.o): Depend on system.h, toplev.h and output.h.
* actions.c: Include system.h and toplev.h. Remove redundant
prototypes.
(build_cause_exception): Add default case in switch.
(update_else_range_for_range): Add parentheses around && within ||.
(chill_handle_multi_case_label_list): Remove unused variable
`selector_value'.
(print_missing_cases): Reconcile format specifiers vs arguments in
calls to sprintf.
* ch-tree.h: Don't include stdio.h. Wrap prototypes using FILE*
with macro BUFSIZ. Add missing prototypes.
* convert.c: Include system.h and toplev.h. Remove redundant
prototypes.
(convert): Remove unused variable `errstr'.
* decl.c: Include system.h and toplev.h. Remove redundant
prototypes.
(builtin_scope): Add missing initializers.
(clear_scope): Likewise.
(allocate_lang_decl): Mark parameter `t' with ATTRIBUTE_UNUSED.
(copy_lang_decl): Likewise for parameter `node'.
(c_decode_option): Likewise for parameter `argc'.
(push_extern_function): Likewise for parameter `granting'.
(switch_to_pass_2): Hide declaration of errorcount/sorrycount.
(pushdecl): Remove unused variable `t'.
(lookup_name_current_level): Make static and hide.
(lookup_name_for_seizing): Make static.
(finish_decl): Remove unused variable `type'.
(maybe_build_cleanup): Mark parameter `decl' with ATTRIBUTE_UNUSED.
(complete_array_type): Mark parameters `type', `initial_value' and
`do_default' with ATTRIBUTE_UNUSED.
(start_struct): Mark parameter `name' with ATTRIBUTE_UNUSED.
(start_enum): Likewise.
(shadow_record_fields): Remove unused variables `type' and `parent'.
* except.c: Include toplev.h. Remove redundant prototypes.
* expr.c: Include system.h and toplev.h. Don't define NULL.
Remove redundant prototypes.
(internal_build_compound_expr): Mark parameter `first_p' with
ATTRIBUTE_UNUSED.
(build_allocate_getstack): Remove unused variable `init'.
(build_chill_pred_or_succ): Likewise for variable `limit'.
(varying_to_slice): Likewise for variable `doamin' [sic].
(finish_chill_binary_op): Likewise for variables `code0' and
`code1'. Remove unused label `finish'. Add explicit braces to
avoid ambiguous `else'.
(build_chill_addr_expr): Remove extra parameter in call to `error'.
(build_chill_unary_op): Remove unused variables `class' and `type0'.
(powersetlen): Remove unused variables `domain' and `temp'.
* grant.c: Include system.h, toplev.h and output.h. Don't handle
strchr/strrchr. Remove redundant prototypes.
(decode_constant_selective): Remove unused variables `op' and `wrk'.
(push_granted): Mark parameters `name' and `decl' with
ATTRIBUTE_UNUSED.
* inout.c: Include system.h and toplev.h. Remove redundant
prototypes.
(textlocation_mode): Use &&, not &, when comparing two truth
values.
(scanformcont): Remove unused label `do_the_action'.
* lang.c: Include system.h and toplev.h. Remove redundant
prototypes.
(lookup_interface): Mark parameter `arg' with ATTRIBUTE_UNUSED.
(maybe_objc_comptypes): Likewise for parameters `lhs' and `rhs'.
(lang_print_xnode): Likewise for parameters `file', `node' and
`indent'.
(lang_decode_option): Explicitly declare `explicit_ignore_case'.
(incomplete_type_error): Mark parameters `value' and `type' with
ATTRIBUTE_UNUSED.
* lex.c: Include system.h and toplev.h. Remove redundant
prototypes. Don't handle strchr/strrchr. Use CAPITALIZED
versions of ctype macros from system.h. Cast ctype arguments to
unsigned char when necessary.
(last_token, RETURN_TOKEN): Hide definition.
(push_back): Remove unused function.
(readstring): Change variable `i' to unsigned.
(yywrap): Remove unused variable `node'.
* loop.c: Include system.h and toplev.h. Remove redundant
prototypes.
(chill_unsigned_type): Hide prototype and definition.
(begin_loop_scope): Remove unused variable `firstp'.
(nonvalue_begin_loop_scope): Likewise.
* parse.c: Include system.h and toplev.h. Remove redundant
prototypes.
(quasi_signal): Hide.
(PEEK_TOKEN): Change return type to `enum terminal'.
(parse_mode_definition_statement): Remove unused variable `names'.
(parse_formpar): Remove unused parameter `in_spec_module'. All
callers changed.
(parse_formparlist): Likewise.
(parse_processpar): Remove unused variable `parms'.
(parse_definition): Add explicit braces to avoid ambiguous `else'.
(parse_multi_dimension_case_action): Initialize variable
`begin_test_label'. Remove unused variable `new_test'.
(parse_case_action): Remove unused variable `caseaction_flag'.
(parse_asm_clobbers): Remove unused variable `expr'.
(parse_delay_case_action): Initialize variable `label_cnt'.
(parse_action): Make function static.
(parse_tuple_element): Remove unused variable `list'.
(parse_primval): Add default case in switch.
(parse_variant_alternative): Remove unused variables `x' and
`variant_fields'.
* satisfy.c: Include system.h and toplev.h. Remove redundant
prototypes.
* tasking.c Include system.h and toplev.h. Remove redundant
prototypes.
(data_name): Hide.
(get_struct_variable_name): Likewise.
(validate_process_parameters): Mark parameter `parms' with
ATTRIBUTE_UNUSED.
(build_start_process): Initialize variable `tuple'.
(build_receive_buffer_case_end): Remove unused variable `buffer_ptr'.
* timing.c: Include system.h and toplev.h.
(build_after_timeout_start): Remove unused variable `goto_where'.
* tree.c: Include system.h and toplev.h. Remove redundant
prototypes.
* typeck.c: Include system.h and toplev.h. Remove redundant
prototypes.
(extract_constant_from_buffer): Make function static. Add
explicit braces to avoid ambiguous `else'.
(expand_constant_to_buffer): Likewise.
(build_chill_slice): remove unused variable `is_static'.
(chill_compatible): Add explicit braces to avoid ambiguous `else'.
(apply_chill_array_layout): Remove unused variable `offset'.
(smash_dummy_type): Remove unused variable `save_lang_specific'.
(initializer_constant_valid_p): Add default case in switch.
From-SVN: r22493
1998-09-20 08:43:23 +02:00
|
|
|
|
#include "system.h"
|
1998-08-27 22:51:39 +02:00
|
|
|
|
#include "tree.h"
|
|
|
|
|
#include "ch-tree.h"
|
|
|
|
|
#include "lex.h"
|
|
|
|
|
#include "flags.h"
|
|
|
|
|
#include "actions.h"
|
|
|
|
|
#include "input.h"
|
|
|
|
|
#include "rtl.h"
|
|
|
|
|
#include "tasking.h"
|
Warning fixes:
* Makefile.in (actions.o, convert.o, decl.o, expr.o, lang.o,
lex.o, loop.o, parse.o, satisfy.o, timing.o, tasking.o, tree.o,
typeck.o): Depend on system.h and toplev.h.
(except.o): Depend on toplev.h.
(grant.o): Depend on system.h, toplev.h and output.h.
* actions.c: Include system.h and toplev.h. Remove redundant
prototypes.
(build_cause_exception): Add default case in switch.
(update_else_range_for_range): Add parentheses around && within ||.
(chill_handle_multi_case_label_list): Remove unused variable
`selector_value'.
(print_missing_cases): Reconcile format specifiers vs arguments in
calls to sprintf.
* ch-tree.h: Don't include stdio.h. Wrap prototypes using FILE*
with macro BUFSIZ. Add missing prototypes.
* convert.c: Include system.h and toplev.h. Remove redundant
prototypes.
(convert): Remove unused variable `errstr'.
* decl.c: Include system.h and toplev.h. Remove redundant
prototypes.
(builtin_scope): Add missing initializers.
(clear_scope): Likewise.
(allocate_lang_decl): Mark parameter `t' with ATTRIBUTE_UNUSED.
(copy_lang_decl): Likewise for parameter `node'.
(c_decode_option): Likewise for parameter `argc'.
(push_extern_function): Likewise for parameter `granting'.
(switch_to_pass_2): Hide declaration of errorcount/sorrycount.
(pushdecl): Remove unused variable `t'.
(lookup_name_current_level): Make static and hide.
(lookup_name_for_seizing): Make static.
(finish_decl): Remove unused variable `type'.
(maybe_build_cleanup): Mark parameter `decl' with ATTRIBUTE_UNUSED.
(complete_array_type): Mark parameters `type', `initial_value' and
`do_default' with ATTRIBUTE_UNUSED.
(start_struct): Mark parameter `name' with ATTRIBUTE_UNUSED.
(start_enum): Likewise.
(shadow_record_fields): Remove unused variables `type' and `parent'.
* except.c: Include toplev.h. Remove redundant prototypes.
* expr.c: Include system.h and toplev.h. Don't define NULL.
Remove redundant prototypes.
(internal_build_compound_expr): Mark parameter `first_p' with
ATTRIBUTE_UNUSED.
(build_allocate_getstack): Remove unused variable `init'.
(build_chill_pred_or_succ): Likewise for variable `limit'.
(varying_to_slice): Likewise for variable `doamin' [sic].
(finish_chill_binary_op): Likewise for variables `code0' and
`code1'. Remove unused label `finish'. Add explicit braces to
avoid ambiguous `else'.
(build_chill_addr_expr): Remove extra parameter in call to `error'.
(build_chill_unary_op): Remove unused variables `class' and `type0'.
(powersetlen): Remove unused variables `domain' and `temp'.
* grant.c: Include system.h, toplev.h and output.h. Don't handle
strchr/strrchr. Remove redundant prototypes.
(decode_constant_selective): Remove unused variables `op' and `wrk'.
(push_granted): Mark parameters `name' and `decl' with
ATTRIBUTE_UNUSED.
* inout.c: Include system.h and toplev.h. Remove redundant
prototypes.
(textlocation_mode): Use &&, not &, when comparing two truth
values.
(scanformcont): Remove unused label `do_the_action'.
* lang.c: Include system.h and toplev.h. Remove redundant
prototypes.
(lookup_interface): Mark parameter `arg' with ATTRIBUTE_UNUSED.
(maybe_objc_comptypes): Likewise for parameters `lhs' and `rhs'.
(lang_print_xnode): Likewise for parameters `file', `node' and
`indent'.
(lang_decode_option): Explicitly declare `explicit_ignore_case'.
(incomplete_type_error): Mark parameters `value' and `type' with
ATTRIBUTE_UNUSED.
* lex.c: Include system.h and toplev.h. Remove redundant
prototypes. Don't handle strchr/strrchr. Use CAPITALIZED
versions of ctype macros from system.h. Cast ctype arguments to
unsigned char when necessary.
(last_token, RETURN_TOKEN): Hide definition.
(push_back): Remove unused function.
(readstring): Change variable `i' to unsigned.
(yywrap): Remove unused variable `node'.
* loop.c: Include system.h and toplev.h. Remove redundant
prototypes.
(chill_unsigned_type): Hide prototype and definition.
(begin_loop_scope): Remove unused variable `firstp'.
(nonvalue_begin_loop_scope): Likewise.
* parse.c: Include system.h and toplev.h. Remove redundant
prototypes.
(quasi_signal): Hide.
(PEEK_TOKEN): Change return type to `enum terminal'.
(parse_mode_definition_statement): Remove unused variable `names'.
(parse_formpar): Remove unused parameter `in_spec_module'. All
callers changed.
(parse_formparlist): Likewise.
(parse_processpar): Remove unused variable `parms'.
(parse_definition): Add explicit braces to avoid ambiguous `else'.
(parse_multi_dimension_case_action): Initialize variable
`begin_test_label'. Remove unused variable `new_test'.
(parse_case_action): Remove unused variable `caseaction_flag'.
(parse_asm_clobbers): Remove unused variable `expr'.
(parse_delay_case_action): Initialize variable `label_cnt'.
(parse_action): Make function static.
(parse_tuple_element): Remove unused variable `list'.
(parse_primval): Add default case in switch.
(parse_variant_alternative): Remove unused variables `x' and
`variant_fields'.
* satisfy.c: Include system.h and toplev.h. Remove redundant
prototypes.
* tasking.c Include system.h and toplev.h. Remove redundant
prototypes.
(data_name): Hide.
(get_struct_variable_name): Likewise.
(validate_process_parameters): Mark parameter `parms' with
ATTRIBUTE_UNUSED.
(build_start_process): Initialize variable `tuple'.
(build_receive_buffer_case_end): Remove unused variable `buffer_ptr'.
* timing.c: Include system.h and toplev.h.
(build_after_timeout_start): Remove unused variable `goto_where'.
* tree.c: Include system.h and toplev.h. Remove redundant
prototypes.
* typeck.c: Include system.h and toplev.h. Remove redundant
prototypes.
(extract_constant_from_buffer): Make function static. Add
explicit braces to avoid ambiguous `else'.
(expand_constant_to_buffer): Likewise.
(build_chill_slice): remove unused variable `is_static'.
(chill_compatible): Add explicit braces to avoid ambiguous `else'.
(apply_chill_array_layout): Remove unused variable `offset'.
(smash_dummy_type): Remove unused variable `save_lang_specific'.
(initializer_constant_valid_p): Add default case in switch.
From-SVN: r22493
1998-09-20 08:43:23 +02:00
|
|
|
|
#include "toplev.h"
|
|
|
|
|
#include "output.h"
|
2001-08-10 00:33:35 +02:00
|
|
|
|
#include "target.h"
|
1998-08-27 22:51:39 +02:00
|
|
|
|
|
|
|
|
|
#define APPEND(X,Y) X = append (X, Y)
|
|
|
|
|
#define PREPEND(X,Y) X = prepend (X, Y);
|
|
|
|
|
#define FREE(x) strfree (x)
|
|
|
|
|
#define ALLOCAMOUNT 10000
|
|
|
|
|
/* may be we can handle this in a more exciting way,
|
|
|
|
|
but this also should work for the moment */
|
|
|
|
|
#define MAYBE_NEWLINE(X) \
|
|
|
|
|
do \
|
|
|
|
|
{ \
|
|
|
|
|
if (X->len && X->str[X->len - 1] != '\n') \
|
|
|
|
|
APPEND (X, ";\n"); \
|
|
|
|
|
} while (0)
|
|
|
|
|
|
|
|
|
|
extern tree process_type;
|
|
|
|
|
extern char *asm_file_name;
|
|
|
|
|
extern char *dump_base_name;
|
|
|
|
|
|
|
|
|
|
/* forward declarations */
|
|
|
|
|
|
|
|
|
|
/* variable indicates compilation at module level */
|
|
|
|
|
int chill_at_module_level = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* mark that a SPEC MODULE was generated */
|
|
|
|
|
static int spec_module_generated = 0;
|
|
|
|
|
|
|
|
|
|
/* define a faster string handling */
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
char *str;
|
|
|
|
|
int len;
|
|
|
|
|
int allocated;
|
|
|
|
|
} MYSTRING;
|
|
|
|
|
|
|
|
|
|
/* structure used for handling multiple grant files */
|
|
|
|
|
char *grant_file_name;
|
|
|
|
|
MYSTRING *gstring = NULL;
|
|
|
|
|
MYSTRING *selective_gstring = NULL;
|
|
|
|
|
|
2000-01-17 15:51:05 +01:00
|
|
|
|
static MYSTRING *decode_decl PARAMS ((tree));
|
|
|
|
|
static MYSTRING *decode_constant PARAMS ((tree));
|
|
|
|
|
static void grant_one_decl PARAMS ((tree));
|
|
|
|
|
static MYSTRING *get_type PARAMS ((tree));
|
|
|
|
|
static MYSTRING *decode_mode PARAMS ((tree));
|
|
|
|
|
static MYSTRING *decode_prefix_rename PARAMS ((tree));
|
|
|
|
|
static MYSTRING *decode_constant_selective PARAMS ((tree, tree));
|
|
|
|
|
static MYSTRING *decode_mode_selective PARAMS ((tree, tree));
|
|
|
|
|
static MYSTRING *get_type_selective PARAMS ((tree, tree));
|
|
|
|
|
static MYSTRING *decode_decl_selective PARAMS ((tree, tree));
|
|
|
|
|
static MYSTRING *newstring PARAMS ((const char *));
|
|
|
|
|
static void strfree PARAMS ((MYSTRING *));
|
|
|
|
|
static MYSTRING *append PARAMS ((MYSTRING *, const char *));
|
|
|
|
|
static MYSTRING *prepend PARAMS ((MYSTRING *, const char *));
|
|
|
|
|
static void grant_use_seizefile PARAMS ((const char *));
|
|
|
|
|
static MYSTRING *decode_layout PARAMS ((tree));
|
|
|
|
|
static MYSTRING *grant_array_type PARAMS ((tree));
|
|
|
|
|
static MYSTRING *grant_array_type_selective PARAMS ((tree, tree));
|
|
|
|
|
static MYSTRING *get_tag_value PARAMS ((tree));
|
|
|
|
|
static MYSTRING *get_tag_value_selective PARAMS ((tree, tree));
|
|
|
|
|
static MYSTRING *print_enumeral PARAMS ((tree));
|
|
|
|
|
static MYSTRING *print_enumeral_selective PARAMS ((tree, tree));
|
|
|
|
|
static MYSTRING *print_integer_type PARAMS ((tree));
|
|
|
|
|
static tree find_enum_parent PARAMS ((tree, tree));
|
|
|
|
|
static MYSTRING *print_integer_selective PARAMS ((tree, tree));
|
|
|
|
|
static MYSTRING *print_struct PARAMS ((tree));
|
|
|
|
|
static MYSTRING *print_struct_selective PARAMS ((tree, tree));
|
|
|
|
|
static MYSTRING *print_proc_exceptions PARAMS ((tree));
|
|
|
|
|
static MYSTRING *print_proc_tail PARAMS ((tree, tree, int));
|
|
|
|
|
static MYSTRING *print_proc_tail_selective PARAMS ((tree, tree, tree));
|
|
|
|
|
static tree find_in_decls PARAMS ((tree, tree));
|
|
|
|
|
static int in_ridpointers PARAMS ((tree));
|
|
|
|
|
static void grant_seized_identifier PARAMS ((tree));
|
|
|
|
|
static void globalize_decl PARAMS ((tree));
|
|
|
|
|
static void grant_one_decl_selective PARAMS ((tree, tree));
|
|
|
|
|
static int compare_memory_file PARAMS ((const char *, const char *));
|
|
|
|
|
static int search_in_list PARAMS ((tree, tree));
|
|
|
|
|
static int really_grant_this PARAMS ((tree, tree));
|
1998-08-27 22:51:39 +02:00
|
|
|
|
|
|
|
|
|
/* list of the VAR_DECLs of the module initializer entries */
|
|
|
|
|
tree module_init_list = NULL_TREE;
|
|
|
|
|
|
|
|
|
|
/* handle different USE_SEIZE_FILE's in case of selective granting */
|
|
|
|
|
typedef struct SEIZEFILELIST
|
|
|
|
|
{
|
|
|
|
|
struct SEIZEFILELIST *next;
|
|
|
|
|
tree filename;
|
|
|
|
|
MYSTRING *seizes;
|
|
|
|
|
} seizefile_list;
|
|
|
|
|
|
|
|
|
|
static seizefile_list *selective_seizes = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
newstring (str)
|
Makefile.in (ch-version.c): Constify a char*.
* Makefile.in (ch-version.c): Constify a char*.
* actions.c (id_cmp, warn_unhandled, adjust_return_value,
update_else_range_for_int_const, update_else_range_for_range,
update_else_range_for_range_expr, update_else_range_for_type,
compute_else_range, check_case_value,
chill_handle_case_label_range,
chill_handle_multi_case_label_range,
chill_handle_multi_case_else_label, chill_handle_multi_case_label,
chill_handle_multi_case_label_list print_missing_cases): Add
static prototypes.
(build_exception_variant): Cast the function argument of qsort.
(build_rts_call, warn_unhandled, chill_convert_for_assignment,
adjust_return_value, chill_expand_result,
build_multi_case_selector_expression, print_missing_cases):
Constify a char*.
(print_missing_cases): Introduce an intermediary non-const ptr.
Add brackets and indent.
* ch-tree.h (maybe_building_objc_message_expr,
maybe_objc_comptypes, comptypes_record_hook): Remove declarations.
(push_handler, pop_handler): Add prototypes.
(builtin_function, valid_array_index_p,
build_chill_exception_decl, build_rts_call,
chill_convert_for_assignment, display_int_cst,
build_chill_addr_expr, check_have_mode, get_identifier3,
build_chill_string, register_seize_path, get_unique_identifier,
add_taskstuff_to_list, gnuchill_version): Constify a char*.
(finish_chill_function): Add void prototype argument.
* convert.c (convert_to_reference, convert_to_boolean,
convert_to_char, base_type_size_in_bytes, remove_tree_element,
check_ps_range, digest_powerset_tuple, digest_structure_tuple,
digest_array_tuple, convert1): Add static prototypes.
(base_type_size_in_bytes): Hide unused function.
(display_int_cst, digest_array_tuple): Constify a char*.
* decl.c (set_nesting_level, make_chill_variants, fix_identifier,
proclaim_decl, maybe_acons, push_scope_decls, pop_scope_decls,
build_implied_names, bind_sub_modules, layout_array_type,
do_based_decl, handle_one_level, label_value_cmp,
find_implied_types): Add static prototypes.
(boolean_code_name, chill_tree_code_type, chill_tree_code_name):
Constify a char*.
(layout_chill_variants): Cast the function argument of qsort.
(start_chill_function, fix_identifier, init_decl_processing):
Constify a char*.
(init_decl_processing): Prefer memcpy over bcopy to avoid casts.
Use xcalloc instead of xmalloc/bzero.
(builtin_function, build_chill_exception_decl,
finish_outer_function): Constify a char*.
* except.c (start_handler_array, finish_handler_array): Add static
prototypes.
* expr.c (chill_expand_expr, chill_expand_case_expr,
check_arglist_length, internal_build_compound_expr,
is_really_instance, invalid_operand, invalid_right_operand,
build_chill_abstime, build_allocate_memory_call,
build_allocate_global_memory_call, build_return_memory,
build_chill_duration, build_chill_floatcall,
build_allocate_getstack, build_chill_allocate,
build_chill_getstack, build_chill_terminate, build_chill_inttime,
build_chill_lower_or_upper, build_max_min,
build_chill_pred_or_succ, expand_packed_set, fold_set_expr,
build_compare_set_expr, scalar_to_string, build_concat_expr,
build_compare_string_expr, compare_records, string_char_rep,
build_boring_bitstring): Add static prototypes.
(check_have_mode, chill_expand_expr, build_chill_floatcall,
build_allocate_getstack, build_max_min, build_chill_function_call,
expand_packed_set, build_compare_set_expr, build_chill_addr_expr,
string_char_rep): Constify a char*.
* gperf (hash, in_word_set): Add prototypes.
* grant.c (newstring, strfree, append, prepend,
grant_use_seizefile, decode_layout, grant_array_type,
grant_array_type_selective, get_tag_value,
get_tag_value_selective, print_enumeral, print_enumeral_selective,
print_integer_type, find_enum_parent, print_integer_selective,
print_struct, print_struct_selective, print_proc_exceptions,
print_proc_tail, print_proc_tail_selective, find_in_decls,
in_ridpointers, grant_seized_identifier, globalize_decl,
grant_one_decl_selective, compare_memory_file, search_in_list,
really_grant_this): Add static prototypes.
(newstring, append, prepend, grant_use_seizefile,
print_integer_type, decode_constant, grant_one_decl_selective,
header_template): Constify a char *.
* inout.c (add_enum_to_list, build_chill_io_list_type,
build_io_types, declare_predefined_file, build_access_part,
textlocation_mode, check_assoc, assoc_call, check_transfer,
connect_process_optionals, connect_text, connect_access,
check_access, check_text, get_final_type_and_range,
process_io_list, check_format_string, get_max_size,
check_exprlist): Add static prototypes.
(declare_predefined_file, check_assoc, assoc_call, check_transfer,
check_access, check_text, process_io_list): Constify a char*.
* lang.c (deep_const_expr, chill_print_error_function): Add static
prototypes.
* lex.c (close_input_file, maybe_number, string_or_char): Constify
a char*.
(ch_lex_init, skip_directive, same_file, getlc, yywrap,
yy_refill): Add static prototypes.
(build_chill_string, same_file, register_seize_path): Constify a
char*.
* lex.h (finish_chill_seizes): Remove unused prototypes.
* loop.c (build_temporary_variable, maybe_make_for_temp,
get_unique_identifier): Constify a char*.
* parse.c (ch_parse_init, check_end_label, end_function,
build_prefix_clause, PEEK_TOKEN, peek_token_, pushback_token,
forward_token_, require, check_token, expect, define__PROCNAME__):
Add static prototypes.
(build_prefix_clause, expect): Constify a char*.
(parse_expression, parse_primval, parse_untyped_expr,
parse_opt_untyped_expr, parse_opt_actions): Add void prototype
argument.
(parse_opt_name_string, parse_simple_name_string,
parse_name_string, parse_defining_occurrence, parse_name,
parse_optlabel, parse_opt_end_label_semi_colon, parse_modulion,
parse_spec_module, parse_semi_colon,
parse_defining_occurrence_list, parse_mode_definition,
parse_mode_definition_statement, parse_synonym_definition,
parse_synonym_definition_statement, parse_on_exception_list,
parse_on_alternatives, parse_loc_declaration,
parse_declaration_statement, parse_optforbid, parse_postfix,
parse_postfix_list, parse_rename_clauses, parse_opt_prefix_clause,
parse_grant_statement, parse_seize_statement,
parse_param_name_list, parse_param_attr, parse_formpar,
parse_formparlist, parse_opt_result_spec, parse_opt_except,
parse_opt_recursive, parse_procedureattr, parse_proc_body,
parse_procedure_definition, parse_processpar,
parse_processparlist, parse_process_definition,
parse_signal_definition, parse_signal_definition_statement,
parse_then_clause, parse_opt_else_clause, parse_expr_list,
parse_range_list_clause, pushback_paren_expr, parse_case_label,
parse_case_label_list, parse_case_label_specification,
parse_single_dimension_case_action,
parse_multi_dimension_case_action, parse_case_action,
parse_asm_operands, parse_asm_clobbers, ch_expand_asm_operands,
parse_asm_action, parse_begin_end_block, parse_if_action,
parse_iteration, parse_delay_case_event_list,
parse_delay_case_action, parse_do_action, parse_receive_spec,
parse_receive_case_action, parse_send_action, parse_start_action,
parse_call, parse_tuple_fieldname_list, parse_tuple_element,
parse_opt_element_list, parse_tuple, parse_operand6,
parse_operand5, parse_operand4, parse_operand3, parse_operand2,
parse_operand1, parse_operand0, parse_case_expression,
parse_then_alternative, parse_else_alternative,
parse_if_expression, parse_index_mode, parse_set_mode, parse_pos,
parse_step, parse_opt_layout, parse_field_name_list,
parse_fixed_field, parse_variant_field_list,
parse_variant_alternative, parse_field, parse_structure_mode,
parse_opt_queue_size, parse_procedure_mode, parse_program,
parse_pass_1_2): Add static prototypes.
(parse_process_definition): Remove extra argument in function call.
(parse_range_list_clause): Likewise.
* satisfy.c (satisfy, cycle_error_print, safe_satisfy_decl,
satisfy_list, satisfy_list_values): Add static prototype.
(safe_satisfy_decl): Cast DECL_TASKING_CODE_DECL() to (tree).
* tasking.c (make_process_struct): Remove unused prototype.
(validate_process_parameters, get_struct_variable_name,
decl_tasking_code_variable, get_struct_debug_type_name,
get_process_wrapper_name, build_tasking_enum,
build_tasking_message_type, build_receive_signal_case_label,
build_receive_buffer_case_label, build_receive_buffer_case_end,
build_receive_signal_case_end): Add static prototypes.
(struct_name, struct_debug_name, data_name, wrapper_name,
get_struct_type_name, get_struct_debug_type_name,
get_tasking_code_name, get_struct_variable_name,
get_process_wrapper_name): Constify a char*.
(validate_process_parameters, get_struct_variable_name,
decl_tasking_code_variable): Hide unused functions.
(build_start_process, add_taskstuff_to_list, build_queue_length):
Constify a char*.
* tree.c (make_powerset_type): Add static prototype.
(get_identifier3, build_alias_decl, decl_check_rename): Constify a
char*.
* typeck.c (extract_constant_from_buffer,
expand_constant_to_buffer, build_empty_string,
make_chill_pointer_type, make_chill_range_type,
apply_chill_array_layout, field_decl_cmp, make_chill_struct_type,
apply_chill_field_layout): Add static prototype.
(valid_array_index_p, extract_constant_from_buffer,
chill_expand_tuple): Constify a char*.
(layout_chill_struct_type): Cast the function argument of qsort.
From-SVN: r28965
1999-08-29 15:34:10 +02:00
|
|
|
|
const char *str;
|
1998-08-27 22:51:39 +02:00
|
|
|
|
{
|
|
|
|
|
MYSTRING *tmp = (MYSTRING *) xmalloc (sizeof (MYSTRING));
|
|
|
|
|
unsigned len = strlen (str);
|
|
|
|
|
|
|
|
|
|
tmp->allocated = len + ALLOCAMOUNT;
|
|
|
|
|
tmp->str = xmalloc ((unsigned)tmp->allocated);
|
|
|
|
|
strcpy (tmp->str, str);
|
|
|
|
|
tmp->len = len;
|
|
|
|
|
return (tmp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
strfree (str)
|
|
|
|
|
MYSTRING *str;
|
|
|
|
|
{
|
|
|
|
|
free (str->str);
|
|
|
|
|
free (str);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
append (inout, in)
|
|
|
|
|
MYSTRING *inout;
|
Makefile.in (ch-version.c): Constify a char*.
* Makefile.in (ch-version.c): Constify a char*.
* actions.c (id_cmp, warn_unhandled, adjust_return_value,
update_else_range_for_int_const, update_else_range_for_range,
update_else_range_for_range_expr, update_else_range_for_type,
compute_else_range, check_case_value,
chill_handle_case_label_range,
chill_handle_multi_case_label_range,
chill_handle_multi_case_else_label, chill_handle_multi_case_label,
chill_handle_multi_case_label_list print_missing_cases): Add
static prototypes.
(build_exception_variant): Cast the function argument of qsort.
(build_rts_call, warn_unhandled, chill_convert_for_assignment,
adjust_return_value, chill_expand_result,
build_multi_case_selector_expression, print_missing_cases):
Constify a char*.
(print_missing_cases): Introduce an intermediary non-const ptr.
Add brackets and indent.
* ch-tree.h (maybe_building_objc_message_expr,
maybe_objc_comptypes, comptypes_record_hook): Remove declarations.
(push_handler, pop_handler): Add prototypes.
(builtin_function, valid_array_index_p,
build_chill_exception_decl, build_rts_call,
chill_convert_for_assignment, display_int_cst,
build_chill_addr_expr, check_have_mode, get_identifier3,
build_chill_string, register_seize_path, get_unique_identifier,
add_taskstuff_to_list, gnuchill_version): Constify a char*.
(finish_chill_function): Add void prototype argument.
* convert.c (convert_to_reference, convert_to_boolean,
convert_to_char, base_type_size_in_bytes, remove_tree_element,
check_ps_range, digest_powerset_tuple, digest_structure_tuple,
digest_array_tuple, convert1): Add static prototypes.
(base_type_size_in_bytes): Hide unused function.
(display_int_cst, digest_array_tuple): Constify a char*.
* decl.c (set_nesting_level, make_chill_variants, fix_identifier,
proclaim_decl, maybe_acons, push_scope_decls, pop_scope_decls,
build_implied_names, bind_sub_modules, layout_array_type,
do_based_decl, handle_one_level, label_value_cmp,
find_implied_types): Add static prototypes.
(boolean_code_name, chill_tree_code_type, chill_tree_code_name):
Constify a char*.
(layout_chill_variants): Cast the function argument of qsort.
(start_chill_function, fix_identifier, init_decl_processing):
Constify a char*.
(init_decl_processing): Prefer memcpy over bcopy to avoid casts.
Use xcalloc instead of xmalloc/bzero.
(builtin_function, build_chill_exception_decl,
finish_outer_function): Constify a char*.
* except.c (start_handler_array, finish_handler_array): Add static
prototypes.
* expr.c (chill_expand_expr, chill_expand_case_expr,
check_arglist_length, internal_build_compound_expr,
is_really_instance, invalid_operand, invalid_right_operand,
build_chill_abstime, build_allocate_memory_call,
build_allocate_global_memory_call, build_return_memory,
build_chill_duration, build_chill_floatcall,
build_allocate_getstack, build_chill_allocate,
build_chill_getstack, build_chill_terminate, build_chill_inttime,
build_chill_lower_or_upper, build_max_min,
build_chill_pred_or_succ, expand_packed_set, fold_set_expr,
build_compare_set_expr, scalar_to_string, build_concat_expr,
build_compare_string_expr, compare_records, string_char_rep,
build_boring_bitstring): Add static prototypes.
(check_have_mode, chill_expand_expr, build_chill_floatcall,
build_allocate_getstack, build_max_min, build_chill_function_call,
expand_packed_set, build_compare_set_expr, build_chill_addr_expr,
string_char_rep): Constify a char*.
* gperf (hash, in_word_set): Add prototypes.
* grant.c (newstring, strfree, append, prepend,
grant_use_seizefile, decode_layout, grant_array_type,
grant_array_type_selective, get_tag_value,
get_tag_value_selective, print_enumeral, print_enumeral_selective,
print_integer_type, find_enum_parent, print_integer_selective,
print_struct, print_struct_selective, print_proc_exceptions,
print_proc_tail, print_proc_tail_selective, find_in_decls,
in_ridpointers, grant_seized_identifier, globalize_decl,
grant_one_decl_selective, compare_memory_file, search_in_list,
really_grant_this): Add static prototypes.
(newstring, append, prepend, grant_use_seizefile,
print_integer_type, decode_constant, grant_one_decl_selective,
header_template): Constify a char *.
* inout.c (add_enum_to_list, build_chill_io_list_type,
build_io_types, declare_predefined_file, build_access_part,
textlocation_mode, check_assoc, assoc_call, check_transfer,
connect_process_optionals, connect_text, connect_access,
check_access, check_text, get_final_type_and_range,
process_io_list, check_format_string, get_max_size,
check_exprlist): Add static prototypes.
(declare_predefined_file, check_assoc, assoc_call, check_transfer,
check_access, check_text, process_io_list): Constify a char*.
* lang.c (deep_const_expr, chill_print_error_function): Add static
prototypes.
* lex.c (close_input_file, maybe_number, string_or_char): Constify
a char*.
(ch_lex_init, skip_directive, same_file, getlc, yywrap,
yy_refill): Add static prototypes.
(build_chill_string, same_file, register_seize_path): Constify a
char*.
* lex.h (finish_chill_seizes): Remove unused prototypes.
* loop.c (build_temporary_variable, maybe_make_for_temp,
get_unique_identifier): Constify a char*.
* parse.c (ch_parse_init, check_end_label, end_function,
build_prefix_clause, PEEK_TOKEN, peek_token_, pushback_token,
forward_token_, require, check_token, expect, define__PROCNAME__):
Add static prototypes.
(build_prefix_clause, expect): Constify a char*.
(parse_expression, parse_primval, parse_untyped_expr,
parse_opt_untyped_expr, parse_opt_actions): Add void prototype
argument.
(parse_opt_name_string, parse_simple_name_string,
parse_name_string, parse_defining_occurrence, parse_name,
parse_optlabel, parse_opt_end_label_semi_colon, parse_modulion,
parse_spec_module, parse_semi_colon,
parse_defining_occurrence_list, parse_mode_definition,
parse_mode_definition_statement, parse_synonym_definition,
parse_synonym_definition_statement, parse_on_exception_list,
parse_on_alternatives, parse_loc_declaration,
parse_declaration_statement, parse_optforbid, parse_postfix,
parse_postfix_list, parse_rename_clauses, parse_opt_prefix_clause,
parse_grant_statement, parse_seize_statement,
parse_param_name_list, parse_param_attr, parse_formpar,
parse_formparlist, parse_opt_result_spec, parse_opt_except,
parse_opt_recursive, parse_procedureattr, parse_proc_body,
parse_procedure_definition, parse_processpar,
parse_processparlist, parse_process_definition,
parse_signal_definition, parse_signal_definition_statement,
parse_then_clause, parse_opt_else_clause, parse_expr_list,
parse_range_list_clause, pushback_paren_expr, parse_case_label,
parse_case_label_list, parse_case_label_specification,
parse_single_dimension_case_action,
parse_multi_dimension_case_action, parse_case_action,
parse_asm_operands, parse_asm_clobbers, ch_expand_asm_operands,
parse_asm_action, parse_begin_end_block, parse_if_action,
parse_iteration, parse_delay_case_event_list,
parse_delay_case_action, parse_do_action, parse_receive_spec,
parse_receive_case_action, parse_send_action, parse_start_action,
parse_call, parse_tuple_fieldname_list, parse_tuple_element,
parse_opt_element_list, parse_tuple, parse_operand6,
parse_operand5, parse_operand4, parse_operand3, parse_operand2,
parse_operand1, parse_operand0, parse_case_expression,
parse_then_alternative, parse_else_alternative,
parse_if_expression, parse_index_mode, parse_set_mode, parse_pos,
parse_step, parse_opt_layout, parse_field_name_list,
parse_fixed_field, parse_variant_field_list,
parse_variant_alternative, parse_field, parse_structure_mode,
parse_opt_queue_size, parse_procedure_mode, parse_program,
parse_pass_1_2): Add static prototypes.
(parse_process_definition): Remove extra argument in function call.
(parse_range_list_clause): Likewise.
* satisfy.c (satisfy, cycle_error_print, safe_satisfy_decl,
satisfy_list, satisfy_list_values): Add static prototype.
(safe_satisfy_decl): Cast DECL_TASKING_CODE_DECL() to (tree).
* tasking.c (make_process_struct): Remove unused prototype.
(validate_process_parameters, get_struct_variable_name,
decl_tasking_code_variable, get_struct_debug_type_name,
get_process_wrapper_name, build_tasking_enum,
build_tasking_message_type, build_receive_signal_case_label,
build_receive_buffer_case_label, build_receive_buffer_case_end,
build_receive_signal_case_end): Add static prototypes.
(struct_name, struct_debug_name, data_name, wrapper_name,
get_struct_type_name, get_struct_debug_type_name,
get_tasking_code_name, get_struct_variable_name,
get_process_wrapper_name): Constify a char*.
(validate_process_parameters, get_struct_variable_name,
decl_tasking_code_variable): Hide unused functions.
(build_start_process, add_taskstuff_to_list, build_queue_length):
Constify a char*.
* tree.c (make_powerset_type): Add static prototype.
(get_identifier3, build_alias_decl, decl_check_rename): Constify a
char*.
* typeck.c (extract_constant_from_buffer,
expand_constant_to_buffer, build_empty_string,
make_chill_pointer_type, make_chill_range_type,
apply_chill_array_layout, field_decl_cmp, make_chill_struct_type,
apply_chill_field_layout): Add static prototype.
(valid_array_index_p, extract_constant_from_buffer,
chill_expand_tuple): Constify a char*.
(layout_chill_struct_type): Cast the function argument of qsort.
From-SVN: r28965
1999-08-29 15:34:10 +02:00
|
|
|
|
const char *in;
|
1998-08-27 22:51:39 +02:00
|
|
|
|
{
|
|
|
|
|
int inlen = strlen (in);
|
|
|
|
|
int amount = ALLOCAMOUNT;
|
|
|
|
|
|
|
|
|
|
if (inlen >= amount)
|
|
|
|
|
amount += inlen;
|
|
|
|
|
if ((inout->len + inlen) >= inout->allocated)
|
|
|
|
|
inout->str = xrealloc (inout->str, inout->allocated += amount);
|
|
|
|
|
strcpy (inout->str + inout->len, in);
|
|
|
|
|
inout->len += inlen;
|
|
|
|
|
return (inout);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
prepend (inout, in)
|
|
|
|
|
MYSTRING *inout;
|
Makefile.in (ch-version.c): Constify a char*.
* Makefile.in (ch-version.c): Constify a char*.
* actions.c (id_cmp, warn_unhandled, adjust_return_value,
update_else_range_for_int_const, update_else_range_for_range,
update_else_range_for_range_expr, update_else_range_for_type,
compute_else_range, check_case_value,
chill_handle_case_label_range,
chill_handle_multi_case_label_range,
chill_handle_multi_case_else_label, chill_handle_multi_case_label,
chill_handle_multi_case_label_list print_missing_cases): Add
static prototypes.
(build_exception_variant): Cast the function argument of qsort.
(build_rts_call, warn_unhandled, chill_convert_for_assignment,
adjust_return_value, chill_expand_result,
build_multi_case_selector_expression, print_missing_cases):
Constify a char*.
(print_missing_cases): Introduce an intermediary non-const ptr.
Add brackets and indent.
* ch-tree.h (maybe_building_objc_message_expr,
maybe_objc_comptypes, comptypes_record_hook): Remove declarations.
(push_handler, pop_handler): Add prototypes.
(builtin_function, valid_array_index_p,
build_chill_exception_decl, build_rts_call,
chill_convert_for_assignment, display_int_cst,
build_chill_addr_expr, check_have_mode, get_identifier3,
build_chill_string, register_seize_path, get_unique_identifier,
add_taskstuff_to_list, gnuchill_version): Constify a char*.
(finish_chill_function): Add void prototype argument.
* convert.c (convert_to_reference, convert_to_boolean,
convert_to_char, base_type_size_in_bytes, remove_tree_element,
check_ps_range, digest_powerset_tuple, digest_structure_tuple,
digest_array_tuple, convert1): Add static prototypes.
(base_type_size_in_bytes): Hide unused function.
(display_int_cst, digest_array_tuple): Constify a char*.
* decl.c (set_nesting_level, make_chill_variants, fix_identifier,
proclaim_decl, maybe_acons, push_scope_decls, pop_scope_decls,
build_implied_names, bind_sub_modules, layout_array_type,
do_based_decl, handle_one_level, label_value_cmp,
find_implied_types): Add static prototypes.
(boolean_code_name, chill_tree_code_type, chill_tree_code_name):
Constify a char*.
(layout_chill_variants): Cast the function argument of qsort.
(start_chill_function, fix_identifier, init_decl_processing):
Constify a char*.
(init_decl_processing): Prefer memcpy over bcopy to avoid casts.
Use xcalloc instead of xmalloc/bzero.
(builtin_function, build_chill_exception_decl,
finish_outer_function): Constify a char*.
* except.c (start_handler_array, finish_handler_array): Add static
prototypes.
* expr.c (chill_expand_expr, chill_expand_case_expr,
check_arglist_length, internal_build_compound_expr,
is_really_instance, invalid_operand, invalid_right_operand,
build_chill_abstime, build_allocate_memory_call,
build_allocate_global_memory_call, build_return_memory,
build_chill_duration, build_chill_floatcall,
build_allocate_getstack, build_chill_allocate,
build_chill_getstack, build_chill_terminate, build_chill_inttime,
build_chill_lower_or_upper, build_max_min,
build_chill_pred_or_succ, expand_packed_set, fold_set_expr,
build_compare_set_expr, scalar_to_string, build_concat_expr,
build_compare_string_expr, compare_records, string_char_rep,
build_boring_bitstring): Add static prototypes.
(check_have_mode, chill_expand_expr, build_chill_floatcall,
build_allocate_getstack, build_max_min, build_chill_function_call,
expand_packed_set, build_compare_set_expr, build_chill_addr_expr,
string_char_rep): Constify a char*.
* gperf (hash, in_word_set): Add prototypes.
* grant.c (newstring, strfree, append, prepend,
grant_use_seizefile, decode_layout, grant_array_type,
grant_array_type_selective, get_tag_value,
get_tag_value_selective, print_enumeral, print_enumeral_selective,
print_integer_type, find_enum_parent, print_integer_selective,
print_struct, print_struct_selective, print_proc_exceptions,
print_proc_tail, print_proc_tail_selective, find_in_decls,
in_ridpointers, grant_seized_identifier, globalize_decl,
grant_one_decl_selective, compare_memory_file, search_in_list,
really_grant_this): Add static prototypes.
(newstring, append, prepend, grant_use_seizefile,
print_integer_type, decode_constant, grant_one_decl_selective,
header_template): Constify a char *.
* inout.c (add_enum_to_list, build_chill_io_list_type,
build_io_types, declare_predefined_file, build_access_part,
textlocation_mode, check_assoc, assoc_call, check_transfer,
connect_process_optionals, connect_text, connect_access,
check_access, check_text, get_final_type_and_range,
process_io_list, check_format_string, get_max_size,
check_exprlist): Add static prototypes.
(declare_predefined_file, check_assoc, assoc_call, check_transfer,
check_access, check_text, process_io_list): Constify a char*.
* lang.c (deep_const_expr, chill_print_error_function): Add static
prototypes.
* lex.c (close_input_file, maybe_number, string_or_char): Constify
a char*.
(ch_lex_init, skip_directive, same_file, getlc, yywrap,
yy_refill): Add static prototypes.
(build_chill_string, same_file, register_seize_path): Constify a
char*.
* lex.h (finish_chill_seizes): Remove unused prototypes.
* loop.c (build_temporary_variable, maybe_make_for_temp,
get_unique_identifier): Constify a char*.
* parse.c (ch_parse_init, check_end_label, end_function,
build_prefix_clause, PEEK_TOKEN, peek_token_, pushback_token,
forward_token_, require, check_token, expect, define__PROCNAME__):
Add static prototypes.
(build_prefix_clause, expect): Constify a char*.
(parse_expression, parse_primval, parse_untyped_expr,
parse_opt_untyped_expr, parse_opt_actions): Add void prototype
argument.
(parse_opt_name_string, parse_simple_name_string,
parse_name_string, parse_defining_occurrence, parse_name,
parse_optlabel, parse_opt_end_label_semi_colon, parse_modulion,
parse_spec_module, parse_semi_colon,
parse_defining_occurrence_list, parse_mode_definition,
parse_mode_definition_statement, parse_synonym_definition,
parse_synonym_definition_statement, parse_on_exception_list,
parse_on_alternatives, parse_loc_declaration,
parse_declaration_statement, parse_optforbid, parse_postfix,
parse_postfix_list, parse_rename_clauses, parse_opt_prefix_clause,
parse_grant_statement, parse_seize_statement,
parse_param_name_list, parse_param_attr, parse_formpar,
parse_formparlist, parse_opt_result_spec, parse_opt_except,
parse_opt_recursive, parse_procedureattr, parse_proc_body,
parse_procedure_definition, parse_processpar,
parse_processparlist, parse_process_definition,
parse_signal_definition, parse_signal_definition_statement,
parse_then_clause, parse_opt_else_clause, parse_expr_list,
parse_range_list_clause, pushback_paren_expr, parse_case_label,
parse_case_label_list, parse_case_label_specification,
parse_single_dimension_case_action,
parse_multi_dimension_case_action, parse_case_action,
parse_asm_operands, parse_asm_clobbers, ch_expand_asm_operands,
parse_asm_action, parse_begin_end_block, parse_if_action,
parse_iteration, parse_delay_case_event_list,
parse_delay_case_action, parse_do_action, parse_receive_spec,
parse_receive_case_action, parse_send_action, parse_start_action,
parse_call, parse_tuple_fieldname_list, parse_tuple_element,
parse_opt_element_list, parse_tuple, parse_operand6,
parse_operand5, parse_operand4, parse_operand3, parse_operand2,
parse_operand1, parse_operand0, parse_case_expression,
parse_then_alternative, parse_else_alternative,
parse_if_expression, parse_index_mode, parse_set_mode, parse_pos,
parse_step, parse_opt_layout, parse_field_name_list,
parse_fixed_field, parse_variant_field_list,
parse_variant_alternative, parse_field, parse_structure_mode,
parse_opt_queue_size, parse_procedure_mode, parse_program,
parse_pass_1_2): Add static prototypes.
(parse_process_definition): Remove extra argument in function call.
(parse_range_list_clause): Likewise.
* satisfy.c (satisfy, cycle_error_print, safe_satisfy_decl,
satisfy_list, satisfy_list_values): Add static prototype.
(safe_satisfy_decl): Cast DECL_TASKING_CODE_DECL() to (tree).
* tasking.c (make_process_struct): Remove unused prototype.
(validate_process_parameters, get_struct_variable_name,
decl_tasking_code_variable, get_struct_debug_type_name,
get_process_wrapper_name, build_tasking_enum,
build_tasking_message_type, build_receive_signal_case_label,
build_receive_buffer_case_label, build_receive_buffer_case_end,
build_receive_signal_case_end): Add static prototypes.
(struct_name, struct_debug_name, data_name, wrapper_name,
get_struct_type_name, get_struct_debug_type_name,
get_tasking_code_name, get_struct_variable_name,
get_process_wrapper_name): Constify a char*.
(validate_process_parameters, get_struct_variable_name,
decl_tasking_code_variable): Hide unused functions.
(build_start_process, add_taskstuff_to_list, build_queue_length):
Constify a char*.
* tree.c (make_powerset_type): Add static prototype.
(get_identifier3, build_alias_decl, decl_check_rename): Constify a
char*.
* typeck.c (extract_constant_from_buffer,
expand_constant_to_buffer, build_empty_string,
make_chill_pointer_type, make_chill_range_type,
apply_chill_array_layout, field_decl_cmp, make_chill_struct_type,
apply_chill_field_layout): Add static prototype.
(valid_array_index_p, extract_constant_from_buffer,
chill_expand_tuple): Constify a char*.
(layout_chill_struct_type): Cast the function argument of qsort.
From-SVN: r28965
1999-08-29 15:34:10 +02:00
|
|
|
|
const char *in;
|
1998-08-27 22:51:39 +02:00
|
|
|
|
{
|
|
|
|
|
MYSTRING *res = inout;
|
|
|
|
|
if (strlen (in))
|
|
|
|
|
{
|
|
|
|
|
res = newstring (in);
|
|
|
|
|
res = APPEND (res, inout->str);
|
|
|
|
|
FREE (inout);
|
|
|
|
|
}
|
|
|
|
|
return res;
|
|
|
|
|
}
|
|
|
|
|
|
Makefile.in (ch-version.c): Constify a char*.
* Makefile.in (ch-version.c): Constify a char*.
* actions.c (id_cmp, warn_unhandled, adjust_return_value,
update_else_range_for_int_const, update_else_range_for_range,
update_else_range_for_range_expr, update_else_range_for_type,
compute_else_range, check_case_value,
chill_handle_case_label_range,
chill_handle_multi_case_label_range,
chill_handle_multi_case_else_label, chill_handle_multi_case_label,
chill_handle_multi_case_label_list print_missing_cases): Add
static prototypes.
(build_exception_variant): Cast the function argument of qsort.
(build_rts_call, warn_unhandled, chill_convert_for_assignment,
adjust_return_value, chill_expand_result,
build_multi_case_selector_expression, print_missing_cases):
Constify a char*.
(print_missing_cases): Introduce an intermediary non-const ptr.
Add brackets and indent.
* ch-tree.h (maybe_building_objc_message_expr,
maybe_objc_comptypes, comptypes_record_hook): Remove declarations.
(push_handler, pop_handler): Add prototypes.
(builtin_function, valid_array_index_p,
build_chill_exception_decl, build_rts_call,
chill_convert_for_assignment, display_int_cst,
build_chill_addr_expr, check_have_mode, get_identifier3,
build_chill_string, register_seize_path, get_unique_identifier,
add_taskstuff_to_list, gnuchill_version): Constify a char*.
(finish_chill_function): Add void prototype argument.
* convert.c (convert_to_reference, convert_to_boolean,
convert_to_char, base_type_size_in_bytes, remove_tree_element,
check_ps_range, digest_powerset_tuple, digest_structure_tuple,
digest_array_tuple, convert1): Add static prototypes.
(base_type_size_in_bytes): Hide unused function.
(display_int_cst, digest_array_tuple): Constify a char*.
* decl.c (set_nesting_level, make_chill_variants, fix_identifier,
proclaim_decl, maybe_acons, push_scope_decls, pop_scope_decls,
build_implied_names, bind_sub_modules, layout_array_type,
do_based_decl, handle_one_level, label_value_cmp,
find_implied_types): Add static prototypes.
(boolean_code_name, chill_tree_code_type, chill_tree_code_name):
Constify a char*.
(layout_chill_variants): Cast the function argument of qsort.
(start_chill_function, fix_identifier, init_decl_processing):
Constify a char*.
(init_decl_processing): Prefer memcpy over bcopy to avoid casts.
Use xcalloc instead of xmalloc/bzero.
(builtin_function, build_chill_exception_decl,
finish_outer_function): Constify a char*.
* except.c (start_handler_array, finish_handler_array): Add static
prototypes.
* expr.c (chill_expand_expr, chill_expand_case_expr,
check_arglist_length, internal_build_compound_expr,
is_really_instance, invalid_operand, invalid_right_operand,
build_chill_abstime, build_allocate_memory_call,
build_allocate_global_memory_call, build_return_memory,
build_chill_duration, build_chill_floatcall,
build_allocate_getstack, build_chill_allocate,
build_chill_getstack, build_chill_terminate, build_chill_inttime,
build_chill_lower_or_upper, build_max_min,
build_chill_pred_or_succ, expand_packed_set, fold_set_expr,
build_compare_set_expr, scalar_to_string, build_concat_expr,
build_compare_string_expr, compare_records, string_char_rep,
build_boring_bitstring): Add static prototypes.
(check_have_mode, chill_expand_expr, build_chill_floatcall,
build_allocate_getstack, build_max_min, build_chill_function_call,
expand_packed_set, build_compare_set_expr, build_chill_addr_expr,
string_char_rep): Constify a char*.
* gperf (hash, in_word_set): Add prototypes.
* grant.c (newstring, strfree, append, prepend,
grant_use_seizefile, decode_layout, grant_array_type,
grant_array_type_selective, get_tag_value,
get_tag_value_selective, print_enumeral, print_enumeral_selective,
print_integer_type, find_enum_parent, print_integer_selective,
print_struct, print_struct_selective, print_proc_exceptions,
print_proc_tail, print_proc_tail_selective, find_in_decls,
in_ridpointers, grant_seized_identifier, globalize_decl,
grant_one_decl_selective, compare_memory_file, search_in_list,
really_grant_this): Add static prototypes.
(newstring, append, prepend, grant_use_seizefile,
print_integer_type, decode_constant, grant_one_decl_selective,
header_template): Constify a char *.
* inout.c (add_enum_to_list, build_chill_io_list_type,
build_io_types, declare_predefined_file, build_access_part,
textlocation_mode, check_assoc, assoc_call, check_transfer,
connect_process_optionals, connect_text, connect_access,
check_access, check_text, get_final_type_and_range,
process_io_list, check_format_string, get_max_size,
check_exprlist): Add static prototypes.
(declare_predefined_file, check_assoc, assoc_call, check_transfer,
check_access, check_text, process_io_list): Constify a char*.
* lang.c (deep_const_expr, chill_print_error_function): Add static
prototypes.
* lex.c (close_input_file, maybe_number, string_or_char): Constify
a char*.
(ch_lex_init, skip_directive, same_file, getlc, yywrap,
yy_refill): Add static prototypes.
(build_chill_string, same_file, register_seize_path): Constify a
char*.
* lex.h (finish_chill_seizes): Remove unused prototypes.
* loop.c (build_temporary_variable, maybe_make_for_temp,
get_unique_identifier): Constify a char*.
* parse.c (ch_parse_init, check_end_label, end_function,
build_prefix_clause, PEEK_TOKEN, peek_token_, pushback_token,
forward_token_, require, check_token, expect, define__PROCNAME__):
Add static prototypes.
(build_prefix_clause, expect): Constify a char*.
(parse_expression, parse_primval, parse_untyped_expr,
parse_opt_untyped_expr, parse_opt_actions): Add void prototype
argument.
(parse_opt_name_string, parse_simple_name_string,
parse_name_string, parse_defining_occurrence, parse_name,
parse_optlabel, parse_opt_end_label_semi_colon, parse_modulion,
parse_spec_module, parse_semi_colon,
parse_defining_occurrence_list, parse_mode_definition,
parse_mode_definition_statement, parse_synonym_definition,
parse_synonym_definition_statement, parse_on_exception_list,
parse_on_alternatives, parse_loc_declaration,
parse_declaration_statement, parse_optforbid, parse_postfix,
parse_postfix_list, parse_rename_clauses, parse_opt_prefix_clause,
parse_grant_statement, parse_seize_statement,
parse_param_name_list, parse_param_attr, parse_formpar,
parse_formparlist, parse_opt_result_spec, parse_opt_except,
parse_opt_recursive, parse_procedureattr, parse_proc_body,
parse_procedure_definition, parse_processpar,
parse_processparlist, parse_process_definition,
parse_signal_definition, parse_signal_definition_statement,
parse_then_clause, parse_opt_else_clause, parse_expr_list,
parse_range_list_clause, pushback_paren_expr, parse_case_label,
parse_case_label_list, parse_case_label_specification,
parse_single_dimension_case_action,
parse_multi_dimension_case_action, parse_case_action,
parse_asm_operands, parse_asm_clobbers, ch_expand_asm_operands,
parse_asm_action, parse_begin_end_block, parse_if_action,
parse_iteration, parse_delay_case_event_list,
parse_delay_case_action, parse_do_action, parse_receive_spec,
parse_receive_case_action, parse_send_action, parse_start_action,
parse_call, parse_tuple_fieldname_list, parse_tuple_element,
parse_opt_element_list, parse_tuple, parse_operand6,
parse_operand5, parse_operand4, parse_operand3, parse_operand2,
parse_operand1, parse_operand0, parse_case_expression,
parse_then_alternative, parse_else_alternative,
parse_if_expression, parse_index_mode, parse_set_mode, parse_pos,
parse_step, parse_opt_layout, parse_field_name_list,
parse_fixed_field, parse_variant_field_list,
parse_variant_alternative, parse_field, parse_structure_mode,
parse_opt_queue_size, parse_procedure_mode, parse_program,
parse_pass_1_2): Add static prototypes.
(parse_process_definition): Remove extra argument in function call.
(parse_range_list_clause): Likewise.
* satisfy.c (satisfy, cycle_error_print, safe_satisfy_decl,
satisfy_list, satisfy_list_values): Add static prototype.
(safe_satisfy_decl): Cast DECL_TASKING_CODE_DECL() to (tree).
* tasking.c (make_process_struct): Remove unused prototype.
(validate_process_parameters, get_struct_variable_name,
decl_tasking_code_variable, get_struct_debug_type_name,
get_process_wrapper_name, build_tasking_enum,
build_tasking_message_type, build_receive_signal_case_label,
build_receive_buffer_case_label, build_receive_buffer_case_end,
build_receive_signal_case_end): Add static prototypes.
(struct_name, struct_debug_name, data_name, wrapper_name,
get_struct_type_name, get_struct_debug_type_name,
get_tasking_code_name, get_struct_variable_name,
get_process_wrapper_name): Constify a char*.
(validate_process_parameters, get_struct_variable_name,
decl_tasking_code_variable): Hide unused functions.
(build_start_process, add_taskstuff_to_list, build_queue_length):
Constify a char*.
* tree.c (make_powerset_type): Add static prototype.
(get_identifier3, build_alias_decl, decl_check_rename): Constify a
char*.
* typeck.c (extract_constant_from_buffer,
expand_constant_to_buffer, build_empty_string,
make_chill_pointer_type, make_chill_range_type,
apply_chill_array_layout, field_decl_cmp, make_chill_struct_type,
apply_chill_field_layout): Add static prototype.
(valid_array_index_p, extract_constant_from_buffer,
chill_expand_tuple): Constify a char*.
(layout_chill_struct_type): Cast the function argument of qsort.
From-SVN: r28965
1999-08-29 15:34:10 +02:00
|
|
|
|
static void
|
1998-08-27 22:51:39 +02:00
|
|
|
|
grant_use_seizefile (seize_filename)
|
Makefile.in (ch-version.c): Constify a char*.
* Makefile.in (ch-version.c): Constify a char*.
* actions.c (id_cmp, warn_unhandled, adjust_return_value,
update_else_range_for_int_const, update_else_range_for_range,
update_else_range_for_range_expr, update_else_range_for_type,
compute_else_range, check_case_value,
chill_handle_case_label_range,
chill_handle_multi_case_label_range,
chill_handle_multi_case_else_label, chill_handle_multi_case_label,
chill_handle_multi_case_label_list print_missing_cases): Add
static prototypes.
(build_exception_variant): Cast the function argument of qsort.
(build_rts_call, warn_unhandled, chill_convert_for_assignment,
adjust_return_value, chill_expand_result,
build_multi_case_selector_expression, print_missing_cases):
Constify a char*.
(print_missing_cases): Introduce an intermediary non-const ptr.
Add brackets and indent.
* ch-tree.h (maybe_building_objc_message_expr,
maybe_objc_comptypes, comptypes_record_hook): Remove declarations.
(push_handler, pop_handler): Add prototypes.
(builtin_function, valid_array_index_p,
build_chill_exception_decl, build_rts_call,
chill_convert_for_assignment, display_int_cst,
build_chill_addr_expr, check_have_mode, get_identifier3,
build_chill_string, register_seize_path, get_unique_identifier,
add_taskstuff_to_list, gnuchill_version): Constify a char*.
(finish_chill_function): Add void prototype argument.
* convert.c (convert_to_reference, convert_to_boolean,
convert_to_char, base_type_size_in_bytes, remove_tree_element,
check_ps_range, digest_powerset_tuple, digest_structure_tuple,
digest_array_tuple, convert1): Add static prototypes.
(base_type_size_in_bytes): Hide unused function.
(display_int_cst, digest_array_tuple): Constify a char*.
* decl.c (set_nesting_level, make_chill_variants, fix_identifier,
proclaim_decl, maybe_acons, push_scope_decls, pop_scope_decls,
build_implied_names, bind_sub_modules, layout_array_type,
do_based_decl, handle_one_level, label_value_cmp,
find_implied_types): Add static prototypes.
(boolean_code_name, chill_tree_code_type, chill_tree_code_name):
Constify a char*.
(layout_chill_variants): Cast the function argument of qsort.
(start_chill_function, fix_identifier, init_decl_processing):
Constify a char*.
(init_decl_processing): Prefer memcpy over bcopy to avoid casts.
Use xcalloc instead of xmalloc/bzero.
(builtin_function, build_chill_exception_decl,
finish_outer_function): Constify a char*.
* except.c (start_handler_array, finish_handler_array): Add static
prototypes.
* expr.c (chill_expand_expr, chill_expand_case_expr,
check_arglist_length, internal_build_compound_expr,
is_really_instance, invalid_operand, invalid_right_operand,
build_chill_abstime, build_allocate_memory_call,
build_allocate_global_memory_call, build_return_memory,
build_chill_duration, build_chill_floatcall,
build_allocate_getstack, build_chill_allocate,
build_chill_getstack, build_chill_terminate, build_chill_inttime,
build_chill_lower_or_upper, build_max_min,
build_chill_pred_or_succ, expand_packed_set, fold_set_expr,
build_compare_set_expr, scalar_to_string, build_concat_expr,
build_compare_string_expr, compare_records, string_char_rep,
build_boring_bitstring): Add static prototypes.
(check_have_mode, chill_expand_expr, build_chill_floatcall,
build_allocate_getstack, build_max_min, build_chill_function_call,
expand_packed_set, build_compare_set_expr, build_chill_addr_expr,
string_char_rep): Constify a char*.
* gperf (hash, in_word_set): Add prototypes.
* grant.c (newstring, strfree, append, prepend,
grant_use_seizefile, decode_layout, grant_array_type,
grant_array_type_selective, get_tag_value,
get_tag_value_selective, print_enumeral, print_enumeral_selective,
print_integer_type, find_enum_parent, print_integer_selective,
print_struct, print_struct_selective, print_proc_exceptions,
print_proc_tail, print_proc_tail_selective, find_in_decls,
in_ridpointers, grant_seized_identifier, globalize_decl,
grant_one_decl_selective, compare_memory_file, search_in_list,
really_grant_this): Add static prototypes.
(newstring, append, prepend, grant_use_seizefile,
print_integer_type, decode_constant, grant_one_decl_selective,
header_template): Constify a char *.
* inout.c (add_enum_to_list, build_chill_io_list_type,
build_io_types, declare_predefined_file, build_access_part,
textlocation_mode, check_assoc, assoc_call, check_transfer,
connect_process_optionals, connect_text, connect_access,
check_access, check_text, get_final_type_and_range,
process_io_list, check_format_string, get_max_size,
check_exprlist): Add static prototypes.
(declare_predefined_file, check_assoc, assoc_call, check_transfer,
check_access, check_text, process_io_list): Constify a char*.
* lang.c (deep_const_expr, chill_print_error_function): Add static
prototypes.
* lex.c (close_input_file, maybe_number, string_or_char): Constify
a char*.
(ch_lex_init, skip_directive, same_file, getlc, yywrap,
yy_refill): Add static prototypes.
(build_chill_string, same_file, register_seize_path): Constify a
char*.
* lex.h (finish_chill_seizes): Remove unused prototypes.
* loop.c (build_temporary_variable, maybe_make_for_temp,
get_unique_identifier): Constify a char*.
* parse.c (ch_parse_init, check_end_label, end_function,
build_prefix_clause, PEEK_TOKEN, peek_token_, pushback_token,
forward_token_, require, check_token, expect, define__PROCNAME__):
Add static prototypes.
(build_prefix_clause, expect): Constify a char*.
(parse_expression, parse_primval, parse_untyped_expr,
parse_opt_untyped_expr, parse_opt_actions): Add void prototype
argument.
(parse_opt_name_string, parse_simple_name_string,
parse_name_string, parse_defining_occurrence, parse_name,
parse_optlabel, parse_opt_end_label_semi_colon, parse_modulion,
parse_spec_module, parse_semi_colon,
parse_defining_occurrence_list, parse_mode_definition,
parse_mode_definition_statement, parse_synonym_definition,
parse_synonym_definition_statement, parse_on_exception_list,
parse_on_alternatives, parse_loc_declaration,
parse_declaration_statement, parse_optforbid, parse_postfix,
parse_postfix_list, parse_rename_clauses, parse_opt_prefix_clause,
parse_grant_statement, parse_seize_statement,
parse_param_name_list, parse_param_attr, parse_formpar,
parse_formparlist, parse_opt_result_spec, parse_opt_except,
parse_opt_recursive, parse_procedureattr, parse_proc_body,
parse_procedure_definition, parse_processpar,
parse_processparlist, parse_process_definition,
parse_signal_definition, parse_signal_definition_statement,
parse_then_clause, parse_opt_else_clause, parse_expr_list,
parse_range_list_clause, pushback_paren_expr, parse_case_label,
parse_case_label_list, parse_case_label_specification,
parse_single_dimension_case_action,
parse_multi_dimension_case_action, parse_case_action,
parse_asm_operands, parse_asm_clobbers, ch_expand_asm_operands,
parse_asm_action, parse_begin_end_block, parse_if_action,
parse_iteration, parse_delay_case_event_list,
parse_delay_case_action, parse_do_action, parse_receive_spec,
parse_receive_case_action, parse_send_action, parse_start_action,
parse_call, parse_tuple_fieldname_list, parse_tuple_element,
parse_opt_element_list, parse_tuple, parse_operand6,
parse_operand5, parse_operand4, parse_operand3, parse_operand2,
parse_operand1, parse_operand0, parse_case_expression,
parse_then_alternative, parse_else_alternative,
parse_if_expression, parse_index_mode, parse_set_mode, parse_pos,
parse_step, parse_opt_layout, parse_field_name_list,
parse_fixed_field, parse_variant_field_list,
parse_variant_alternative, parse_field, parse_structure_mode,
parse_opt_queue_size, parse_procedure_mode, parse_program,
parse_pass_1_2): Add static prototypes.
(parse_process_definition): Remove extra argument in function call.
(parse_range_list_clause): Likewise.
* satisfy.c (satisfy, cycle_error_print, safe_satisfy_decl,
satisfy_list, satisfy_list_values): Add static prototype.
(safe_satisfy_decl): Cast DECL_TASKING_CODE_DECL() to (tree).
* tasking.c (make_process_struct): Remove unused prototype.
(validate_process_parameters, get_struct_variable_name,
decl_tasking_code_variable, get_struct_debug_type_name,
get_process_wrapper_name, build_tasking_enum,
build_tasking_message_type, build_receive_signal_case_label,
build_receive_buffer_case_label, build_receive_buffer_case_end,
build_receive_signal_case_end): Add static prototypes.
(struct_name, struct_debug_name, data_name, wrapper_name,
get_struct_type_name, get_struct_debug_type_name,
get_tasking_code_name, get_struct_variable_name,
get_process_wrapper_name): Constify a char*.
(validate_process_parameters, get_struct_variable_name,
decl_tasking_code_variable): Hide unused functions.
(build_start_process, add_taskstuff_to_list, build_queue_length):
Constify a char*.
* tree.c (make_powerset_type): Add static prototype.
(get_identifier3, build_alias_decl, decl_check_rename): Constify a
char*.
* typeck.c (extract_constant_from_buffer,
expand_constant_to_buffer, build_empty_string,
make_chill_pointer_type, make_chill_range_type,
apply_chill_array_layout, field_decl_cmp, make_chill_struct_type,
apply_chill_field_layout): Add static prototype.
(valid_array_index_p, extract_constant_from_buffer,
chill_expand_tuple): Constify a char*.
(layout_chill_struct_type): Cast the function argument of qsort.
From-SVN: r28965
1999-08-29 15:34:10 +02:00
|
|
|
|
const char *seize_filename;
|
1998-08-27 22:51:39 +02:00
|
|
|
|
{
|
|
|
|
|
APPEND (gstring, "<> USE_SEIZE_FILE \"");
|
|
|
|
|
APPEND (gstring, seize_filename);
|
|
|
|
|
APPEND (gstring, "\" <>\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
decode_layout (layout)
|
|
|
|
|
tree layout;
|
|
|
|
|
{
|
|
|
|
|
tree temp;
|
|
|
|
|
tree stepsize = NULL_TREE;
|
|
|
|
|
int was_step = 0;
|
|
|
|
|
MYSTRING *result = newstring ("");
|
|
|
|
|
MYSTRING *work;
|
|
|
|
|
|
|
|
|
|
if (layout == integer_zero_node) /* NOPACK */
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, " NOPACK");
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (layout == integer_one_node) /* PACK */
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, " PACK");
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
APPEND (result, " ");
|
|
|
|
|
temp = layout;
|
|
|
|
|
if (TREE_PURPOSE (temp) == NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, "STEP(");
|
|
|
|
|
was_step = 1;
|
|
|
|
|
temp = TREE_VALUE (temp);
|
|
|
|
|
stepsize = TREE_VALUE (temp);
|
|
|
|
|
}
|
|
|
|
|
APPEND (result, "POS(");
|
|
|
|
|
|
|
|
|
|
/* Get the starting word */
|
|
|
|
|
temp = TREE_PURPOSE (temp);
|
|
|
|
|
work = decode_constant (TREE_PURPOSE (temp));
|
|
|
|
|
APPEND (result, work->str);
|
|
|
|
|
FREE (work);
|
|
|
|
|
|
|
|
|
|
temp = TREE_VALUE (temp);
|
|
|
|
|
if (temp != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
/* Get the starting bit */
|
|
|
|
|
APPEND (result, ", ");
|
|
|
|
|
work = decode_constant (TREE_PURPOSE (temp));
|
|
|
|
|
APPEND (result, work->str);
|
|
|
|
|
FREE (work);
|
|
|
|
|
|
|
|
|
|
temp = TREE_VALUE (temp);
|
|
|
|
|
if (temp != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
/* Get the length or the ending bit */
|
|
|
|
|
tree what = TREE_PURPOSE (temp);
|
|
|
|
|
if (what == integer_zero_node) /* length */
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, ", ");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, ":");
|
|
|
|
|
}
|
|
|
|
|
work = decode_constant (TREE_VALUE (temp));
|
|
|
|
|
APPEND (result, work->str);
|
|
|
|
|
FREE (work);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
APPEND (result, ")");
|
|
|
|
|
|
|
|
|
|
if (was_step)
|
|
|
|
|
{
|
|
|
|
|
if (stepsize != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, ", ");
|
|
|
|
|
work = decode_constant (stepsize);
|
|
|
|
|
APPEND (result, work->str);
|
|
|
|
|
FREE (work);
|
|
|
|
|
}
|
|
|
|
|
APPEND (result, ")");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
grant_array_type (type)
|
|
|
|
|
tree type;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result = newstring ("");
|
|
|
|
|
MYSTRING *mode_string;
|
|
|
|
|
tree layout;
|
|
|
|
|
int varying = 0;
|
|
|
|
|
|
|
|
|
|
if (chill_varying_type_p (type))
|
|
|
|
|
{
|
|
|
|
|
varying = 1;
|
|
|
|
|
type = CH_VARYING_ARRAY_TYPE (type);
|
|
|
|
|
}
|
|
|
|
|
if (CH_STRING_TYPE_P (type))
|
|
|
|
|
{
|
|
|
|
|
tree fields = TYPE_DOMAIN (type);
|
|
|
|
|
tree maxval = TYPE_MAX_VALUE (fields);
|
|
|
|
|
|
|
|
|
|
if (TREE_CODE (TREE_TYPE (type)) == CHAR_TYPE)
|
|
|
|
|
APPEND (result, "CHARS (");
|
|
|
|
|
else
|
|
|
|
|
APPEND (result, "BOOLS (");
|
|
|
|
|
if (TREE_CODE (maxval) == INTEGER_CST)
|
|
|
|
|
{
|
|
|
|
|
char wrk[20];
|
1998-09-30 18:34:45 +02:00
|
|
|
|
sprintf (wrk, HOST_WIDE_INT_PRINT_DEC,
|
|
|
|
|
TREE_INT_CST_LOW (maxval) + 1);
|
1998-08-27 22:51:39 +02:00
|
|
|
|
APPEND (result, wrk);
|
|
|
|
|
}
|
|
|
|
|
else if (TREE_CODE (maxval) == MINUS_EXPR
|
|
|
|
|
&& TREE_OPERAND (maxval, 1) == integer_one_node)
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_constant (TREE_OPERAND (maxval, 0));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_constant (maxval);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
APPEND (result, "+1");
|
|
|
|
|
}
|
|
|
|
|
APPEND (result, ")");
|
|
|
|
|
if (varying)
|
|
|
|
|
APPEND (result, " VARYING");
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
APPEND (result, "ARRAY (");
|
|
|
|
|
if (TREE_CODE (TYPE_DOMAIN (type)) == INTEGER_TYPE
|
|
|
|
|
&& TREE_TYPE (TYPE_DOMAIN (type)) == ridpointers[(int) RID_RANGE])
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_constant (TYPE_MIN_VALUE (TYPE_DOMAIN (type)));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
|
|
|
|
|
APPEND (result, ":");
|
|
|
|
|
mode_string = decode_constant (TYPE_MAX_VALUE (TYPE_DOMAIN (type)));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_mode (TYPE_DOMAIN (type));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
APPEND (result, ") ");
|
|
|
|
|
if (varying)
|
|
|
|
|
APPEND (result, "VARYING ");
|
|
|
|
|
|
|
|
|
|
mode_string = get_type (TREE_TYPE (type));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
|
|
|
|
|
layout = TYPE_ATTRIBUTES (type);
|
|
|
|
|
if (layout != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_layout (layout);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
grant_array_type_selective (type, all_decls)
|
|
|
|
|
tree type;
|
|
|
|
|
tree all_decls;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result = newstring ("");
|
|
|
|
|
MYSTRING *mode_string;
|
|
|
|
|
int varying = 0;
|
|
|
|
|
|
|
|
|
|
if (chill_varying_type_p (type))
|
|
|
|
|
{
|
|
|
|
|
varying = 1;
|
|
|
|
|
type = CH_VARYING_ARRAY_TYPE (type);
|
|
|
|
|
}
|
|
|
|
|
if (CH_STRING_TYPE_P (type))
|
|
|
|
|
{
|
|
|
|
|
tree fields = TYPE_DOMAIN (type);
|
|
|
|
|
tree maxval = TYPE_MAX_VALUE (fields);
|
|
|
|
|
|
|
|
|
|
if (TREE_CODE (maxval) != INTEGER_CST)
|
|
|
|
|
{
|
|
|
|
|
if (TREE_CODE (maxval) == MINUS_EXPR
|
|
|
|
|
&& TREE_OPERAND (maxval, 1) == integer_one_node)
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_constant_selective (TREE_OPERAND (maxval, 0), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_constant_selective (maxval, all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (TREE_CODE (TYPE_DOMAIN (type)) == INTEGER_TYPE
|
|
|
|
|
&& TREE_TYPE (TYPE_DOMAIN (type)) == ridpointers[(int) RID_RANGE])
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_constant_selective (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
|
|
|
|
|
mode_string = decode_constant_selective (TYPE_MAX_VALUE (TYPE_DOMAIN (type)), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
{
|
|
|
|
|
MAYBE_NEWLINE (result);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_mode_selective (TYPE_DOMAIN (type), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mode_string = get_type_selective (TREE_TYPE (type), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
{
|
|
|
|
|
MAYBE_NEWLINE (result);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
get_tag_value (val)
|
|
|
|
|
tree val;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result;
|
|
|
|
|
|
|
|
|
|
if (TREE_CODE (val) == CONST_DECL && DECL_NAME (val))
|
|
|
|
|
{
|
|
|
|
|
result = newstring (IDENTIFIER_POINTER (DECL_NAME (val)));
|
|
|
|
|
}
|
|
|
|
|
else if (TREE_CODE (val) == CONST_DECL)
|
|
|
|
|
{
|
|
|
|
|
/* it's a synonym -- get the value */
|
|
|
|
|
result = decode_constant (DECL_INITIAL (val));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
result = decode_constant (val);
|
|
|
|
|
}
|
|
|
|
|
return (result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
get_tag_value_selective (val, all_decls)
|
|
|
|
|
tree val;
|
|
|
|
|
tree all_decls;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result;
|
|
|
|
|
|
|
|
|
|
if (TREE_CODE (val) == CONST_DECL && DECL_NAME (val))
|
|
|
|
|
result = newstring ("");
|
|
|
|
|
else if (TREE_CODE (val) == CONST_DECL)
|
|
|
|
|
{
|
|
|
|
|
/* it's a synonym -- get the value */
|
|
|
|
|
result = decode_constant_selective (DECL_INITIAL (val), all_decls);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
result = decode_constant_selective (val, all_decls);
|
|
|
|
|
}
|
|
|
|
|
return (result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
print_enumeral (type)
|
|
|
|
|
tree type;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result = newstring ("");
|
|
|
|
|
tree fields;
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
|
if (TYPE_LANG_SPECIFIC (type) == NULL)
|
|
|
|
|
#endif
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
APPEND (result, "SET (");
|
|
|
|
|
for (fields = TYPE_VALUES (type);
|
|
|
|
|
fields != NULL_TREE;
|
|
|
|
|
fields = TREE_CHAIN (fields))
|
|
|
|
|
{
|
|
|
|
|
if (TREE_PURPOSE (fields) == NULL_TREE)
|
|
|
|
|
APPEND (result, "*");
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
tree decl = TREE_VALUE (fields);
|
|
|
|
|
APPEND (result, IDENTIFIER_POINTER (TREE_PURPOSE (fields)));
|
|
|
|
|
if (TREE_CODE (decl) == CONST_DECL && DECL_INITIAL (decl))
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *val_string = decode_constant (DECL_INITIAL (decl));
|
|
|
|
|
APPEND (result, " = ");
|
|
|
|
|
APPEND (result, val_string->str);
|
|
|
|
|
FREE (val_string);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (TREE_CHAIN (fields) != NULL_TREE)
|
|
|
|
|
APPEND (result, ",\n ");
|
|
|
|
|
}
|
|
|
|
|
APPEND (result, ")");
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
print_enumeral_selective (type, all_decls)
|
|
|
|
|
tree type;
|
|
|
|
|
tree all_decls;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result = newstring ("");
|
|
|
|
|
tree fields;
|
|
|
|
|
|
|
|
|
|
for (fields = TYPE_VALUES (type);
|
|
|
|
|
fields != NULL_TREE;
|
|
|
|
|
fields = TREE_CHAIN (fields))
|
|
|
|
|
{
|
|
|
|
|
if (TREE_PURPOSE (fields) != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
tree decl = TREE_VALUE (fields);
|
|
|
|
|
if (TREE_CODE (decl) == CONST_DECL && DECL_INITIAL (decl))
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *val_string = decode_constant_selective (DECL_INITIAL (decl), all_decls);
|
|
|
|
|
if (val_string->len)
|
|
|
|
|
APPEND (result, val_string->str);
|
|
|
|
|
FREE (val_string);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
print_integer_type (type)
|
|
|
|
|
tree type;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result = newstring ("");
|
|
|
|
|
MYSTRING *mode_string;
|
Makefile.in (ch-version.c): Constify a char*.
* Makefile.in (ch-version.c): Constify a char*.
* actions.c (id_cmp, warn_unhandled, adjust_return_value,
update_else_range_for_int_const, update_else_range_for_range,
update_else_range_for_range_expr, update_else_range_for_type,
compute_else_range, check_case_value,
chill_handle_case_label_range,
chill_handle_multi_case_label_range,
chill_handle_multi_case_else_label, chill_handle_multi_case_label,
chill_handle_multi_case_label_list print_missing_cases): Add
static prototypes.
(build_exception_variant): Cast the function argument of qsort.
(build_rts_call, warn_unhandled, chill_convert_for_assignment,
adjust_return_value, chill_expand_result,
build_multi_case_selector_expression, print_missing_cases):
Constify a char*.
(print_missing_cases): Introduce an intermediary non-const ptr.
Add brackets and indent.
* ch-tree.h (maybe_building_objc_message_expr,
maybe_objc_comptypes, comptypes_record_hook): Remove declarations.
(push_handler, pop_handler): Add prototypes.
(builtin_function, valid_array_index_p,
build_chill_exception_decl, build_rts_call,
chill_convert_for_assignment, display_int_cst,
build_chill_addr_expr, check_have_mode, get_identifier3,
build_chill_string, register_seize_path, get_unique_identifier,
add_taskstuff_to_list, gnuchill_version): Constify a char*.
(finish_chill_function): Add void prototype argument.
* convert.c (convert_to_reference, convert_to_boolean,
convert_to_char, base_type_size_in_bytes, remove_tree_element,
check_ps_range, digest_powerset_tuple, digest_structure_tuple,
digest_array_tuple, convert1): Add static prototypes.
(base_type_size_in_bytes): Hide unused function.
(display_int_cst, digest_array_tuple): Constify a char*.
* decl.c (set_nesting_level, make_chill_variants, fix_identifier,
proclaim_decl, maybe_acons, push_scope_decls, pop_scope_decls,
build_implied_names, bind_sub_modules, layout_array_type,
do_based_decl, handle_one_level, label_value_cmp,
find_implied_types): Add static prototypes.
(boolean_code_name, chill_tree_code_type, chill_tree_code_name):
Constify a char*.
(layout_chill_variants): Cast the function argument of qsort.
(start_chill_function, fix_identifier, init_decl_processing):
Constify a char*.
(init_decl_processing): Prefer memcpy over bcopy to avoid casts.
Use xcalloc instead of xmalloc/bzero.
(builtin_function, build_chill_exception_decl,
finish_outer_function): Constify a char*.
* except.c (start_handler_array, finish_handler_array): Add static
prototypes.
* expr.c (chill_expand_expr, chill_expand_case_expr,
check_arglist_length, internal_build_compound_expr,
is_really_instance, invalid_operand, invalid_right_operand,
build_chill_abstime, build_allocate_memory_call,
build_allocate_global_memory_call, build_return_memory,
build_chill_duration, build_chill_floatcall,
build_allocate_getstack, build_chill_allocate,
build_chill_getstack, build_chill_terminate, build_chill_inttime,
build_chill_lower_or_upper, build_max_min,
build_chill_pred_or_succ, expand_packed_set, fold_set_expr,
build_compare_set_expr, scalar_to_string, build_concat_expr,
build_compare_string_expr, compare_records, string_char_rep,
build_boring_bitstring): Add static prototypes.
(check_have_mode, chill_expand_expr, build_chill_floatcall,
build_allocate_getstack, build_max_min, build_chill_function_call,
expand_packed_set, build_compare_set_expr, build_chill_addr_expr,
string_char_rep): Constify a char*.
* gperf (hash, in_word_set): Add prototypes.
* grant.c (newstring, strfree, append, prepend,
grant_use_seizefile, decode_layout, grant_array_type,
grant_array_type_selective, get_tag_value,
get_tag_value_selective, print_enumeral, print_enumeral_selective,
print_integer_type, find_enum_parent, print_integer_selective,
print_struct, print_struct_selective, print_proc_exceptions,
print_proc_tail, print_proc_tail_selective, find_in_decls,
in_ridpointers, grant_seized_identifier, globalize_decl,
grant_one_decl_selective, compare_memory_file, search_in_list,
really_grant_this): Add static prototypes.
(newstring, append, prepend, grant_use_seizefile,
print_integer_type, decode_constant, grant_one_decl_selective,
header_template): Constify a char *.
* inout.c (add_enum_to_list, build_chill_io_list_type,
build_io_types, declare_predefined_file, build_access_part,
textlocation_mode, check_assoc, assoc_call, check_transfer,
connect_process_optionals, connect_text, connect_access,
check_access, check_text, get_final_type_and_range,
process_io_list, check_format_string, get_max_size,
check_exprlist): Add static prototypes.
(declare_predefined_file, check_assoc, assoc_call, check_transfer,
check_access, check_text, process_io_list): Constify a char*.
* lang.c (deep_const_expr, chill_print_error_function): Add static
prototypes.
* lex.c (close_input_file, maybe_number, string_or_char): Constify
a char*.
(ch_lex_init, skip_directive, same_file, getlc, yywrap,
yy_refill): Add static prototypes.
(build_chill_string, same_file, register_seize_path): Constify a
char*.
* lex.h (finish_chill_seizes): Remove unused prototypes.
* loop.c (build_temporary_variable, maybe_make_for_temp,
get_unique_identifier): Constify a char*.
* parse.c (ch_parse_init, check_end_label, end_function,
build_prefix_clause, PEEK_TOKEN, peek_token_, pushback_token,
forward_token_, require, check_token, expect, define__PROCNAME__):
Add static prototypes.
(build_prefix_clause, expect): Constify a char*.
(parse_expression, parse_primval, parse_untyped_expr,
parse_opt_untyped_expr, parse_opt_actions): Add void prototype
argument.
(parse_opt_name_string, parse_simple_name_string,
parse_name_string, parse_defining_occurrence, parse_name,
parse_optlabel, parse_opt_end_label_semi_colon, parse_modulion,
parse_spec_module, parse_semi_colon,
parse_defining_occurrence_list, parse_mode_definition,
parse_mode_definition_statement, parse_synonym_definition,
parse_synonym_definition_statement, parse_on_exception_list,
parse_on_alternatives, parse_loc_declaration,
parse_declaration_statement, parse_optforbid, parse_postfix,
parse_postfix_list, parse_rename_clauses, parse_opt_prefix_clause,
parse_grant_statement, parse_seize_statement,
parse_param_name_list, parse_param_attr, parse_formpar,
parse_formparlist, parse_opt_result_spec, parse_opt_except,
parse_opt_recursive, parse_procedureattr, parse_proc_body,
parse_procedure_definition, parse_processpar,
parse_processparlist, parse_process_definition,
parse_signal_definition, parse_signal_definition_statement,
parse_then_clause, parse_opt_else_clause, parse_expr_list,
parse_range_list_clause, pushback_paren_expr, parse_case_label,
parse_case_label_list, parse_case_label_specification,
parse_single_dimension_case_action,
parse_multi_dimension_case_action, parse_case_action,
parse_asm_operands, parse_asm_clobbers, ch_expand_asm_operands,
parse_asm_action, parse_begin_end_block, parse_if_action,
parse_iteration, parse_delay_case_event_list,
parse_delay_case_action, parse_do_action, parse_receive_spec,
parse_receive_case_action, parse_send_action, parse_start_action,
parse_call, parse_tuple_fieldname_list, parse_tuple_element,
parse_opt_element_list, parse_tuple, parse_operand6,
parse_operand5, parse_operand4, parse_operand3, parse_operand2,
parse_operand1, parse_operand0, parse_case_expression,
parse_then_alternative, parse_else_alternative,
parse_if_expression, parse_index_mode, parse_set_mode, parse_pos,
parse_step, parse_opt_layout, parse_field_name_list,
parse_fixed_field, parse_variant_field_list,
parse_variant_alternative, parse_field, parse_structure_mode,
parse_opt_queue_size, parse_procedure_mode, parse_program,
parse_pass_1_2): Add static prototypes.
(parse_process_definition): Remove extra argument in function call.
(parse_range_list_clause): Likewise.
* satisfy.c (satisfy, cycle_error_print, safe_satisfy_decl,
satisfy_list, satisfy_list_values): Add static prototype.
(safe_satisfy_decl): Cast DECL_TASKING_CODE_DECL() to (tree).
* tasking.c (make_process_struct): Remove unused prototype.
(validate_process_parameters, get_struct_variable_name,
decl_tasking_code_variable, get_struct_debug_type_name,
get_process_wrapper_name, build_tasking_enum,
build_tasking_message_type, build_receive_signal_case_label,
build_receive_buffer_case_label, build_receive_buffer_case_end,
build_receive_signal_case_end): Add static prototypes.
(struct_name, struct_debug_name, data_name, wrapper_name,
get_struct_type_name, get_struct_debug_type_name,
get_tasking_code_name, get_struct_variable_name,
get_process_wrapper_name): Constify a char*.
(validate_process_parameters, get_struct_variable_name,
decl_tasking_code_variable): Hide unused functions.
(build_start_process, add_taskstuff_to_list, build_queue_length):
Constify a char*.
* tree.c (make_powerset_type): Add static prototype.
(get_identifier3, build_alias_decl, decl_check_rename): Constify a
char*.
* typeck.c (extract_constant_from_buffer,
expand_constant_to_buffer, build_empty_string,
make_chill_pointer_type, make_chill_range_type,
apply_chill_array_layout, field_decl_cmp, make_chill_struct_type,
apply_chill_field_layout): Add static prototype.
(valid_array_index_p, extract_constant_from_buffer,
chill_expand_tuple): Constify a char*.
(layout_chill_struct_type): Cast the function argument of qsort.
From-SVN: r28965
1999-08-29 15:34:10 +02:00
|
|
|
|
const char *name_ptr;
|
1998-08-27 22:51:39 +02:00
|
|
|
|
tree base_type;
|
|
|
|
|
|
|
|
|
|
if (TREE_TYPE (type))
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_mode (TREE_TYPE (type));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
|
|
|
|
|
APPEND (result, "(");
|
|
|
|
|
mode_string = decode_constant (TYPE_MIN_VALUE (type));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
|
|
|
|
|
if (TREE_TYPE (type) != ridpointers[(int) RID_BIN])
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, ":");
|
|
|
|
|
mode_string = decode_constant (TYPE_MAX_VALUE (type));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
APPEND (result, ")");
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
/* We test TYPE_MAIN_VARIANT because pushdecl often builds
|
|
|
|
|
a copy of a built-in type node, which is logically id-
|
|
|
|
|
entical but has a different address, and the same
|
|
|
|
|
TYPE_MAIN_VARIANT. */
|
|
|
|
|
/* FIXME this should not be needed! */
|
|
|
|
|
|
|
|
|
|
base_type = TREE_TYPE (type) ? TREE_TYPE (type) : type;
|
|
|
|
|
|
|
|
|
|
if (TREE_UNSIGNED (base_type))
|
|
|
|
|
{
|
|
|
|
|
if (base_type == chill_unsigned_type_node
|
|
|
|
|
|| TYPE_MAIN_VARIANT(base_type) ==
|
|
|
|
|
TYPE_MAIN_VARIANT (chill_unsigned_type_node))
|
|
|
|
|
name_ptr = "UINT";
|
|
|
|
|
else if (base_type == long_integer_type_node
|
|
|
|
|
|| TYPE_MAIN_VARIANT(base_type) ==
|
|
|
|
|
TYPE_MAIN_VARIANT (long_unsigned_type_node))
|
|
|
|
|
name_ptr = "ULONG";
|
|
|
|
|
else if (type == unsigned_char_type_node
|
|
|
|
|
|| TYPE_MAIN_VARIANT(base_type) ==
|
|
|
|
|
TYPE_MAIN_VARIANT (unsigned_char_type_node))
|
|
|
|
|
name_ptr = "UBYTE";
|
|
|
|
|
else if (type == duration_timing_type_node
|
|
|
|
|
|| TYPE_MAIN_VARIANT (base_type) ==
|
|
|
|
|
TYPE_MAIN_VARIANT (duration_timing_type_node))
|
|
|
|
|
name_ptr = "DURATION";
|
|
|
|
|
else if (type == abs_timing_type_node
|
|
|
|
|
|| TYPE_MAIN_VARIANT (base_type) ==
|
|
|
|
|
TYPE_MAIN_VARIANT (abs_timing_type_node))
|
|
|
|
|
name_ptr = "TIME";
|
|
|
|
|
else
|
|
|
|
|
name_ptr = "UINT";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (base_type == chill_integer_type_node
|
|
|
|
|
|| TYPE_MAIN_VARIANT (base_type) ==
|
|
|
|
|
TYPE_MAIN_VARIANT (chill_integer_type_node))
|
|
|
|
|
name_ptr = "INT";
|
|
|
|
|
else if (base_type == long_integer_type_node
|
|
|
|
|
|| TYPE_MAIN_VARIANT (base_type) ==
|
|
|
|
|
TYPE_MAIN_VARIANT (long_integer_type_node))
|
|
|
|
|
name_ptr = "LONG";
|
|
|
|
|
else if (type == signed_char_type_node
|
|
|
|
|
|| TYPE_MAIN_VARIANT (base_type) ==
|
|
|
|
|
TYPE_MAIN_VARIANT (signed_char_type_node))
|
|
|
|
|
name_ptr = "BYTE";
|
|
|
|
|
else
|
|
|
|
|
name_ptr = "INT";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
APPEND (result, name_ptr);
|
|
|
|
|
|
|
|
|
|
/* see if we have a range */
|
|
|
|
|
if (TREE_TYPE (type) != NULL)
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_constant (TYPE_MIN_VALUE (type));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
APPEND (result, ":");
|
|
|
|
|
mode_string = decode_constant (TYPE_MAX_VALUE (type));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static tree
|
|
|
|
|
find_enum_parent (enumname, all_decls)
|
|
|
|
|
tree enumname;
|
|
|
|
|
tree all_decls;
|
|
|
|
|
{
|
|
|
|
|
tree wrk;
|
|
|
|
|
|
|
|
|
|
for (wrk = all_decls; wrk != NULL_TREE; wrk = TREE_CHAIN (wrk))
|
|
|
|
|
{
|
|
|
|
|
if (TREE_TYPE (wrk) != NULL_TREE && TREE_CODE (wrk) != CONST_DECL &&
|
|
|
|
|
TREE_CODE (TREE_TYPE (wrk)) == ENUMERAL_TYPE)
|
|
|
|
|
{
|
|
|
|
|
tree list;
|
|
|
|
|
for (list = TYPE_VALUES (TREE_TYPE (wrk)); list != NULL_TREE; list = TREE_CHAIN (list))
|
|
|
|
|
{
|
|
|
|
|
if (DECL_NAME (TREE_VALUE (list)) == enumname)
|
|
|
|
|
return wrk;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return NULL_TREE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
print_integer_selective (type, all_decls)
|
|
|
|
|
tree type;
|
|
|
|
|
tree all_decls;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result = newstring ("");
|
|
|
|
|
MYSTRING *mode_string;
|
|
|
|
|
|
|
|
|
|
if (TREE_TYPE (type))
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_mode_selective (TREE_TYPE (type), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
|
|
|
|
|
if (TREE_TYPE (type) == ridpointers[(int)RID_RANGE] &&
|
|
|
|
|
TREE_CODE (TYPE_MIN_VALUE (type)) == IDENTIFIER_NODE &&
|
|
|
|
|
TREE_CODE (TYPE_MAX_VALUE (type)) == IDENTIFIER_NODE)
|
|
|
|
|
{
|
|
|
|
|
/* we have a range of a set. Find parant mode and write it
|
|
|
|
|
to SPEC MODULE. This will loose if the parent mode was SEIZED from
|
|
|
|
|
another file.*/
|
|
|
|
|
tree minparent = find_enum_parent (TYPE_MIN_VALUE (type), all_decls);
|
|
|
|
|
tree maxparent = find_enum_parent (TYPE_MAX_VALUE (type), all_decls);
|
|
|
|
|
|
|
|
|
|
if (minparent != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
if (! CH_ALREADY_GRANTED (minparent))
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_decl (minparent);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
CH_ALREADY_GRANTED (minparent) = 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (minparent != maxparent && maxparent != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
if (!CH_ALREADY_GRANTED (maxparent))
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_decl (maxparent);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
{
|
|
|
|
|
MAYBE_NEWLINE (result);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
CH_ALREADY_GRANTED (maxparent) = 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_constant_selective (TYPE_MIN_VALUE (type), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
{
|
|
|
|
|
MAYBE_NEWLINE (result);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
|
|
|
|
|
mode_string = decode_constant_selective (TYPE_MAX_VALUE (type), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
{
|
|
|
|
|
MAYBE_NEWLINE (result);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* see if we have a range */
|
|
|
|
|
if (TREE_TYPE (type) != NULL)
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_constant_selective (TYPE_MIN_VALUE (type), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
|
|
|
|
|
mode_string = decode_constant_selective (TYPE_MAX_VALUE (type), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
{
|
|
|
|
|
MAYBE_NEWLINE (result);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
print_struct (type)
|
|
|
|
|
tree type;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result = newstring ("");
|
|
|
|
|
MYSTRING *mode_string;
|
|
|
|
|
tree fields;
|
|
|
|
|
|
|
|
|
|
if (chill_varying_type_p (type))
|
|
|
|
|
{
|
|
|
|
|
mode_string = grant_array_type (type);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
fields = TYPE_FIELDS (type);
|
|
|
|
|
|
|
|
|
|
APPEND (result, "STRUCT (");
|
|
|
|
|
while (fields != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
if (TREE_CODE (TREE_TYPE (fields)) == UNION_TYPE)
|
|
|
|
|
{
|
|
|
|
|
tree variants;
|
|
|
|
|
/* Format a tagged variant record type. */
|
|
|
|
|
APPEND (result, " CASE ");
|
|
|
|
|
if (TYPE_TAGFIELDS (TREE_TYPE (fields)) != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
tree tag_list = TYPE_TAGFIELDS (TREE_TYPE (fields));
|
|
|
|
|
for (;;)
|
|
|
|
|
{
|
|
|
|
|
tree tag_name = DECL_NAME (TREE_VALUE (tag_list));
|
|
|
|
|
APPEND (result, IDENTIFIER_POINTER (tag_name));
|
|
|
|
|
tag_list = TREE_CHAIN (tag_list);
|
|
|
|
|
if (tag_list == NULL_TREE)
|
|
|
|
|
break;
|
|
|
|
|
APPEND (result, ", ");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
APPEND (result, " OF\n");
|
|
|
|
|
variants = TYPE_FIELDS (TREE_TYPE (fields));
|
|
|
|
|
|
|
|
|
|
/* Each variant is a FIELD_DECL whose type is an anonymous
|
|
|
|
|
struct within the anonymous union. */
|
|
|
|
|
while (variants != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
tree tag_list = TYPE_TAG_VALUES (TREE_TYPE (variants));
|
|
|
|
|
tree struct_elts = TYPE_FIELDS (TREE_TYPE (variants));
|
|
|
|
|
|
|
|
|
|
while (tag_list != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
tree tag_values = TREE_VALUE (tag_list);
|
|
|
|
|
APPEND (result, " (");
|
|
|
|
|
while (tag_values != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
mode_string = get_tag_value (TREE_VALUE (tag_values));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
if (TREE_CHAIN (tag_values) != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, ",\n ");
|
|
|
|
|
tag_values = TREE_CHAIN (tag_values);
|
|
|
|
|
}
|
|
|
|
|
else break;
|
|
|
|
|
}
|
|
|
|
|
APPEND (result, ")");
|
|
|
|
|
tag_list = TREE_CHAIN (tag_list);
|
|
|
|
|
if (tag_list)
|
|
|
|
|
APPEND (result, ",");
|
|
|
|
|
else
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
APPEND (result, " : ");
|
|
|
|
|
|
|
|
|
|
while (struct_elts != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_decl (struct_elts);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
|
|
|
|
|
if (TREE_CHAIN (struct_elts) != NULL_TREE)
|
|
|
|
|
APPEND (result, ",\n ");
|
|
|
|
|
struct_elts = TREE_CHAIN (struct_elts);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
variants = TREE_CHAIN (variants);
|
|
|
|
|
if (variants != NULL_TREE
|
|
|
|
|
&& TREE_CHAIN (variants) == NULL_TREE
|
|
|
|
|
&& DECL_NAME (variants) == ELSE_VARIANT_NAME)
|
|
|
|
|
{
|
|
|
|
|
tree else_elts = TYPE_FIELDS (TREE_TYPE (variants));
|
|
|
|
|
APPEND (result, "\n ELSE ");
|
|
|
|
|
while (else_elts != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_decl (else_elts);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
if (TREE_CHAIN (else_elts) != NULL_TREE)
|
|
|
|
|
APPEND (result, ",\n ");
|
|
|
|
|
else_elts = TREE_CHAIN (else_elts);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if (variants != NULL_TREE)
|
|
|
|
|
APPEND (result, ",\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
APPEND (result, "\n ESAC");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_decl (fields);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fields = TREE_CHAIN (fields);
|
|
|
|
|
if (fields != NULL_TREE)
|
|
|
|
|
APPEND (result, ",\n ");
|
|
|
|
|
}
|
|
|
|
|
APPEND (result, ")");
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
print_struct_selective (type, all_decls)
|
|
|
|
|
tree type;
|
|
|
|
|
tree all_decls;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result = newstring ("");
|
|
|
|
|
MYSTRING *mode_string;
|
|
|
|
|
tree fields;
|
|
|
|
|
|
|
|
|
|
if (chill_varying_type_p (type))
|
|
|
|
|
{
|
|
|
|
|
mode_string = grant_array_type_selective (type, all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
fields = TYPE_FIELDS (type);
|
|
|
|
|
|
|
|
|
|
while (fields != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
if (TREE_CODE (TREE_TYPE (fields)) == UNION_TYPE)
|
|
|
|
|
{
|
|
|
|
|
tree variants;
|
|
|
|
|
/* Format a tagged variant record type. */
|
|
|
|
|
|
|
|
|
|
variants = TYPE_FIELDS (TREE_TYPE (fields));
|
|
|
|
|
|
|
|
|
|
/* Each variant is a FIELD_DECL whose type is an anonymous
|
|
|
|
|
struct within the anonymous union. */
|
|
|
|
|
while (variants != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
tree tag_list = TYPE_TAG_VALUES (TREE_TYPE (variants));
|
|
|
|
|
tree struct_elts = TYPE_FIELDS (TREE_TYPE (variants));
|
|
|
|
|
|
|
|
|
|
while (tag_list != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
tree tag_values = TREE_VALUE (tag_list);
|
|
|
|
|
while (tag_values != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
mode_string = get_tag_value_selective (TREE_VALUE (tag_values),
|
|
|
|
|
all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
{
|
|
|
|
|
MAYBE_NEWLINE (result);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
if (TREE_CHAIN (tag_values) != NULL_TREE)
|
|
|
|
|
tag_values = TREE_CHAIN (tag_values);
|
|
|
|
|
else break;
|
|
|
|
|
}
|
|
|
|
|
tag_list = TREE_CHAIN (tag_list);
|
|
|
|
|
if (!tag_list)
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
while (struct_elts != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_decl_selective (struct_elts, all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
{
|
|
|
|
|
MAYBE_NEWLINE (result);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
|
|
|
|
|
struct_elts = TREE_CHAIN (struct_elts);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
variants = TREE_CHAIN (variants);
|
|
|
|
|
if (variants != NULL_TREE
|
|
|
|
|
&& TREE_CHAIN (variants) == NULL_TREE
|
|
|
|
|
&& DECL_NAME (variants) == ELSE_VARIANT_NAME)
|
|
|
|
|
{
|
|
|
|
|
tree else_elts = TYPE_FIELDS (TREE_TYPE (variants));
|
|
|
|
|
while (else_elts != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_decl_selective (else_elts, all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
{
|
|
|
|
|
MAYBE_NEWLINE (result);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
else_elts = TREE_CHAIN (else_elts);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_decl_selective (fields, all_decls);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fields = TREE_CHAIN (fields);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
print_proc_exceptions (ex)
|
|
|
|
|
tree ex;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result = newstring ("");
|
|
|
|
|
|
|
|
|
|
if (ex != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, "\n EXCEPTIONS (");
|
|
|
|
|
for ( ; ex != NULL_TREE; ex = TREE_CHAIN (ex))
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, IDENTIFIER_POINTER (TREE_VALUE (ex)));
|
|
|
|
|
if (TREE_CHAIN (ex) != NULL_TREE)
|
|
|
|
|
APPEND (result, ",\n ");
|
|
|
|
|
}
|
|
|
|
|
APPEND (result, ")");
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
print_proc_tail (type, args, print_argnames)
|
|
|
|
|
tree type;
|
|
|
|
|
tree args;
|
|
|
|
|
int print_argnames;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result = newstring ("");
|
|
|
|
|
MYSTRING *mode_string;
|
|
|
|
|
int count = 0;
|
|
|
|
|
int stopat = list_length (args) - 3;
|
|
|
|
|
|
|
|
|
|
/* do the argument modes */
|
|
|
|
|
for ( ; args != NULL_TREE;
|
|
|
|
|
args = TREE_CHAIN (args), count++)
|
|
|
|
|
{
|
|
|
|
|
char buf[20];
|
|
|
|
|
tree argmode = TREE_VALUE (args);
|
|
|
|
|
tree attribute = TREE_PURPOSE (args);
|
|
|
|
|
|
|
|
|
|
if (argmode == void_type_node)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
/* if we have exceptions don't print last 2 arguments */
|
|
|
|
|
if (TYPE_RAISES_EXCEPTIONS (type) && count == stopat)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
if (count)
|
|
|
|
|
APPEND (result, ",\n ");
|
|
|
|
|
if (print_argnames)
|
|
|
|
|
{
|
|
|
|
|
sprintf(buf, "arg%d ", count);
|
|
|
|
|
APPEND (result, buf);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (attribute == ridpointers[(int) RID_LOC])
|
|
|
|
|
argmode = TREE_TYPE (argmode);
|
|
|
|
|
mode_string = get_type (argmode);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
|
|
|
|
|
if (attribute != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
sprintf (buf, " %s", IDENTIFIER_POINTER (attribute));
|
|
|
|
|
APPEND (result, buf);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
APPEND (result, ")");
|
|
|
|
|
|
|
|
|
|
/* return type */
|
|
|
|
|
{
|
|
|
|
|
tree retn_type = TREE_TYPE (type);
|
|
|
|
|
|
|
|
|
|
if (retn_type != NULL_TREE
|
|
|
|
|
&& TREE_CODE (retn_type) != VOID_TYPE)
|
|
|
|
|
{
|
|
|
|
|
mode_string = get_type (retn_type);
|
|
|
|
|
APPEND (result, "\n RETURNS (");
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
if (TREE_CODE (retn_type) == REFERENCE_TYPE)
|
|
|
|
|
APPEND (result, " LOC");
|
|
|
|
|
APPEND (result, ")");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mode_string = print_proc_exceptions (TYPE_RAISES_EXCEPTIONS (type));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
print_proc_tail_selective (type, args, all_decls)
|
|
|
|
|
tree type;
|
|
|
|
|
tree args;
|
|
|
|
|
tree all_decls;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result = newstring ("");
|
|
|
|
|
MYSTRING *mode_string;
|
|
|
|
|
int count = 0;
|
|
|
|
|
int stopat = list_length (args) - 3;
|
|
|
|
|
|
|
|
|
|
/* do the argument modes */
|
|
|
|
|
for ( ; args != NULL_TREE;
|
|
|
|
|
args = TREE_CHAIN (args), count++)
|
|
|
|
|
{
|
|
|
|
|
tree argmode = TREE_VALUE (args);
|
|
|
|
|
tree attribute = TREE_PURPOSE (args);
|
|
|
|
|
|
|
|
|
|
if (argmode == void_type_node)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
/* if we have exceptions don't process last 2 arguments */
|
|
|
|
|
if (TYPE_RAISES_EXCEPTIONS (type) && count == stopat)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
if (attribute == ridpointers[(int) RID_LOC])
|
|
|
|
|
argmode = TREE_TYPE (argmode);
|
|
|
|
|
mode_string = get_type_selective (argmode, all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
{
|
|
|
|
|
MAYBE_NEWLINE (result);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* return type */
|
|
|
|
|
{
|
|
|
|
|
tree retn_type = TREE_TYPE (type);
|
|
|
|
|
|
|
|
|
|
if (retn_type != NULL_TREE
|
|
|
|
|
&& TREE_CODE (retn_type) != VOID_TYPE)
|
|
|
|
|
{
|
|
|
|
|
mode_string = get_type_selective (retn_type, all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
{
|
|
|
|
|
MAYBE_NEWLINE (result);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* output a mode (or type). */
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
decode_mode (type)
|
|
|
|
|
tree type;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result = newstring ("");
|
|
|
|
|
MYSTRING *mode_string;
|
|
|
|
|
|
|
|
|
|
switch ((enum chill_tree_code)TREE_CODE (type))
|
|
|
|
|
{
|
|
|
|
|
case TYPE_DECL:
|
|
|
|
|
if (DECL_NAME (type))
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, IDENTIFIER_POINTER (DECL_NAME (type)));
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
type = TREE_TYPE (type);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case IDENTIFIER_NODE:
|
|
|
|
|
APPEND (result, IDENTIFIER_POINTER (type));
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case LANG_TYPE:
|
|
|
|
|
/* LANG_TYPE are only used until satisfy is done,
|
|
|
|
|
as place-holders for 'READ T', NEWMODE/SYNMODE modes,
|
|
|
|
|
parameterised modes, and old-fashioned CHAR(N). */
|
|
|
|
|
if (TYPE_READONLY (type))
|
|
|
|
|
APPEND (result, "READ ");
|
|
|
|
|
|
|
|
|
|
mode_string = get_type (TREE_TYPE (type));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
if (TYPE_DOMAIN (type) != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
/* Parameterized mode,
|
|
|
|
|
or old-fashioned CHAR(N) string declaration.. */
|
|
|
|
|
APPEND (result, "(");
|
|
|
|
|
mode_string = decode_constant (TYPE_DOMAIN (type));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
APPEND (result, ")");
|
|
|
|
|
}
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case ARRAY_TYPE:
|
|
|
|
|
mode_string = grant_array_type (type);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case BOOLEAN_TYPE:
|
|
|
|
|
APPEND (result, "BOOL");
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case CHAR_TYPE:
|
|
|
|
|
APPEND (result, "CHAR");
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case ENUMERAL_TYPE:
|
|
|
|
|
mode_string = print_enumeral (type);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case FUNCTION_TYPE:
|
|
|
|
|
{
|
|
|
|
|
tree args = TYPE_ARG_TYPES (type);
|
|
|
|
|
|
|
|
|
|
APPEND (result, "PROC (");
|
|
|
|
|
|
|
|
|
|
mode_string = print_proc_tail (type, args, 0);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case INTEGER_TYPE:
|
|
|
|
|
mode_string = print_integer_type (type);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case RECORD_TYPE:
|
|
|
|
|
if (CH_IS_INSTANCE_MODE (type))
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, "INSTANCE");
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
else if (CH_IS_BUFFER_MODE (type) || CH_IS_EVENT_MODE (type))
|
|
|
|
|
{ tree bufsize = max_queue_size (type);
|
|
|
|
|
APPEND (result, CH_IS_BUFFER_MODE (type) ? "BUFFER " : "EVENT ");
|
|
|
|
|
if (bufsize != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, "(");
|
|
|
|
|
mode_string = decode_constant (bufsize);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
APPEND (result, ") ");
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
if (CH_IS_BUFFER_MODE (type))
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_mode (buffer_element_mode (type));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else if (CH_IS_ACCESS_MODE (type))
|
|
|
|
|
{
|
|
|
|
|
tree indexmode, recordmode, dynamic;
|
|
|
|
|
|
|
|
|
|
APPEND (result, "ACCESS");
|
|
|
|
|
recordmode = access_recordmode (type);
|
|
|
|
|
indexmode = access_indexmode (type);
|
|
|
|
|
dynamic = access_dynamic (type);
|
|
|
|
|
|
|
|
|
|
if (indexmode != void_type_node)
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_mode (indexmode);
|
|
|
|
|
APPEND (result, " (");
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
APPEND (result, ")");
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
if (recordmode != void_type_node)
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_mode (recordmode);
|
|
|
|
|
APPEND (result, " ");
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
if (dynamic != integer_zero_node)
|
|
|
|
|
APPEND (result, " DYNAMIC");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else if (CH_IS_TEXT_MODE (type))
|
|
|
|
|
{
|
|
|
|
|
tree indexmode, dynamic, length;
|
|
|
|
|
|
|
|
|
|
APPEND (result, "TEXT (");
|
|
|
|
|
length = text_length (type);
|
|
|
|
|
indexmode = text_indexmode (type);
|
|
|
|
|
dynamic = text_dynamic (type);
|
|
|
|
|
|
|
|
|
|
mode_string = decode_constant (length);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
APPEND (result, ")");
|
|
|
|
|
if (indexmode != void_type_node)
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, " ");
|
|
|
|
|
mode_string = decode_mode (indexmode);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
if (dynamic != integer_zero_node)
|
|
|
|
|
APPEND (result, " DYNAMIC");
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
mode_string = print_struct (type);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case POINTER_TYPE:
|
|
|
|
|
if (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE)
|
|
|
|
|
APPEND (result, "PTR");
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
|
|
|
|
|
{
|
|
|
|
|
mode_string = get_type (TREE_TYPE (type));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, "REF ");
|
|
|
|
|
mode_string = get_type (TREE_TYPE (type));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case REAL_TYPE:
|
|
|
|
|
if (TREE_INT_CST_LOW (TYPE_SIZE (type)) == 32)
|
|
|
|
|
APPEND (result, "REAL");
|
|
|
|
|
else
|
|
|
|
|
APPEND (result, "LONG_REAL");
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case SET_TYPE:
|
|
|
|
|
if (CH_BOOLS_TYPE_P (type))
|
|
|
|
|
mode_string = grant_array_type (type);
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, "POWERSET ");
|
|
|
|
|
mode_string = get_type (TYPE_DOMAIN (type));
|
|
|
|
|
}
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case REFERENCE_TYPE:
|
|
|
|
|
mode_string = get_type (TREE_TYPE (type));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
APPEND (result, "/* ---- not implemented ---- */");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static tree
|
|
|
|
|
find_in_decls (id, all_decls)
|
|
|
|
|
tree id;
|
|
|
|
|
tree all_decls;
|
|
|
|
|
{
|
|
|
|
|
tree wrk;
|
|
|
|
|
|
|
|
|
|
for (wrk = all_decls; wrk != NULL_TREE; wrk = TREE_CHAIN (wrk))
|
|
|
|
|
{
|
|
|
|
|
if (DECL_NAME (wrk) == id || DECL_POSTFIX (wrk) == id)
|
|
|
|
|
return wrk;
|
|
|
|
|
}
|
|
|
|
|
return NULL_TREE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
in_ridpointers (id)
|
|
|
|
|
tree id;
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
for (i = RID_UNUSED; i < RID_MAX; i++)
|
|
|
|
|
{
|
|
|
|
|
if (id == ridpointers[i])
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
grant_seized_identifier (decl)
|
|
|
|
|
tree decl;
|
|
|
|
|
{
|
|
|
|
|
seizefile_list *wrk = selective_seizes;
|
|
|
|
|
MYSTRING *mode_string;
|
|
|
|
|
|
|
|
|
|
CH_ALREADY_GRANTED (decl) = 1;
|
|
|
|
|
|
|
|
|
|
/* comes from a SPEC MODULE in the module */
|
|
|
|
|
if (DECL_SEIZEFILE (decl) == NULL_TREE)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
/* search file already in process */
|
|
|
|
|
while (wrk != 0)
|
|
|
|
|
{
|
|
|
|
|
if (wrk->filename == DECL_SEIZEFILE (decl))
|
|
|
|
|
break;
|
|
|
|
|
wrk = wrk->next;
|
|
|
|
|
}
|
|
|
|
|
if (!wrk)
|
|
|
|
|
{
|
|
|
|
|
wrk = (seizefile_list *)xmalloc (sizeof (seizefile_list));
|
|
|
|
|
wrk->next = selective_seizes;
|
|
|
|
|
selective_seizes = wrk;
|
|
|
|
|
wrk->filename = DECL_SEIZEFILE (decl);
|
|
|
|
|
wrk->seizes = newstring ("<> USE_SEIZE_FILE \"");
|
|
|
|
|
APPEND (wrk->seizes, IDENTIFIER_POINTER (DECL_SEIZEFILE (decl)));
|
|
|
|
|
APPEND (wrk->seizes, "\" <>\n");
|
|
|
|
|
}
|
|
|
|
|
APPEND (wrk->seizes, "SEIZE ");
|
|
|
|
|
mode_string = decode_prefix_rename (decl);
|
|
|
|
|
APPEND (wrk->seizes, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
APPEND (wrk->seizes, ";\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
decode_mode_selective (type, all_decls)
|
|
|
|
|
tree type;
|
|
|
|
|
tree all_decls;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result = newstring ("");
|
|
|
|
|
MYSTRING *mode_string;
|
|
|
|
|
tree decl;
|
|
|
|
|
|
|
|
|
|
switch ((enum chill_tree_code)TREE_CODE (type))
|
|
|
|
|
{
|
|
|
|
|
case TYPE_DECL:
|
|
|
|
|
/* FIXME: could this ever happen ?? */
|
|
|
|
|
if (DECL_NAME (type))
|
|
|
|
|
{
|
|
|
|
|
FREE (result);
|
|
|
|
|
result = decode_mode_selective (DECL_NAME (type), all_decls);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case IDENTIFIER_NODE:
|
|
|
|
|
if (in_ridpointers (type))
|
|
|
|
|
/* it's a predefined, we must not search the whole list */
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
decl = find_in_decls (type, all_decls);
|
|
|
|
|
if (decl != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
if (CH_ALREADY_GRANTED (decl))
|
|
|
|
|
/* already processed */
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
if (TREE_CODE (decl) == ALIAS_DECL && DECL_POSTFIX (decl) != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
/* If CH_DECL_GRANTED, decl was granted into this scope, and
|
|
|
|
|
so wasn't in the source code. */
|
|
|
|
|
if (!CH_DECL_GRANTED (decl))
|
|
|
|
|
{
|
|
|
|
|
grant_seized_identifier (decl);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
result = decode_decl (decl);
|
|
|
|
|
mode_string = decode_decl_selective (decl, all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
{
|
|
|
|
|
PREPEND (result, mode_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case LANG_TYPE:
|
|
|
|
|
mode_string = get_type_selective (TREE_TYPE (type), all_decls);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case ARRAY_TYPE:
|
|
|
|
|
mode_string = grant_array_type_selective (type, all_decls);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case BOOLEAN_TYPE:
|
|
|
|
|
return result;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case CHAR_TYPE:
|
|
|
|
|
return result;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case ENUMERAL_TYPE:
|
|
|
|
|
mode_string = print_enumeral_selective (type, all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case FUNCTION_TYPE:
|
|
|
|
|
{
|
|
|
|
|
tree args = TYPE_ARG_TYPES (type);
|
|
|
|
|
|
|
|
|
|
mode_string = print_proc_tail_selective (type, args, all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case INTEGER_TYPE:
|
|
|
|
|
mode_string = print_integer_selective (type, all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case RECORD_TYPE:
|
|
|
|
|
if (CH_IS_INSTANCE_MODE (type))
|
|
|
|
|
{
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
else if (CH_IS_BUFFER_MODE (type) || CH_IS_EVENT_MODE (type))
|
|
|
|
|
{
|
|
|
|
|
tree bufsize = max_queue_size (type);
|
|
|
|
|
if (bufsize != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_constant_selective (bufsize, all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
if (CH_IS_BUFFER_MODE (type))
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_mode_selective (buffer_element_mode (type), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
{
|
|
|
|
|
MAYBE_NEWLINE (result);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else if (CH_IS_ACCESS_MODE (type))
|
|
|
|
|
{
|
|
|
|
|
tree indexmode = access_indexmode (type);
|
|
|
|
|
tree recordmode = access_recordmode (type);
|
|
|
|
|
|
|
|
|
|
if (indexmode != void_type_node)
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_mode_selective (indexmode, all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
{
|
|
|
|
|
if (result->len && result->str[result->len - 1] != '\n')
|
|
|
|
|
APPEND (result, ";\n");
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
if (recordmode != void_type_node)
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_mode_selective (recordmode, all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
{
|
|
|
|
|
if (result->len && result->str[result->len - 1] != '\n')
|
|
|
|
|
APPEND (result, ";\n");
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else if (CH_IS_TEXT_MODE (type))
|
|
|
|
|
{
|
|
|
|
|
tree indexmode = text_indexmode (type);
|
|
|
|
|
tree length = text_length (type);
|
|
|
|
|
|
|
|
|
|
mode_string = decode_constant_selective (length, all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
if (indexmode != void_type_node)
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_mode_selective (indexmode, all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
{
|
|
|
|
|
if (result->len && result->str[result->len - 1] != '\n')
|
|
|
|
|
APPEND (result, ";\n");
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
mode_string = print_struct_selective (type, all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
{
|
|
|
|
|
MAYBE_NEWLINE (result);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case POINTER_TYPE:
|
|
|
|
|
if (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE)
|
|
|
|
|
break;
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
|
|
|
|
|
{
|
|
|
|
|
mode_string = get_type_selective (TREE_TYPE (type), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
mode_string = get_type_selective (TREE_TYPE (type), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case REAL_TYPE:
|
|
|
|
|
return result;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case SET_TYPE:
|
|
|
|
|
if (CH_BOOLS_TYPE_P (type))
|
|
|
|
|
mode_string = grant_array_type_selective (type, all_decls);
|
|
|
|
|
else
|
|
|
|
|
mode_string = get_type_selective (TYPE_DOMAIN (type), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case REFERENCE_TYPE:
|
|
|
|
|
mode_string = get_type_selective (TREE_TYPE (type), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
APPEND (result, "/* ---- not implemented ---- */");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
get_type (type)
|
|
|
|
|
tree type;
|
|
|
|
|
{
|
|
|
|
|
if (type == NULL_TREE || TREE_CODE (type) == ERROR_MARK)
|
|
|
|
|
return newstring ("");
|
|
|
|
|
|
|
|
|
|
return (decode_mode (type));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
get_type_selective (type, all_decls)
|
|
|
|
|
tree type;
|
|
|
|
|
tree all_decls;
|
|
|
|
|
{
|
|
|
|
|
if (type == NULL_TREE || TREE_CODE (type) == ERROR_MARK)
|
|
|
|
|
return newstring ("");
|
|
|
|
|
|
|
|
|
|
return (decode_mode_selective (type, all_decls));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
|
static int
|
|
|
|
|
is_forbidden (str, forbid)
|
|
|
|
|
tree str;
|
|
|
|
|
tree forbid;
|
|
|
|
|
{
|
|
|
|
|
if (forbid == NULL_TREE)
|
|
|
|
|
return (0);
|
|
|
|
|
|
|
|
|
|
if (TREE_CODE (forbid) == INTEGER_CST)
|
|
|
|
|
return (1);
|
|
|
|
|
|
|
|
|
|
while (forbid != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
if (TREE_VALUE (forbid) == str)
|
|
|
|
|
return (1);
|
|
|
|
|
forbid = TREE_CHAIN (forbid);
|
|
|
|
|
}
|
|
|
|
|
/* nothing found */
|
|
|
|
|
return (0);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
decode_constant (init)
|
|
|
|
|
tree init;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result = newstring ("");
|
|
|
|
|
MYSTRING *tmp_string;
|
|
|
|
|
tree type = TREE_TYPE (init);
|
|
|
|
|
tree val = init;
|
Makefile.in (ch-version.c): Constify a char*.
* Makefile.in (ch-version.c): Constify a char*.
* actions.c (id_cmp, warn_unhandled, adjust_return_value,
update_else_range_for_int_const, update_else_range_for_range,
update_else_range_for_range_expr, update_else_range_for_type,
compute_else_range, check_case_value,
chill_handle_case_label_range,
chill_handle_multi_case_label_range,
chill_handle_multi_case_else_label, chill_handle_multi_case_label,
chill_handle_multi_case_label_list print_missing_cases): Add
static prototypes.
(build_exception_variant): Cast the function argument of qsort.
(build_rts_call, warn_unhandled, chill_convert_for_assignment,
adjust_return_value, chill_expand_result,
build_multi_case_selector_expression, print_missing_cases):
Constify a char*.
(print_missing_cases): Introduce an intermediary non-const ptr.
Add brackets and indent.
* ch-tree.h (maybe_building_objc_message_expr,
maybe_objc_comptypes, comptypes_record_hook): Remove declarations.
(push_handler, pop_handler): Add prototypes.
(builtin_function, valid_array_index_p,
build_chill_exception_decl, build_rts_call,
chill_convert_for_assignment, display_int_cst,
build_chill_addr_expr, check_have_mode, get_identifier3,
build_chill_string, register_seize_path, get_unique_identifier,
add_taskstuff_to_list, gnuchill_version): Constify a char*.
(finish_chill_function): Add void prototype argument.
* convert.c (convert_to_reference, convert_to_boolean,
convert_to_char, base_type_size_in_bytes, remove_tree_element,
check_ps_range, digest_powerset_tuple, digest_structure_tuple,
digest_array_tuple, convert1): Add static prototypes.
(base_type_size_in_bytes): Hide unused function.
(display_int_cst, digest_array_tuple): Constify a char*.
* decl.c (set_nesting_level, make_chill_variants, fix_identifier,
proclaim_decl, maybe_acons, push_scope_decls, pop_scope_decls,
build_implied_names, bind_sub_modules, layout_array_type,
do_based_decl, handle_one_level, label_value_cmp,
find_implied_types): Add static prototypes.
(boolean_code_name, chill_tree_code_type, chill_tree_code_name):
Constify a char*.
(layout_chill_variants): Cast the function argument of qsort.
(start_chill_function, fix_identifier, init_decl_processing):
Constify a char*.
(init_decl_processing): Prefer memcpy over bcopy to avoid casts.
Use xcalloc instead of xmalloc/bzero.
(builtin_function, build_chill_exception_decl,
finish_outer_function): Constify a char*.
* except.c (start_handler_array, finish_handler_array): Add static
prototypes.
* expr.c (chill_expand_expr, chill_expand_case_expr,
check_arglist_length, internal_build_compound_expr,
is_really_instance, invalid_operand, invalid_right_operand,
build_chill_abstime, build_allocate_memory_call,
build_allocate_global_memory_call, build_return_memory,
build_chill_duration, build_chill_floatcall,
build_allocate_getstack, build_chill_allocate,
build_chill_getstack, build_chill_terminate, build_chill_inttime,
build_chill_lower_or_upper, build_max_min,
build_chill_pred_or_succ, expand_packed_set, fold_set_expr,
build_compare_set_expr, scalar_to_string, build_concat_expr,
build_compare_string_expr, compare_records, string_char_rep,
build_boring_bitstring): Add static prototypes.
(check_have_mode, chill_expand_expr, build_chill_floatcall,
build_allocate_getstack, build_max_min, build_chill_function_call,
expand_packed_set, build_compare_set_expr, build_chill_addr_expr,
string_char_rep): Constify a char*.
* gperf (hash, in_word_set): Add prototypes.
* grant.c (newstring, strfree, append, prepend,
grant_use_seizefile, decode_layout, grant_array_type,
grant_array_type_selective, get_tag_value,
get_tag_value_selective, print_enumeral, print_enumeral_selective,
print_integer_type, find_enum_parent, print_integer_selective,
print_struct, print_struct_selective, print_proc_exceptions,
print_proc_tail, print_proc_tail_selective, find_in_decls,
in_ridpointers, grant_seized_identifier, globalize_decl,
grant_one_decl_selective, compare_memory_file, search_in_list,
really_grant_this): Add static prototypes.
(newstring, append, prepend, grant_use_seizefile,
print_integer_type, decode_constant, grant_one_decl_selective,
header_template): Constify a char *.
* inout.c (add_enum_to_list, build_chill_io_list_type,
build_io_types, declare_predefined_file, build_access_part,
textlocation_mode, check_assoc, assoc_call, check_transfer,
connect_process_optionals, connect_text, connect_access,
check_access, check_text, get_final_type_and_range,
process_io_list, check_format_string, get_max_size,
check_exprlist): Add static prototypes.
(declare_predefined_file, check_assoc, assoc_call, check_transfer,
check_access, check_text, process_io_list): Constify a char*.
* lang.c (deep_const_expr, chill_print_error_function): Add static
prototypes.
* lex.c (close_input_file, maybe_number, string_or_char): Constify
a char*.
(ch_lex_init, skip_directive, same_file, getlc, yywrap,
yy_refill): Add static prototypes.
(build_chill_string, same_file, register_seize_path): Constify a
char*.
* lex.h (finish_chill_seizes): Remove unused prototypes.
* loop.c (build_temporary_variable, maybe_make_for_temp,
get_unique_identifier): Constify a char*.
* parse.c (ch_parse_init, check_end_label, end_function,
build_prefix_clause, PEEK_TOKEN, peek_token_, pushback_token,
forward_token_, require, check_token, expect, define__PROCNAME__):
Add static prototypes.
(build_prefix_clause, expect): Constify a char*.
(parse_expression, parse_primval, parse_untyped_expr,
parse_opt_untyped_expr, parse_opt_actions): Add void prototype
argument.
(parse_opt_name_string, parse_simple_name_string,
parse_name_string, parse_defining_occurrence, parse_name,
parse_optlabel, parse_opt_end_label_semi_colon, parse_modulion,
parse_spec_module, parse_semi_colon,
parse_defining_occurrence_list, parse_mode_definition,
parse_mode_definition_statement, parse_synonym_definition,
parse_synonym_definition_statement, parse_on_exception_list,
parse_on_alternatives, parse_loc_declaration,
parse_declaration_statement, parse_optforbid, parse_postfix,
parse_postfix_list, parse_rename_clauses, parse_opt_prefix_clause,
parse_grant_statement, parse_seize_statement,
parse_param_name_list, parse_param_attr, parse_formpar,
parse_formparlist, parse_opt_result_spec, parse_opt_except,
parse_opt_recursive, parse_procedureattr, parse_proc_body,
parse_procedure_definition, parse_processpar,
parse_processparlist, parse_process_definition,
parse_signal_definition, parse_signal_definition_statement,
parse_then_clause, parse_opt_else_clause, parse_expr_list,
parse_range_list_clause, pushback_paren_expr, parse_case_label,
parse_case_label_list, parse_case_label_specification,
parse_single_dimension_case_action,
parse_multi_dimension_case_action, parse_case_action,
parse_asm_operands, parse_asm_clobbers, ch_expand_asm_operands,
parse_asm_action, parse_begin_end_block, parse_if_action,
parse_iteration, parse_delay_case_event_list,
parse_delay_case_action, parse_do_action, parse_receive_spec,
parse_receive_case_action, parse_send_action, parse_start_action,
parse_call, parse_tuple_fieldname_list, parse_tuple_element,
parse_opt_element_list, parse_tuple, parse_operand6,
parse_operand5, parse_operand4, parse_operand3, parse_operand2,
parse_operand1, parse_operand0, parse_case_expression,
parse_then_alternative, parse_else_alternative,
parse_if_expression, parse_index_mode, parse_set_mode, parse_pos,
parse_step, parse_opt_layout, parse_field_name_list,
parse_fixed_field, parse_variant_field_list,
parse_variant_alternative, parse_field, parse_structure_mode,
parse_opt_queue_size, parse_procedure_mode, parse_program,
parse_pass_1_2): Add static prototypes.
(parse_process_definition): Remove extra argument in function call.
(parse_range_list_clause): Likewise.
* satisfy.c (satisfy, cycle_error_print, safe_satisfy_decl,
satisfy_list, satisfy_list_values): Add static prototype.
(safe_satisfy_decl): Cast DECL_TASKING_CODE_DECL() to (tree).
* tasking.c (make_process_struct): Remove unused prototype.
(validate_process_parameters, get_struct_variable_name,
decl_tasking_code_variable, get_struct_debug_type_name,
get_process_wrapper_name, build_tasking_enum,
build_tasking_message_type, build_receive_signal_case_label,
build_receive_buffer_case_label, build_receive_buffer_case_end,
build_receive_signal_case_end): Add static prototypes.
(struct_name, struct_debug_name, data_name, wrapper_name,
get_struct_type_name, get_struct_debug_type_name,
get_tasking_code_name, get_struct_variable_name,
get_process_wrapper_name): Constify a char*.
(validate_process_parameters, get_struct_variable_name,
decl_tasking_code_variable): Hide unused functions.
(build_start_process, add_taskstuff_to_list, build_queue_length):
Constify a char*.
* tree.c (make_powerset_type): Add static prototype.
(get_identifier3, build_alias_decl, decl_check_rename): Constify a
char*.
* typeck.c (extract_constant_from_buffer,
expand_constant_to_buffer, build_empty_string,
make_chill_pointer_type, make_chill_range_type,
apply_chill_array_layout, field_decl_cmp, make_chill_struct_type,
apply_chill_field_layout): Add static prototype.
(valid_array_index_p, extract_constant_from_buffer,
chill_expand_tuple): Constify a char*.
(layout_chill_struct_type): Cast the function argument of qsort.
From-SVN: r28965
1999-08-29 15:34:10 +02:00
|
|
|
|
const char *op;
|
1998-08-27 22:51:39 +02:00
|
|
|
|
char wrk[256];
|
|
|
|
|
MYSTRING *mode_string;
|
|
|
|
|
|
|
|
|
|
switch ((enum chill_tree_code)TREE_CODE (val))
|
|
|
|
|
{
|
|
|
|
|
case CALL_EXPR:
|
|
|
|
|
tmp_string = decode_constant (TREE_OPERAND (val, 0));
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
val = TREE_OPERAND (val, 1); /* argument list */
|
|
|
|
|
if (val != NULL_TREE && TREE_CODE (val) != TREE_LIST)
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, " ");
|
|
|
|
|
tmp_string = decode_constant (val);
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, " (");
|
|
|
|
|
if (val != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
for (;;)
|
|
|
|
|
{
|
|
|
|
|
tmp_string = decode_constant (TREE_VALUE (val));
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
val = TREE_CHAIN (val);
|
|
|
|
|
if (val == NULL_TREE)
|
|
|
|
|
break;
|
|
|
|
|
APPEND (result, ", ");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
APPEND (result, ")");
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case NOP_EXPR:
|
|
|
|
|
/* Generate an "expression conversion" expression (a cast). */
|
|
|
|
|
tmp_string = decode_mode (type);
|
|
|
|
|
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
APPEND (result, "(");
|
|
|
|
|
val = TREE_OPERAND (val, 0);
|
|
|
|
|
type = TREE_TYPE (val);
|
|
|
|
|
|
|
|
|
|
/* If the coercee is a tuple, make sure it is prefixed by its mode. */
|
|
|
|
|
if (TREE_CODE (val) == CONSTRUCTOR
|
|
|
|
|
&& !CH_BOOLS_TYPE_P (type) && !chill_varying_type_p (type))
|
|
|
|
|
{
|
|
|
|
|
tmp_string = decode_mode (type);
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
APPEND (result, " ");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tmp_string = decode_constant (val);
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
APPEND (result, ")");
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case IDENTIFIER_NODE:
|
|
|
|
|
APPEND (result, IDENTIFIER_POINTER (val));
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case PAREN_EXPR:
|
|
|
|
|
APPEND (result, "(");
|
|
|
|
|
tmp_string = decode_constant (TREE_OPERAND (val, 0));
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
APPEND (result, ")");
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case UNDEFINED_EXPR:
|
|
|
|
|
APPEND (result, "*");
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case PLUS_EXPR: op = "+"; goto binary;
|
|
|
|
|
case MINUS_EXPR: op = "-"; goto binary;
|
|
|
|
|
case MULT_EXPR: op = "*"; goto binary;
|
|
|
|
|
case TRUNC_DIV_EXPR: op = "/"; goto binary;
|
|
|
|
|
case FLOOR_MOD_EXPR: op = " MOD "; goto binary;
|
|
|
|
|
case TRUNC_MOD_EXPR: op = " REM "; goto binary;
|
|
|
|
|
case CONCAT_EXPR: op = "//"; goto binary;
|
|
|
|
|
case BIT_IOR_EXPR: op = " OR "; goto binary;
|
|
|
|
|
case BIT_XOR_EXPR: op = " XOR "; goto binary;
|
|
|
|
|
case TRUTH_ORIF_EXPR: op = " ORIF "; goto binary;
|
|
|
|
|
case BIT_AND_EXPR: op = " AND "; goto binary;
|
|
|
|
|
case TRUTH_ANDIF_EXPR: op = " ANDIF "; goto binary;
|
|
|
|
|
case GT_EXPR: op = ">"; goto binary;
|
|
|
|
|
case GE_EXPR: op = ">="; goto binary;
|
|
|
|
|
case SET_IN_EXPR: op = " IN "; goto binary;
|
|
|
|
|
case LT_EXPR: op = "<"; goto binary;
|
|
|
|
|
case LE_EXPR: op = "<="; goto binary;
|
|
|
|
|
case EQ_EXPR: op = "="; goto binary;
|
|
|
|
|
case NE_EXPR: op = "/="; goto binary;
|
|
|
|
|
case RANGE_EXPR:
|
|
|
|
|
if (TREE_OPERAND (val, 0) == NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, TREE_OPERAND (val, 1) == NULL_TREE ? "*" : "ELSE");
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
op = ":"; goto binary;
|
|
|
|
|
binary:
|
|
|
|
|
tmp_string = decode_constant (TREE_OPERAND (val, 0));
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
APPEND (result, op);
|
|
|
|
|
tmp_string = decode_constant (TREE_OPERAND (val, 1));
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case REPLICATE_EXPR:
|
|
|
|
|
APPEND (result, "(");
|
|
|
|
|
tmp_string = decode_constant (TREE_OPERAND (val, 0));
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
APPEND (result, ")");
|
|
|
|
|
tmp_string = decode_constant (TREE_OPERAND (val, 1));
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case NEGATE_EXPR: op = "-"; goto unary;
|
|
|
|
|
case BIT_NOT_EXPR: op = " NOT "; goto unary;
|
|
|
|
|
case ADDR_EXPR: op = "->"; goto unary;
|
|
|
|
|
unary:
|
|
|
|
|
APPEND (result, op);
|
|
|
|
|
tmp_string = decode_constant (TREE_OPERAND (val, 0));
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case INTEGER_CST:
|
|
|
|
|
APPEND (result, display_int_cst (val));
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case REAL_CST:
|
|
|
|
|
REAL_VALUE_TO_DECIMAL (TREE_REAL_CST (val), "%.20g", wrk);
|
|
|
|
|
APPEND (result, wrk);
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case STRING_CST:
|
|
|
|
|
{
|
Makefile.in (ch-version.c): Constify a char*.
* Makefile.in (ch-version.c): Constify a char*.
* actions.c (id_cmp, warn_unhandled, adjust_return_value,
update_else_range_for_int_const, update_else_range_for_range,
update_else_range_for_range_expr, update_else_range_for_type,
compute_else_range, check_case_value,
chill_handle_case_label_range,
chill_handle_multi_case_label_range,
chill_handle_multi_case_else_label, chill_handle_multi_case_label,
chill_handle_multi_case_label_list print_missing_cases): Add
static prototypes.
(build_exception_variant): Cast the function argument of qsort.
(build_rts_call, warn_unhandled, chill_convert_for_assignment,
adjust_return_value, chill_expand_result,
build_multi_case_selector_expression, print_missing_cases):
Constify a char*.
(print_missing_cases): Introduce an intermediary non-const ptr.
Add brackets and indent.
* ch-tree.h (maybe_building_objc_message_expr,
maybe_objc_comptypes, comptypes_record_hook): Remove declarations.
(push_handler, pop_handler): Add prototypes.
(builtin_function, valid_array_index_p,
build_chill_exception_decl, build_rts_call,
chill_convert_for_assignment, display_int_cst,
build_chill_addr_expr, check_have_mode, get_identifier3,
build_chill_string, register_seize_path, get_unique_identifier,
add_taskstuff_to_list, gnuchill_version): Constify a char*.
(finish_chill_function): Add void prototype argument.
* convert.c (convert_to_reference, convert_to_boolean,
convert_to_char, base_type_size_in_bytes, remove_tree_element,
check_ps_range, digest_powerset_tuple, digest_structure_tuple,
digest_array_tuple, convert1): Add static prototypes.
(base_type_size_in_bytes): Hide unused function.
(display_int_cst, digest_array_tuple): Constify a char*.
* decl.c (set_nesting_level, make_chill_variants, fix_identifier,
proclaim_decl, maybe_acons, push_scope_decls, pop_scope_decls,
build_implied_names, bind_sub_modules, layout_array_type,
do_based_decl, handle_one_level, label_value_cmp,
find_implied_types): Add static prototypes.
(boolean_code_name, chill_tree_code_type, chill_tree_code_name):
Constify a char*.
(layout_chill_variants): Cast the function argument of qsort.
(start_chill_function, fix_identifier, init_decl_processing):
Constify a char*.
(init_decl_processing): Prefer memcpy over bcopy to avoid casts.
Use xcalloc instead of xmalloc/bzero.
(builtin_function, build_chill_exception_decl,
finish_outer_function): Constify a char*.
* except.c (start_handler_array, finish_handler_array): Add static
prototypes.
* expr.c (chill_expand_expr, chill_expand_case_expr,
check_arglist_length, internal_build_compound_expr,
is_really_instance, invalid_operand, invalid_right_operand,
build_chill_abstime, build_allocate_memory_call,
build_allocate_global_memory_call, build_return_memory,
build_chill_duration, build_chill_floatcall,
build_allocate_getstack, build_chill_allocate,
build_chill_getstack, build_chill_terminate, build_chill_inttime,
build_chill_lower_or_upper, build_max_min,
build_chill_pred_or_succ, expand_packed_set, fold_set_expr,
build_compare_set_expr, scalar_to_string, build_concat_expr,
build_compare_string_expr, compare_records, string_char_rep,
build_boring_bitstring): Add static prototypes.
(check_have_mode, chill_expand_expr, build_chill_floatcall,
build_allocate_getstack, build_max_min, build_chill_function_call,
expand_packed_set, build_compare_set_expr, build_chill_addr_expr,
string_char_rep): Constify a char*.
* gperf (hash, in_word_set): Add prototypes.
* grant.c (newstring, strfree, append, prepend,
grant_use_seizefile, decode_layout, grant_array_type,
grant_array_type_selective, get_tag_value,
get_tag_value_selective, print_enumeral, print_enumeral_selective,
print_integer_type, find_enum_parent, print_integer_selective,
print_struct, print_struct_selective, print_proc_exceptions,
print_proc_tail, print_proc_tail_selective, find_in_decls,
in_ridpointers, grant_seized_identifier, globalize_decl,
grant_one_decl_selective, compare_memory_file, search_in_list,
really_grant_this): Add static prototypes.
(newstring, append, prepend, grant_use_seizefile,
print_integer_type, decode_constant, grant_one_decl_selective,
header_template): Constify a char *.
* inout.c (add_enum_to_list, build_chill_io_list_type,
build_io_types, declare_predefined_file, build_access_part,
textlocation_mode, check_assoc, assoc_call, check_transfer,
connect_process_optionals, connect_text, connect_access,
check_access, check_text, get_final_type_and_range,
process_io_list, check_format_string, get_max_size,
check_exprlist): Add static prototypes.
(declare_predefined_file, check_assoc, assoc_call, check_transfer,
check_access, check_text, process_io_list): Constify a char*.
* lang.c (deep_const_expr, chill_print_error_function): Add static
prototypes.
* lex.c (close_input_file, maybe_number, string_or_char): Constify
a char*.
(ch_lex_init, skip_directive, same_file, getlc, yywrap,
yy_refill): Add static prototypes.
(build_chill_string, same_file, register_seize_path): Constify a
char*.
* lex.h (finish_chill_seizes): Remove unused prototypes.
* loop.c (build_temporary_variable, maybe_make_for_temp,
get_unique_identifier): Constify a char*.
* parse.c (ch_parse_init, check_end_label, end_function,
build_prefix_clause, PEEK_TOKEN, peek_token_, pushback_token,
forward_token_, require, check_token, expect, define__PROCNAME__):
Add static prototypes.
(build_prefix_clause, expect): Constify a char*.
(parse_expression, parse_primval, parse_untyped_expr,
parse_opt_untyped_expr, parse_opt_actions): Add void prototype
argument.
(parse_opt_name_string, parse_simple_name_string,
parse_name_string, parse_defining_occurrence, parse_name,
parse_optlabel, parse_opt_end_label_semi_colon, parse_modulion,
parse_spec_module, parse_semi_colon,
parse_defining_occurrence_list, parse_mode_definition,
parse_mode_definition_statement, parse_synonym_definition,
parse_synonym_definition_statement, parse_on_exception_list,
parse_on_alternatives, parse_loc_declaration,
parse_declaration_statement, parse_optforbid, parse_postfix,
parse_postfix_list, parse_rename_clauses, parse_opt_prefix_clause,
parse_grant_statement, parse_seize_statement,
parse_param_name_list, parse_param_attr, parse_formpar,
parse_formparlist, parse_opt_result_spec, parse_opt_except,
parse_opt_recursive, parse_procedureattr, parse_proc_body,
parse_procedure_definition, parse_processpar,
parse_processparlist, parse_process_definition,
parse_signal_definition, parse_signal_definition_statement,
parse_then_clause, parse_opt_else_clause, parse_expr_list,
parse_range_list_clause, pushback_paren_expr, parse_case_label,
parse_case_label_list, parse_case_label_specification,
parse_single_dimension_case_action,
parse_multi_dimension_case_action, parse_case_action,
parse_asm_operands, parse_asm_clobbers, ch_expand_asm_operands,
parse_asm_action, parse_begin_end_block, parse_if_action,
parse_iteration, parse_delay_case_event_list,
parse_delay_case_action, parse_do_action, parse_receive_spec,
parse_receive_case_action, parse_send_action, parse_start_action,
parse_call, parse_tuple_fieldname_list, parse_tuple_element,
parse_opt_element_list, parse_tuple, parse_operand6,
parse_operand5, parse_operand4, parse_operand3, parse_operand2,
parse_operand1, parse_operand0, parse_case_expression,
parse_then_alternative, parse_else_alternative,
parse_if_expression, parse_index_mode, parse_set_mode, parse_pos,
parse_step, parse_opt_layout, parse_field_name_list,
parse_fixed_field, parse_variant_field_list,
parse_variant_alternative, parse_field, parse_structure_mode,
parse_opt_queue_size, parse_procedure_mode, parse_program,
parse_pass_1_2): Add static prototypes.
(parse_process_definition): Remove extra argument in function call.
(parse_range_list_clause): Likewise.
* satisfy.c (satisfy, cycle_error_print, safe_satisfy_decl,
satisfy_list, satisfy_list_values): Add static prototype.
(safe_satisfy_decl): Cast DECL_TASKING_CODE_DECL() to (tree).
* tasking.c (make_process_struct): Remove unused prototype.
(validate_process_parameters, get_struct_variable_name,
decl_tasking_code_variable, get_struct_debug_type_name,
get_process_wrapper_name, build_tasking_enum,
build_tasking_message_type, build_receive_signal_case_label,
build_receive_buffer_case_label, build_receive_buffer_case_end,
build_receive_signal_case_end): Add static prototypes.
(struct_name, struct_debug_name, data_name, wrapper_name,
get_struct_type_name, get_struct_debug_type_name,
get_tasking_code_name, get_struct_variable_name,
get_process_wrapper_name): Constify a char*.
(validate_process_parameters, get_struct_variable_name,
decl_tasking_code_variable): Hide unused functions.
(build_start_process, add_taskstuff_to_list, build_queue_length):
Constify a char*.
* tree.c (make_powerset_type): Add static prototype.
(get_identifier3, build_alias_decl, decl_check_rename): Constify a
char*.
* typeck.c (extract_constant_from_buffer,
expand_constant_to_buffer, build_empty_string,
make_chill_pointer_type, make_chill_range_type,
apply_chill_array_layout, field_decl_cmp, make_chill_struct_type,
apply_chill_field_layout): Add static prototype.
(valid_array_index_p, extract_constant_from_buffer,
chill_expand_tuple): Constify a char*.
(layout_chill_struct_type): Cast the function argument of qsort.
From-SVN: r28965
1999-08-29 15:34:10 +02:00
|
|
|
|
const char *ptr = TREE_STRING_POINTER (val);
|
1998-08-27 22:51:39 +02:00
|
|
|
|
int i = TREE_STRING_LENGTH (val);
|
|
|
|
|
APPEND (result, "\"");
|
|
|
|
|
while (--i >= 0)
|
|
|
|
|
{
|
|
|
|
|
char buf[10];
|
|
|
|
|
unsigned char c = *ptr++;
|
|
|
|
|
if (c == '^')
|
|
|
|
|
APPEND (result, "^^");
|
|
|
|
|
else if (c == '"')
|
|
|
|
|
APPEND (result, "\"\"");
|
|
|
|
|
else if (c == '\n')
|
|
|
|
|
APPEND (result, "^J");
|
|
|
|
|
else if (c < ' ' || c > '~')
|
|
|
|
|
{
|
|
|
|
|
sprintf (buf, "^(%u)", c);
|
|
|
|
|
APPEND (result, buf);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
buf[0] = c;
|
|
|
|
|
buf[1] = 0;
|
|
|
|
|
APPEND (result, buf);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
APPEND (result, "\"");
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
case CONSTRUCTOR:
|
|
|
|
|
val = TREE_OPERAND (val, 1);
|
|
|
|
|
if (type != NULL && TREE_CODE (type) == SET_TYPE
|
|
|
|
|
&& CH_BOOLS_TYPE_P (type))
|
|
|
|
|
{
|
|
|
|
|
/* It's a bitstring. */
|
|
|
|
|
tree domain = TYPE_DOMAIN (type);
|
|
|
|
|
tree domain_max = TYPE_MAX_VALUE (domain);
|
|
|
|
|
char *buf;
|
|
|
|
|
register char *ptr;
|
|
|
|
|
int len;
|
|
|
|
|
if (TREE_CODE (domain_max) != INTEGER_CST
|
|
|
|
|
|| (val && TREE_CODE (val) != TREE_LIST))
|
|
|
|
|
goto fail;
|
|
|
|
|
|
|
|
|
|
len = TREE_INT_CST_LOW (domain_max) + 1;
|
|
|
|
|
if (TREE_CODE (init) != CONSTRUCTOR)
|
|
|
|
|
goto fail;
|
|
|
|
|
buf = (char *) alloca (len + 10);
|
|
|
|
|
ptr = buf;
|
|
|
|
|
*ptr++ = ' ';
|
|
|
|
|
*ptr++ = 'B';
|
|
|
|
|
*ptr++ = '\'';
|
|
|
|
|
if (get_set_constructor_bits (init, ptr, len))
|
|
|
|
|
goto fail;
|
|
|
|
|
for (; --len >= 0; ptr++)
|
|
|
|
|
*ptr += '0';
|
|
|
|
|
*ptr++ = '\'';
|
|
|
|
|
*ptr = '\0';
|
|
|
|
|
APPEND (result, buf);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{ /* It's some kind of tuple */
|
|
|
|
|
if (type != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
mode_string = get_type (type);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
APPEND (result, " ");
|
|
|
|
|
}
|
|
|
|
|
if (val == NULL_TREE
|
|
|
|
|
|| TREE_CODE (val) == ERROR_MARK)
|
|
|
|
|
APPEND (result, "[ ]");
|
|
|
|
|
else if (TREE_CODE (val) != TREE_LIST)
|
|
|
|
|
goto fail;
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, "[");
|
|
|
|
|
for ( ; ; )
|
|
|
|
|
{
|
|
|
|
|
tree lo_val = TREE_PURPOSE (val);
|
|
|
|
|
tree hi_val = TREE_VALUE (val);
|
|
|
|
|
MYSTRING *val_string;
|
|
|
|
|
if (TUPLE_NAMED_FIELD (val))
|
|
|
|
|
APPEND(result, ".");
|
|
|
|
|
if (lo_val != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
val_string = decode_constant (lo_val);
|
|
|
|
|
APPEND (result, val_string->str);
|
|
|
|
|
FREE (val_string);
|
|
|
|
|
APPEND (result, ":");
|
|
|
|
|
}
|
|
|
|
|
val_string = decode_constant (hi_val);
|
|
|
|
|
APPEND (result, val_string->str);
|
|
|
|
|
FREE (val_string);
|
|
|
|
|
val = TREE_CHAIN (val);
|
|
|
|
|
if (val == NULL_TREE)
|
|
|
|
|
break;
|
|
|
|
|
APPEND (result, ", ");
|
|
|
|
|
}
|
|
|
|
|
APPEND (result, "]");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
case COMPONENT_REF:
|
|
|
|
|
{
|
|
|
|
|
tree op1;
|
|
|
|
|
|
|
|
|
|
mode_string = decode_constant (TREE_OPERAND (init, 0));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
op1 = TREE_OPERAND (init, 1);
|
|
|
|
|
if (TREE_CODE (op1) != IDENTIFIER_NODE)
|
|
|
|
|
{
|
|
|
|
|
error ("decode_constant: invalid component_ref");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
APPEND (result, ".");
|
|
|
|
|
APPEND (result, IDENTIFIER_POINTER (op1));
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fail:
|
|
|
|
|
error ("decode_constant: mode and value mismatch");
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
error ("decode_constant: cannot decode this mode");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
decode_constant_selective (init, all_decls)
|
|
|
|
|
tree init;
|
|
|
|
|
tree all_decls;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result = newstring ("");
|
|
|
|
|
MYSTRING *tmp_string;
|
|
|
|
|
tree type = TREE_TYPE (init);
|
|
|
|
|
tree val = init;
|
|
|
|
|
MYSTRING *mode_string;
|
|
|
|
|
|
|
|
|
|
switch ((enum chill_tree_code)TREE_CODE (val))
|
|
|
|
|
{
|
|
|
|
|
case CALL_EXPR:
|
|
|
|
|
tmp_string = decode_constant_selective (TREE_OPERAND (val, 0), all_decls);
|
|
|
|
|
if (tmp_string->len)
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
val = TREE_OPERAND (val, 1); /* argument list */
|
|
|
|
|
if (val != NULL_TREE && TREE_CODE (val) != TREE_LIST)
|
|
|
|
|
{
|
|
|
|
|
tmp_string = decode_constant_selective (val, all_decls);
|
|
|
|
|
if (tmp_string->len)
|
|
|
|
|
{
|
|
|
|
|
MAYBE_NEWLINE (result);
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (val != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
for (;;)
|
|
|
|
|
{
|
|
|
|
|
tmp_string = decode_constant_selective (TREE_VALUE (val), all_decls);
|
|
|
|
|
if (tmp_string->len)
|
|
|
|
|
{
|
|
|
|
|
MAYBE_NEWLINE (result);
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
val = TREE_CHAIN (val);
|
|
|
|
|
if (val == NULL_TREE)
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case NOP_EXPR:
|
|
|
|
|
/* Generate an "expression conversion" expression (a cast). */
|
|
|
|
|
tmp_string = decode_mode_selective (type, all_decls);
|
|
|
|
|
if (tmp_string->len)
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
val = TREE_OPERAND (val, 0);
|
|
|
|
|
type = TREE_TYPE (val);
|
|
|
|
|
|
|
|
|
|
/* If the coercee is a tuple, make sure it is prefixed by its mode. */
|
|
|
|
|
if (TREE_CODE (val) == CONSTRUCTOR
|
|
|
|
|
&& !CH_BOOLS_TYPE_P (type) && !chill_varying_type_p (type))
|
|
|
|
|
{
|
|
|
|
|
tmp_string = decode_mode_selective (type, all_decls);
|
|
|
|
|
if (tmp_string->len)
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tmp_string = decode_constant_selective (val, all_decls);
|
|
|
|
|
if (tmp_string->len)
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case IDENTIFIER_NODE:
|
|
|
|
|
tmp_string = decode_mode_selective (val, all_decls);
|
|
|
|
|
if (tmp_string->len)
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case PAREN_EXPR:
|
|
|
|
|
tmp_string = decode_constant_selective (TREE_OPERAND (val, 0), all_decls);
|
|
|
|
|
if (tmp_string->len)
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case UNDEFINED_EXPR:
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case PLUS_EXPR:
|
|
|
|
|
case MINUS_EXPR:
|
|
|
|
|
case MULT_EXPR:
|
|
|
|
|
case TRUNC_DIV_EXPR:
|
|
|
|
|
case FLOOR_MOD_EXPR:
|
|
|
|
|
case TRUNC_MOD_EXPR:
|
|
|
|
|
case CONCAT_EXPR:
|
|
|
|
|
case BIT_IOR_EXPR:
|
|
|
|
|
case BIT_XOR_EXPR:
|
|
|
|
|
case TRUTH_ORIF_EXPR:
|
|
|
|
|
case BIT_AND_EXPR:
|
|
|
|
|
case TRUTH_ANDIF_EXPR:
|
|
|
|
|
case GT_EXPR:
|
|
|
|
|
case GE_EXPR:
|
|
|
|
|
case SET_IN_EXPR:
|
|
|
|
|
case LT_EXPR:
|
|
|
|
|
case LE_EXPR:
|
|
|
|
|
case EQ_EXPR:
|
|
|
|
|
case NE_EXPR:
|
|
|
|
|
goto binary;
|
|
|
|
|
case RANGE_EXPR:
|
|
|
|
|
if (TREE_OPERAND (val, 0) == NULL_TREE)
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
binary:
|
|
|
|
|
tmp_string = decode_constant_selective (TREE_OPERAND (val, 0), all_decls);
|
|
|
|
|
if (tmp_string->len)
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
tmp_string = decode_constant_selective (TREE_OPERAND (val, 1), all_decls);
|
|
|
|
|
if (tmp_string->len)
|
|
|
|
|
{
|
|
|
|
|
MAYBE_NEWLINE (result);
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case REPLICATE_EXPR:
|
|
|
|
|
tmp_string = decode_constant_selective (TREE_OPERAND (val, 0), all_decls);
|
|
|
|
|
if (tmp_string->len)
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
tmp_string = decode_constant_selective (TREE_OPERAND (val, 1), all_decls);
|
|
|
|
|
if (tmp_string->len)
|
|
|
|
|
{
|
|
|
|
|
MAYBE_NEWLINE (result);
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case NEGATE_EXPR:
|
|
|
|
|
case BIT_NOT_EXPR:
|
|
|
|
|
case ADDR_EXPR:
|
|
|
|
|
tmp_string = decode_constant_selective (TREE_OPERAND (val, 0), all_decls);
|
|
|
|
|
if (tmp_string->len)
|
|
|
|
|
APPEND (result, tmp_string->str);
|
|
|
|
|
FREE (tmp_string);
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case INTEGER_CST:
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case REAL_CST:
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case STRING_CST:
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
case CONSTRUCTOR:
|
|
|
|
|
val = TREE_OPERAND (val, 1);
|
|
|
|
|
if (type != NULL && TREE_CODE (type) == SET_TYPE
|
|
|
|
|
&& CH_BOOLS_TYPE_P (type))
|
|
|
|
|
/* It's a bitstring. */
|
|
|
|
|
return result;
|
|
|
|
|
else
|
|
|
|
|
{ /* It's some kind of tuple */
|
|
|
|
|
if (type != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
mode_string = get_type_selective (type, all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
if (val == NULL_TREE
|
|
|
|
|
|| TREE_CODE (val) == ERROR_MARK)
|
|
|
|
|
return result;
|
|
|
|
|
else if (TREE_CODE (val) != TREE_LIST)
|
|
|
|
|
goto fail;
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
for ( ; ; )
|
|
|
|
|
{
|
|
|
|
|
tree lo_val = TREE_PURPOSE (val);
|
|
|
|
|
tree hi_val = TREE_VALUE (val);
|
|
|
|
|
MYSTRING *val_string;
|
|
|
|
|
if (lo_val != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
val_string = decode_constant_selective (lo_val, all_decls);
|
|
|
|
|
if (val_string->len)
|
|
|
|
|
APPEND (result, val_string->str);
|
|
|
|
|
FREE (val_string);
|
|
|
|
|
}
|
|
|
|
|
val_string = decode_constant_selective (hi_val, all_decls);
|
|
|
|
|
if (val_string->len)
|
|
|
|
|
{
|
|
|
|
|
MAYBE_NEWLINE (result);
|
|
|
|
|
APPEND (result, val_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (val_string);
|
|
|
|
|
val = TREE_CHAIN (val);
|
|
|
|
|
if (val == NULL_TREE)
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
case COMPONENT_REF:
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_constant_selective (TREE_OPERAND (init, 0), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fail:
|
|
|
|
|
error ("decode_constant_selective: mode and value mismatch");
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
error ("decode_constant_selective: cannot decode this mode");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Assuming DECL is an ALIAS_DECL, return its prefix rename clause. */
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
decode_prefix_rename (decl)
|
|
|
|
|
tree decl;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result = newstring ("");
|
|
|
|
|
if (DECL_OLD_PREFIX (decl) || DECL_NEW_PREFIX (decl))
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, "(");
|
|
|
|
|
if (DECL_OLD_PREFIX (decl))
|
|
|
|
|
APPEND (result, IDENTIFIER_POINTER (DECL_OLD_PREFIX (decl)));
|
|
|
|
|
APPEND (result, "->");
|
|
|
|
|
if (DECL_NEW_PREFIX (decl))
|
|
|
|
|
APPEND (result, IDENTIFIER_POINTER (DECL_NEW_PREFIX (decl)));
|
|
|
|
|
APPEND (result, ")!");
|
|
|
|
|
}
|
|
|
|
|
if (DECL_POSTFIX_ALL (decl))
|
|
|
|
|
APPEND (result, "ALL");
|
|
|
|
|
else
|
|
|
|
|
APPEND (result, IDENTIFIER_POINTER (DECL_POSTFIX (decl)));
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
decode_decl (decl)
|
|
|
|
|
tree decl;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result = newstring ("");
|
|
|
|
|
MYSTRING *mode_string;
|
|
|
|
|
tree type;
|
|
|
|
|
|
|
|
|
|
switch ((enum chill_tree_code)TREE_CODE (decl))
|
|
|
|
|
{
|
|
|
|
|
case VAR_DECL:
|
|
|
|
|
case BASED_DECL:
|
|
|
|
|
APPEND (result, "DCL ");
|
|
|
|
|
APPEND (result, IDENTIFIER_POINTER (DECL_NAME (decl)));
|
|
|
|
|
APPEND (result, " ");
|
|
|
|
|
mode_string = get_type (TREE_TYPE (decl));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
if ((enum chill_tree_code)TREE_CODE (decl) == BASED_DECL)
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, " BASED (");
|
|
|
|
|
APPEND (result, IDENTIFIER_POINTER (DECL_ABSTRACT_ORIGIN (decl)));
|
|
|
|
|
APPEND (result, ")");
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case TYPE_DECL:
|
|
|
|
|
if (CH_DECL_SIGNAL (decl))
|
|
|
|
|
{
|
|
|
|
|
/* this is really a signal */
|
|
|
|
|
tree fields = TYPE_FIELDS (TREE_TYPE (decl));
|
|
|
|
|
tree signame = DECL_NAME (decl);
|
|
|
|
|
tree sigdest;
|
|
|
|
|
|
|
|
|
|
APPEND (result, "SIGNAL ");
|
|
|
|
|
APPEND (result, IDENTIFIER_POINTER (signame));
|
|
|
|
|
if (IDENTIFIER_SIGNAL_DATA (signame))
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, " = (");
|
|
|
|
|
for ( ; fields != NULL_TREE;
|
|
|
|
|
fields = TREE_CHAIN (fields))
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *mode_string;
|
|
|
|
|
|
|
|
|
|
mode_string = get_type (TREE_TYPE (fields));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
if (TREE_CHAIN (fields) != NULL_TREE)
|
|
|
|
|
APPEND (result, ", ");
|
|
|
|
|
}
|
|
|
|
|
APPEND (result, ")");
|
|
|
|
|
}
|
|
|
|
|
sigdest = IDENTIFIER_SIGNAL_DEST (signame);
|
|
|
|
|
if (sigdest != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, " TO ");
|
|
|
|
|
APPEND (result, IDENTIFIER_POINTER (DECL_NAME (sigdest)));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
/* avoid defining a mode as itself */
|
|
|
|
|
if (CH_NOVELTY (TREE_TYPE (decl)) == decl)
|
|
|
|
|
APPEND (result, "NEWMODE ");
|
|
|
|
|
else
|
|
|
|
|
APPEND (result, "SYNMODE ");
|
|
|
|
|
APPEND (result, IDENTIFIER_POINTER (DECL_NAME (decl)));
|
|
|
|
|
APPEND (result, " = ");
|
|
|
|
|
mode_string = decode_mode (TREE_TYPE (decl));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case FUNCTION_DECL:
|
|
|
|
|
{
|
|
|
|
|
tree args;
|
|
|
|
|
|
|
|
|
|
type = TREE_TYPE (decl);
|
|
|
|
|
args = TYPE_ARG_TYPES (type);
|
|
|
|
|
|
|
|
|
|
APPEND (result, IDENTIFIER_POINTER (DECL_NAME (decl)));
|
|
|
|
|
|
|
|
|
|
if (CH_DECL_PROCESS (decl))
|
|
|
|
|
APPEND (result, ": PROCESS (");
|
|
|
|
|
else
|
|
|
|
|
APPEND (result, ": PROC (");
|
|
|
|
|
|
|
|
|
|
args = TYPE_ARG_TYPES (type);
|
|
|
|
|
|
|
|
|
|
mode_string = print_proc_tail (type, args, 1);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
|
|
|
|
|
/* generality */
|
|
|
|
|
if (CH_DECL_GENERAL (decl))
|
|
|
|
|
APPEND (result, " GENERAL");
|
|
|
|
|
if (CH_DECL_SIMPLE (decl))
|
|
|
|
|
APPEND (result, " SIMPLE");
|
|
|
|
|
if (DECL_INLINE (decl))
|
|
|
|
|
APPEND (result, " INLINE");
|
|
|
|
|
if (CH_DECL_RECURSIVE (decl))
|
|
|
|
|
APPEND (result, " RECURSIVE");
|
|
|
|
|
APPEND (result, " END");
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case FIELD_DECL:
|
|
|
|
|
APPEND (result, IDENTIFIER_POINTER (DECL_NAME (decl)));
|
|
|
|
|
APPEND (result, " ");
|
|
|
|
|
mode_string = get_type (TREE_TYPE (decl));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
if (DECL_INITIAL (decl) != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_layout (DECL_INITIAL (decl));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
#if 0
|
|
|
|
|
if (is_forbidden (DECL_NAME (decl), forbid))
|
|
|
|
|
APPEND (result, " FORBID");
|
|
|
|
|
#endif
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case CONST_DECL:
|
|
|
|
|
if (DECL_INITIAL (decl) == NULL_TREE
|
|
|
|
|
|| TREE_CODE (DECL_INITIAL (decl)) == ERROR_MARK)
|
|
|
|
|
break;
|
|
|
|
|
APPEND (result, "SYN ");
|
|
|
|
|
APPEND (result, IDENTIFIER_POINTER (DECL_NAME (decl)));
|
|
|
|
|
APPEND (result, " ");
|
|
|
|
|
mode_string = get_type (TREE_TYPE (decl));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
APPEND (result, " = ");
|
|
|
|
|
mode_string = decode_constant (DECL_INITIAL (decl));
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case ALIAS_DECL:
|
|
|
|
|
/* If CH_DECL_GRANTED, decl was granted into this scope, and
|
|
|
|
|
so wasn't in the source code. */
|
|
|
|
|
if (!CH_DECL_GRANTED (decl))
|
|
|
|
|
{
|
|
|
|
|
static int restricted = 0;
|
|
|
|
|
|
|
|
|
|
if (DECL_SEIZEFILE (decl) != use_seizefile_name
|
|
|
|
|
&& DECL_SEIZEFILE (decl))
|
|
|
|
|
{
|
|
|
|
|
use_seizefile_name = DECL_SEIZEFILE (decl);
|
|
|
|
|
restricted = use_seizefile_name == NULL_TREE ? 0 : CH_USE_SEIZEFILE_RESTRICTED (use_seizefile_name);
|
|
|
|
|
if (! restricted)
|
|
|
|
|
grant_use_seizefile (IDENTIFIER_POINTER (use_seizefile_name));
|
|
|
|
|
mark_use_seizefile_written (use_seizefile_name);
|
|
|
|
|
}
|
|
|
|
|
if (! restricted)
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, "SEIZE ");
|
|
|
|
|
mode_string = decode_prefix_rename (decl);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
APPEND (result, "----- not implemented ------");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return (result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MYSTRING *
|
|
|
|
|
decode_decl_selective (decl, all_decls)
|
|
|
|
|
tree decl;
|
|
|
|
|
tree all_decls;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result = newstring ("");
|
|
|
|
|
MYSTRING *mode_string;
|
|
|
|
|
tree type;
|
|
|
|
|
|
|
|
|
|
if (CH_ALREADY_GRANTED (decl))
|
|
|
|
|
/* do nothing */
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
CH_ALREADY_GRANTED (decl) = 1;
|
|
|
|
|
|
1998-09-30 18:07:19 +02:00
|
|
|
|
switch ((int)TREE_CODE (decl))
|
1998-08-27 22:51:39 +02:00
|
|
|
|
{
|
|
|
|
|
case VAR_DECL:
|
|
|
|
|
case BASED_DECL:
|
|
|
|
|
mode_string = get_type_selective (TREE_TYPE (decl), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
if ((enum chill_tree_code)TREE_CODE (decl) == BASED_DECL)
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_mode_selective (DECL_ABSTRACT_ORIGIN (decl), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
PREPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case TYPE_DECL:
|
|
|
|
|
if (CH_DECL_SIGNAL (decl))
|
|
|
|
|
{
|
|
|
|
|
/* this is really a signal */
|
|
|
|
|
tree fields = TYPE_FIELDS (TREE_TYPE (decl));
|
|
|
|
|
tree signame = DECL_NAME (decl);
|
|
|
|
|
tree sigdest;
|
|
|
|
|
|
|
|
|
|
if (IDENTIFIER_SIGNAL_DATA (signame))
|
|
|
|
|
{
|
|
|
|
|
for ( ; fields != NULL_TREE;
|
|
|
|
|
fields = TREE_CHAIN (fields))
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *mode_string;
|
|
|
|
|
|
|
|
|
|
mode_string = get_type_selective (TREE_TYPE (fields),
|
|
|
|
|
all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
sigdest = IDENTIFIER_SIGNAL_DEST (signame);
|
|
|
|
|
if (sigdest != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
mode_string = decode_mode_selective (DECL_NAME (sigdest), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
{
|
|
|
|
|
MAYBE_NEWLINE (result);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
/* avoid defining a mode as itself */
|
|
|
|
|
mode_string = decode_mode_selective (TREE_TYPE (decl), all_decls);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case FUNCTION_DECL:
|
|
|
|
|
{
|
|
|
|
|
tree args;
|
|
|
|
|
|
|
|
|
|
type = TREE_TYPE (decl);
|
|
|
|
|
args = TYPE_ARG_TYPES (type);
|
|
|
|
|
|
|
|
|
|
args = TYPE_ARG_TYPES (type);
|
|
|
|
|
|
|
|
|
|
mode_string = print_proc_tail_selective (type, args, all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case FIELD_DECL:
|
|
|
|
|
mode_string = get_type_selective (TREE_TYPE (decl), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case CONST_DECL:
|
|
|
|
|
if (DECL_INITIAL (decl) == NULL_TREE
|
|
|
|
|
|| TREE_CODE (DECL_INITIAL (decl)) == ERROR_MARK)
|
|
|
|
|
break;
|
|
|
|
|
mode_string = get_type_selective (TREE_TYPE (decl), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
mode_string = decode_constant_selective (DECL_INITIAL (decl), all_decls);
|
|
|
|
|
if (mode_string->len)
|
|
|
|
|
{
|
|
|
|
|
MAYBE_NEWLINE (result);
|
|
|
|
|
APPEND (result, mode_string->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
MAYBE_NEWLINE (result);
|
|
|
|
|
return (result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
globalize_decl (decl)
|
|
|
|
|
tree decl;
|
|
|
|
|
{
|
|
|
|
|
if (!TREE_PUBLIC (decl) && DECL_NAME (decl) &&
|
|
|
|
|
(TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL))
|
|
|
|
|
{
|
top level:
* Makefile.in (WARN_CFLAGS): Add -Wwrite-strings.
(tree.o): Depend on output.h.
* c-decl.c (pending_invalid_xref_file,
current_function_prototype_file): Constify.
(pushdecl): Constify a local char *.
(define_label): Constify filename parameter.
* c-lex.c (init_parse): Constify parameter and return value.
* c-typeck.c (c_expand_asm_operands): Constify filename parameter.
* c-tree.h: Update prototypes.
* c-parse.in: Constify filename member of %union, and if_stmt_file.
* c-parse.y, c-parse.c, c-parse.h, objc/objc-parse.y,
objc/objc-parse.c: Regenerate.
* dwarfout.c (dwarfout_init): Constify main_input_filename parameter.
* dwarfout.h: Update prototypes.
* expr.c (expand_expr): Constify a local char *.
* flags.h: Constify main_input_filename.
* function.c (expand_function_end): Constify filename parameter.
* genrecog.c (make_insn_sequence): Use a character array for
c_test_pos.
(main): Remove unused variables.
* input.h: Constify input_filename, main_input_filename, and
file_stack.name. Update prototypes.
* output.h: Declare first_global_object_name and
weak_global_object_name here, as const char *.
* stmt.c (expand_asm_operands): Constify filename parameter.
* toplev.c (compile_file, push_srcloc, debug_start_source_file):
Constify filename parameter.
(input_filename, main_input_filename): Constify.
* toplev.h: Update prototypes.
* tree.c: Include output.h. Don't declare
first_global_object_name or weak_global_object_name. Clean up string
bashing in get_file_function_name_long.
* tree.h (struct tree_decl): Constify filename member.
(input_filename): Constify.
Update prototypes.
* varasm.c (first_global_object_name, weak_global_object_name):
Constify.
(assemble_start_function, assemble_variable): Clean up string bashing.
* gcc.c: Constify all spec-related strings initialized,
transitively, from string constants. Constify all strings
and string variables related to multilibs.
(set_spec, read_specs): Cast argument to free to PTR.
(used_arg): Do not modify multilib_matches. Use strncmp plus
length comparison to compare multilib switches.
* genmultilib: Constify everything declared in multilib.h.
ch:
* ch-tree.h: Update prototypes. Remove prototypes for
functions declared elsewhere.
* decl.c (define_label): Constify filename parameter.
* grant.c (globalize_decl, set_default_grant_file): Constify
local char * variables. Don't declare
first_global_object_name or asm_out_file.
* lang.c (chill_real_input_filename): Constify.
* lex.c (init_parse): Constify parameter and return value.
* parse.c: Don't declare input_filename.
(ch_expand_asm_operands): Constify filename parameter.
(parse_multi_dimension_case_action): Constify local char *.
* satisfy.c (safe_satisfy_decl): Constify local char *.
cp:
* cp-tree.h: Constify tree_srcloc.filename, tinst_level.file,
and pending_inline.filename. Update prototypes.
* decl.c (define_label): Constify filename parameter.
* decl2.c (warn_if_unknown_interface): Constify local char *.
* input.c Constify input_source.filename. Don't declare
input_filename or lineno. Constify filename parameter to feed_input.
* lex.c (init_parse): Constify parameter and return value.
(cp_pragma_interface, cp_pragma_implementation): Constify
filename argument.
(reinit_parse_for_method, reinit_parse_for_block,
reinit_parse_for_expr, feed_defarg, handle_cp_pragma):
Constify local char *.
* pt.c: Don't declare lineno or input_filename.
(print_template_context, tsubst_friend_function, tsubst_decl,
tsubst, instantiate_decl): Constify local char *.
* semantics.c (expand_body): Constify local char *.
* tree.c (build_srcloc): Constify filename parameter.
* typeck.c (c_expand_asm_operands): Constify filename
parameter.
f:
* com.c (ffecom_subscript_check_): Constify array_name
parameter. Clean up string bashing.
(ffecom_arrayref_, ffecom_char_args_x_): Constify array_name
parameter.
(ffecom_do_entry_, ffecom_gen_sfuncdef_, ffecom_start_progunit_,
ffecom_sym_transform_, ffecom_sym_transform_assign_): Constify
local char *.
(init_parse): Constify parameter and return value.
* lex.c: Include dwarfout.h instead of prototyping dwarfout_*
functions here.
(ffelex_file_pop_, ffelex_file_push_): Constify filename parameter.
(ffelex_hash_, ffelex_include_): Constify local char *.
* std.c (ffestd_exec_end): Constify local char *.
* where.c (ffewhere_file_new): Constify filename parameter.
* where.h: Update prototypes.
java:
* check_init.c (check_init): Constify local char *.
* class.c (push_class): Constify local char *.
* java_tree.h: Update prototypes.
* jcf-io.c (open_class): Constify filename parameter and
return value.
(find_class): Remove redundant string copy. Cast return from
open_class.
* jcf-parse.c (read_class, parse_class_file, yyparse):
Constify local char *.
* jcf-write.c (generate_bytecode_insns, generate_classfile):
Constify local char *.
* jcf.h (JCF): Constify filename and classname.
(JCF_FINISH): Cast args to FREE to char * when appropriate.
* lang.c (init_parse): Constify parameter and return value.
* lex.c (java_get_line_col): Constify filename parameter.
* parse.h: Constify parser_ctxt.filename. Update prototypes.
* parse.y (java_parser_context_suspend,
issue_warning_error_from_context, safe_layout_class): Constify
local char *.
* parse.c: Regenerate.
From-SVN: r33804
2000-05-09 21:56:01 +02:00
|
|
|
|
const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
|
1998-08-27 22:51:39 +02:00
|
|
|
|
|
|
|
|
|
if (!first_global_object_name)
|
|
|
|
|
first_global_object_name = name + (name[0] == '*');
|
|
|
|
|
ASM_GLOBALIZE_LABEL (asm_out_file, name);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
grant_one_decl (decl)
|
|
|
|
|
tree decl;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result;
|
|
|
|
|
|
|
|
|
|
if (DECL_SOURCE_LINE (decl) == 0)
|
|
|
|
|
return;
|
|
|
|
|
result = decode_decl (decl);
|
|
|
|
|
if (result->len)
|
|
|
|
|
{
|
|
|
|
|
APPEND (result, ";\n");
|
|
|
|
|
APPEND (gstring, result->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
grant_one_decl_selective (decl, all_decls)
|
|
|
|
|
tree decl;
|
|
|
|
|
tree all_decls;
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *result;
|
|
|
|
|
MYSTRING *fixups;
|
|
|
|
|
|
|
|
|
|
tree d = DECL_ABSTRACT_ORIGIN (decl);
|
|
|
|
|
|
|
|
|
|
if (CH_ALREADY_GRANTED (d))
|
|
|
|
|
/* already done */
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
result = decode_decl (d);
|
|
|
|
|
if (!result->len)
|
|
|
|
|
{
|
|
|
|
|
/* nothing to do */
|
|
|
|
|
FREE (result);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
APPEND (result, ";\n");
|
|
|
|
|
|
|
|
|
|
/* now process all undefined items in the decl */
|
|
|
|
|
fixups = decode_decl_selective (d, all_decls);
|
|
|
|
|
if (fixups->len)
|
|
|
|
|
{
|
|
|
|
|
PREPEND (result, fixups->str);
|
|
|
|
|
}
|
|
|
|
|
FREE (fixups);
|
|
|
|
|
|
|
|
|
|
/* we have finished a decl */
|
|
|
|
|
APPEND (selective_gstring, result->str);
|
|
|
|
|
FREE (result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
compare_memory_file (fname, buf)
|
Makefile.in (ch-version.c): Constify a char*.
* Makefile.in (ch-version.c): Constify a char*.
* actions.c (id_cmp, warn_unhandled, adjust_return_value,
update_else_range_for_int_const, update_else_range_for_range,
update_else_range_for_range_expr, update_else_range_for_type,
compute_else_range, check_case_value,
chill_handle_case_label_range,
chill_handle_multi_case_label_range,
chill_handle_multi_case_else_label, chill_handle_multi_case_label,
chill_handle_multi_case_label_list print_missing_cases): Add
static prototypes.
(build_exception_variant): Cast the function argument of qsort.
(build_rts_call, warn_unhandled, chill_convert_for_assignment,
adjust_return_value, chill_expand_result,
build_multi_case_selector_expression, print_missing_cases):
Constify a char*.
(print_missing_cases): Introduce an intermediary non-const ptr.
Add brackets and indent.
* ch-tree.h (maybe_building_objc_message_expr,
maybe_objc_comptypes, comptypes_record_hook): Remove declarations.
(push_handler, pop_handler): Add prototypes.
(builtin_function, valid_array_index_p,
build_chill_exception_decl, build_rts_call,
chill_convert_for_assignment, display_int_cst,
build_chill_addr_expr, check_have_mode, get_identifier3,
build_chill_string, register_seize_path, get_unique_identifier,
add_taskstuff_to_list, gnuchill_version): Constify a char*.
(finish_chill_function): Add void prototype argument.
* convert.c (convert_to_reference, convert_to_boolean,
convert_to_char, base_type_size_in_bytes, remove_tree_element,
check_ps_range, digest_powerset_tuple, digest_structure_tuple,
digest_array_tuple, convert1): Add static prototypes.
(base_type_size_in_bytes): Hide unused function.
(display_int_cst, digest_array_tuple): Constify a char*.
* decl.c (set_nesting_level, make_chill_variants, fix_identifier,
proclaim_decl, maybe_acons, push_scope_decls, pop_scope_decls,
build_implied_names, bind_sub_modules, layout_array_type,
do_based_decl, handle_one_level, label_value_cmp,
find_implied_types): Add static prototypes.
(boolean_code_name, chill_tree_code_type, chill_tree_code_name):
Constify a char*.
(layout_chill_variants): Cast the function argument of qsort.
(start_chill_function, fix_identifier, init_decl_processing):
Constify a char*.
(init_decl_processing): Prefer memcpy over bcopy to avoid casts.
Use xcalloc instead of xmalloc/bzero.
(builtin_function, build_chill_exception_decl,
finish_outer_function): Constify a char*.
* except.c (start_handler_array, finish_handler_array): Add static
prototypes.
* expr.c (chill_expand_expr, chill_expand_case_expr,
check_arglist_length, internal_build_compound_expr,
is_really_instance, invalid_operand, invalid_right_operand,
build_chill_abstime, build_allocate_memory_call,
build_allocate_global_memory_call, build_return_memory,
build_chill_duration, build_chill_floatcall,
build_allocate_getstack, build_chill_allocate,
build_chill_getstack, build_chill_terminate, build_chill_inttime,
build_chill_lower_or_upper, build_max_min,
build_chill_pred_or_succ, expand_packed_set, fold_set_expr,
build_compare_set_expr, scalar_to_string, build_concat_expr,
build_compare_string_expr, compare_records, string_char_rep,
build_boring_bitstring): Add static prototypes.
(check_have_mode, chill_expand_expr, build_chill_floatcall,
build_allocate_getstack, build_max_min, build_chill_function_call,
expand_packed_set, build_compare_set_expr, build_chill_addr_expr,
string_char_rep): Constify a char*.
* gperf (hash, in_word_set): Add prototypes.
* grant.c (newstring, strfree, append, prepend,
grant_use_seizefile, decode_layout, grant_array_type,
grant_array_type_selective, get_tag_value,
get_tag_value_selective, print_enumeral, print_enumeral_selective,
print_integer_type, find_enum_parent, print_integer_selective,
print_struct, print_struct_selective, print_proc_exceptions,
print_proc_tail, print_proc_tail_selective, find_in_decls,
in_ridpointers, grant_seized_identifier, globalize_decl,
grant_one_decl_selective, compare_memory_file, search_in_list,
really_grant_this): Add static prototypes.
(newstring, append, prepend, grant_use_seizefile,
print_integer_type, decode_constant, grant_one_decl_selective,
header_template): Constify a char *.
* inout.c (add_enum_to_list, build_chill_io_list_type,
build_io_types, declare_predefined_file, build_access_part,
textlocation_mode, check_assoc, assoc_call, check_transfer,
connect_process_optionals, connect_text, connect_access,
check_access, check_text, get_final_type_and_range,
process_io_list, check_format_string, get_max_size,
check_exprlist): Add static prototypes.
(declare_predefined_file, check_assoc, assoc_call, check_transfer,
check_access, check_text, process_io_list): Constify a char*.
* lang.c (deep_const_expr, chill_print_error_function): Add static
prototypes.
* lex.c (close_input_file, maybe_number, string_or_char): Constify
a char*.
(ch_lex_init, skip_directive, same_file, getlc, yywrap,
yy_refill): Add static prototypes.
(build_chill_string, same_file, register_seize_path): Constify a
char*.
* lex.h (finish_chill_seizes): Remove unused prototypes.
* loop.c (build_temporary_variable, maybe_make_for_temp,
get_unique_identifier): Constify a char*.
* parse.c (ch_parse_init, check_end_label, end_function,
build_prefix_clause, PEEK_TOKEN, peek_token_, pushback_token,
forward_token_, require, check_token, expect, define__PROCNAME__):
Add static prototypes.
(build_prefix_clause, expect): Constify a char*.
(parse_expression, parse_primval, parse_untyped_expr,
parse_opt_untyped_expr, parse_opt_actions): Add void prototype
argument.
(parse_opt_name_string, parse_simple_name_string,
parse_name_string, parse_defining_occurrence, parse_name,
parse_optlabel, parse_opt_end_label_semi_colon, parse_modulion,
parse_spec_module, parse_semi_colon,
parse_defining_occurrence_list, parse_mode_definition,
parse_mode_definition_statement, parse_synonym_definition,
parse_synonym_definition_statement, parse_on_exception_list,
parse_on_alternatives, parse_loc_declaration,
parse_declaration_statement, parse_optforbid, parse_postfix,
parse_postfix_list, parse_rename_clauses, parse_opt_prefix_clause,
parse_grant_statement, parse_seize_statement,
parse_param_name_list, parse_param_attr, parse_formpar,
parse_formparlist, parse_opt_result_spec, parse_opt_except,
parse_opt_recursive, parse_procedureattr, parse_proc_body,
parse_procedure_definition, parse_processpar,
parse_processparlist, parse_process_definition,
parse_signal_definition, parse_signal_definition_statement,
parse_then_clause, parse_opt_else_clause, parse_expr_list,
parse_range_list_clause, pushback_paren_expr, parse_case_label,
parse_case_label_list, parse_case_label_specification,
parse_single_dimension_case_action,
parse_multi_dimension_case_action, parse_case_action,
parse_asm_operands, parse_asm_clobbers, ch_expand_asm_operands,
parse_asm_action, parse_begin_end_block, parse_if_action,
parse_iteration, parse_delay_case_event_list,
parse_delay_case_action, parse_do_action, parse_receive_spec,
parse_receive_case_action, parse_send_action, parse_start_action,
parse_call, parse_tuple_fieldname_list, parse_tuple_element,
parse_opt_element_list, parse_tuple, parse_operand6,
parse_operand5, parse_operand4, parse_operand3, parse_operand2,
parse_operand1, parse_operand0, parse_case_expression,
parse_then_alternative, parse_else_alternative,
parse_if_expression, parse_index_mode, parse_set_mode, parse_pos,
parse_step, parse_opt_layout, parse_field_name_list,
parse_fixed_field, parse_variant_field_list,
parse_variant_alternative, parse_field, parse_structure_mode,
parse_opt_queue_size, parse_procedure_mode, parse_program,
parse_pass_1_2): Add static prototypes.
(parse_process_definition): Remove extra argument in function call.
(parse_range_list_clause): Likewise.
* satisfy.c (satisfy, cycle_error_print, safe_satisfy_decl,
satisfy_list, satisfy_list_values): Add static prototype.
(safe_satisfy_decl): Cast DECL_TASKING_CODE_DECL() to (tree).
* tasking.c (make_process_struct): Remove unused prototype.
(validate_process_parameters, get_struct_variable_name,
decl_tasking_code_variable, get_struct_debug_type_name,
get_process_wrapper_name, build_tasking_enum,
build_tasking_message_type, build_receive_signal_case_label,
build_receive_buffer_case_label, build_receive_buffer_case_end,
build_receive_signal_case_end): Add static prototypes.
(struct_name, struct_debug_name, data_name, wrapper_name,
get_struct_type_name, get_struct_debug_type_name,
get_tasking_code_name, get_struct_variable_name,
get_process_wrapper_name): Constify a char*.
(validate_process_parameters, get_struct_variable_name,
decl_tasking_code_variable): Hide unused functions.
(build_start_process, add_taskstuff_to_list, build_queue_length):
Constify a char*.
* tree.c (make_powerset_type): Add static prototype.
(get_identifier3, build_alias_decl, decl_check_rename): Constify a
char*.
* typeck.c (extract_constant_from_buffer,
expand_constant_to_buffer, build_empty_string,
make_chill_pointer_type, make_chill_range_type,
apply_chill_array_layout, field_decl_cmp, make_chill_struct_type,
apply_chill_field_layout): Add static prototype.
(valid_array_index_p, extract_constant_from_buffer,
chill_expand_tuple): Constify a char*.
(layout_chill_struct_type): Cast the function argument of qsort.
From-SVN: r28965
1999-08-29 15:34:10 +02:00
|
|
|
|
const char *fname;
|
|
|
|
|
const char *buf;
|
1998-08-27 22:51:39 +02:00
|
|
|
|
{
|
|
|
|
|
FILE *fb;
|
|
|
|
|
int c;
|
|
|
|
|
|
|
|
|
|
/* check if we have something to write */
|
|
|
|
|
if (!buf || !strlen (buf))
|
|
|
|
|
return (0);
|
|
|
|
|
|
|
|
|
|
if ((fb = fopen (fname, "r")) == NULL)
|
|
|
|
|
return (1);
|
|
|
|
|
|
|
|
|
|
while ((c = getc (fb)) != EOF)
|
|
|
|
|
{
|
|
|
|
|
if (c != *buf++)
|
|
|
|
|
{
|
|
|
|
|
fclose (fb);
|
|
|
|
|
return (1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
fclose (fb);
|
|
|
|
|
return (*buf ? 1 : 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
write_grant_file ()
|
|
|
|
|
{
|
|
|
|
|
FILE *fb;
|
|
|
|
|
|
|
|
|
|
/* We only write out the grant file if it has changed,
|
|
|
|
|
to avoid changing its time-stamp and triggering an
|
|
|
|
|
unnecessary 'make' action. Return if no change. */
|
|
|
|
|
if (gstring == NULL || !spec_module_generated ||
|
|
|
|
|
!compare_memory_file (grant_file_name, gstring->str))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
fb = fopen (grant_file_name, "w");
|
|
|
|
|
if (fb == NULL)
|
diagnostic.h (set_internal_error_function): Renamed.
* diagnostic.h (set_internal_error_function): Renamed.
* toplev.h (internal_error): Renamed from fatal.
(pfatal_with_name): Deleted.
(fatal_io_error): Now has printf-style arguments.
* diagnostic.c (pfatal_with_name): Deleted.
(fatal_io_error): Rework to have args in printf-style.
(set_internal_error_function): Renamed from set_fatal_function.
(internal_error): Renamed from fatal.
(error_recursion, fancy_abort): Call internal_error instead of fatal.
* dwarf2out.c (get_cfa_from_loc_descr): Likewise.
* emit-rtl.c (gen_realpart, gen_imagpart): Likewise.
* expr.c (check_max_integer_computation_mode, expand_expr): Likewise.
* flow.c (verify_flow_info): Likewise.
* config/arm/arm.c (thumb_unexpanded_epilogue): Likewise.
* config/mips/mips.c (save_restore_insns): Likewise.
* cp/init.c (build_java_class_ref): Likewise.
(dsp16xx_reg_class_from_letter): Likewise.
(limit_reload_class, double_reg_to_memory): Likewise.
(print_operand_address, emit_1600_code_shift): Likewise.
(gen_tst_reg, gen_compare_reg): Likewise.
* config/m68hc11/m68hc11.c (m68hc11_emit_libcall): Likewise.
* cp/decl.c (pushdecl): Likewise.
* java/check-init.c (check_init): Likewise.
* java/expr.c (java_lang_expand_expr): Likewise.
* java/jcf-parse.c (get_constant): Likewise.
* java/mangle.c (java_mangle_decl): Likewise.
* java/parse.y (make_nested_class_name, java_complete_lhs): Likewise.
(operator_string): Likewise.
* except.c (duplicate_eh_handlers): Call abort instead of fatal.
* flow.c (verify_flow_info): Likewise.
* ch/convert.c (convert): Likewise.
* ch/except.c (pop_handler, chill_check_no_handlers): Likewise.
* ch/expr.c (chill_expand_expr): Likewise.
* ch/parse.c (peek_token_, pushback_token, require): Likewise.
* config/arm/arm.c (thumb_load_double_from_address): Likewise.
* config/avr/avr.c (pttreg_to_str, unique_section): Likewise.
(avr_normalize_condition): Likewise.
* config/c4x/c4x.c (c4x_emit_libcall, c4x_valid_operands): Likewise.
* config/dsp16xx/dsp16xx.c (dsp16xx_reg_class_from_letter): Likewise.
(limit_reload_class, double_reg_to_memory): Likewise.
(print_operand_address, emit_1600_code_shift): Likewise.
(gen_tst_reg, gen_compare_reg): Likewise.
* config/m68hc11/m68hc11.c (m68hc11_emit_libcall): Likewise.
* cp/decl.c (pushdecl): Likewise.
* java/check-init.c (check_init): Likewise.
* java/class.c (build_class_ref): Likewise.
* java/constants.c (write_constant_pool): Likewise.
* java/decl.c (start_java_method): Likewise.
* java/expr.c (push_type, java_stack_pop, java_stack_swap): Likewise.
(java_stack_dup, encode_newarray_type): Likewise.
(build_java_array_length_access): Likewise.
(build_java_check_indexed_type, expand_java_pushc): Likewise.
(build_java_soft_divmod, build_invokeinterface): Likewise.
* java/java-tree.h (INNER_CLASS_P): Likewise.
* java/jcf-parse.c (parse_signature, get_name_constant): Likewise.
(give_name_to_class, get_class_constant): Likewise.
* java/jcf-write.c (CHECK_PUT, CHECK_OP, get_access_flags): Likewise.
(find_constant_index, generate_bytecode_conditional): Likewise.
(generate_bytecode_insns, perform_relocations): Likewise.
* java/lex.c (java_unget_unicode, java_lex): Likewise.
* java/mangle.c (mangle_type, mangle_record_type): Likewise.
(mangle_pointer_type, mangle_array_type, init_mangling): Likewise.
(finish_mangling): Likewise.
* java/parse.h (MARK_FINAL_PARMS): Likewise.
* java/parse.y (pop_current_osb, unreachable_stmt_error): Likewise.
(obtain_incomplete_type, java_complete_class): Likewise.
(java_check_regular_methods, java_complete_expand_method): Likewise.
(cut_identifier_in_qualified, check_deprecation): Likewise.
(patch_invoke, find_applicable_accessible_methods_list): Likewise.
(java_complete_lhs, lookup_name_in_blocks): Likewise.
(check_final_variable_indirect_assignment, build_unaryop): Likewise.
* java/typeck.c (set_local_type, parse_signature_type): Likewise.
(parse_signature_string, build_java_signature): Likewise;
(set_java_signature): Likewise.
* java/verify.c (type_stack_dup, CHECK_PC_IN_RANGE): Likewise.
* c-parse.in (methoddef): Call fatal_error instead of fatal.
* objc/objc-act.c (build_ivar_chain): Likewise.
* cp/except.c (decl_is_java_type): Likewise.
* cp/init.c (build_java_class_ref): Likewise.
* cp/init.c (build_new_1): Likewise.
* f/com.c (ffecom_init_0): Likewise.
* java/class.c (add_method, build_static_field_ref): Likewise.
* java/expr.c (build_known_method_ref, expand_invoke): Likewise.
* java/jcf-parse.c (get_constant, jcf_parse): Likewise.
* java/lex.c (java_new_new_lexer): Likewise.
* java/jv-scan.c (main): Likewise.
(fatal_error): Renamed from fatal.
* dwarfout.c (dwarfout_init): Call fatal_io_error instead of
pfatal_with_name.
* graph.c (clean_graph_dump_file): Likewise.
* profile.c (init_branch_prob): Likewise.
* ch/grant.c (write_grant_file): Likewise.
* ch/lex.c (init_parse, same_file, yywrap): Likewise.
* f/com.c (init_parse): Likewise.
* java/jcf-parse.c (yyparse): Likewise.
* objc/objc-act.c (objc_init): Likewise.
* java/jcf-parse.c (jcf_parse_source): Call fatal_io_error, not fatal.
(yyparse): Likewise.
* java/jcf-write.c (make_class_file_name, write_classfile): Likewise.
* java/lex.c (java_get_line_col): Likewise.
* hash.c (hash_allocate): Don't check for failure returns from
obstack functions that can't fail.
(hash_table_init_n, hash_table_init): Likewise; also now return void.
* hash.h (hash_table_init_n, hash_table_init): Now return void.
* cp/decl.c (build_typename_type): hash_table_init now returns void.
* ch/lang.c (GNU_xref_begin, GNU_xref_end): Deleted.
* ch/lex.c (convert_bitstring): Delete check for alloca failure.
* config/dsp16xx/dsp16xx.c (dsp16xx_invalid_register_for_compare):
Deleted.
* config/dsp16xx/dsp16xx.md (unnamed cmphi): Call abort instead of it.
* f/com.c (ffecom_decode_include_option_): Make errors non-fatal.
* f/lex.c (ffelex_cfelex_, ffelex_get_directive_line_): Likewise.
(ffelex_hash_): Likewise.
* config/arm/arm.c (arm_override_options): Likewise.
* config/avr/avr.c (avr_override_options): Likewise.
* config/c4x/c4x.c (c4x_expand_prologue): Likewise.
* config/dsp16xx/dsp16xx.c (function_prologue): Likewise.
* config/h8300/h8300.c (h8300_init_once): Likewise.
* config/mips/mips.c (override_options): Likewise.
* config/i386/i386.c (override_options): Likewise, rework.
* config/m68k/m68k.c (override_options): Likewise.
* cp/decl.c (init_decl_processing): Likewise.
* java/jcf-parse.c (load_class): Likewise.
* config/dsp16xx/dsp16xx.c (print_operand): Call output_operand_lossage
instead of fatal.
* config/mips/mips.c (print_operand): Likewise.
* java/lex.c (byteswap_init, need_byteswap): Only #ifdef HAVE_ICONV.
* objc/objc_act.c (objc_check_decl): Remove unneeded fatal call.
(get_object_reference): Likewise.
From-SVN: r39444
2001-02-05 00:18:43 +01:00
|
|
|
|
fatal_io_error ("can't open %s", grant_file_name);
|
1998-08-27 22:51:39 +02:00
|
|
|
|
|
|
|
|
|
/* write file. Due to problems with record sizes on VAX/VMS
|
|
|
|
|
write string to '\n' */
|
|
|
|
|
#ifdef VMS
|
|
|
|
|
/* do it this way for VMS, cause of problems with
|
|
|
|
|
record sizes */
|
|
|
|
|
p = gstring->str;
|
|
|
|
|
while (*p)
|
|
|
|
|
{
|
|
|
|
|
p1 = strchr (p, '\n');
|
|
|
|
|
c = *++p1;
|
|
|
|
|
*p1 = '\0';
|
|
|
|
|
fprintf (fb, "%s", p);
|
|
|
|
|
*p1 = c;
|
|
|
|
|
p = p1;
|
|
|
|
|
}
|
|
|
|
|
#else
|
|
|
|
|
/* faster way to write */
|
|
|
|
|
if (write (fileno (fb), gstring->str, gstring->len) < 0)
|
|
|
|
|
{
|
|
|
|
|
int save_errno = errno;
|
diagnostic.h (set_internal_error_function): Renamed.
* diagnostic.h (set_internal_error_function): Renamed.
* toplev.h (internal_error): Renamed from fatal.
(pfatal_with_name): Deleted.
(fatal_io_error): Now has printf-style arguments.
* diagnostic.c (pfatal_with_name): Deleted.
(fatal_io_error): Rework to have args in printf-style.
(set_internal_error_function): Renamed from set_fatal_function.
(internal_error): Renamed from fatal.
(error_recursion, fancy_abort): Call internal_error instead of fatal.
* dwarf2out.c (get_cfa_from_loc_descr): Likewise.
* emit-rtl.c (gen_realpart, gen_imagpart): Likewise.
* expr.c (check_max_integer_computation_mode, expand_expr): Likewise.
* flow.c (verify_flow_info): Likewise.
* config/arm/arm.c (thumb_unexpanded_epilogue): Likewise.
* config/mips/mips.c (save_restore_insns): Likewise.
* cp/init.c (build_java_class_ref): Likewise.
(dsp16xx_reg_class_from_letter): Likewise.
(limit_reload_class, double_reg_to_memory): Likewise.
(print_operand_address, emit_1600_code_shift): Likewise.
(gen_tst_reg, gen_compare_reg): Likewise.
* config/m68hc11/m68hc11.c (m68hc11_emit_libcall): Likewise.
* cp/decl.c (pushdecl): Likewise.
* java/check-init.c (check_init): Likewise.
* java/expr.c (java_lang_expand_expr): Likewise.
* java/jcf-parse.c (get_constant): Likewise.
* java/mangle.c (java_mangle_decl): Likewise.
* java/parse.y (make_nested_class_name, java_complete_lhs): Likewise.
(operator_string): Likewise.
* except.c (duplicate_eh_handlers): Call abort instead of fatal.
* flow.c (verify_flow_info): Likewise.
* ch/convert.c (convert): Likewise.
* ch/except.c (pop_handler, chill_check_no_handlers): Likewise.
* ch/expr.c (chill_expand_expr): Likewise.
* ch/parse.c (peek_token_, pushback_token, require): Likewise.
* config/arm/arm.c (thumb_load_double_from_address): Likewise.
* config/avr/avr.c (pttreg_to_str, unique_section): Likewise.
(avr_normalize_condition): Likewise.
* config/c4x/c4x.c (c4x_emit_libcall, c4x_valid_operands): Likewise.
* config/dsp16xx/dsp16xx.c (dsp16xx_reg_class_from_letter): Likewise.
(limit_reload_class, double_reg_to_memory): Likewise.
(print_operand_address, emit_1600_code_shift): Likewise.
(gen_tst_reg, gen_compare_reg): Likewise.
* config/m68hc11/m68hc11.c (m68hc11_emit_libcall): Likewise.
* cp/decl.c (pushdecl): Likewise.
* java/check-init.c (check_init): Likewise.
* java/class.c (build_class_ref): Likewise.
* java/constants.c (write_constant_pool): Likewise.
* java/decl.c (start_java_method): Likewise.
* java/expr.c (push_type, java_stack_pop, java_stack_swap): Likewise.
(java_stack_dup, encode_newarray_type): Likewise.
(build_java_array_length_access): Likewise.
(build_java_check_indexed_type, expand_java_pushc): Likewise.
(build_java_soft_divmod, build_invokeinterface): Likewise.
* java/java-tree.h (INNER_CLASS_P): Likewise.
* java/jcf-parse.c (parse_signature, get_name_constant): Likewise.
(give_name_to_class, get_class_constant): Likewise.
* java/jcf-write.c (CHECK_PUT, CHECK_OP, get_access_flags): Likewise.
(find_constant_index, generate_bytecode_conditional): Likewise.
(generate_bytecode_insns, perform_relocations): Likewise.
* java/lex.c (java_unget_unicode, java_lex): Likewise.
* java/mangle.c (mangle_type, mangle_record_type): Likewise.
(mangle_pointer_type, mangle_array_type, init_mangling): Likewise.
(finish_mangling): Likewise.
* java/parse.h (MARK_FINAL_PARMS): Likewise.
* java/parse.y (pop_current_osb, unreachable_stmt_error): Likewise.
(obtain_incomplete_type, java_complete_class): Likewise.
(java_check_regular_methods, java_complete_expand_method): Likewise.
(cut_identifier_in_qualified, check_deprecation): Likewise.
(patch_invoke, find_applicable_accessible_methods_list): Likewise.
(java_complete_lhs, lookup_name_in_blocks): Likewise.
(check_final_variable_indirect_assignment, build_unaryop): Likewise.
* java/typeck.c (set_local_type, parse_signature_type): Likewise.
(parse_signature_string, build_java_signature): Likewise;
(set_java_signature): Likewise.
* java/verify.c (type_stack_dup, CHECK_PC_IN_RANGE): Likewise.
* c-parse.in (methoddef): Call fatal_error instead of fatal.
* objc/objc-act.c (build_ivar_chain): Likewise.
* cp/except.c (decl_is_java_type): Likewise.
* cp/init.c (build_java_class_ref): Likewise.
* cp/init.c (build_new_1): Likewise.
* f/com.c (ffecom_init_0): Likewise.
* java/class.c (add_method, build_static_field_ref): Likewise.
* java/expr.c (build_known_method_ref, expand_invoke): Likewise.
* java/jcf-parse.c (get_constant, jcf_parse): Likewise.
* java/lex.c (java_new_new_lexer): Likewise.
* java/jv-scan.c (main): Likewise.
(fatal_error): Renamed from fatal.
* dwarfout.c (dwarfout_init): Call fatal_io_error instead of
pfatal_with_name.
* graph.c (clean_graph_dump_file): Likewise.
* profile.c (init_branch_prob): Likewise.
* ch/grant.c (write_grant_file): Likewise.
* ch/lex.c (init_parse, same_file, yywrap): Likewise.
* f/com.c (init_parse): Likewise.
* java/jcf-parse.c (yyparse): Likewise.
* objc/objc-act.c (objc_init): Likewise.
* java/jcf-parse.c (jcf_parse_source): Call fatal_io_error, not fatal.
(yyparse): Likewise.
* java/jcf-write.c (make_class_file_name, write_classfile): Likewise.
* java/lex.c (java_get_line_col): Likewise.
* hash.c (hash_allocate): Don't check for failure returns from
obstack functions that can't fail.
(hash_table_init_n, hash_table_init): Likewise; also now return void.
* hash.h (hash_table_init_n, hash_table_init): Now return void.
* cp/decl.c (build_typename_type): hash_table_init now returns void.
* ch/lang.c (GNU_xref_begin, GNU_xref_end): Deleted.
* ch/lex.c (convert_bitstring): Delete check for alloca failure.
* config/dsp16xx/dsp16xx.c (dsp16xx_invalid_register_for_compare):
Deleted.
* config/dsp16xx/dsp16xx.md (unnamed cmphi): Call abort instead of it.
* f/com.c (ffecom_decode_include_option_): Make errors non-fatal.
* f/lex.c (ffelex_cfelex_, ffelex_get_directive_line_): Likewise.
(ffelex_hash_): Likewise.
* config/arm/arm.c (arm_override_options): Likewise.
* config/avr/avr.c (avr_override_options): Likewise.
* config/c4x/c4x.c (c4x_expand_prologue): Likewise.
* config/dsp16xx/dsp16xx.c (function_prologue): Likewise.
* config/h8300/h8300.c (h8300_init_once): Likewise.
* config/mips/mips.c (override_options): Likewise.
* config/i386/i386.c (override_options): Likewise, rework.
* config/m68k/m68k.c (override_options): Likewise.
* cp/decl.c (init_decl_processing): Likewise.
* java/jcf-parse.c (load_class): Likewise.
* config/dsp16xx/dsp16xx.c (print_operand): Call output_operand_lossage
instead of fatal.
* config/mips/mips.c (print_operand): Likewise.
* java/lex.c (byteswap_init, need_byteswap): Only #ifdef HAVE_ICONV.
* objc/objc_act.c (objc_check_decl): Remove unneeded fatal call.
(get_object_reference): Likewise.
From-SVN: r39444
2001-02-05 00:18:43 +01:00
|
|
|
|
|
1998-08-27 22:51:39 +02:00
|
|
|
|
unlink (grant_file_name);
|
|
|
|
|
errno = save_errno;
|
diagnostic.h (set_internal_error_function): Renamed.
* diagnostic.h (set_internal_error_function): Renamed.
* toplev.h (internal_error): Renamed from fatal.
(pfatal_with_name): Deleted.
(fatal_io_error): Now has printf-style arguments.
* diagnostic.c (pfatal_with_name): Deleted.
(fatal_io_error): Rework to have args in printf-style.
(set_internal_error_function): Renamed from set_fatal_function.
(internal_error): Renamed from fatal.
(error_recursion, fancy_abort): Call internal_error instead of fatal.
* dwarf2out.c (get_cfa_from_loc_descr): Likewise.
* emit-rtl.c (gen_realpart, gen_imagpart): Likewise.
* expr.c (check_max_integer_computation_mode, expand_expr): Likewise.
* flow.c (verify_flow_info): Likewise.
* config/arm/arm.c (thumb_unexpanded_epilogue): Likewise.
* config/mips/mips.c (save_restore_insns): Likewise.
* cp/init.c (build_java_class_ref): Likewise.
(dsp16xx_reg_class_from_letter): Likewise.
(limit_reload_class, double_reg_to_memory): Likewise.
(print_operand_address, emit_1600_code_shift): Likewise.
(gen_tst_reg, gen_compare_reg): Likewise.
* config/m68hc11/m68hc11.c (m68hc11_emit_libcall): Likewise.
* cp/decl.c (pushdecl): Likewise.
* java/check-init.c (check_init): Likewise.
* java/expr.c (java_lang_expand_expr): Likewise.
* java/jcf-parse.c (get_constant): Likewise.
* java/mangle.c (java_mangle_decl): Likewise.
* java/parse.y (make_nested_class_name, java_complete_lhs): Likewise.
(operator_string): Likewise.
* except.c (duplicate_eh_handlers): Call abort instead of fatal.
* flow.c (verify_flow_info): Likewise.
* ch/convert.c (convert): Likewise.
* ch/except.c (pop_handler, chill_check_no_handlers): Likewise.
* ch/expr.c (chill_expand_expr): Likewise.
* ch/parse.c (peek_token_, pushback_token, require): Likewise.
* config/arm/arm.c (thumb_load_double_from_address): Likewise.
* config/avr/avr.c (pttreg_to_str, unique_section): Likewise.
(avr_normalize_condition): Likewise.
* config/c4x/c4x.c (c4x_emit_libcall, c4x_valid_operands): Likewise.
* config/dsp16xx/dsp16xx.c (dsp16xx_reg_class_from_letter): Likewise.
(limit_reload_class, double_reg_to_memory): Likewise.
(print_operand_address, emit_1600_code_shift): Likewise.
(gen_tst_reg, gen_compare_reg): Likewise.
* config/m68hc11/m68hc11.c (m68hc11_emit_libcall): Likewise.
* cp/decl.c (pushdecl): Likewise.
* java/check-init.c (check_init): Likewise.
* java/class.c (build_class_ref): Likewise.
* java/constants.c (write_constant_pool): Likewise.
* java/decl.c (start_java_method): Likewise.
* java/expr.c (push_type, java_stack_pop, java_stack_swap): Likewise.
(java_stack_dup, encode_newarray_type): Likewise.
(build_java_array_length_access): Likewise.
(build_java_check_indexed_type, expand_java_pushc): Likewise.
(build_java_soft_divmod, build_invokeinterface): Likewise.
* java/java-tree.h (INNER_CLASS_P): Likewise.
* java/jcf-parse.c (parse_signature, get_name_constant): Likewise.
(give_name_to_class, get_class_constant): Likewise.
* java/jcf-write.c (CHECK_PUT, CHECK_OP, get_access_flags): Likewise.
(find_constant_index, generate_bytecode_conditional): Likewise.
(generate_bytecode_insns, perform_relocations): Likewise.
* java/lex.c (java_unget_unicode, java_lex): Likewise.
* java/mangle.c (mangle_type, mangle_record_type): Likewise.
(mangle_pointer_type, mangle_array_type, init_mangling): Likewise.
(finish_mangling): Likewise.
* java/parse.h (MARK_FINAL_PARMS): Likewise.
* java/parse.y (pop_current_osb, unreachable_stmt_error): Likewise.
(obtain_incomplete_type, java_complete_class): Likewise.
(java_check_regular_methods, java_complete_expand_method): Likewise.
(cut_identifier_in_qualified, check_deprecation): Likewise.
(patch_invoke, find_applicable_accessible_methods_list): Likewise.
(java_complete_lhs, lookup_name_in_blocks): Likewise.
(check_final_variable_indirect_assignment, build_unaryop): Likewise.
* java/typeck.c (set_local_type, parse_signature_type): Likewise.
(parse_signature_string, build_java_signature): Likewise;
(set_java_signature): Likewise.
* java/verify.c (type_stack_dup, CHECK_PC_IN_RANGE): Likewise.
* c-parse.in (methoddef): Call fatal_error instead of fatal.
* objc/objc-act.c (build_ivar_chain): Likewise.
* cp/except.c (decl_is_java_type): Likewise.
* cp/init.c (build_java_class_ref): Likewise.
* cp/init.c (build_new_1): Likewise.
* f/com.c (ffecom_init_0): Likewise.
* java/class.c (add_method, build_static_field_ref): Likewise.
* java/expr.c (build_known_method_ref, expand_invoke): Likewise.
* java/jcf-parse.c (get_constant, jcf_parse): Likewise.
* java/lex.c (java_new_new_lexer): Likewise.
* java/jv-scan.c (main): Likewise.
(fatal_error): Renamed from fatal.
* dwarfout.c (dwarfout_init): Call fatal_io_error instead of
pfatal_with_name.
* graph.c (clean_graph_dump_file): Likewise.
* profile.c (init_branch_prob): Likewise.
* ch/grant.c (write_grant_file): Likewise.
* ch/lex.c (init_parse, same_file, yywrap): Likewise.
* f/com.c (init_parse): Likewise.
* java/jcf-parse.c (yyparse): Likewise.
* objc/objc-act.c (objc_init): Likewise.
* java/jcf-parse.c (jcf_parse_source): Call fatal_io_error, not fatal.
(yyparse): Likewise.
* java/jcf-write.c (make_class_file_name, write_classfile): Likewise.
* java/lex.c (java_get_line_col): Likewise.
* hash.c (hash_allocate): Don't check for failure returns from
obstack functions that can't fail.
(hash_table_init_n, hash_table_init): Likewise; also now return void.
* hash.h (hash_table_init_n, hash_table_init): Now return void.
* cp/decl.c (build_typename_type): hash_table_init now returns void.
* ch/lang.c (GNU_xref_begin, GNU_xref_end): Deleted.
* ch/lex.c (convert_bitstring): Delete check for alloca failure.
* config/dsp16xx/dsp16xx.c (dsp16xx_invalid_register_for_compare):
Deleted.
* config/dsp16xx/dsp16xx.md (unnamed cmphi): Call abort instead of it.
* f/com.c (ffecom_decode_include_option_): Make errors non-fatal.
* f/lex.c (ffelex_cfelex_, ffelex_get_directive_line_): Likewise.
(ffelex_hash_): Likewise.
* config/arm/arm.c (arm_override_options): Likewise.
* config/avr/avr.c (avr_override_options): Likewise.
* config/c4x/c4x.c (c4x_expand_prologue): Likewise.
* config/dsp16xx/dsp16xx.c (function_prologue): Likewise.
* config/h8300/h8300.c (h8300_init_once): Likewise.
* config/mips/mips.c (override_options): Likewise.
* config/i386/i386.c (override_options): Likewise, rework.
* config/m68k/m68k.c (override_options): Likewise.
* cp/decl.c (init_decl_processing): Likewise.
* java/jcf-parse.c (load_class): Likewise.
* config/dsp16xx/dsp16xx.c (print_operand): Call output_operand_lossage
instead of fatal.
* config/mips/mips.c (print_operand): Likewise.
* java/lex.c (byteswap_init, need_byteswap): Only #ifdef HAVE_ICONV.
* objc/objc_act.c (objc_check_decl): Remove unneeded fatal call.
(get_object_reference): Likewise.
From-SVN: r39444
2001-02-05 00:18:43 +01:00
|
|
|
|
fatal_io_error ("can't write to %s", grant_file_name);
|
1998-08-27 22:51:39 +02:00
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
fclose (fb);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* handle grant statement */
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
set_default_grant_file ()
|
|
|
|
|
{
|
top level:
* Makefile.in (WARN_CFLAGS): Add -Wwrite-strings.
(tree.o): Depend on output.h.
* c-decl.c (pending_invalid_xref_file,
current_function_prototype_file): Constify.
(pushdecl): Constify a local char *.
(define_label): Constify filename parameter.
* c-lex.c (init_parse): Constify parameter and return value.
* c-typeck.c (c_expand_asm_operands): Constify filename parameter.
* c-tree.h: Update prototypes.
* c-parse.in: Constify filename member of %union, and if_stmt_file.
* c-parse.y, c-parse.c, c-parse.h, objc/objc-parse.y,
objc/objc-parse.c: Regenerate.
* dwarfout.c (dwarfout_init): Constify main_input_filename parameter.
* dwarfout.h: Update prototypes.
* expr.c (expand_expr): Constify a local char *.
* flags.h: Constify main_input_filename.
* function.c (expand_function_end): Constify filename parameter.
* genrecog.c (make_insn_sequence): Use a character array for
c_test_pos.
(main): Remove unused variables.
* input.h: Constify input_filename, main_input_filename, and
file_stack.name. Update prototypes.
* output.h: Declare first_global_object_name and
weak_global_object_name here, as const char *.
* stmt.c (expand_asm_operands): Constify filename parameter.
* toplev.c (compile_file, push_srcloc, debug_start_source_file):
Constify filename parameter.
(input_filename, main_input_filename): Constify.
* toplev.h: Update prototypes.
* tree.c: Include output.h. Don't declare
first_global_object_name or weak_global_object_name. Clean up string
bashing in get_file_function_name_long.
* tree.h (struct tree_decl): Constify filename member.
(input_filename): Constify.
Update prototypes.
* varasm.c (first_global_object_name, weak_global_object_name):
Constify.
(assemble_start_function, assemble_variable): Clean up string bashing.
* gcc.c: Constify all spec-related strings initialized,
transitively, from string constants. Constify all strings
and string variables related to multilibs.
(set_spec, read_specs): Cast argument to free to PTR.
(used_arg): Do not modify multilib_matches. Use strncmp plus
length comparison to compare multilib switches.
* genmultilib: Constify everything declared in multilib.h.
ch:
* ch-tree.h: Update prototypes. Remove prototypes for
functions declared elsewhere.
* decl.c (define_label): Constify filename parameter.
* grant.c (globalize_decl, set_default_grant_file): Constify
local char * variables. Don't declare
first_global_object_name or asm_out_file.
* lang.c (chill_real_input_filename): Constify.
* lex.c (init_parse): Constify parameter and return value.
* parse.c: Don't declare input_filename.
(ch_expand_asm_operands): Constify filename parameter.
(parse_multi_dimension_case_action): Constify local char *.
* satisfy.c (safe_satisfy_decl): Constify local char *.
cp:
* cp-tree.h: Constify tree_srcloc.filename, tinst_level.file,
and pending_inline.filename. Update prototypes.
* decl.c (define_label): Constify filename parameter.
* decl2.c (warn_if_unknown_interface): Constify local char *.
* input.c Constify input_source.filename. Don't declare
input_filename or lineno. Constify filename parameter to feed_input.
* lex.c (init_parse): Constify parameter and return value.
(cp_pragma_interface, cp_pragma_implementation): Constify
filename argument.
(reinit_parse_for_method, reinit_parse_for_block,
reinit_parse_for_expr, feed_defarg, handle_cp_pragma):
Constify local char *.
* pt.c: Don't declare lineno or input_filename.
(print_template_context, tsubst_friend_function, tsubst_decl,
tsubst, instantiate_decl): Constify local char *.
* semantics.c (expand_body): Constify local char *.
* tree.c (build_srcloc): Constify filename parameter.
* typeck.c (c_expand_asm_operands): Constify filename
parameter.
f:
* com.c (ffecom_subscript_check_): Constify array_name
parameter. Clean up string bashing.
(ffecom_arrayref_, ffecom_char_args_x_): Constify array_name
parameter.
(ffecom_do_entry_, ffecom_gen_sfuncdef_, ffecom_start_progunit_,
ffecom_sym_transform_, ffecom_sym_transform_assign_): Constify
local char *.
(init_parse): Constify parameter and return value.
* lex.c: Include dwarfout.h instead of prototyping dwarfout_*
functions here.
(ffelex_file_pop_, ffelex_file_push_): Constify filename parameter.
(ffelex_hash_, ffelex_include_): Constify local char *.
* std.c (ffestd_exec_end): Constify local char *.
* where.c (ffewhere_file_new): Constify filename parameter.
* where.h: Update prototypes.
java:
* check_init.c (check_init): Constify local char *.
* class.c (push_class): Constify local char *.
* java_tree.h: Update prototypes.
* jcf-io.c (open_class): Constify filename parameter and
return value.
(find_class): Remove redundant string copy. Cast return from
open_class.
* jcf-parse.c (read_class, parse_class_file, yyparse):
Constify local char *.
* jcf-write.c (generate_bytecode_insns, generate_classfile):
Constify local char *.
* jcf.h (JCF): Constify filename and classname.
(JCF_FINISH): Cast args to FREE to char * when appropriate.
* lang.c (init_parse): Constify parameter and return value.
* lex.c (java_get_line_col): Constify filename parameter.
* parse.h: Constify parser_ctxt.filename. Update prototypes.
* parse.y (java_parser_context_suspend,
issue_warning_error_from_context, safe_layout_class): Constify
local char *.
* parse.c: Regenerate.
From-SVN: r33804
2000-05-09 21:56:01 +02:00
|
|
|
|
char *p, *tmp;
|
|
|
|
|
const char *fname;
|
1998-08-27 22:51:39 +02:00
|
|
|
|
|
|
|
|
|
if (dump_base_name)
|
|
|
|
|
fname = dump_base_name; /* Probably invoked via gcc */
|
|
|
|
|
else
|
|
|
|
|
{ /* Probably invoked directly (not via gcc) */
|
|
|
|
|
fname = asm_file_name;
|
|
|
|
|
if (!fname)
|
|
|
|
|
fname = main_input_filename ? main_input_filename : input_filename;
|
|
|
|
|
if (!fname)
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
p = strrchr (fname, '.');
|
|
|
|
|
if (!p)
|
|
|
|
|
{
|
|
|
|
|
tmp = (char *) alloca (strlen (fname) + 10);
|
|
|
|
|
strcpy (tmp, fname);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
int i = p - fname;
|
|
|
|
|
|
|
|
|
|
tmp = (char *) alloca (i + 10);
|
|
|
|
|
strncpy (tmp, fname, i);
|
|
|
|
|
tmp[i] = '\0';
|
|
|
|
|
}
|
|
|
|
|
strcat (tmp, ".grt");
|
|
|
|
|
default_grant_file = build_string (strlen (tmp), tmp);
|
|
|
|
|
|
|
|
|
|
grant_file_name = TREE_STRING_POINTER (default_grant_file);
|
|
|
|
|
|
|
|
|
|
if (gstring == NULL)
|
|
|
|
|
gstring = newstring ("");
|
|
|
|
|
if (selective_gstring == NULL)
|
|
|
|
|
selective_gstring = newstring ("");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Make DECL visible under the name NAME in the (fake) outermost scope. */
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
push_granted (name, decl)
|
Warning fixes:
* Makefile.in (actions.o, convert.o, decl.o, expr.o, lang.o,
lex.o, loop.o, parse.o, satisfy.o, timing.o, tasking.o, tree.o,
typeck.o): Depend on system.h and toplev.h.
(except.o): Depend on toplev.h.
(grant.o): Depend on system.h, toplev.h and output.h.
* actions.c: Include system.h and toplev.h. Remove redundant
prototypes.
(build_cause_exception): Add default case in switch.
(update_else_range_for_range): Add parentheses around && within ||.
(chill_handle_multi_case_label_list): Remove unused variable
`selector_value'.
(print_missing_cases): Reconcile format specifiers vs arguments in
calls to sprintf.
* ch-tree.h: Don't include stdio.h. Wrap prototypes using FILE*
with macro BUFSIZ. Add missing prototypes.
* convert.c: Include system.h and toplev.h. Remove redundant
prototypes.
(convert): Remove unused variable `errstr'.
* decl.c: Include system.h and toplev.h. Remove redundant
prototypes.
(builtin_scope): Add missing initializers.
(clear_scope): Likewise.
(allocate_lang_decl): Mark parameter `t' with ATTRIBUTE_UNUSED.
(copy_lang_decl): Likewise for parameter `node'.
(c_decode_option): Likewise for parameter `argc'.
(push_extern_function): Likewise for parameter `granting'.
(switch_to_pass_2): Hide declaration of errorcount/sorrycount.
(pushdecl): Remove unused variable `t'.
(lookup_name_current_level): Make static and hide.
(lookup_name_for_seizing): Make static.
(finish_decl): Remove unused variable `type'.
(maybe_build_cleanup): Mark parameter `decl' with ATTRIBUTE_UNUSED.
(complete_array_type): Mark parameters `type', `initial_value' and
`do_default' with ATTRIBUTE_UNUSED.
(start_struct): Mark parameter `name' with ATTRIBUTE_UNUSED.
(start_enum): Likewise.
(shadow_record_fields): Remove unused variables `type' and `parent'.
* except.c: Include toplev.h. Remove redundant prototypes.
* expr.c: Include system.h and toplev.h. Don't define NULL.
Remove redundant prototypes.
(internal_build_compound_expr): Mark parameter `first_p' with
ATTRIBUTE_UNUSED.
(build_allocate_getstack): Remove unused variable `init'.
(build_chill_pred_or_succ): Likewise for variable `limit'.
(varying_to_slice): Likewise for variable `doamin' [sic].
(finish_chill_binary_op): Likewise for variables `code0' and
`code1'. Remove unused label `finish'. Add explicit braces to
avoid ambiguous `else'.
(build_chill_addr_expr): Remove extra parameter in call to `error'.
(build_chill_unary_op): Remove unused variables `class' and `type0'.
(powersetlen): Remove unused variables `domain' and `temp'.
* grant.c: Include system.h, toplev.h and output.h. Don't handle
strchr/strrchr. Remove redundant prototypes.
(decode_constant_selective): Remove unused variables `op' and `wrk'.
(push_granted): Mark parameters `name' and `decl' with
ATTRIBUTE_UNUSED.
* inout.c: Include system.h and toplev.h. Remove redundant
prototypes.
(textlocation_mode): Use &&, not &, when comparing two truth
values.
(scanformcont): Remove unused label `do_the_action'.
* lang.c: Include system.h and toplev.h. Remove redundant
prototypes.
(lookup_interface): Mark parameter `arg' with ATTRIBUTE_UNUSED.
(maybe_objc_comptypes): Likewise for parameters `lhs' and `rhs'.
(lang_print_xnode): Likewise for parameters `file', `node' and
`indent'.
(lang_decode_option): Explicitly declare `explicit_ignore_case'.
(incomplete_type_error): Mark parameters `value' and `type' with
ATTRIBUTE_UNUSED.
* lex.c: Include system.h and toplev.h. Remove redundant
prototypes. Don't handle strchr/strrchr. Use CAPITALIZED
versions of ctype macros from system.h. Cast ctype arguments to
unsigned char when necessary.
(last_token, RETURN_TOKEN): Hide definition.
(push_back): Remove unused function.
(readstring): Change variable `i' to unsigned.
(yywrap): Remove unused variable `node'.
* loop.c: Include system.h and toplev.h. Remove redundant
prototypes.
(chill_unsigned_type): Hide prototype and definition.
(begin_loop_scope): Remove unused variable `firstp'.
(nonvalue_begin_loop_scope): Likewise.
* parse.c: Include system.h and toplev.h. Remove redundant
prototypes.
(quasi_signal): Hide.
(PEEK_TOKEN): Change return type to `enum terminal'.
(parse_mode_definition_statement): Remove unused variable `names'.
(parse_formpar): Remove unused parameter `in_spec_module'. All
callers changed.
(parse_formparlist): Likewise.
(parse_processpar): Remove unused variable `parms'.
(parse_definition): Add explicit braces to avoid ambiguous `else'.
(parse_multi_dimension_case_action): Initialize variable
`begin_test_label'. Remove unused variable `new_test'.
(parse_case_action): Remove unused variable `caseaction_flag'.
(parse_asm_clobbers): Remove unused variable `expr'.
(parse_delay_case_action): Initialize variable `label_cnt'.
(parse_action): Make function static.
(parse_tuple_element): Remove unused variable `list'.
(parse_primval): Add default case in switch.
(parse_variant_alternative): Remove unused variables `x' and
`variant_fields'.
* satisfy.c: Include system.h and toplev.h. Remove redundant
prototypes.
* tasking.c Include system.h and toplev.h. Remove redundant
prototypes.
(data_name): Hide.
(get_struct_variable_name): Likewise.
(validate_process_parameters): Mark parameter `parms' with
ATTRIBUTE_UNUSED.
(build_start_process): Initialize variable `tuple'.
(build_receive_buffer_case_end): Remove unused variable `buffer_ptr'.
* timing.c: Include system.h and toplev.h.
(build_after_timeout_start): Remove unused variable `goto_where'.
* tree.c: Include system.h and toplev.h. Remove redundant
prototypes.
* typeck.c: Include system.h and toplev.h. Remove redundant
prototypes.
(extract_constant_from_buffer): Make function static. Add
explicit braces to avoid ambiguous `else'.
(expand_constant_to_buffer): Likewise.
(build_chill_slice): remove unused variable `is_static'.
(chill_compatible): Add explicit braces to avoid ambiguous `else'.
(apply_chill_array_layout): Remove unused variable `offset'.
(smash_dummy_type): Remove unused variable `save_lang_specific'.
(initializer_constant_valid_p): Add default case in switch.
From-SVN: r22493
1998-09-20 08:43:23 +02:00
|
|
|
|
tree name ATTRIBUTE_UNUSED, decl ATTRIBUTE_UNUSED;
|
1998-08-27 22:51:39 +02:00
|
|
|
|
{
|
|
|
|
|
#if 0
|
|
|
|
|
IDENTIFIER_GRANTED_VALUE (name) = decl;
|
|
|
|
|
granted_decls = tree_cons (name, decl, granted_decls);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
chill_grant (old_prefix, new_prefix, postfix, forbid)
|
|
|
|
|
tree old_prefix;
|
|
|
|
|
tree new_prefix;
|
|
|
|
|
tree postfix;
|
|
|
|
|
tree forbid;
|
|
|
|
|
{
|
|
|
|
|
if (pass == 1)
|
|
|
|
|
{
|
|
|
|
|
#if 0
|
|
|
|
|
tree old_name = old_prefix == NULL_TREE ? postfix
|
|
|
|
|
: get_identifier3 (IDENTIFIER_POINTER (old_prefix),
|
|
|
|
|
"!", IDENTIFIER_POINTER (postfix));
|
|
|
|
|
tree new_name = new_prefix == NULL_TREE ? postfix
|
|
|
|
|
: get_identifier3 (IDENTIFIER_POINTER (new_prefix),
|
|
|
|
|
"!", IDENTIFIER_POINTER (postfix));
|
|
|
|
|
#endif
|
|
|
|
|
tree alias = build_alias_decl (old_prefix, new_prefix, postfix);
|
|
|
|
|
CH_DECL_GRANTED (alias) = 1;
|
|
|
|
|
DECL_SEIZEFILE (alias) = current_seizefile_name;
|
|
|
|
|
TREE_CHAIN (alias) = current_module->granted_decls;
|
|
|
|
|
current_module->granted_decls = alias;
|
|
|
|
|
|
|
|
|
|
if (forbid)
|
|
|
|
|
warning ("FORBID is not yet implemented"); /* FIXME */
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* flag GRANT ALL only once. Avoids search in case of GRANT ALL. */
|
|
|
|
|
static int grant_all_seen = 0;
|
|
|
|
|
|
|
|
|
|
/* check if a decl is in the list of granted decls. */
|
|
|
|
|
static int
|
|
|
|
|
search_in_list (name, granted_decls)
|
|
|
|
|
tree name;
|
|
|
|
|
tree granted_decls;
|
|
|
|
|
{
|
|
|
|
|
tree vars;
|
|
|
|
|
|
|
|
|
|
for (vars = granted_decls; vars != NULL_TREE; vars = TREE_CHAIN (vars))
|
|
|
|
|
if (DECL_SOURCE_LINE (vars))
|
|
|
|
|
{
|
|
|
|
|
if (DECL_POSTFIX_ALL (vars))
|
|
|
|
|
{
|
|
|
|
|
grant_all_seen = 1;
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
else if (name == DECL_NAME (vars))
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
/* not found */
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
really_grant_this (decl, granted_decls)
|
|
|
|
|
tree decl;
|
|
|
|
|
tree granted_decls;
|
|
|
|
|
{
|
|
|
|
|
/* we never grant labels at module level */
|
|
|
|
|
if ((enum chill_tree_code)TREE_CODE (decl) == LABEL_DECL)
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
if (grant_all_seen)
|
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
|
|
switch ((enum chill_tree_code)TREE_CODE (decl))
|
|
|
|
|
{
|
|
|
|
|
case VAR_DECL:
|
|
|
|
|
case BASED_DECL:
|
|
|
|
|
case FUNCTION_DECL:
|
|
|
|
|
return search_in_list (DECL_NAME (decl), granted_decls);
|
|
|
|
|
case ALIAS_DECL:
|
|
|
|
|
case CONST_DECL:
|
|
|
|
|
return 1;
|
|
|
|
|
case TYPE_DECL:
|
|
|
|
|
if (CH_DECL_SIGNAL (decl))
|
|
|
|
|
return search_in_list (DECL_NAME (decl), granted_decls);
|
|
|
|
|
else
|
|
|
|
|
return 1;
|
1998-09-30 18:07:19 +02:00
|
|
|
|
default:
|
|
|
|
|
break;
|
1998-08-27 22:51:39 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* this nerver should happen */
|
2001-12-03 20:15:19 +01:00
|
|
|
|
error_with_decl (decl, "function \"really_grant_this\" called for `%s'");
|
1998-08-27 22:51:39 +02:00
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Write a SPEC MODULE using the declarations in the list DECLS. */
|
|
|
|
|
static int header_written = 0;
|
1999-11-23 16:53:22 +01:00
|
|
|
|
#define HEADER_TEMPLATE "--\n-- WARNING: this file was generated by\n\
|
|
|
|
|
-- GNUCHILL version %s\n-- based on gcc version %s\n--\n"
|
1998-08-27 22:51:39 +02:00
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
write_spec_module (decls, granted_decls)
|
|
|
|
|
tree decls;
|
|
|
|
|
tree granted_decls;
|
|
|
|
|
{
|
|
|
|
|
tree vars;
|
|
|
|
|
char *hdr;
|
|
|
|
|
|
|
|
|
|
if (granted_decls == NULL_TREE)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
use_seizefile_name = NULL_TREE;
|
|
|
|
|
|
|
|
|
|
if (!header_written)
|
|
|
|
|
{
|
|
|
|
|
hdr = (char*) alloca (strlen (gnuchill_version)
|
|
|
|
|
+ strlen (version_string)
|
1999-11-23 16:53:22 +01:00
|
|
|
|
+ sizeof (HEADER_TEMPLATE) /* includes \0 */);
|
|
|
|
|
sprintf (hdr, HEADER_TEMPLATE, gnuchill_version, version_string);
|
1998-08-27 22:51:39 +02:00
|
|
|
|
APPEND (gstring, hdr);
|
|
|
|
|
header_written = 1;
|
|
|
|
|
}
|
|
|
|
|
APPEND (gstring, IDENTIFIER_POINTER (current_module->name));
|
|
|
|
|
APPEND (gstring, ": SPEC MODULE\n");
|
|
|
|
|
|
|
|
|
|
/* first of all we look for GRANT ALL specified */
|
|
|
|
|
search_in_list (NULL_TREE, granted_decls);
|
|
|
|
|
|
|
|
|
|
if (grant_all_seen != 0)
|
|
|
|
|
{
|
|
|
|
|
/* write all identifiers to grant file */
|
|
|
|
|
for (vars = decls; vars != NULL_TREE; vars = TREE_CHAIN (vars))
|
|
|
|
|
{
|
|
|
|
|
if (DECL_SOURCE_LINE (vars))
|
|
|
|
|
{
|
|
|
|
|
if (DECL_NAME (vars))
|
|
|
|
|
{
|
|
|
|
|
if ((TREE_CODE (vars) != CONST_DECL || !CH_DECL_ENUM (vars)) &&
|
|
|
|
|
really_grant_this (vars, granted_decls))
|
|
|
|
|
grant_one_decl (vars);
|
|
|
|
|
}
|
|
|
|
|
else if (DECL_POSTFIX_ALL (vars))
|
|
|
|
|
{
|
|
|
|
|
static int restricted = 0;
|
|
|
|
|
|
|
|
|
|
if (DECL_SEIZEFILE (vars) != use_seizefile_name
|
|
|
|
|
&& DECL_SEIZEFILE (vars))
|
|
|
|
|
{
|
|
|
|
|
use_seizefile_name = DECL_SEIZEFILE (vars);
|
|
|
|
|
restricted = use_seizefile_name == NULL_TREE ? 0 : CH_USE_SEIZEFILE_RESTRICTED (use_seizefile_name);
|
|
|
|
|
if (! restricted)
|
|
|
|
|
grant_use_seizefile (IDENTIFIER_POINTER (use_seizefile_name));
|
|
|
|
|
mark_use_seizefile_written (use_seizefile_name);
|
|
|
|
|
}
|
|
|
|
|
if (! restricted)
|
|
|
|
|
{
|
|
|
|
|
APPEND (gstring, "SEIZE ALL;\n");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
seizefile_list *wrk, *x;
|
|
|
|
|
|
|
|
|
|
/* do a selective write to the grantfile. This will reduce the
|
|
|
|
|
size of a grantfile and speed up compilation of
|
|
|
|
|
modules depending on this grant file */
|
|
|
|
|
|
|
|
|
|
if (selective_gstring == 0)
|
|
|
|
|
selective_gstring = newstring ("");
|
|
|
|
|
|
|
|
|
|
/* first of all process all SEIZE ALL's */
|
|
|
|
|
for (vars = decls; vars != NULL_TREE; vars = TREE_CHAIN (vars))
|
|
|
|
|
{
|
|
|
|
|
if (DECL_SOURCE_LINE (vars)
|
|
|
|
|
&& DECL_POSTFIX_ALL (vars))
|
|
|
|
|
grant_seized_identifier (vars);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* now walk through granted decls */
|
|
|
|
|
granted_decls = nreverse (granted_decls);
|
|
|
|
|
for (vars = granted_decls; vars != NULL_TREE; vars = TREE_CHAIN (vars))
|
|
|
|
|
{
|
|
|
|
|
grant_one_decl_selective (vars, decls);
|
|
|
|
|
}
|
|
|
|
|
granted_decls = nreverse (granted_decls);
|
|
|
|
|
|
|
|
|
|
/* append all SEIZES */
|
|
|
|
|
wrk = selective_seizes;
|
|
|
|
|
while (wrk != 0)
|
|
|
|
|
{
|
|
|
|
|
x = wrk->next;
|
|
|
|
|
APPEND (gstring, wrk->seizes->str);
|
|
|
|
|
FREE (wrk->seizes);
|
|
|
|
|
free (wrk);
|
|
|
|
|
wrk = x;
|
|
|
|
|
}
|
|
|
|
|
selective_seizes = 0;
|
|
|
|
|
|
|
|
|
|
/* append generated string to grant file */
|
|
|
|
|
APPEND (gstring, selective_gstring->str);
|
|
|
|
|
FREE (selective_gstring);
|
|
|
|
|
selective_gstring = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (vars = granted_decls; vars != NULL_TREE; vars = TREE_CHAIN (vars))
|
|
|
|
|
if (DECL_SOURCE_LINE (vars))
|
|
|
|
|
{
|
|
|
|
|
MYSTRING *mode_string = decode_prefix_rename (vars);
|
|
|
|
|
APPEND (gstring, "GRANT ");
|
|
|
|
|
APPEND (gstring, mode_string->str);
|
|
|
|
|
FREE (mode_string);
|
|
|
|
|
APPEND (gstring, ";\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
APPEND (gstring, "END;\n");
|
|
|
|
|
spec_module_generated = 1;
|
|
|
|
|
|
|
|
|
|
/* initialize this for next spec module */
|
|
|
|
|
grant_all_seen = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* after the dark comes, after all of the modules are at rest,
|
|
|
|
|
* we tuck the compilation unit to bed... A story in pass 1
|
|
|
|
|
* and a hug-and-a-kiss goodnight in pass 2.
|
|
|
|
|
*/
|
|
|
|
|
void
|
|
|
|
|
chill_finish_compile ()
|
|
|
|
|
{
|
|
|
|
|
tree global_list;
|
|
|
|
|
tree chill_init_function;
|
|
|
|
|
|
|
|
|
|
tasking_setup ();
|
|
|
|
|
build_enum_tables ();
|
|
|
|
|
|
|
|
|
|
/* We only need an initializer function for the source file if
|
|
|
|
|
a) there's module-level code to be called, or
|
|
|
|
|
b) tasking-related stuff to be initialized. */
|
|
|
|
|
if (module_init_list != NULL_TREE || tasking_list != NULL_TREE)
|
|
|
|
|
{
|
|
|
|
|
extern tree initializer_type;
|
|
|
|
|
static tree chill_init_name;
|
|
|
|
|
|
|
|
|
|
/* declare the global initializer list */
|
|
|
|
|
global_list = do_decl (get_identifier ("_ch_init_list"),
|
|
|
|
|
build_chill_pointer_type (initializer_type), 1, 0,
|
|
|
|
|
NULL_TREE, 1);
|
|
|
|
|
|
|
|
|
|
/* Now, we're building the function which is the *real*
|
|
|
|
|
constructor - if there's any module-level code in this
|
|
|
|
|
source file, the compiler puts the file's initializer entry
|
|
|
|
|
onto the global initializer list, so each module's body code
|
|
|
|
|
will eventually get called, after all of the processes have
|
|
|
|
|
been started up. */
|
|
|
|
|
|
|
|
|
|
/* This is better done in pass 2 (when first_global_object_name
|
|
|
|
|
may have been set), but that is too late.
|
|
|
|
|
Perhaps rewrite this so nothing is done in pass 1. */
|
|
|
|
|
if (pass == 1)
|
|
|
|
|
{
|
|
|
|
|
/* If we don't do this spoof, we get the name of the first
|
|
|
|
|
tasking_code variable, and not the file name. */
|
top level:
* Makefile.in (WARN_CFLAGS): Add -Wwrite-strings.
(tree.o): Depend on output.h.
* c-decl.c (pending_invalid_xref_file,
current_function_prototype_file): Constify.
(pushdecl): Constify a local char *.
(define_label): Constify filename parameter.
* c-lex.c (init_parse): Constify parameter and return value.
* c-typeck.c (c_expand_asm_operands): Constify filename parameter.
* c-tree.h: Update prototypes.
* c-parse.in: Constify filename member of %union, and if_stmt_file.
* c-parse.y, c-parse.c, c-parse.h, objc/objc-parse.y,
objc/objc-parse.c: Regenerate.
* dwarfout.c (dwarfout_init): Constify main_input_filename parameter.
* dwarfout.h: Update prototypes.
* expr.c (expand_expr): Constify a local char *.
* flags.h: Constify main_input_filename.
* function.c (expand_function_end): Constify filename parameter.
* genrecog.c (make_insn_sequence): Use a character array for
c_test_pos.
(main): Remove unused variables.
* input.h: Constify input_filename, main_input_filename, and
file_stack.name. Update prototypes.
* output.h: Declare first_global_object_name and
weak_global_object_name here, as const char *.
* stmt.c (expand_asm_operands): Constify filename parameter.
* toplev.c (compile_file, push_srcloc, debug_start_source_file):
Constify filename parameter.
(input_filename, main_input_filename): Constify.
* toplev.h: Update prototypes.
* tree.c: Include output.h. Don't declare
first_global_object_name or weak_global_object_name. Clean up string
bashing in get_file_function_name_long.
* tree.h (struct tree_decl): Constify filename member.
(input_filename): Constify.
Update prototypes.
* varasm.c (first_global_object_name, weak_global_object_name):
Constify.
(assemble_start_function, assemble_variable): Clean up string bashing.
* gcc.c: Constify all spec-related strings initialized,
transitively, from string constants. Constify all strings
and string variables related to multilibs.
(set_spec, read_specs): Cast argument to free to PTR.
(used_arg): Do not modify multilib_matches. Use strncmp plus
length comparison to compare multilib switches.
* genmultilib: Constify everything declared in multilib.h.
ch:
* ch-tree.h: Update prototypes. Remove prototypes for
functions declared elsewhere.
* decl.c (define_label): Constify filename parameter.
* grant.c (globalize_decl, set_default_grant_file): Constify
local char * variables. Don't declare
first_global_object_name or asm_out_file.
* lang.c (chill_real_input_filename): Constify.
* lex.c (init_parse): Constify parameter and return value.
* parse.c: Don't declare input_filename.
(ch_expand_asm_operands): Constify filename parameter.
(parse_multi_dimension_case_action): Constify local char *.
* satisfy.c (safe_satisfy_decl): Constify local char *.
cp:
* cp-tree.h: Constify tree_srcloc.filename, tinst_level.file,
and pending_inline.filename. Update prototypes.
* decl.c (define_label): Constify filename parameter.
* decl2.c (warn_if_unknown_interface): Constify local char *.
* input.c Constify input_source.filename. Don't declare
input_filename or lineno. Constify filename parameter to feed_input.
* lex.c (init_parse): Constify parameter and return value.
(cp_pragma_interface, cp_pragma_implementation): Constify
filename argument.
(reinit_parse_for_method, reinit_parse_for_block,
reinit_parse_for_expr, feed_defarg, handle_cp_pragma):
Constify local char *.
* pt.c: Don't declare lineno or input_filename.
(print_template_context, tsubst_friend_function, tsubst_decl,
tsubst, instantiate_decl): Constify local char *.
* semantics.c (expand_body): Constify local char *.
* tree.c (build_srcloc): Constify filename parameter.
* typeck.c (c_expand_asm_operands): Constify filename
parameter.
f:
* com.c (ffecom_subscript_check_): Constify array_name
parameter. Clean up string bashing.
(ffecom_arrayref_, ffecom_char_args_x_): Constify array_name
parameter.
(ffecom_do_entry_, ffecom_gen_sfuncdef_, ffecom_start_progunit_,
ffecom_sym_transform_, ffecom_sym_transform_assign_): Constify
local char *.
(init_parse): Constify parameter and return value.
* lex.c: Include dwarfout.h instead of prototyping dwarfout_*
functions here.
(ffelex_file_pop_, ffelex_file_push_): Constify filename parameter.
(ffelex_hash_, ffelex_include_): Constify local char *.
* std.c (ffestd_exec_end): Constify local char *.
* where.c (ffewhere_file_new): Constify filename parameter.
* where.h: Update prototypes.
java:
* check_init.c (check_init): Constify local char *.
* class.c (push_class): Constify local char *.
* java_tree.h: Update prototypes.
* jcf-io.c (open_class): Constify filename parameter and
return value.
(find_class): Remove redundant string copy. Cast return from
open_class.
* jcf-parse.c (read_class, parse_class_file, yyparse):
Constify local char *.
* jcf-write.c (generate_bytecode_insns, generate_classfile):
Constify local char *.
* jcf.h (JCF): Constify filename and classname.
(JCF_FINISH): Cast args to FREE to char * when appropriate.
* lang.c (init_parse): Constify parameter and return value.
* lex.c (java_get_line_col): Constify filename parameter.
* parse.h: Constify parser_ctxt.filename. Update prototypes.
* parse.y (java_parser_context_suspend,
issue_warning_error_from_context, safe_layout_class): Constify
local char *.
* parse.c: Regenerate.
From-SVN: r33804
2000-05-09 21:56:01 +02:00
|
|
|
|
char *q;
|
|
|
|
|
const char *tmp = first_global_object_name;
|
1998-08-27 22:51:39 +02:00
|
|
|
|
first_global_object_name = NULL;
|
|
|
|
|
chill_init_name = get_file_function_name ('I');
|
|
|
|
|
first_global_object_name = tmp;
|
top level:
* Makefile.in (WARN_CFLAGS): Add -Wwrite-strings.
(tree.o): Depend on output.h.
* c-decl.c (pending_invalid_xref_file,
current_function_prototype_file): Constify.
(pushdecl): Constify a local char *.
(define_label): Constify filename parameter.
* c-lex.c (init_parse): Constify parameter and return value.
* c-typeck.c (c_expand_asm_operands): Constify filename parameter.
* c-tree.h: Update prototypes.
* c-parse.in: Constify filename member of %union, and if_stmt_file.
* c-parse.y, c-parse.c, c-parse.h, objc/objc-parse.y,
objc/objc-parse.c: Regenerate.
* dwarfout.c (dwarfout_init): Constify main_input_filename parameter.
* dwarfout.h: Update prototypes.
* expr.c (expand_expr): Constify a local char *.
* flags.h: Constify main_input_filename.
* function.c (expand_function_end): Constify filename parameter.
* genrecog.c (make_insn_sequence): Use a character array for
c_test_pos.
(main): Remove unused variables.
* input.h: Constify input_filename, main_input_filename, and
file_stack.name. Update prototypes.
* output.h: Declare first_global_object_name and
weak_global_object_name here, as const char *.
* stmt.c (expand_asm_operands): Constify filename parameter.
* toplev.c (compile_file, push_srcloc, debug_start_source_file):
Constify filename parameter.
(input_filename, main_input_filename): Constify.
* toplev.h: Update prototypes.
* tree.c: Include output.h. Don't declare
first_global_object_name or weak_global_object_name. Clean up string
bashing in get_file_function_name_long.
* tree.h (struct tree_decl): Constify filename member.
(input_filename): Constify.
Update prototypes.
* varasm.c (first_global_object_name, weak_global_object_name):
Constify.
(assemble_start_function, assemble_variable): Clean up string bashing.
* gcc.c: Constify all spec-related strings initialized,
transitively, from string constants. Constify all strings
and string variables related to multilibs.
(set_spec, read_specs): Cast argument to free to PTR.
(used_arg): Do not modify multilib_matches. Use strncmp plus
length comparison to compare multilib switches.
* genmultilib: Constify everything declared in multilib.h.
ch:
* ch-tree.h: Update prototypes. Remove prototypes for
functions declared elsewhere.
* decl.c (define_label): Constify filename parameter.
* grant.c (globalize_decl, set_default_grant_file): Constify
local char * variables. Don't declare
first_global_object_name or asm_out_file.
* lang.c (chill_real_input_filename): Constify.
* lex.c (init_parse): Constify parameter and return value.
* parse.c: Don't declare input_filename.
(ch_expand_asm_operands): Constify filename parameter.
(parse_multi_dimension_case_action): Constify local char *.
* satisfy.c (safe_satisfy_decl): Constify local char *.
cp:
* cp-tree.h: Constify tree_srcloc.filename, tinst_level.file,
and pending_inline.filename. Update prototypes.
* decl.c (define_label): Constify filename parameter.
* decl2.c (warn_if_unknown_interface): Constify local char *.
* input.c Constify input_source.filename. Don't declare
input_filename or lineno. Constify filename parameter to feed_input.
* lex.c (init_parse): Constify parameter and return value.
(cp_pragma_interface, cp_pragma_implementation): Constify
filename argument.
(reinit_parse_for_method, reinit_parse_for_block,
reinit_parse_for_expr, feed_defarg, handle_cp_pragma):
Constify local char *.
* pt.c: Don't declare lineno or input_filename.
(print_template_context, tsubst_friend_function, tsubst_decl,
tsubst, instantiate_decl): Constify local char *.
* semantics.c (expand_body): Constify local char *.
* tree.c (build_srcloc): Constify filename parameter.
* typeck.c (c_expand_asm_operands): Constify filename
parameter.
f:
* com.c (ffecom_subscript_check_): Constify array_name
parameter. Clean up string bashing.
(ffecom_arrayref_, ffecom_char_args_x_): Constify array_name
parameter.
(ffecom_do_entry_, ffecom_gen_sfuncdef_, ffecom_start_progunit_,
ffecom_sym_transform_, ffecom_sym_transform_assign_): Constify
local char *.
(init_parse): Constify parameter and return value.
* lex.c: Include dwarfout.h instead of prototyping dwarfout_*
functions here.
(ffelex_file_pop_, ffelex_file_push_): Constify filename parameter.
(ffelex_hash_, ffelex_include_): Constify local char *.
* std.c (ffestd_exec_end): Constify local char *.
* where.c (ffewhere_file_new): Constify filename parameter.
* where.h: Update prototypes.
java:
* check_init.c (check_init): Constify local char *.
* class.c (push_class): Constify local char *.
* java_tree.h: Update prototypes.
* jcf-io.c (open_class): Constify filename parameter and
return value.
(find_class): Remove redundant string copy. Cast return from
open_class.
* jcf-parse.c (read_class, parse_class_file, yyparse):
Constify local char *.
* jcf-write.c (generate_bytecode_insns, generate_classfile):
Constify local char *.
* jcf.h (JCF): Constify filename and classname.
(JCF_FINISH): Cast args to FREE to char * when appropriate.
* lang.c (init_parse): Constify parameter and return value.
* lex.c (java_get_line_col): Constify filename parameter.
* parse.h: Constify parser_ctxt.filename. Update prototypes.
* parse.y (java_parser_context_suspend,
issue_warning_error_from_context, safe_layout_class): Constify
local char *.
* parse.c: Regenerate.
From-SVN: r33804
2000-05-09 21:56:01 +02:00
|
|
|
|
|
1998-08-27 22:51:39 +02:00
|
|
|
|
/* strip off the file's extension, if any. */
|
top level:
* Makefile.in (WARN_CFLAGS): Add -Wwrite-strings.
(tree.o): Depend on output.h.
* c-decl.c (pending_invalid_xref_file,
current_function_prototype_file): Constify.
(pushdecl): Constify a local char *.
(define_label): Constify filename parameter.
* c-lex.c (init_parse): Constify parameter and return value.
* c-typeck.c (c_expand_asm_operands): Constify filename parameter.
* c-tree.h: Update prototypes.
* c-parse.in: Constify filename member of %union, and if_stmt_file.
* c-parse.y, c-parse.c, c-parse.h, objc/objc-parse.y,
objc/objc-parse.c: Regenerate.
* dwarfout.c (dwarfout_init): Constify main_input_filename parameter.
* dwarfout.h: Update prototypes.
* expr.c (expand_expr): Constify a local char *.
* flags.h: Constify main_input_filename.
* function.c (expand_function_end): Constify filename parameter.
* genrecog.c (make_insn_sequence): Use a character array for
c_test_pos.
(main): Remove unused variables.
* input.h: Constify input_filename, main_input_filename, and
file_stack.name. Update prototypes.
* output.h: Declare first_global_object_name and
weak_global_object_name here, as const char *.
* stmt.c (expand_asm_operands): Constify filename parameter.
* toplev.c (compile_file, push_srcloc, debug_start_source_file):
Constify filename parameter.
(input_filename, main_input_filename): Constify.
* toplev.h: Update prototypes.
* tree.c: Include output.h. Don't declare
first_global_object_name or weak_global_object_name. Clean up string
bashing in get_file_function_name_long.
* tree.h (struct tree_decl): Constify filename member.
(input_filename): Constify.
Update prototypes.
* varasm.c (first_global_object_name, weak_global_object_name):
Constify.
(assemble_start_function, assemble_variable): Clean up string bashing.
* gcc.c: Constify all spec-related strings initialized,
transitively, from string constants. Constify all strings
and string variables related to multilibs.
(set_spec, read_specs): Cast argument to free to PTR.
(used_arg): Do not modify multilib_matches. Use strncmp plus
length comparison to compare multilib switches.
* genmultilib: Constify everything declared in multilib.h.
ch:
* ch-tree.h: Update prototypes. Remove prototypes for
functions declared elsewhere.
* decl.c (define_label): Constify filename parameter.
* grant.c (globalize_decl, set_default_grant_file): Constify
local char * variables. Don't declare
first_global_object_name or asm_out_file.
* lang.c (chill_real_input_filename): Constify.
* lex.c (init_parse): Constify parameter and return value.
* parse.c: Don't declare input_filename.
(ch_expand_asm_operands): Constify filename parameter.
(parse_multi_dimension_case_action): Constify local char *.
* satisfy.c (safe_satisfy_decl): Constify local char *.
cp:
* cp-tree.h: Constify tree_srcloc.filename, tinst_level.file,
and pending_inline.filename. Update prototypes.
* decl.c (define_label): Constify filename parameter.
* decl2.c (warn_if_unknown_interface): Constify local char *.
* input.c Constify input_source.filename. Don't declare
input_filename or lineno. Constify filename parameter to feed_input.
* lex.c (init_parse): Constify parameter and return value.
(cp_pragma_interface, cp_pragma_implementation): Constify
filename argument.
(reinit_parse_for_method, reinit_parse_for_block,
reinit_parse_for_expr, feed_defarg, handle_cp_pragma):
Constify local char *.
* pt.c: Don't declare lineno or input_filename.
(print_template_context, tsubst_friend_function, tsubst_decl,
tsubst, instantiate_decl): Constify local char *.
* semantics.c (expand_body): Constify local char *.
* tree.c (build_srcloc): Constify filename parameter.
* typeck.c (c_expand_asm_operands): Constify filename
parameter.
f:
* com.c (ffecom_subscript_check_): Constify array_name
parameter. Clean up string bashing.
(ffecom_arrayref_, ffecom_char_args_x_): Constify array_name
parameter.
(ffecom_do_entry_, ffecom_gen_sfuncdef_, ffecom_start_progunit_,
ffecom_sym_transform_, ffecom_sym_transform_assign_): Constify
local char *.
(init_parse): Constify parameter and return value.
* lex.c: Include dwarfout.h instead of prototyping dwarfout_*
functions here.
(ffelex_file_pop_, ffelex_file_push_): Constify filename parameter.
(ffelex_hash_, ffelex_include_): Constify local char *.
* std.c (ffestd_exec_end): Constify local char *.
* where.c (ffewhere_file_new): Constify filename parameter.
* where.h: Update prototypes.
java:
* check_init.c (check_init): Constify local char *.
* class.c (push_class): Constify local char *.
* java_tree.h: Update prototypes.
* jcf-io.c (open_class): Constify filename parameter and
return value.
(find_class): Remove redundant string copy. Cast return from
open_class.
* jcf-parse.c (read_class, parse_class_file, yyparse):
Constify local char *.
* jcf-write.c (generate_bytecode_insns, generate_classfile):
Constify local char *.
* jcf.h (JCF): Constify filename and classname.
(JCF_FINISH): Cast args to FREE to char * when appropriate.
* lang.c (init_parse): Constify parameter and return value.
* lex.c (java_get_line_col): Constify filename parameter.
* parse.h: Constify parser_ctxt.filename. Update prototypes.
* parse.y (java_parser_context_suspend,
issue_warning_error_from_context, safe_layout_class): Constify
local char *.
* parse.c: Regenerate.
From-SVN: r33804
2000-05-09 21:56:01 +02:00
|
|
|
|
q = strrchr (IDENTIFIER_POINTER (chill_init_name), '.');
|
|
|
|
|
if (q)
|
|
|
|
|
*q = '\0';
|
1998-08-27 22:51:39 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
start_chill_function (chill_init_name, void_type_node, NULL_TREE,
|
|
|
|
|
NULL_TREE, NULL_TREE);
|
|
|
|
|
TREE_PUBLIC (current_function_decl) = 1;
|
|
|
|
|
chill_init_function = current_function_decl;
|
|
|
|
|
|
|
|
|
|
/* For each module that we've compiled, that had module-level
|
|
|
|
|
code to be called, add its entry to the global initializer
|
|
|
|
|
list. */
|
|
|
|
|
|
|
|
|
|
if (pass == 2)
|
|
|
|
|
{
|
|
|
|
|
tree module_init;
|
|
|
|
|
|
|
|
|
|
for (module_init = module_init_list;
|
|
|
|
|
module_init != NULL_TREE;
|
|
|
|
|
module_init = TREE_CHAIN (module_init))
|
|
|
|
|
{
|
|
|
|
|
tree init_entry = TREE_VALUE (module_init);
|
|
|
|
|
|
|
|
|
|
/* assign module_entry.next := _ch_init_list; */
|
|
|
|
|
expand_expr_stmt (
|
|
|
|
|
build_chill_modify_expr (
|
|
|
|
|
build_component_ref (init_entry,
|
|
|
|
|
get_identifier ("__INIT_NEXT")),
|
|
|
|
|
global_list));
|
|
|
|
|
|
|
|
|
|
/* assign _ch_init_list := &module_entry; */
|
|
|
|
|
expand_expr_stmt (
|
|
|
|
|
build_chill_modify_expr (global_list,
|
|
|
|
|
build1 (ADDR_EXPR, ptr_type_node, init_entry)));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tasking_registry ();
|
|
|
|
|
|
|
|
|
|
make_decl_rtl (current_function_decl, NULL, 1);
|
|
|
|
|
|
|
|
|
|
finish_chill_function ();
|
|
|
|
|
|
2001-08-10 00:33:35 +02:00
|
|
|
|
if (pass == 2 && targetm.have_ctors_dtors)
|
|
|
|
|
(* targetm.asm_out.constructor)
|
|
|
|
|
(XEXP (DECL_RTL (chill_init_function), 0), DEFAULT_INIT_PRIORITY);
|
1998-08-27 22:51:39 +02:00
|
|
|
|
|
|
|
|
|
/* ready now to link decls onto this list in pass 2. */
|
|
|
|
|
module_init_list = NULL_TREE;
|
|
|
|
|
tasking_list = NULL_TREE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|