diff --git a/gcc/ch/ChangeLog b/gcc/ch/ChangeLog new file mode 100644 index 00000000000..9c930f5fd69 --- /dev/null +++ b/gcc/ch/ChangeLog @@ -0,0 +1,11130 @@ +Mon Jul 27 17:21:01 1998 Dave Brolley + + * typeck.c (apply_chill_array_layout): Don't set TYPE_SIZE of the + element type. + +Mon Jul 13 14:20:12 1998 Nick Clifton + + * lang-options.h: Format changed to match changes in gcc/toplev.c + to implement a --help option. + +Wed Jul 8 02:58:35 1998 Jeffrey A Law (law@cygnus.com) + + * lang.c (lang_init_options): New function. + +Wed Jun 10 12:08:09 1998 Dave Brolley + + * lang-options.h: Remove -I. + * ch-tree.h (c_decode_option): New argc/argv interface. + * decl.c (c_decode_option): New argc/argv interface. + * lang.c (lang_decode_option): New argc/argv interface. + +Wed May 27 10:33:41 1998 Dave Brolley + + * actions.c (chill_handle_multi_case_label): Arguments 1 and 2 to + chill_handle_multi_case_label_range were reversed. + + * Make-lang.in (chill): Use the correct gcc in the driver script. + +Thu May 21 14:40:44 1998 Dave Brolley + + * convert.c (digest_array_tuple): Move conversion to + chill_convert_for_assignment. + + * actions.c (chill_convert_for_assignment): Allow conversion of array + constructor to bitstring constructor for assignment to array of packed bits. + +Thu May 14 13:57:51 1998 Dave Brolley + + * Make-lang.in (chill-runtime): Depend on stmp-headers to build float.h. + +Wed May 13 14:07:51 1998 Dave Brolley + + * typeck.c (build_chill_slice): Adjust slice index to account for the + lower bound of the array. + + * actions.c (chill_expand_assignment): Convert function arguments to the + correct types. + (chill_expand_assignment): Ditto. + +Mon May 11 16:20:57 1998 Dave Brolley + + * typeck.c (build_chill_slice): Propogate the TYPE_PACKED setting + of the array_type to the slice_type. + (build_chill_slice): Use SLICE_EXPR to represent a slice of an array + of bits. + + * loop.c (build_loop_iterator): Disallow location enumeration for + bit-packed arrays. + + * convert.c (digest_array_tuple): Allow conversion of an array tuple + to a bitstring for assignment to a packed array of bits. + +Mon May 4 16:28:58 1998 Dave Brolley + + * ch-tree.def (PACKED_ARRAY_REF): New tree code. + * typeck.c (build_chill_array_ref_1): Build PACKED_ARRAY_REF if array is packed. + (chill_location): Handle PACKED_ARRAY_REF. + (apply_chill_array_layout): Allow PACK for arrays of single bits. + * expr.c (chill_expand_expr): Expand PACKED_ARRAY_REF. + (invalid_operand): Check PACKED_ARRAY_REF operands. + * actions.c (chill_expand_assignment): Expand PACKED_ARRAY_REF. + +Thu Apr 23 15:33:20 1998 Dave Brolley + + * typeck.c (apply_chill_field_layout): Only integral fields can be packed + to the bit level. + +Tue Apr 21 14:30:10 1998 Jeffrey A Law (law@cygnus.com) + + * decl.c (intTI_type_node, unsigned_intTI_type_node): Define. + (init_decl_processing): Handle TI types. + * typeck.c (intTI_type_node, unsigned_intTI_type_node): Declare. + (type_for_size): Handle TI types. + (type_for_mode): Handle TI types. + +Mon Apr 20 13:12:26 1998 Dave Brolley + + * typeck.c (layout_chill_struct_type): Don't promote bitfield types to + int. + + * actions.c (chill_convert_for_assignment): Check that the rhs is not + a type declaration. + +Tue Apr 14 13:17:44 1998 Dave Brolley + + * lex.c (init_parse): Now returns char* containing the filename. + + * typeck.c (get_type_precision): Declare. + (apply_chill_field_layout): Use the minimum number of bits necessary to + represent discrete types as the natural length of the field. + +Thu Apr 9 12:46:55 1998 Dave Brolley + + * lex.c (finput): Move definition here from toplev.c + (init_parse): New function replaces init_lex. + (init_parse): Add code to open source file. + (finish_parse): New function. + (close_input_file): File was being closed more than once. + + * lang.c (finput): Declare. + * ch-tree.h (init_lex): Remove. + + +Wed Apr 8 14:47:33 1998 Dave Brolley + + * actions.c (compute_else_range): Fix loop index error. + (chill_handle_multi_case_label_range): Move error checking to + chill_handle_multi_case_label. + (chill_handle_multi_case_else_label): Convert ELSE range values to + the type of the corrersponding CASE selector. + +Wed Apr 8 13:02:50 1998 Jeffrey A Law (law@cygnus.com) + + * actions.c (sizetype_tab): Do not declare. + * lang.c (lang_print_xnode): New function. + +Mon Mar 23 14:43:06 1998 Dave Brolley + + * grant.c (decode_layout): New function. + (grant_array_type): Call decode_layout to export layout information to + the grant file. + (decode_decl): Ditto + +Fri Mar 20 16:06:41 1998 Dave Brolley + + * parse.c (parse_tuple_element): Call had arguments in wrong order. + +Thu Mar 19 13:42:33 1998 Dave Brolley + + * typeck.c (apply_chill_array_layout): Use + TYPE_PRECISION (chill_integer_type_node) in stead of BITS_PER_WORD for + the word size. + +Wed Mar 18 16:25:48 1998 Dave Brolley + + * typeck.c (apply_chill_field_layout): Only set DECL_BIT_FIELD for discrete + fields. + + * parse.c (parse_multi_dimension_case_action): Call emit_line_note at the + proper places. + +Tue Mar 17 14:16:08 1998 Dave Brolley + + * parse.c (gen_label_rtx): Declare before use. + (emit_jump): Declare before use. + (emit_label): Declare before use. + (parse_case_label_list): Pass in CASE selector so we can mark it as having + an (ELSE) label if necessary. + (parse_case_label_specification): Pass in the CASE selector list so that + the CASE selectors can be passed to parse_case_label_list. + (parse_multi_dimension_case_action): Modify to generate branching code in + one pass. + (parse_case_expression): Compute (ELSE) range before generating CASE expression. + (parse_variant_alternative): Remove error for (ELSE) specified. + + * expr.c (check_case_selector_list): Preserve TREE_PURPOSE of selector list. + + * decl.c (layout_chill_variants): Add code to check compatibility of ranges + and discrete mode names. + + * ch-tree.h (ELSE_LABEL_SPECIFIED): New Chill specific flag. + + * actions.h (build_multi_case_selector_expression): Make it extern. + (chill_handle_multi_dimension_case_label): Remove. + (compute_else_ranges): New function. + + * actions.c (update_else_range_for_int_const): New function. + (update_else_range_for_range): New function. + (update_else_range_for_range_expr): New function. + (update_else_range_for_type): New function. + (compute_else_range): New function. + (compute_else_ranges): New function. + (chill_handle_multi_case_else_label): New function + (chill_handle_multi_case_label_range): Don't generate tests for conditions + which are always true or false. + (chill_handle_multi_case_label): Ditto. + (chill_handle_multi_case_label): Implement (ELSE) label support. + (chill_handle_multi_case_label): First argument is now the selector tree not + its VALUE. + (chill_handle_multi_dimension_case_label): Removed. + (build_chill_multi_dimension_case_expr): List of CASE alternatives is no longer + reversed on entry, so reverse it here. + +Tue Mar 10 15:02:26 1998 Dave Brolley + + * actions.c (chill_handle_multi_case_label_range): Add more error checking. + (chill_handle_multi_case_label): Implement (*) for multi dimensional CASE. + (chill_handle_multi_case_label): Improve Error handling. + +Mon Mar 9 12:39:00 1998 Dave Brolley + + * actions.c (chill_handle_multi_case_label_range): Added. + (chill_handle_multi_case_label): Add support for discrete ranges and + discrete modes. + + * typeck.c (apply_chill_array_layout): Added more error checking. + (apply_chill_field_layout): Added more error checking. + +Wed Mar 4 16:08:26 1998 Dave Brolley + + * convert.c (convert): Call build_simple_array_type with new argument. + + * ch-tree.h(build_simple_array_type): Add argument for array layout. + + * typeck.c (build_chill_slice): Call build_simple_array_type with new argument. + (build_simple_array_type): Attach array layout to TYPE_ATTRIBUTES. + (apply_chill_array_layout): New function to implement array layout. + (layout_chill_array_type): Call apply_chill_array_layout and reset + TYPE_ATTRIBUTES to NULL_TREE. + (build_chill_array_type): Extend to handle one array layout per index mode. + (smash_dummy_type): Call build_simple_array_type with new argument. + + * satisfy.c (satisfy): Call SATISFY on array layout tree. + +Wed Feb 25 14:36:41 1998 Dave Brolley + + * typeck.c (next_struct_offset): Added. + (apply_chill_field_layout): New function to check and apply PACK, NOPACK, + or POS layout to a structure field. + (layout_chill_struct_type): Add call to apply_chill_field_layout. + + * satisfy.c (satisfy): Call satisfy recursively to handle the expressions + in the field layout tree. + + * parse.c (pack_warn_printed): Remove. + (nopack_warn_printed): Remove. + (step_warn_printed): Remove. + (pos_warn_printed): Remove. + (parse_opt_layout): Remove warnings about POS, STEP, PACK and NOPACK usage. + + * decl.c (grok_chill_fixedfields): Check for POS specified for a list of + field declarations. + +Thu Feb 19 17:33:06 1998 Dave Brolley + + * parse.c (parse_opt_layout): Generate syntax errors in pass 1 only. + (parse_opt_mode): Removed incorrect comment about association of array + layouts with nested array elements. + (parse_opt_mode): Allow for one layout per index mode specified. + +Wed Feb 18 23:48:57 1998 Richard Henderson + + * Make-lang.in (cc1chill): Kill lingering bc-opcode.h dependancy. + +Wed Feb 18 17:35:05 1998 Dave Brolley + + * parse.c (parse_field): Get rid of warning for multiple case selectors. + + * decl.c (layout_chill_variants): Fix loop indexing error. + +Mon Feb 16 15:54:47 1998 Dave Brolley + + * parse.c (parse_case_expression): Remove code which checked for + unimplemented (ELSE) label. + (parse_case_expression): Add code to handle multi dimensional case + expression. + + * expr.c (check_case_selector_list): Fixed to return a list of the + selectors which were checked. + (chill_expand_case_expr): Remove "sorry" message for multi dimension + case. + (chill_expand_case_expr): Reverse order of case alternatives. + (chill_expand_case_expr): Add "error" message for multiple case + selectors. + + * actions.h (build_chill_multi_dimension_case_expr): Added. + + * actions.c (build_multi_case_selector_expression): Renamed from + build_multi_case_expression. + (chill_handle_multi_dimension_case_label): Call above function by its + new name. + (build_chill_case_expr): Don't reverse the list elements here. It may + not be necessary. + (build_chill_multi_dimension_case_expr): New function implements multi + dimensional case expression. + +Thu Feb 12 15:44:50 1998 Dave Brolley + + * parse.c (parse_case_action): Implement multi-dimension CASE action. + (parse_multi_dimension_case_action): Added. + (parse_single_dimension_case_action): Added based on code moved from + parse_case_action. + + * expr.c (check_case_selector_list): Added. + + * ch-tree.h (check_case_selector_list): Added. + + * actions.h (chill_handle_single_dimension_case_label): Added. + (chill_handle_multi_dimension_case_label): Added. + + * actions.c (chill_handle_single_dimension_case_label): Added. + (chill_handle_multi_case_label): Added. + (chill_handle_multi_case_label_list): Added. + (build_multi_case_expression): Added. + (chill_handle_multi_dimension_case_label): Added + +Fri Feb 6 16:43:41 1998 Dave Brolley + + * actions.c (sizetype_tab): Fix declaration to match gcc changes. + +Thu Feb 5 14:03:00 1998 Dave Brolley + + * decl.c (chill_tree_code_type): Change this to be an array of char like + the tree_code_type in the rest of gcc. + + * ch-tree.def (chill_tree_code_type): See decl.c. + +Thu Jan 29 15:34:18 1998 Dave Brolley + + * tasking.c (error_with_decl): Correct prototype. + (build_gen_ptype): Reverse arguments. + + * lang.c (chill_real_input_filename): Add definition. + (chill_print_error_function): Correct second argument. + (lang_init): Set chill_real_input_filename. + + * expr.c (NULL): Protect definition with #ifndef. + + * decl.c (init_decl_processing): Don't allocate chill_tree_code_... + (init_decl_processing): Change last argument to 'sizeof(char)'. + + +Tue Nov 25 10:44:19 1997 Nick Clifton + + * Make-lang.in (mostlyclean): Use && to seperate commands, so that + if the directory change fails, the rule will not loop. + +Mon Mar 3 12:08:19 1997 Fred Fish + + * Make-lang.in (CHILL_FLAGS_TO_PASS): Remove extraneous leading + spaces and use single tab character on some lines. + (cc1chill): Ditto. + +Tue Nov 26 05:12:40 1996 Wilfried Moser + + * tasking.c (build_receive_buffer_case_label): Rework in a manner, + that the buffer location gets evaluated only once, in + build_receive_buffer_case_end. + + * typeck.c (build_chill_bin_type): Rework. + (layout_chill_range_type): Process BIN mode. + (build_chill_array_type): Remove checking of layout. This is done + at the parse. + + * parse.c (parse_on_exception_list): Don't allow ON name:. + (parse_opt_layout): Parse POS and STEP and return a tree instead + of int. + + * lex.c (init_lex), lex.h: Define and initialise RID_BIN. + + * grant.c (print_integer_type): Take care of BIN. + + * expr.c (build_chill_descr): Make descr static if requested + location is static. + (build_chill_length): Process text mode name and text location as + described in Z.200/1992. + (build_compare_expr): Don't allow < <= > >= for composite modes. + + * decl.c (grok_chill_fixedfields): Remove checking of + layout. This is done at the parser. + + * convert.c (digest_structure_tuple): Take care of wrong (probably + array) tuple. Printing error may cause sigsegv. + + * ch-tree.h: Change prototypes of grok_chill_fixedfields and + build_chill_array_type (layout is passed now as a tree instead of + int). + +Fri Nov 15 15:17:44 1996 Per Bothner + + * convert.c (display_int_cst): Check that val is INTEGER_CST. + (digest_array_tuple): Some extra error checks (i.e. that indexes + are constant). If dynamic mode, result is not constant. + +Mon Oct 28 12:48:06 1996 Jeffrey A Law (law@cygnus.com) + + * typeck.c (signed_or_unsigned_type): If the given type already + as the correct signedness, then just return it. + + * typeck.c ({un,}signed_type): If can't do anything, call + signed_or_unsigned_type. + +Fri Sep 6 02:50:08 1996 Wilfried Moser + + * typeck.c (build_chill_cast): In case of rangecheck, take care of + constant expression (when defining a SYN). + +Thu Sep 5 04:30:32 1996 Wilfried Moser + + * parse.c (define__PROCNAME__): New function to define a SYNONYM + __PROCNAME__ (__procname__) which is a character string containing + the name of the current procedure. This is quit the same as + __FUNCTION__ in C. + (parse_proc_body): Add call to define__PROCNAME__. + + * typeck.c (chill_equivalent): Take care of NEWMODE'd procedure + modes on one side and procedures on the other side.. + +Wed Jul 24 01:13:51 1996 Wilfried Moser + + * typeck.c: Replace all local variables and arguments named `index' + with `idx', `index' gets replaced by `strchr' which makes debugging + somehow difficult. + (valid_array_index_p): New argument to indicate that we are processing + LENGTH (varying string) on the lefthand side of an assignment. The + index check is different in this case. + (build_chill_cast): In case of expression conversion do an OVERFLOW + check with the limits of the target mode. + + * ch-tree.h: New prototype for valid_array_index_p. + + * actions.c (expand_varying_length_assignment): Add new argument to + call to valid_array_index_p to indicate we are processing + LENGTH on the lefthand side of an assignment. + + * loop.c: Rename loop_stack to loopstack to avoid clashes with + global variable ../stmt.c:loop_stack. + +Tue Jun 18 23:04:06 1996 Per Bothner + + * expr.c (resolve_component_ref): Set TREE_SIDE_EFFECTS properly. + +Mon Jun 10 15:01:51 1996 Per Bothner + + * typeck.c (build_chill_reference_type): Copy novelty for reference. + * satisfy.c (satisfy): If REFERENCE_TYPE, copy novelty. + +Thu May 30 04:55:27 1996 Wilfried Moser + + * typeck.c (valid_array_index_p): For varying character strings + we must check if the index is less then the actual length instead + of less equal. + +Wed May 15 06:07:10 1996 Wilfried Moser + + * ch-tree.h: Add prototype for test_range. + + * inout.c (process_io_list): Fix duplicate function call if + writetext argument is a function returning a varying string. + +Tue May 14 21:08:47 1996 Per Bothner + + Re-do string comparisons. Old way could re-use temporary + (SAVE_EXPR created for an argumnet is variable) prematurely. + * ch-tree.def (STRING_EQ_EXPR, STRING_LT_EXPR): New codes. + * decl.c (init_decl_processing): Remove __eqstring, __gestring, + __gtstring, __lestring, __ltstring, __nestring declarations. + * expr.c (build_char_array_expr): Rename to build_compare_string_expr. + Create STRING_EQ_EXPR, STRING_LT_EXPR nodes, instead of CALL_EXPRs. + (chill_expand_expr): Implement STRING_EQ_EXPR, STRING_LT_EXPR. + (build_compare_expr): Use new build_char_array_expr name. + +Mon Apr 8 14:08:30 1996 Per Bothner + + Cleanup of April 5 fix: + * actions.c (test_range): New function. + (check_range): Simplify to use test_range. + * convert.c (digest_powerset_tuple): Move error message from here ... + (check_ps_range): ... to here. Also, simplify to use test_range. + +Fri Apr 5 03:41:05 1996 Wilfried Moser + + * convert.c (check_ps_range): New function to perform range check + of powerset tuple elements. This is quite the same as check_range, + however, the actions on rangefail are different. + (digest_powerset_tuple): Call check_ps_range. + + * loop.c (build_loop_iterator): Chaeck if location enumeration + is requested for BOOLS(n) and print an error message. + +Wed Mar 6 17:46:48 1996 Per Bothner + + * parse.c (parse_primval): Emit error if !ignore (before: pass==2). + + Implement parameterised array and string modes (using LANG_TYPE). + * parse.c (parse_opt_mode): Handle parameterized arrays and strings. + * grant.c (decode_mode): Support extended use of LANG_TYPE. + * satisfy.c (cycle_error_print): Ignore non-decls in chain. + (safe_satisfy_decl): No error if non-decl (pointer type) in cycle. + (satisfy): Return immediately if laid out non-pointer type. + (satisfy case LANG_TYPE): Handle paramertised mode. + (satisfy case POINTER_TYPE/REFERENCE_TYPE): Push type on chain; + return immediately if already in chain. + * typeck.c (smash_dummy_type): Handle parameterized modes and CHAR(N). + Change return type (can now return error_mark_node). + (build_readonly_type): Return return value from smash_dummy_type. + * ch-tree.h: Change smash_dummy_type return type. + +Tue Mar 5 22:31:20 1996 Per Bothner + + * typeck.c (build_chill_slice): Re-do index_type calculation. + * typeck.c (layout_chill_range_type): Use compare_int_csts rather + than tree_int_cst_lt to avoid signed/unsigned problems. + + * typeck.c (copy_novelty): Use copy_node rather than build_type_node. + * typeck.c (smash_dummy_type): Use copy_novelty for NEWMODE of range. + + * decl.c (init_decl_processing): More portable sizetype initialization. + + * tree.c (build_string_type): Generalize to also create bitstrings. + Return error_mark_node if an argument is an ERROR_MARK. + (build_bitstring_type): Simplify - just call build_string_type. + +Tue Mar 5 03:48:32 1996 Wilfried Moser + + * actions.c (warn_unhandled): Add missing assignment. + + * loop.c (build_loop_iterator): In case of IN, check if + expression has a mode, otherwise make an error. + +Mon Mar 4 23:12:03 1996 Per Bothner + + * convert.c (digest_powerset_tuple): Check tuple elements + for compatibility; if compatible, call convert. + +Thu Feb 29 23:39:54 1996 Per Bothner + + Simplify NOVELTY representation. + * ch-tree.h (CH_NOVELTY): Re-implement as plain TYPE_CONTEXT. + (CH_NOVELTY_FLAG): Removed. (Just use CH_NOVELTY.) + * decl.c (push_modedef): Make copy even for SYNMODE. + but not for internal typedefs (indicated by make_newmode==-1). + * tasking.c: Call push_modedef with make_newmode==-1. + * typeck.c (chill_novelty): Remove. + (smash_dummy_type): Removed unused event/buffer stuff. Update. + * grant.c (decode_decl), inout.c (build_io_types), + expr.c (build_concat_expr), typeck.c (build_chill_slice, copy_novelty), + tasking.c (build_instance_type): Simplify using new CH_NOVELTY. + + Solidify READ mode handling. + * decl.c (do_decl, push_syndecl, start_chill_function): + Possibly set TREE_READONLY for a VAR_DECL, CONST_DECL, or PARM_DECL. + * typeck.c (build_chill_slice): Set TREE_READONLY appropriately. + (build_chill_array_ref_1, build_chill_bitref): Likewise. + (build_chill_cast): Set TREE_READONLY depending on result type (only). + * convert (convert_from_reference, convert): Likewise. + * expr.c (resolve_component_ref): Set TREE_READONLY appropriately. + (build_chill_function_call): Error if OUT/INOUT arg is TREE_READONLY. + * actions.c (chill_expand_assignment): Also error if TREE_READONLY. + Use convert_from_reference. + +Thu Feb 29 11:14:09 1996 Per Bothner + + * parse.c (parse_do_action): DO WITH expressions are evaluated in + outer scope. Also call save_if_needed. + * decl.c (shadow_record_fields); Fix and simplify. + +Tue Feb 27 22:19:40 1996 Per Bothner + + * convert.c (display_int_cst): Gereralize to wider range of ints. + +Thu Feb 22 06:12:59 1996 Wilfried Moser + + * convert.c (digest_array_tuple): Take care of type == error_mark_node. + + * decl.c (do_decl): In case of chill_varying_type_p, check if + type of fixed part is error mark and do nothing in this case. + + * lex.c (convert_bitstring): Don't complain when length of + bitstring is 0 (BOOLS(0) is a valid mode). + + * tree.c (layout_powerset_type): Add check for TYPE_MAX/MIN_VALUE + (domain) is error mark. + + * typeck.c (layout_chill_range_type): If lowvalue or highvalue == + error_mark_node, just return. + +Tue Feb 20 00:01:10 1996 Wilfried Moser + + * parse.c (parse_variant_alternative): When checking for ELSE take + care of tagless variants. + +Mon Feb 19 05:54:45 1996 Wilfried Moser + + * parse.c (parse_case_action): Check if ELSE was specified + in a case label list (this is only valid for array tuples). + (parse_case_expression): Deto. + (parse_variant_alternative): Deto. + +Tue Feb 13 17:08:16 1996 Per Bothner + + * typeck.c (chill_location): Cleanup. Neither SLICE_EXPR nor + BIT_FIELD_REF are referable, even if their base strings are. + +Fri Feb 9 02:25:33 1996 Wilfried Moser + + * actions.c (chill_expand_result): Do CH_FUNCTION_SETS_RESULT after + checking the expression. + + * convert.c (convert): Set TREE_CONSTANT when taking the + address of a function. + + * decl.c (start_chill_function): Check if the mode is really + a mode to avoid subsequent segfaults. + + * typeck.c (string_assignment_condition): Add checking of + bitstring length. + +Thu Feb 8 01:37:59 1996 Wilfried Moser + + * actions.c (build_cause_exception): Print warning of unhandled + exception only once for each exception. + +Mon Feb 5 22:17:13 1996 Per Bothner + + * tree.c (discrete_count), ch-tree.h: New function. + * expr.c (build_concate_expr, build_chill_repetition_op, + chill_expand_expr): Use discrete_count; make sure arguments + to size_binop are sizetype. + (powersetlen): Trvialize using discrete_count. + + * inout.c (process_io_list): Use new assign_temp function. + * inout.c (build_enum_tables): Avoid taking address of array_ref, + which sometimes gets optimized to a constant. + + * expr.c (finish_chill_unary_op): Call convert_to_class on argument. + Remove some obsolete TREE_UNSIGNED stuff. + * lex.c (convert_integer): Removed more TREE_UNSIGNED stuff. + +Thu Feb 1 15:11:20 1996 Doug Evans + + * lex.c (check_newline): Return result of HANDLE_PRAGMA. + +Wed Jan 31 17:13:25 1996 Per Bothner + + * decl.c (char_array_type_node, wchar_array_type_node): Removed. + (init_decl_processing): Remove array_domain_type; don't set + char_array_type_node or wchar_array_type_node. + * decl.c (init_decl_processing): Use fixup_unsigned_type to + simplify code to create boolean_type_node and char_type_node. + +Mon Jan 29 14:20:10 1996 Doug Evans + + * lex.c (check_newline): Pass character after `#pragma' to + HANDLE_PRAGMA. Don't call get_directive_line if at end of line. + +Fri Jan 26 05:56:27 1996 Wilfried Moser + + * expr.c (build_chill_function_call): Add check and error for + actual argument is a TYPE_DECL. + + * parse.c (parse_set_mode): Print a warning if the set mode contains + numbered and unnumbered set elements. + +Wed Jan 24 05:10:08 1996 Wilfried Moser + + * Make-lang.in: Change GNUCHILL_VERSION to 1.5.2. + + * decl.c (layout_enum): Add check for negative values if + enum is numbered and duplicate values in an enum. + +Mon Jan 15 06:21:52 1996 Wilfried Moser + + * actions.c (chill_expand_assignment): Add check for lefthand side + of an assignment is a location. + + * ch-tree.def: Name of SET_IN_EXPR is really "set_in_expr" and + not "concat_expr". + + * expr.c (is_really_instance): New function to check if a datum + is really an instance. CH_IS_INSTANCE_MODE seems to be to weak + for this case. + (build_chill_component_ref): call is_really_instance. + +Wed Jan 10 13:47:14 1996 Per Bothner + + * ch-tree.h (TYPE_ARRAY_MAX_SIZE): Removed; now in ../tree.h. + +Mon Jan 8 15:29:20 1996 Per Bothner + + * expr.c (build_char_array_expr): Add save_if_needed's if varying. + Also, remove unused len0 and len1. + +Mon Dec 11 17:36:44 1995 Per Bothner + + * inout.c (build_chill_associate, assoc_call, build_chill_readrecord, + build_chill_getassociation, build_chill_getusage, + build_chill_gettextrecord, build_chill_gettextaccess: Simplify + - modify TREE_TYPE of CALL_EXPR, instead of building a CONVERT_EXPR. + + * parse.c (parse_action): Minor simplification. + +Thu Dec 7 00:02:47 1995 Wilfried Moser + + * parse.c (parse_action): In case of CALL, do a check if there + is really a function call. + +Tue Dec 5 05:06:02 1995 Wilfried Moser + + * convert.c (display_int_cst): Fix printing of control sequence. + +Thu Nov 30 21:07:57 1995 Per Bothner + + * grant.c (decode_constant, decode_constant_selective): Make work + for REAL_IS_NOT_DOUBLE case. + + * decl.c (CHILL_INT_IS_SHORT): New macro. + (init_decl_processing): Use CHILL_INT_IS_SHORT. + Change name of integer_type_node from _cint to long. + +Mon Nov 27 17:07:05 1995 Per Bothner + + * loop.c (top_loop_end_check): Check while condition *after* + getting next powerset element. + +Mon Nov 27 05:29:52 1995 Wilfried Moser + + * parse.c (parse_receive_case_action): Fix typo in error message. + + * convert.c (display_int_cst): Format characters like strings in + grant.c(decode_constant). + + * grant.c: Remove the old forbid stuff. + + * lex.c (readstring): Fix reading of '^^'. + + * parse.c (parse_procedure_mode): nreverse param_types. + +Thu Nov 23 05:39:57 1995 Wilfried Moser + + * actions.c (chill_expand_assignment): Check for assigning to + location with non-value mode. + + * ch-tree.h: New macro CH_TYPE_NONVALUE_P. + Add new and change some prototypes. + + * decl.c (init_nonvalue_struct): New function to generate + initialisation code for non-value structs. + (init_nonvalue_array): New function to generate initialisation + code for non-value array's. + (do_decl): Call one of the above mentioned functions in case + we have a mode with the non-value property. + (start_chill_function): Print error message if a non-value mode + gets returned without LOC and check for arguments of non-value + modes only gets passed by LOC. + + * grant.c (print_proc_tail): Fix for procedure returning LOC. + + * inout.c (build_io_types): Set CH_TYPE__NONVALUE_P on + association_type_node. + (invalidate_access_recordmode): New function to set the + record mode of an ACCESS to error_mark_node in case of + record mode has the non-value property. + (build_text_mode): Set CH_TYPE_NONNVALUE_P. + (build_access_mode, build_chill_gettextaccess): Deto. + (check_exprlist): Correct processing of repetition factor. + + * lex.c (readstring): Correct processing of control + sequences of the form '^([H | D | O | B]'xx)'. + + * loop.c: Cleanup iterator handling (done by Per). + (nonvalue_begin_loop_scope, nonvalue_end_loop_scope): New + functions for starting and ending a loop scope in case + of initialising an array with non-value property. + + * parse.c (check_end_label): Remove '\n' from error message. + (parse_loc_declaration): Print error in case of loc-identity + declaration without initialisation or with keyword INIT. + (parse_do_action): Clean up iterator handling (done by Per). + + * satisfy.c (safe_satisfy_decl (case TYPE_DECL)): Print an error + message in case of TYPE_DECL is a signal and the mode has the + non-value property. + (satisfy (case ARRAY_TYPE)): Set CH_TYPE_NONVALUE_P of the + the array type if the array element mode has the non-value + property. + (satisfy case RECORD_TYPE)): Set CH_NONVALUE_P on the record + type if one of the fields have the non-value property. If the + record is a buffer mode and the element mode of the buffer has + the non-value-p., invalidate it (see + tasking.c (invalidate_buffer_element_mode). Same for access modes. + + * tasking.c (build_signal_descriptor): If the signal type have + the non-value property, do nothing. + (build_receive_signal_case_label): Don't do an assignment if the + signal type have the non-value property. + (build_receive_buffer_case_label): Add check for buffer element + mode is ERROR_MARK. + (expand_send_buffer): Deto. + (build_buffer_type): Set CH_TYPE_NONVALUE_P on buffer mode. + (invalidate_buffer_element_mode): New function to set type of + buffer element mode to error_mark_node. + (build_event_type): Set CH_TYPE_NONVALUE_P on event mode. + +Wed Nov 15 13:26:20 1995 Jeffrey A Law (law@cygnus.com) + + * inout.c (intsize_of_charsexpr): Move declaration to top + of file to avoid error from solaris2.5 cc. + +Thu Nov 9 02:50:40 1995 Wilfried Moser + + * satisfy.c (satisfy): For a RECORD_TYPE, which is an ACCESS or TEXT + mode, temporarily reset maximum_field_alignment to 0 before + layouting it to be compatible with the runtime library. + + * inout.c (build_chill_gettextaccess): Deto. + +Mon Nov 6 04:12:06 1995 Wilfried Moser + + * decl.c (do_decl): If type is READonly, add check if an + ASSOCIATION, ACCESS, TEXT, BUFFER, or EVENT will be declared + and print an error if this is true. Variables of this modes + may not be declared READonly. + Add check for mode is one of the above and an init value was + given. This is also not allowed. + Add initialisation of variables of the above modes during + runtime. This influence the mechanism for detecting to + build a constructor. + (push_modedef): NEW- or SYNMODES of ASSOCIATION, ACCESS, TEXT, + BUFFER, and EVENT mode must not be READonly. + (start_chill_function): Arguments of modes ASSOCIATION, ACCESS, + TEXT, BUFFER, or EVENT may be passed only by LOC. Add this check. + (declare_predefined_file): Move to inout.c. + (init_decl_processing): Add definitions for new built-in's. + (finish_outer_function): Build a constructor only if + build_constructor is set. + + * except.c: On Linux native, setjmp is __setjmp. + + * expr.c (build_chill_component_ref): New function. It gets called + from parse.c instead of build_component_ref. Functions checks if the + user tries to access a field of an ACCESS, ASSOCIATION, BUFFER, + EVENT, INSTANCE, or TEXT mode, which actually is not allowed. + (build_chill_floatcall): New function to resolve CHILL's floating + point builtin calls (SIN, COS, TAN, etc.). + (build_allocate_getstack, build_chill_allocate, build_chill_getstack, + build_chill_terminate): New functions to resolve CHILL's ALLOCATE, + GETSTACK, and TERMINATE built-in's. + (build_generalized_call): Process new built-in's. + + * grant.c (decode_mode): Add processing of ACCESS and TEXT modes. + (decode_mode_selective): deto. + + * inout.c: Completely rewritten for implementing Chapter 7 of + Z.200 (input and output). + + * lex.c (yylex): An '_' after a '.' doesn't mean, that we are + parsing numbers. + + * lex.h (enum rid): Add RID_ASSOCIATION. + + * parse.c: New flag build_constructor to indicate if a constructor + should be generated at the end of compilation or not. See + decl.c(do_decl). + (parse_begin_end_block): Don't emit a line note. + (parse_primval): Call build_chill_component_ref instead of + build_component_ref. + (parse_opt_mode): Process ACCESS modes, ASSOCIATION modes, TEXT + modes, USAGE modes, WHERE modes. + + * satisfy.c (safe_satisfy_decl): Check if a SYN is of mode ASSOCIATION, + ACCESS, TEXT, BUFFER, or EVENT and print an error in this case. + (satisfy (case RECORD_TYPE)): If exp is TEXT mode, check the text length. + + * typeck.c (extract_constant_from_buffer): Fix thinko in case + of ! BYTES_BIG_ENDIAN. + (build_chill_cast): Implement representation conversion between + INT's and REAL's. + (chill_similar): Add check of ACCESSes. + (layout_chill_range_type): Check for real ranges and print + sorry message. + + * Make-lang.in: Change compiler version. + chill also depends on Makefile. + + * chill.in: Process command line option -Xlinker like -Tdata. + + * ch-tree.h: New macros CH_IS_ASSOCIATION_MODE, CH_IS_ACCESS_MODE, + CH_IS_USAGE_MODE, CH_IS_WHERE_MODE, and CH_IS_TEXT_MODE. + Add some prototypes. + (enum chill_built_in_function): Add BUILT_IN_ARCCOS, BUILT_IN_ARCSIN, + BUILT_IN_CH_DELETE, BUILT_IN_LOG, BUILT_IN_SQRT. + Remove BUILT_IN_READLEN, BUILT_IN_ROUND, BUILT_IN_SKIPRECORD. + + * gperf, hash.h: Remove definition of WHERE. + +Thu Oct 5 06:22:19 1995 Wilfried Moser + + * grant.c (decode_constant_selective): Add some newlines + to generated SPEC MODULE. + +Wed Oct 4 18:16:44 1995 Per Bothner + + * decl.c (pop_chill_function_context): Remove some bogosity. + +Wed Oct 4 05:14:00 1995 Wilfried Moser + + * grant.c (print_integer_selective): In case of a RANGE of + a SET mode, try to find and grant the parent mode. + (grant_seized_identifier): Dont write it out, if the identifier + doesn't have a seize file (it may come from a SPEC MODULE + defined in the compilation unit). + +Fri Sep 22 14:04:40 1995 Per Bothner + + * actions.c (check_non_null): Wrap expr in SAVE_EXPR if needed. + +Wed Sep 20 13:51:54 1995 Per Bothner + + * expr.c (force_addr_of): Optimize an INDIRECT_REF using + convert_to_pointer rather than convert (which in case of + a REFERENCE_TYPE would losingly call convert_from_reference). + +Wed Sep 20 04:03:58 1995 Wilfried Moser + + * inout.c (build_chill_writetext): In case of character string: + Add processing of a concatenation including varying character + strings. + (intsize_of_charsexpr, get_max_size): New functions to determine + the maximum size of varying character strings. + + * grant.c (decode_constant, decode_constant_selective): Add + processing of COMPONENT_REF. + + * satisfy.c (satisfy (case COMPONENT_REF)): Correct handling + for SYNONYM's with STRUCT mode. + +Mon Sep 18 17:25:11 1995 Per Bothner + + * expr.c (force_addr_of): Optimize of value is INDIRECT_REF. + * typeck.c (build_chill_slice): Call mark_addressable. + +Mon Sep 18 14:38:15 1995 Per Bothner + + * expr.c (chill_expand_expr): Make a copy before calling __psslice + if the array is neither referable nor BLKmode. + (build_set_expr): Renamed to ... + (build_compare_set_expr): Allow one opperand to be boolean. + (build_compare_expr): Check both operands for SET_EXPR, + before checking for discrete types (for -fold-strings). + +Fri Sep 15 11:35:43 1995 Per Bothner + + * satisfy.c (safe_satisfy_decl): For a CONST_DECL, set TREE_TYPE + to error_mark_node or error. + +Fri Sep 15 00:26:02 1995 Wilfried Moser + + * grant.c (decode_constant_selective): Add processing of + TREE_OPERAND (val, 0). + +Wed Sep 13 14:24:12 1995 Per Bothner + + * ch-tree.h (CH_IS_INSTANCE_MODE): Redefine to use CH_SIMILAR. + * convert.c (convert): Use CH_IS_INSTANCE_MODE. + * inout.c (build_chill_writetext): Likewise. + * tasking.c (build_receive_case_start, build_delay_case_start): Ditto. + * parse.c (parse_start_action): Remove redundant tests. + * tasking.c (build_start_process): Also test that optset is instance. + (build_copy_number, build_proc_type, expand_send_signal): Use + CH_IS_INSTANCE_MODE, not CH_COMPATIBLE. + * actions.c, convert.c (instance_type_node): Remove redundant + extern declaration. + +Wed Sep 13 14:19:37 1995 Per Bothner + + * regression.awk2: Use \ line-continuation-markers + to remove gratuitous gawk dependency. + +Mon Sep 11 17:26:53 1995 Per Bothner + + * typeck.c (build_chill_modify_expr): Use force_addr_of. + (mark_addressable): Handle INDIRECT_REF of ADDR_EXPR. + + * typeck.c (check_case_value), ch-tree.h: Moved to ... + * actions.c (check_case_value): ... here. Also check for + compatibility with selector (which is passed as extra argument). + (chill_handle_case_label_range): Take selector argument, + and use it to call check_case_value. + (chill_handle_case_label): Take extra selector argument. + * ch-tree.h (chill_handle_case_labe): Add prototype. + * except.c expr.c, parse.c: Remove chill_handle_case_label prototypes. + * actions.c, except.c, expr.c, parse.c: Pass extra selector + argument to function calls as needed. + +Mon Aug 28 02:47:54 1995 Wilfried Moser + + * grant.c (decode_constant_selective): Fix a bug in writing items + to grant file. + +Thu Aug 24 04:52:28 1995 Wilfried Moser + + * parse.c (parse_case_expression): Print warning only in + pass 1. + + * actions.c (print_missing_cases): Correct printing of + character ranges. + +Wed Aug 23 15:26:12 1995 Per Bothner + + * parse.c (parse_case_label_list): Take extra parameter to + indicate if we're parsing a tuple or a case-label-spec. + If former, don't allow '(' EXPR ')' ',' but backup instead. + (parse_case_label_specification, parse_tuple_element): + Pass appropriate new argument to parse_case_label_list. + +Wed Aug 23 06:08:28 1995 Wilfried Moser + + * inout.c (build_chill_readtext): Add processing of BOOL's and + CHARS(n). + + * grant.c (decode_constant): Process nonprintable characters + in a STRING_CST. + +Fri Aug 11 15:26:13 1995 Per Bothner + + * except.c (initialize_exceptions): Name setjmp "setjmp" and not + "__builtin_setjmp" (which is not recognized by expand_call). + +Wed Aug 9 23:35:36 1995 Per Bothner + + * loop.c (end_loop_scope): Need to call kept_level_p, + in argument to poplevel. + +Wed Aug 9 05:48:30 1995 Wilfried Moser + + * Make-lang.in (CHILL.install-common): Don't install chill-cross (this + file might be empty). Install chill.install instead. + +Tue Aug 8 21:46:30 1995 Per Bothner + + * loop.c (end_loop_scope): Do poplevel *after* expand_end_bindings. + +Tue Aug 8 00:51:09 1995 Wilfried Moser + + * tasking.c (build_process_header): Also set DECL_ASSEMBLER_NAME + of PARAM_DECL, since otherwise dbxout_symbol_name may barf. + + * decl.c (start_chill_function): Likewise ... + +Mon Aug 7 18:35:35 1995 Per Bothner + + * tasking.c (build_process_wrapper): Also set DECL_ASSEMBLER_NAME + of PARM_DECL, since otherwise dbxout_symbol_name may barf. + +Mon Jul 31 14:32:33 1995 Per Bothner + + * loop.c: Re-written implementation of powerset iteration. + (declare_temps): iter_var is now integer index into bitstring, + and powerset_temp just uses save_expr (normally needs no temp). + (top_loop_end_check): Pass index to start searching (from iter_var) + to library function, instead of dependning on latter to clear old bits. + (increment_temps): UNless DOWN, increment iter_var. + * decl.c (init_decl_processing): Declare new types for + __ffsetclrpowerset and __flsetclrpowerset (now misnamed...). + +Mon Jul 31 12:47:28 1995 Per Bothner + + * convert.c (digest_array_tuple): Set TREE_STATIC if possible. + +Fri Jul 28 05:11:56 1995 Wilfried Moser + + * lex.c (readstring): Process integer literals starting with + H', D', or B' within a control sequence. + +Thu Jul 27 23:08:51 1995 Per Bothner + + * parse.c (parse_do_action): Don't call push_action, but defer + push_handler until begin_loop_scope. + Call parse_opt_handler here, to move handler scope inside loop block. + (parse_action): After do_action, nothing to do now. + * loop.c (begin_loop_scope): Also call push_handler here. + (declare_temps): Copy derived flag to user_var. + (declare_temps): For POWERSET, always copy to temporary (even if + constant), since the runtime clears bits from it. + + * expr.c (build_chill_sizeof): Use convert_to_class. + * satisfy.c (safe_satisfy_decl): Cleanup handling of CONST_DECL - + set proper value of CH_DECL_FLAG on both the decl and its value. + + * convert.c (digest_array_tuple); Slightly better errors. + +Wed Jul 26 22:13:39 1995 Per Bothner + + * expr.c (expand_packed_set): Also allocate the CONSTRUCTOR itself. + (fold_set_expr): Simplify accordingly. + (build_concat_expr): Constant fold bitstring CONCAT_EXPRs. + +Thu Jul 13 12:21:22 1995 Per Bothner + + * typeck.c (build_chill_slice): Use build1 instead of build. + * typeck.c (xtract_constant_from_buffer): Pass correct precision + to lshift_double. + + * typeck.c (expand_constant_to_buffer): Handle RANGE_EXPR index. + * convert.c (digest_array_tuple): Generate RANGE_EXPR as index + for tuples with ranges. + +Thu Jun 29 23:41:15 1995 Per Bothner + + * typeck.c (build_chill_slice): Re-implement to use casts + instead of build_chill_array_ref_1 (which doesn't always work). + * convert.c (convert): Remove old bugs code. + +Tue Jun 27 05:00:04 1995 Wilfried Moser + + * parse.c (parse_if_action): Do PUSH_ACTION before parsing the + expression so that a possible handler at the if action will + be found. + (parse_proc_body): New argument to indicate if the function + raises exceptions or not. In case the function will raise + exception: start a handler, parse the function and generate + code for reraising the exceptions (call chill_reraise_exceptions). + + * except.c (chill_reraise_exceptions): New function to generate + code for reraising exceptions are specified at the function + definition. + + * ch-tree.h: Add prototype for chill_reraise_exceptions. + + * decl.c (build_chill_function_type): When the function (type) + raise an exception, generate two new arguments (additional to the + formal parameters), the filename and linenumber of the caller. + (start_chill_function): likewise... + + * expr.c (build_chill_function_call): If the called function raises + exceptions, give current filename and linnumber as aditional + arguments. + + * actions.c (build_cause_exception): Handle case when function + propagates the exception. + + * grant.c (print_proc_tail, print_proc_tail_selective): If the + function(type) raises exceptions, don't process the last to + parmeters of the formal argument list, they are compiler + generated. + + * typeck.c (chill_similar): In case of FUNCTION_TYPE: check if + the exception lists are equal. + +Thu Jun 22 19:27:47 1995 Per Bothner + + * loop.c (flag_local_loop_counter): Change default to 1. + (end_loop_scope): Set 'keep' parameter in poplevel call. + (declare)_temps): Don't set IDENTIFIER_LOCAL_VALUE, since that + is handled (correctly!) by pushdecl. + (begin_loop_scope): Call pushlevel here, + * parse.c (parse_do_action): Move pushlevel so only called for WITH. + * decl.c (struct scope): Remove n_incomplete field and its uses. + (pushdecl): Re-write to use proclaim_decl. Remove old C-isms. + (init_decl_processing): Re-name integer_type_node as "_cint" to + remove complaint from pushdecl about chill_integer_type_node as "int". + +Tue Jun 20 18:15:58 1995 Doug Evans + + * Make-lang.in (chill-runtime): Restore patch to disable building of + runtime libraries for cross compilers. This patch should remain + until a build of a freshly checked out devo "just works". + +Mon Jun 19 06:01:42 1995 Wilfried Moser + + * Make-lang.in: Update GNUCHILL_VERSION to 1.4.4. + + * decl.c (init_decl_processing): Remove builtin function + __cause_exception. New builtin functions __cause_ex1 and + __unhandled_ex. + + * except.c (is_handled): Return 0 when no handler found, + 1, if the handler is in local scope and 2, if function + may propagate the exception. + + * actions.c (build_cause_exception): New argument to + indicate if a warning should be printed when + causing an unhandled exception. Call is_handled here. + + * ch-tree.h: Change prototype for build_cause_exception. + New marco CH_ALREADY_GRANTED. Used in grant.c to determine if an + identifier already has been written to grant file. + + * grant.c (write_spec_module): If not GRANT ALL specified, + write only this identifiers to grant file which are + neccessary to form a prober grant file. This will shorten + grant files and speed up compilation. + (decode_constant_selective, decode_mode_selective, + get_type_selective, decode_decl_selective, + grant_array_type_selective, get_tag_value_selective, + print_enumeral_selective, print_integer_selective, + print_struct_selective, print_proc_tail_selective, + grant_one_decl_selective): New functions. + + * lex.c (yywrap): Remove writing of not yet written USE_SEIZE_FILE + directives to grant file. + + * parse.c (parse_on_exception_list): Fis constructing of + exceptions list. + +Wed Jun 14 15:21:54 1995 Per Bothner + + * typeck.c (valid_array_index_p): Check for syntax error, where + index is a mode, rather than a value. + + * expr.c (build_chill_binary_op_1): Remove unused function. + +Sat Jun 10 11:36:52 1995 Per Bothner + + * except.c (is_handled): New function. + Various fixes here and there to make it work. + + * parse.c (parse_param_name_list): Set DECL_ASSEMBLER_NAME. + (Otherwise dbxout may crash.) + + * satisfy.c (satisfy case FUNCTION_TYPE): Check for non-type result. + * decl.c (start_chill_function): If result type was error_mark, + kludge type chill_os result_decl to avoid extra errors. + * actions.c (chill_expand_result, chill_expand_return): If type of + chill_result_decl is error_mark, do nothing. + + * typeck.c (chill_similar): Fix thinko in recent change. + + * config-lang.in (diff_exclude): Remove ch/lex.c - now it's a + true source file, and is never longer generated with [f]lex. + + * regression.sh: Pass -s to make clean (to make it silent). + Explicitly call gawk, instead of depending of '#!' to work. + Add --objdir flags. Never send mail to bill. + +Thu Jun 8 15:08:35 1995 Per Bothner + + * typeck.c (chill_similar): Add extra parameter. Use to to prevent + infinite recursion. + (chill_equivalent, chill_l_equivalent): Also add new parameter. + * ch-tree.h (CH_SIMILAR, CH_EQUIVALENT): Modify to match. + +Tue Jun 6 17:14:49 1995 Per Bothner + + * loop.c (declare_temps): If -flocal-loop-counter, make sure to + pushdecl the new variable (created with decl_temp1). + And fix the type of the local variable for powerset iteration. + +Tue Jun 6 15:07:19 1995 Per Bothner + + * typeck.c (mark_addressable): Handle ADDR_EXPR inside + NOP_EXPR inside INDIRECT_EXPR. For TRUTH_ANDIF_EXPR, + TRUTH_ORIF_EXPR, and COMPOUND_EXPR mark operand 1, not operand 0 + (which is used for range-checks and suchlike). + +Thu Jun 1 02:45:54 1995 Wilfried Moser + + * expr.c (build_set_expr): Do some optimizations for LE_EXPR and + GE_EXPR (don't do invert_truthvalue, just switch operands). + +Wed May 31 14:00:38 1995 Doug Evans + + * lang-options.h: New file. + * lang-specs.h: New file. + +Wed May 24 01:45:18 1995 Per Bothner + + * actions.c (assign_stack_temp): Remove unneeded declaration. + +Tue May 23 00:17:38 1995 Per Bothner + + * parse.c (parse_on_exception_list): Return list of exception + names in pass 1, not in pass 2. (Return non-NULL dummy if pass 2.) + (parse_on_alternatives): Call chill_handle_on_labels even if ignoring. + (parse_opt_handler): Likewise for chill_start_default_handler. + * except.c (push_handler): Clear on_alt_list only if pass 1. + (chill_handle_on_labels): Build on_alt_list in pass 1, + retrieve it in pass 2. + + Fix so that decl_temp1 does not expand_decl_init, which calls + free_temp_slots, which loses in the middle on an expression. + * decl.c (finish_decl): Don't call expand_decl_init. + (do-decl): Do initialization assignment even if stack variable. + * parse.c (parse_loc_declaration): Call free_temp_slots. + + * decl.c (finish_decl), ch-tree.h: Remove last two always-NULL + parameters. Cleanup never-used code. + * decl.c, except.c: Update calls to finish_decl. + + * decl.c (case_else_node): Define new variable. + (init_decl_processing): Initialize it. + (make_chill_variants): If variant label is case_else_node (i.e. it + is (ELSE):), treat that as an ELSE variant. + * ch-tree.h (case_else_node): Declare case_else_node. + * parse.c (parse_case_label): Use case_else_node. + +Mon May 22 10:18:11 1995 Per Bothner + + * grant.c (print_proc_tail): Also call print_proc_exceptions. + (decode_decl): Don't explicitly call print_proc_exceptions for + FUNCTION_DECL. + (Net effect is that now exceptions are printed for FUNCTION_TYPE too.) + + * actions.c (chill_convert_for_assignment): Use save_if_needed, + instead of save_expr, in case value is a reference. + + * typeck.c (build_chill_slice): Fix old thinko (missing call to + build_pointer_type). + + * actions.c (size_int): Remove unused and conflicting prototype. + +Wed May 17 16:23:20 1995 Per Bothner + + * actions.c (chill_convert_for_assignment): Call save_expr if + range_checking (twice). + +Tue May 16 11:33:41 1995 Per Bothner + + * typeck.c (layout_chill_range_type): Re-organize error checking. + Add extra parameter to indicate if non-constant bounds are allowed. + If bounds are bad, set them to the min_value of the parent. + * ch-tree.h (layout_chill_range_type): Update declaration. + * satisfy.c (satisfy): Update call of layout_chill_range_type. + * typeck.c (build_chill_range_type): Likewise. + * tree.c (build_string_type): Likewise. + +Tue May 16 00:37:51 1995 Wilfried Moser + + * expr.c (build_chill_sizeof): Fix bug in case of SIGNAL. + +Mon May 15 12:54:32 1995 Per Bothner + + * satisfy.c (satisfy): Supress error message for REF . + * decl.c (push_modedef): Check for TREE_CODE != ERROR_MARK, instead + of against error_mark_node. (smash_dummy_type can copy error marks.) + (finish_decl): Simplify C-derived check for incomplete type, + and suppress if it is an ERROR_MARK. + Don't call rest_of_decl_compilation if type is an ERROR_MARK. + +Sun May 14 22:52:40 1995 Per Bothner + + * convert.c (convert): Handle array types with different modes. + +Thu May 11 15:52:12 1995 Per Bothner + + * loop.c (build_loop_iterator): Handle the case of a non-local + loop counter having reference type. + +Thu May 11 07:04:29 1995 Wilfried Moser + + * tasking.c (build_copy_number, build_gen_code, build_gen_inst, + build_gen_ptype, build_proc_type): Set CH_DERIVED_FLAG on result + to avoid erros when assigning to (comparing with) NEWMODEd INT's. + +Mon May 8 15:27:16 1995 Per Bothner + + * expr.c (build_chill_card): Do constant folding, if possible. + (build_max_min): Do constant folding for MIN/MAX of powersets. + +Mon May 8 06:57:21 1995 Wilfried Moser + + * expr.c (build_chill_sizeof): Add corect processing of a + SIGNAL definition without data. + +Sat May 6 16:27:10 1995 Doug Evans + + * Make-lang.in (maintainer-clean): Renamed from realclean. + +Tue May 2 06:16:23 1995 Wilfried Moser + + * parse.c (parse_asm_action): Do PUSH_ACTION unconditionally, + otherwise "handler stack" will get out of sync. + +Mon Apr 24 09:51:07 1995 Per Bothner + + Fixes to support module-level non-static temporary variables. + * parse.c (parse_loc_declaration): If all_static_flag and not + resursive, tell do_decls to make new decl static. + * decl.c (do_decl): Don't use maybe_static function to force static. + (do_decl): Don't let initialization count as "using" the variable. + (maybe_static): Removed. + (finish_decl): Call expand_decl and expand_decl_init if needed + (as it will be for non-static temporaries). + +Fri Apr 21 21:02:30 1995 Per Bothner + + * convert.c, expr,c typeck.c (expand_decl): Remove usused declaration. + +Fri Apr 21 02:27:12 1995 Wilfried Moser + + * expr.c (build_set_expr): Fix thinko: GE(x,y) is not eqivalent to + LT(y,x) its rather equivalent to NOT (LT(x,y)). Same is true for + GT(x,y), its not equiv. to LE(y,x), its equiv. to NOT (LE(x,y)). + +Thu Apr 20 15:29:05 1995 Per Bothner + + * parse.c (yytext, finput): Remove unused declarations. + + * parse.c (proc_action_level): New variable. + (parse_proc_body): New function. Common code from + parse_procedure_definition and parse_process_definition moved here. + Save, set, and restore proc_action_level from action_nesting_level. + (parse_action case RETURN): Pass proc_action_level to + expand_goto_except_cleanup. + +Thu Apr 20 06:02:20 1995 Wilfried Moser + + * grant.c (really_grant_this): Add processing of LABEL_DECL's + (don't grant them). + +Tue Apr 18 18:16:28 1995 Per Bothner + + * lex.c ( convert_bitstring): Use BYTES_BIG_ENDIAN rather + than BITS_BIG_ENDIAN to layout bits within bitstring. + * typeck.c (expand_constant_to_buffer, extract_constant_from_buffer): + Likewise. + +Sun Apr 16 19:55:51 1995 Per Bothner + + * decl.c (finish_chill_function): If currently global_function_decl, + don't set outer_function to global_function_decl. + +Wed Apr 12 22:45:06 1995 Per Bothner + + * decl.c (start_chill_function): Normal functions are nested. + (finish_chill_function): No longer takes a 'nested' parameter. + Normal functions are nested. + Never call permanent_allocation, since it does little good (all normal + functions are nested), and trashes some things we need. + (finish_outer_function): Update call to finish_chill_function. + * grant.c (chill_finish_compile): Likewise. + * tasking.c (build_process_wrapper): Likewise. + * parse.c (end_function): Likewise. + * ch-tree.h (finish_chill_function): Update declaration. + + * parse.c (parse_asm_clobbers): Re-enable. + (expand_asm_operands): function. + (parse_asm_action): Re-enable. Don't do anything in pass 1. + + * typeck.c (build_chill_slice): Do constant folding. + Also, work around problem where expand_expr constant folds ARRAY_REF. + (sort_constructor): Remove unused function. + + * expr.c (chill_expand_expr case CONCAT_EXPR): Make sure we + emit_block_move if needed with correct size. + + * inout.c (build_chill_io_list_type): Simplify. + + * lex.c (check_newline): Uncomment some dwarf stuff, + which needs get_directive_line, which we no longer have. + +Wed Apr 5 16:05:15 1995 Per Bothner + + * Makefile.in (C_OBJS, xcc1chill): Removed. We no longer + link cc1chill with ../c-typeck.o ../c-aux-info.o ../c-common.o. + + * expr.c (build_chill_component_ref): Renamed to build_component_ref. + (chill_truthvalue_conversion): Renamed to truthvalue_conversion. + * decl.c, expr.c, inout.c, loop.c, parse.c, tasking.c, timing.c, + typeck.c: Update accordingly. + * typeck.c (valid_array_index_p): We only need to save_expr (index) + if we're range-checking. + * typeck.c (unsigned_type, signed_type, signed_or_unsigned_type, + mark_addressable, initializer_constant_valid_p, check_case_value, + type_for_size, type_for_mode): New functions, copied from + ../c-common.c and ../c-typeck.c. + + * lang.c (incomplete_type_error): New. (Was in c-common.o.) + * decl.c (constant_expression_warning): New. (Was in c-common.o.) + + * lang.c (string_index_type_dummy): Remove definition from here. + * tree.c (string_index_type_dummy): Define here instead. + * lang.c (lang_init): Move init of string_index_type_dummy + (which is too late) from here ... + * decl.c (init_decl_processing): ... to here. + + * decl.c (signed_boolean_type_node): New variable. + (init_decl_processing): Initialize it. + + * parse.c: Comment out ASM action support, for now. + + * loop.c (maybe_skip_loop): Make return void, not int. + Use build_compare_discrete_expr. + (increment_temps): Use chill_expand_assignment. + +Thu Mar 30 23:28:28 1995 Per Bothner + + * decl.c (do_decl): If default-initializing variable-length + string to "" (or []), make it lifetime_bound. + +Thu Mar 30 02:51:59 1995 Wilfried Moser + + * parse.h, hash.h, gperf: New compiler directives + EMPTY_ON and EMPTY_OFF. + + * lex.c: New variables empty_checking and runtime_checking_flag. + (ch_lex_init): Initialize empty_checking and range_checking + when switching from pass 1 to 2. + (read_directive): Add processing of EMPTY_OFF/ON. + + * expr.c (build_chill_indirect_ref): New argument do_empty_check + to indicate if null pointer checking should be done or not. + It's not always necessary to do a null pointer check. + + * decl.c (lookup_name): Add argument to call to + build_chill_indirect_ref. + (shadow_record_fields): ... + * parse.c (parse_primval): ... + * tasking.c (build_process_wrapper): ... + (build_receive_buffer_case_label): ... + + * ch-tree.h: Change prototype of build_chill_indirect_ref. + Add declaration of runtime_checking_flag and empty_checking. + + * actions.c (check_non_null): Do null pointer checking only + when enabled (empty_checking != 0). + +Wed Mar 29 15:18:23 1995 Per Bothner + + * actions.c (chill_expand_assignment): Add 'else' so we don't do + regular assignment in addition to spacial assignment (e.g. for slices). + + * ch-tree.h (convert_to_discrete): Add declaration. + * typeck.c (convert_to_discrete): New function. + (valid_array_index_p): Use convert_to_discrete. Also simplify. + (build_chill_slice): Say sorry if variable-length bitstring. + (build_chill_slice_with_length): Re-do bounds check. + * expr.c (check_case_selector): Re-write to use convert_to_discrete. + (build_chill_num, build_chill_pred_or_succ): Use convert_to_discrete. + + * decl.c (do_decl): Don't do redundant chill_convert_for_assignment. + +Wed Mar 29 00:00:29 1995 Wilfried Moser + + * expr.c (build_chill_num): need_unsigned have to be set for + characyer strings of length 1 too. Happens when compiling + with -fold-strings and do NUM(a(i)). + + * parse.c (parse_loc_declaration): Print error message only + in pass 1. + (parse_mode): Likewise ... + + * tasking.c (build_tasking_message_type): Temporarily reset + maximum_field_alignment to get proper aligned temp. variables + gets passed to runtime system. + +Tue Mar 28 00:08:06 1995 Per Bothner + + * typeck.c (my_build_array-ref): Merged into build_chill_array_ref_1. + But don't convert index to integer_type_node. And we don't need to + check the we're given an array. + * typeck.c (valid_array_index_p): If flag_old_strings, convert + chars(1) to char and bools(1) to bool before index checking. + +Sun Mar 26 22:42:39 1995 Per Bothner + + * ch-tree.h (struct module): Added next module field. + * decl.c (first_mdoule, next_module): New global variables. + (switch_to_pass_2): Re-initialize next_module. + (push_module): In pass 2, reuse the same module objects from pass 1. + + * decl.c (declare_predefined_file): Set DECL_IN_SYSTEM_HEADER. + + * typeck.c (valid_array_index_p): Do range check on original index, + before we convert to domain type. + +Fri Mar 24 11:43:39 1995 Per Bothner + + * parse.c (parse_fixed_field): New function. + (parse_variant_field_list): New function replaces parse_simple_fields. + (parse_variant_alternative, parse_field): Update to use new functions. + (parse_field): Error message if neither CASE nor NAME. + + * actions.c (check_non_null): New function - checks for NULL pointers. + * ch-tree.h (check_non_null): New declaration. + * tasking.c (expand_send_signal): Call check_non_null. + * expr.c (build_chill_indirect_ref, build_chill_function_call): Same. + * lex.h (enum rid): Add RID_EMPTY. + * lex.c (init_lex): Initialize ridpointers[RID_EMPTY]. + + * lex.c (read_directive): Remove 2 calls of to_global_binding_level + +Wed Mar 22 16:36:46 1995 Per Bothner + + * tasking.c (tasking_list): Change to chain of TREE_VEcs, rather than + chain of (nested) TREE_LIST nodes. + (TASK_INFO_PDECL, TASK_INFO_ENTRY, TASK_INFO_CODE_DECL, + TASK_INFO_STUFF_NUM, TASK_INFO_STUFF_TYPE): New macros. + (tasking_setup, tasking_registry, add_taskstuff_to_list): Use them. + + * ch-tree.h (C_TYPE_FIELDS_READONLY): Rename to TYPE_FIELDS_READONLY. + (TYPE_READONLY_PROPERTY): New macro, to match Z.200 concept. + * typeck.c (build_chill_modify_expr): Don't check for read-only-ness, + since it is redundant for chill_expand_assignment and breaks + reach-bound initialization in do_decl. + (my_build_array_ref): Simplify by using TYPE_READONLY_PROPERTY. + (layout_chill_array_type): Set TYPE_FIELDS_READONLY if appropriate. + * actions.c (chill_expand_assignment): Check TYPE_READONLY_PROPERTY + instead of TREE_READONLY of the target's type. + * expr.c (build_chill_function_call): Likewise. + * inout.c (build_chill_readtext): Likewise. + * decl.c (do_decl): Likewise, to check if init is required. + + * typeck.c (build_chill_bitref): Removed unused RANGE_EXPR hack. + +Wed Mar 22 07:52:52 1995 Wilfried Moser + + * tasking.c (build_start_process): Get a unique identifier for + the start arguments. + +Tue Mar 21 07:36:40 1995 Wilfried Moser + + * expr.c (fold_set_expr): At label build_result: Add setting unused + bits to 0. This is the same as the runtime library does. + + * parse.c (expect): Function returns now int, 0, if the expected + token was not got, 1 when it was found. + (parse_synonym_definition): In case of syntax error (missing =), + set expr to NULL_TREE and mode to error_mark to avoid subsequent + segfaults. + + * chill.texi: Add chapter about differences to Z.200/1988. + +Mon Mar 20 18:01:11 1995 Per Bothner + + * lang.c (chill_print_error_function): New function, to report + module name if not inside a function. + (lang_init): Set print_error_function to chill_print_error_function. + + * tasking.c (max_queue_size, buffer_element_mode): Cleanup + to remove unreachable code. + + * grant.c (chill_finish_compile): Avoid doing a lookup_name + to find init function (which got broken by recent nesting re-org). + + * decl.c (poplevel): Push and pop function context around + call to output_inline_function (as done for C and C++). + +Thu Mar 16 17:56:07 1995 Per Bothner + + * parse.c (parse_pass_1_2): If unknown top-level token, skip pass 2. + +Wed Mar 8 13:54:33 1995 Doug Evans + + * Make-lang.in (chill-runtime): Temporarily disable building of + runtime libraries for cross compilers. + +Mon Mar 6 23:36:19 1995 Per Bothner + + * parse.c, decl.c: Remove use of FUNCTION_NEEDS_STATIC_CHAIN. + + * configure: Merge in tolerance for new flags (e.g. --x-libraries). + +Sat Mar 4 15:47:35 1995 Per Bothner + + * expr.c (build_chill_arrow_expr): Error if pass == 1. + +Thu Mar 2 19:28:07 1995 Per Bothner + + * decl.c (do_decl): Setting seen_action must be done in pass 1. + (save_decl): Don't set DECL_CONTEXT to global_function_decl. + (start_chill_function): Simplify due to above change. + + * parse.c (parse_case_label): Hack to distinguish (ELSE) from (*). + * grant.c (decode_constant): Emit ELSE in case label. + + * parse.c (serious_errors): New global variable. + * parse.c (to_global_binding_level): Set serious_errors. + (parse_pass_1_2): Exit after pass 1 if serious_errors > 0. + * lex.c (readstring): Recover from unterminstaed control sequence. + +Tue Feb 28 17:08:08 1995 Per Bothner + + Re-write of module-level actions. No longer generate a module + function for module-level actions. Instead, put them inside + a new global dummy function. Nest everything logically inside it. + + * lex.h, grant.c (chill_module_name): Removed declaration. + * grant.c (write_spec_module): Instead use current_module->name. + * grant.c (chill_start_module_code, chill_finish_module_code): + Removed. + * grant.c (chill_finish_compile): Make rtl for global function. + + * actions,c (push_action): Don't call chill_start_module_code. + * expr.c (build_chill_function_call, build_generalized_call): + Likewise. + * parse.c (INIT_ACTION): Likewise. + + * parse.c (seen_action): New variable. + * parse.c (end_function): Always call pop_chill_function_context. + (parse_procedure_definition): Always call push_chill_function_context. + (parse_modulion): Parse optional handler. + (parse_modulion, parse_spec_module): Do find_granted_decls. + (parse_action): Set seen_action if global and a real action. + ([arse_program): Call start_outer_function and finish_outer_function. + + * ch-tree.h: Appropriate updates. + + * tasking.c (generate_tasking_code_variable): Make it lifetime-bound. + (build_process_header): Always push_chill_function_context; + we are now always nested. + (build_process_wrapper): Always pop_chill_function_context. + + * tasking.c (build_start_process): Only expand_start_bindings and + expand_end_bindings if pass 2. + + * decl.c (global_function_decl): New variable. + (do_decl): Implement reach-bound initialization of static variables. + (start_chill_function): Set DECL_CONTEXT to NULL if + it would be global_function_decl (so as to not confuse gcc backend). + (start_chill_function, finish_chill_function): If compiling + global_function_decl in pass 2 and !seen_action, suppress it. + (set_module_name): New function. + (global_bindings_p): Re-defined to check against global_function_decl. + (start_outer_function, finish_outer_function): New functions. + +Tue Feb 28 16:00:03 1995 Per Bothner + + * typeck.c (build_chill_modify_expr): Inline logic from + chill_expand_array_assignment, + * actions.c (chill_expand_array_assignment): Removed. + (chill_expand_assignment): Remove call to removed function. + + * lex.c (reinit_parse_for_function): Removed empty unused function. + * decl.c (start_chill_function): Don't call removed function. + +Tue Feb 28 00:29:51 1995 Per Bothner + + * configure: Merge in code for calculating host, build, and + target and canon_{host,build,target} from ../configure. + Fix calculation of mainsrcdir. Host canon_* variables + to merge in build-make (as in ../configure). + +Sun Feb 26 18:59:02 1995 Per Bothner + + * typeck.c (expand_constant_to_buffer): Use new function + get_set_constructor_bytes. + +Tue Feb 21 01:41:56 1995 Wilfried Moser + + * inout.c (build_chill_writetext): Add processing of + conditional expressions in argument list. + + * parse.c (parse_opt_name_string): Print error message only + in pass 1. + + * chill.texi: Add chapter about compiler directives. + +Tue Feb 14 16:45:19 1995 Per Bothner + + * decl.c (start_chill_function): Set FUNCTION_NEEDS_STATIC_CHAIN + unless nested. + + * decl.c (decl_temp1): Make lifetime_bound iff static. + +Fri Feb 3 04:30:28 1995 Wilfried Moser + + * grant.c (really_grant_this, search_in_list): New static + functions to determine if a decl should be written to + grant file. + (write_spec_module): Add call to really_grant_this. + +Fri Jan 27 00:06:12 1995 Wilfried Moser + + * actions.c (check_expression): Apply Per's patch. + (chill_expand_result): New argument to indicate if we come + from a RETURN or RESULT action. Change various error messages. + + * ch-tree.h: New macro CH_USE_SEIZEFILE_RESTRICTED. + New argument for chill_expand_result. + + * chill.in: In case of -fgrant-only, clear library, libpath and + startfile to avoid warnings from gcc. + + * gperf, hash.h: New compiler directive USE_SEIZE_FILE_RESTRICTED. + + * parse.h (enum terminal): Add USE_SEIZE_FILE_RESTRICTED. + + * grant.c (decode_decl): Don't write USE_SEIZE_FILE directive + and subsequent SEIZEs to grant file, if the seize file is + used restricted. + + * lex.c (read_directive): Process new compiler directive + USE_SEIZE_FILE_RESTRICTED. + (handle_use_seizefile_directive): Same as above. + (yywrap): Don't write USE_SEIZE_FILE directive to grant file + if this seize file is used restricted. + + * parse.c (parse_action, case RETURN): Change RETURN expr action + to RESULT expr; RETURN. This enables range checking and + exception delivery in case of rangefail. + +Tue Jan 17 07:38:27 1995 Wilfried Moser + + * decl.c (init_decl_processing): Add definition of + library function __inbitstring (see expr.c). + + * expr.c (chill_expand_expr case SET_IN_EXPR): Call function + __inpowerset fir POWERSET's and function __inbitstring for + BITSTRING's. In case of POWERSET's we must not do a rangecheck, + in case of BITSTRING's we have to do one. + (build_compare_expr): Fix typo CH_DERIVED_FLAG (tmp); (warning + statement with no effect). + +Fri Jan 13 13:35:30 1995 Per Bothner + + * actions.c (check_expression): Simplify result. + + * ch-tree.h (SET_CH_NOVELTY_NONNIL): New macro. + * expr.c, timing.c, typeck.c: Use SET_CH_NOVELTY_NONNIL. + + * typeck.c (valid_array_index_p), ch-tree.h: Change interface + to return modified index expression. Call error if out-of-range. + * actions.c, typeck.c: Modify + for new valid_array_index_p interface. + + * actions.c (build_chill_slice): Copy novelty of index type. + +Fri Jan 13 13:04:41 1995 Per Bothner + + * convert.c (digest_array_tuple): Allow mode name in array + tuple label. Print error message instead of aborting. + + * parse.c (parse_body): Error message only if pass 1. + + * decl.c (check_identifier), ch-tree.h: Remove. Unused. + +Wed Jan 11 14:03:47 1995 Per Bothner + + * parse.c (parse_modulion): Undo yesterday's change (to allow + an ON-handler to follow) until we re-implement module. + +Tue Jan 10 17:23:55 1995 Per Bothner + + * loop.c (declare_temps): Remove bogus prohibition against + iterating over BOOL arrays. + + * parse.c (parse_semi_colon): Make it a pedwarn (instead of an + error) if a semi-colon is missing before an END. + (parse_action): Likewise. + * parse.c (parse_modulion): Allow an ON-handler to follow. + + * parse.c (parse_set_mode): Use parse_expression to get + values for number set elements. + + * expr.c (build_compare_expr): Make sure result has + CH_DERIVED_FLAG set, since it is supposed to be BOOL-derived. + (finish_chill_binary_op): Likewise for IN_EXPR. + +Tue Jan 10 04:46:42 1995 Wilfried Moser + + * actions.c (lookup_and_expand_goto, lookup_and_handle_exit): Add + checking the argument. + (chill_expand_assignment): Take care of a newmoded dst_offset + when calling __pscpy and a newmoded from_pos when calling + __setpowersetbits. + + * expr.c (chill_expand_expr): When calling __psslice take care + of a newmoded min_value. + + * parse.c (parse_name_string): Print error message only in + pass 1. + +Tue Jan 3 19:56:36 1995 Per Bothner + + * typeck.c (build_chill_array_ref_1): Use varying_to_slice + instead of building a VRAY_ARRAY_REF node. + * ch-tree.def (VARY_ARRAY_REF): Removed. + * actions.c (chill_expand_assignment): Will never call + expand_assignment_to_varying_array for a VARY_ARRAY_REF, so don't. + (expand_assignment_to_varying_array): Removed. + * convert.c (convert): Remove unneeded VARY_ARRAY_REF support. + * expr.c (chill_expand_expr): Likewise. + +Tue Jan 3 19:50:18 1995 Per Bothner + + * parse.c (parse_iteration): Set step_value to NULL if missing. + * loop.c (ITER_TYPE): Remove DO_RANGE. + (build_loop_iterator): Implement old DO_RANGE in terms of DO_STEP. + (begin_loop_scope): Don't return on error. + (build_loop_iterator): Calculate loop variable type using + resulting classes (as in Z200), rather than precision. + + * loop.c (initialzie_iter_var, bottom_loop_end_check): For DO_STEP, + make iter_var one less to avoid overflow. + * loop.c (build_loop_iterator): If !flag_local_loop_counter, + declare a new variable if needed, as allowed by Z200 (1984). + + * ch-tree.h (ch_class): Add typedef. + + * typeck.c (chill_resulting_class): New function. + (chill_root_resulting_class): Remove. + * ch-tree.h (CH_RESULTING_CLASS): New macro. + (CH_ROOT_RESULTING_CLASS): Re-implement using CH_RESULTING_CLASS. + +Tue Jan 3 19:36:27 1995 Per Bothner + + * actions.c (build_cause_exception, expand_cause_exception), ch-tree.h: + Change interface to take IDENTIFIER tree node, rather char char*. + (check_expression): Change (simplify) callers appropriately. + * parse.c (parse_action), typeck.c (valid_array_index_p): Likewise. + * lex.h (enum rid): Add RID_ASSERTFAIL. + * lex.c (init_lex): Enter RID_ASSERTFAIL. + * parse.c (parse_action case ASSERT): Fix thinko TRUTH_ANDIF_EXPR + to TRUTH_ORIF_EXPR. Use RID_ASSERTFAIL. + + * typeck.c (discrete_type_p): Re-implement using INTEGRAL_TYPE_P. + +Tue Jan 3 19:20:35 1995 Per Bothner + + Move checking for modeless tuples in invalid contexts from parser + to semantic function check_have_mode (for better error recovery): + * expr.c (check_have_mode), ch-tree.h: New function. + * satisfy.c (safe_satisfy_decl): Use check_have_mode. + * expr.c (build_compare_expr, finish_chill_binary_op, + finish_chill_unary_op): Likewise. + * parse.c (parse_primval): Don't complain about mode-less tuple here. + +Tue Jan 3 17:36:48 1995 Per Bothner + + * expr.c (varying_to_slice): Support varying arrays whose + lower bound is non-zero. + + * parse.c (parse_body): Allow (with warning) definition to + follow action. + + * expr.c (check_case_selector), ch-tree.h: New function. + (chill_expand_case_expr): Use it. + * parse.c (parse_case_action): Likewise. + +Fri Dec 23 00:47:54 1994 Wilfried Moser + + * actions.c (chill_expand_return): Change error message. + + * ch-tree.h: Change prototypes of do_decl and do_decls. + + * convert.c (convert): Add missing initialisation of + variable orig_e_constant. + + * decl.c: Change all calls to do_decl. + (maybe_static): New function to process the ALL_STATIC_ON/OFF + compiler directives. + (do_decls): New argument. + (do_decl): New argument and process reachbound and lifetime + bound initialisation. + + * gperf, hash.h: Add compiler directives ALL_STATIC_ON and + ALL_STATIC_OFF. + + * grant.c: Change all calls to do_decl. + + * lex.c (read_directive): Process ALL_STATIC_ON/OFF compiler + directive. + + * parse.c (parse_loc_declaration): Pass lifetime_bound flag to + do_decls. + + * parse.h (enum terminal): Add ALL_STATIC_ON and ALL_STATIC_OFF. + + * tasking.c: Change all calls to do_decl. + +Mon Dec 19 23:13:58 1994 Wilfried Moser + + * parse.c (parse_procedure_definition): Save chill_at_module_level + flag, set ot to 0 and restore it at the end of function. + A sequence BEGIN x: PROC () RETURN; END x; END; at module level + have produced an error. + + * expr.c (build_chill_repetition_op): Fix typo in error message. + +Tue Dec 13 12:26:38 1994 Per Bothner + + * actions.c (expand_assignment_to_varying_array): Fix thinko: + build_chill_array_ref -> build_chill_array_ref_1. + +Sun Dec 11 23:04:27 1994 Per Bothner + + * actions.c (chill_expand_assignment): Simplify the lhs if it is + a COMPOUND_EXPR, so we can better handle SLICE_EXPR in lhs. + +Thu Dec 8 13:45:38 1994 Per Bothner + + * loop.c, ch-tree.h (build_loop_iterator): Fix to return void. + If start_exp is ERROR_MARK, return. + * expr.c (build_generalized_call): More robust on syntax errors. + +Tue Dec 6 02:33:23 1994 Wilfried Moser + + * inout.c (build_chill_readtext): In case of reading a SET mode + pass ignore_case flag to runtime library. + +Tue Nov 29 14:41:38 1994 Per Bothner + + * parse.c (parse_receive_case_action): Print error only if pass==1. + * decl.c (push_scope_decls): Use error_with_file_and_line + to get correct line number of SEIZE. + +Mon Nov 28 16:59:18 1994 Per Bothner + + * expr.c (resolve_component_ref): Call fold on result. + + * expr.c (resolve_component_ref): Use check_expression. + * actions.c (chill_convert_for_assignment): Likewise. + * actions.c (cond_exception), ch-tree.h: Removed. + * actions.c (check_expression): First part of COMPOUND_EXPR + should be boolean_type_node; void_type_node loses in SAVE_EXPRs. + + * actions.c (chill_convert_for_assignment): + Check string_assignment_condition for varying strings too. + + * typeck.c (build_chill_cast): If the types have different sizes, + don't allow nondiscrete->discrete conversion, and only allow + discrete->nondiscrete if input expression is constant. + + * typeck.c (chill_similar): Don't use losing array_type_nelts. + + * ch-tree.h (ELSE_VARIANT_NAME): New. + * convert.c, decl.c, grant.c: Use ELSE_VARIANT_NAME. + * decl.c (handle_one_level): Recurse on ELSE_VARIANT_NAME too. + + Reduce dependencies on ../c-typeck.c: + * expr.c: Fix c_expand_start_case -> expand_start_case. + Fix c_expand_expr_stmt -> expand_expr_stmt. + (build_chill_indirect_ref): Call convert instead of build_c_cast. + * loop.c (bottom_loop_end_check): Don't use build_modify_statement. + * expr.c, except.c, typeck.c: Don't call default_conversion. + * typeck.c (string_assignment_condition): Fix build_component_ref -> + build_chill_component_ref. + * decl.c: Fix build_indirect_ref -> build_chill_indirect_ref (twice). + * decl.c: Don't set unused constructor_no_implicit (from c-typeck.c). + * decl.c: Don't call declare_function_name. + + * parse.c: Don't always keep a valid token in terminal_buffer[0]. + The extra look-ahead may have made the parser faster, but caused + some problems synchronizing with the lexer. Specifically: + (PEEK_TOKEN): Now calls an optimized variant of peek_token_(0). + (next_token_): Don't call peek_token_. Renamed to forward_token_. + (NEXT_TOKEN): Renamed to FORWARD_TOKEN. + (parse_program): Don't call yylex yet. + + * parse.c (parse_action): Re-do case ASSERT. + Fix c_expand_expr_stmt -> expand_expr_stmt. + + * lex.l: Re-written to not use [f]lex, and renamed to ... + * lex.c: ... new lexer. + * Makefile.in, Make-lang.in: Remove [f]lex crud. + + * lex.h (enum rid), lex.c (init_lex): Added RID_ELSE. + +Tue Nov 22 15:19:03 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * Make-lang.in: Let chill-runtime depend on $(GCC_PASSES). + +Fri Nov 18 14:27:32 1994 Per Bothner + + * parse.c (parse_structure_node): Simpler, and more robust. + +Wed Nov 16 14:40:52 1994 Ian Lance Taylor (ian@cygnus.com) + + * lex.l (convert_bitstring): Check BITS_BIG_ENDIAN at run time, + not at compile time. + * typeck.c (expand_constant_to_buffer): Likewise. + extract_constant_from_buffer): Likewise. + +Tue Nov 15 14:41:53 1994 Per Bothner + + * convert.c (convert): Call build_chill_range_type rather than + build_index_2_type (which has obstack and canonicalization problems). + * expr.c (build_chill_pred_or_succ): Convert expr to root class + before arithmetic. + * loop.c (declare_temps): If location iterated over is not + a location, make a temporary variable for it. + +Mon Nov 14 16:33:47 1994 Per Bothner + + * typeck.c, ch-tree.h (chill_equivalent): Change to return + a tree (a Boolean expression). Also, add some missing tests. + * ch-tree.h (CH_EQUIVALENT): Modify accordingly. + + * expr.c (chill_expand_expr case CONCAT_EXPR): When the 2nd operand + is an UNDEFINED_EXPR, handle mode-mismatch with whole expr. + Also, replace MEM (which is not a mode) by Pmode. + + * ch-tree.h, typeck.c (chill_comptypes): Removed. + * convert.c (convert): Remove calls to chill_comptypes. + +Fri Nov 11 13:06:29 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * grant.c (write_grant_file): Call pfatal_with_name instead + of abort when something goes wrong when opening or writing + the grant file. + unlink grant file if something goes wrong during writing + (i.e. device full). + + * Make-lang.in (CHILL_SRCS): Add timing.c + + * ch-tree.h: Add prototype for chill_tasking_type_node. + * lex.l (equal_number): Use chill_tasking_type_node instead of + integer_type_node for converting the result. + Print error messages in pass 2, in pass 1 no error will be + detected. + * tasking.c: New variable chill_tasking_type_node for all + generated tasking related variables. + Use chill_tasking_type_node instead of chill_unsigned_type_node. + + * expr.c (chill_expand_expr): Apply Per's change. + + * expr.c (build_chill_sizeof): In case of error just + return error_makr_node. + Set CH_DERIVED_FLAG at the result. + + * timing.c (build_after_timeout_start): Clear the the timeout + level to know if we are in the action part of AFTER statement + or in the TIMEOUT part. + + * typeck.c (build_chill_slice_with_length): Convert the class + of the result to class of first value in expression. + + * inout.c (build_chill_writetext, build_chill_readtext): Use stack + temporary variables for the iolist so that they can get reused in + subsequent calls. Emit code immediately instead of building a + compound expr. + +Fri Nov 4 12:00:54 1994 Per Bothner + + * expr.c (build_chill_function_call): Don't set TREE_TYPE + of assignment to void_type_node - it confuses save_expr. + * decl.c (init_decl_processing): Removed unused code. + * parse.c: Changes to avoid warnings. + + * grant.c (chill_finish_module_code): Minor simplification. + * lex.l (readstring): Set *len to 1 on error. + +Thu Nov 3 01:05:17 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * grant.c (decode_decl): Add granting of BASED declarations. + +Wed Nov 2 12:14:31 1994 Per Bothner + + * expr.c (build_chill_lower_or_upper): Take more care to + ensure result has the right class. + (build_chill_pred_or_succ): Be more careful to get the right + resulting class, and check bounds using *root* mode. + + * typeck.c (build_chill_slice_with_range): Check that array + really is an array or string. + (build_chill_slice_with_length): Likewise. + + * typeck.c (extract_constant_from_buffer): Fix calculation of + SET_TYPE size. (Cannot depend on 1-byte TYPE_PRECISION field.) + +Wed Nov 2 05:33:03 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * Make-lang.in: Change version of compiler. + + * ch-tree.h: Add new prototypes. + + * decl.c (init_decl_processing): Remove timing related + initialisations. Add call to timing_init. + + * parse.c (parse_action): Process AFTER action. + + * tasking.c (build_receive_case_start, + build_receive_signal_case_label, build_receive_buffer_case_label, + build_delay_case_start, build_delay_action, expand_send_buffer): + Add processing of timesupervision. + (tasking_init): Change definitions of runtime functions. + + * timing.c (timing_init): New function for initialisation of + timing related stuff. + (build_cycle_start, build_cycle_end): Changed due to + implementation of timesupervision. + (build_after_start, build_after_timeout_start, build_after_end): + Implement the AFTER action. + (build_timeout_preface, build_timesupervised_call): New functions + to handle timesupervision in case of blocking system calls (i.e. + SEND buffer action, RECEIVE CASE action etc.). + +Thu Oct 27 12:50:24 1994 Per Bothner + + * expr.c (build_chill_repetition_op): Fix repeating all-zero + bitstring with orig_len!=1. Also, call build_boring_bitstring + if original string was all ones, using one range. Also: + Cannot use one-bit TYPE_PRECISION to get bitstring length. + +Tue Oct 25 14:11:07 1994 Per Bothner + + * convert.c (convert): When converting BOOL constant to + bit-string, bit_one_node and bit_zero_node were switched. + * actions.c (chill_expand_assignment): Use force_addr_of, + not build_chill_addr_expr - latter yields bogus error. + +Fri Oct 21 14:26:52 1994 Per Bothner + + * expr.c (build_chill_indirect_ref): Check for POINTER_TYPE (only) + after converting from REFERENCE_TYPE. + * expr.c (build_compare_expr): Convert to common mode *after* + we've checked compatibility. + +Fri Oct 21 02:29:15 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * lex.l (check_newline): Use getc instead of getlc to read + the filename in a # line name directive to avoid possibly + downcaseing of a filename. + +Thu Oct 20 05:37:17 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * expr.c (build_chill_indirect_ref): Add check for really + dereferencing a pointer. + + * convert.c (convert): Take care of TREE_CONSTANT of a + SYNONYM having mode ARRAY () VARYING something. + +Mon Oct 17 02:30:38 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * decl.c (init_decl_processing): Set CH_DERIVED_FLAG for + boolean_true_node and boolean_false_node. TRUE and FALSE have + the BOOL derived class. + + * expr.c (build_chill_num): Set CH_DERIVED_FLAG at the result + of NUM. NUM delivers the INT derived class. + + * grant.c (write_spec_module): Add writing of + <> USE_SEIZE_FILE "x.grt" <> + SEIZE ALL; + to generated grant file. + +Thu Oct 13 14:45:12 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * convert.c (convert_from_reference): Make non-static. + * ch-tree.h (convert_from_reference): Add prototype. + * parse.c (parse_name): If the decl is a REFERENCE_TYPE, just + call convert_from_reference - and not a full-scale convert. + + * convert.c (convert): Only call digest_array_tuple if ARRAY_TYPE. + * typeck.c (chill_expand_tuple): Print error if type is + neither array, struct, or powerset. + + * expr.c (chill_expand_expr cases CONCAT_EXPR, SET_*_EXPR, + UNDEFINED_EXPR): Call preserve_temp_slots for temp targets. + If target is not MEM, make temp (even if not REG) to simplify + - and don't copy original target to temp target first. (Not needed.) + + * lang.c (maybe_objc_comptypes): Just return -1. + +Wed Oct 12 12:24:20 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * tasking.c (tasking_setup): Fix breakage from previous check-in. + +Tue Oct 11 16:00:37 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * actions.c, convert.c, except.c, expr.c, inout.c, loop.c, tasking.c, + timing.c, typeck.c: Change build1 (ADDR_EXPR, ptr_type_node, XX) + to force_addr_of (XX). Add call to mark_addressable where needed + for other calls to build 1 (ADDR_EXPR, TYPE, XX). + +Thu Oct 6 06:36:28 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * inout.c (build_chill_writetext): Remove processing + of POWERSET's. + +Tue Oct 4 14:08:26 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * convert.c (convert): If flag_old_strings, support converting + CHARS(1) and BOOLS(1) to INT. + +Fri Sep 30 01:44:51 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * inout.c (build_chill_readtext): Add check for item is + referable and not READonly. Add processing of BITSTRINGs. + +Mon Sep 26 16:19:36 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * expr.c (build_chill_descr): Add missing call to mark_addressable. + * loop.c (toop_loop_end_check): Replace build1 (ADDR_EXPR ...) + with call to force_addr_of (which calls mark_addressable). + * expr.c (build_chill_descr, build_chill_inttime): Likewise. + * inout.c (build_chill_writetext): Likewise. + +Mon Sep 26 05:19:21 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * grant.c (print_struct): Move printing of VARYING from + here ... + * grant.c (grant_array_type): ... to here. + +Mon Sep 26 00:09:08 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-tree.h (force_addr_of): New prototype. + * expr.c (force_addr_of): Call mark_addressable. Make non-static. + * inout.c (build_chill_writetext): Use force_addr_of. + +Sun Sep 25 23:41:59 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * except.c (push_handler), actions.h: Removed unused parameter. + * actions.c (push_action): Remove unused paramater. + * parse.c, actions.c: Remove no-longer-used parameter to + calls to push_handler and push_action. + + * decl.c (push_extern_process): Only build types in pass 1. + * tasking.c (build_process_header): Only build types in pass 1. + * tasking.c (build_start_process): Do pushdecl/popdecl etc + even after an error (to maintain consistency between passes). + + * convert.c (convert_to_boolean): Allow any integral input type. + +Sat Sep 24 22:47:54 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * typeck.c (extract_constant_from_buffer): Add (somewhat kludgey) + support for UNION_TYPE. (Patch from Wilfried.) + Also, reverse RECORD_TYPE constructor list. + +Fri Sep 23 19:06:39 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * expr.c (build_concat_expr): Fix calculation of result_size. + +Wed Sep 21 00:54:21 1994 Per Bothner (bothner@kalessin.cygnus.com) + + Give up on trying to use the cleanup mechanism in stmt.c to + make sure the exception handler get unlinked on goto/exit/return. + Instead, do it ourselves. (Much simpler.) + * except.c, ch-tree.h (action_nesting_level): New global. + * ch-tree.h (DECL_ACTION_NESTING_LEVEL): New macro. + * decl.c (define_label): Set DECL_ACTION_NESTING_LEVEL. + * except.c (expand_goto_except_cleanup): New function. + (cleanup_chain): New variable. + (push_handler, pop_handler): Adjust action_nesting_level. + (emit_setup_handler): Push cleanup. + (chill_finish_on): Pop cleanup. + * actions.c (lookup_and_expand_goto, lookup_and_handle_exit): + Call expand_goto_except_cleanup. + * parse.c (parse_action): Before RETURN, call + expand_goto_except_cleanup. + +Mon Sep 19 00:59:54 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * lex.l (equal_number): Make sure converted synonym + is on permanent obstack. + * typeck.c (extract_constant_from_buffer): Fix INTEGER_TYPE + loop to traverse in big-endian order. + +Sat Sep 17 20:48:37 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * typeck.c (build_chill_cast): Call mark_addressable. + * expr.c (build_chill_function_call): Call mark_addressable. + +Thu Sep 15 23:47:01 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * typeck.c (expand_constant_to_buffer): Fix an endian-ness + problem for INTEGER_CST. + (extract_constant_from_buffer): Likewise. + +Thu Sep 15 22:59:04 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * decl.c (pushlevel): Do different things depending on + actual parameter. + * decl.c, parse.c, tasking.c: Change argument to to pushlevel to 1. + * actions.c (push_action): Take new parameter. + * except.c (push_handler): Likewise. + * parse.c: Change calls to push_action and push_handler. + * loop.c (begin_loop_scope): Always call expand_start_bindings. + * loop.c (end_loop_scope): Always call expand_end_bindings. + * except.c (emit_setup_handler): Add a cleanup to + unlink from exception stack if we return/exit/goto from here. + * loop.c (begin_loop_scope): Move pushlevel from here ... + * parse.c (parse_do_action): ... to here. + + Clean up do-decl interface (for decl_temp1). + * parse.c (parse_loc_declaration): If global_bindings_p (), + treat as static. + * decl.c (do_decl): Don't test global_bindings_p (). + + * decl.c (keep_next_level_flag, keep_next_if_subblocks): + Not used. Removed. + (struct scope::keep, scope::keep_if_subblocks): Likewise. + (keep_next_level): Likewise. + (kept_level_p, pushlevel, poplevel): Simplify. + + * decl.c (init_decl_processing): Don't call init_iterators. + * Makefile.in (C_OBJS): Don't get ../c-iterator.o - not needed. + +Thu Sep 15 05:54:11 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * lex.l (readstring): Add processing of control sequence + in character string literals. The granting mechanism writes + this to grant files. + +Tue Sep 13 06:19:42 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * expr.c (compare_records): In case of -fpack do always + a memcmp instead of comparing each field of the + structure. If the structure is a variant structure, + issue a warning. + +Mon Sep 12 13:15:09 1994 Per Bothner (bothner@cygnus.com) + + * grant.c (write_spec_module): Add cast, to avoid PCC warning. + * grant.c (header_template): Don't use ANSI-specific string + literal concatenation. + +Fri Sep 9 01:53:30 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * tasking.c (get_process_wrapper_name): New function. + (add_taskstuff_to_list): Add a new argument, which is + the entrypoint of a process. + (build_process_header): Change PROCESS arguments to be + like arguments of a function. There will be a wrapper + which is the real entry point for a PROCESS. This wrapper + is automatically build after a PROCESS definition and gets + as argument a pointer to a structure looking like the + arguments of the PROCESS. This wrapper will call the + PROCESS (see build_process_wrapper). + (build_process_wrapper): New function (see above). + (build_start_process): Change processing of arguments. + (tasking_setup): Add processing of a different entry point + in case of PROCESSes. + + * parse.c (parse_process_definition): Add call to + build_process_wrapper. + * parse.c (end_function): Remove the poplevel() call. + build_process_header no longer makes the corresponding + pushlevel(). + + * grant.c (print_proc_tail): Remove special processing + of PROCESSes, they look now like normal functions. + + * decl.c (init_decl_processing): Add declaration of memcmp + function. + + * ch-tree.h: Add new prototype for build_process_wrapper, + change prototypes for add_taskstuff_to_list and + build_process_header. + + * grant.c (write_spec_module): Write GNUCHILL and gcc + version into grant file. + + * Make-lang.in (CHILL_FLAGS_TO_PASS): Add passing of CC and + GNUCHILL_VERSION to ch/Makefile. + * Make-lang.in (CHILL.mostlyclean): Add ch/ch-version.c. + + * Makefile.in (CHILL_OBJS): Add ch-version.o. ch-version.c + will get generated every time a new Makefile will get + generated. + * Makefile.in (GNUCHILL_VERSION): Remove it, its defined in + Make-lang.in. + + * chill.in: In case of -fgrant-only pass "-S -o /dev/null" + to the compiler to avoid generation of an object file. + +Thu Sep 8 12:07:28 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * convert.c (display_int_cst), ch-tree.h: New function. + * convert.c (digest_array_tuple): Use digest_int_cst to + provide better error messages. Return error_mark_node on error. + * grant.c (decode_const): Simplify by using digest_int_cst. + * grant.c (format_character, find_assoc): Removed. + + * decl.c (do_decl): Add missing TREE_CHAIN. + + * decl.c (finish_incomplete_decl): Removed. + (init_decl_processing): Don't set incomplete_decl_finalize_hook. + (finish_decl): Remove old C-specific code to deduce size of + array from initialization. + (complete_array_type): Just make it abort. + + * except.c (finish_handler_array): Avoid calling C-specific kludge + complete_array_type. + + * convert.c (digest_constructor): Rename, and re-write to: + (digest_array_tuple, convert): No longer use the code in + ../c-typeck.c; use a Chill-only implementation (sigh). + + * typeck.c (chill_expand_tuple): Remove unneeded call to + complete_array_type. + + * expr.c (fold_set_expr), grant.c (decode_constant), + typeck.c (expand_constant_to_buffer): Update name of called + function unpack_set_constructor to get_set_constructor_bits. + * expr.c (powersetlen ): Remove redundant call to convert. + + * ch-tree.h (unpack_set_constructor): Removed obsolete declaration. + + * inout.c (build_chill_writetext): Handle 64-bit integer literals + by trying to convert them to a smaller type. + + * lex.l (convert_number): Always use long long type (possibly + unsigned) to avoid problems with constant folding truncation. + +Mon Sep 5 08:08:22 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * ch-tree.h (enum chill_built_in_function): Add BUILT_IN_QUEUE_LENGTH. + Add new prototype (see tasking.c). + + * expr.c (build_generalized_call): Add processing of + BUILT_IN_QUEUE_LENGTH. + + * tasking.c (build_queue_length): New function. + + * tasking.c (tasking_init): Add new external function definition. + +Thu Sep 1 15:38:00 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * lex.l (default_lex): New function. Progress towards + getting rid of [f]lex. + + * lex.l (convert_number): Use mul_double and add_double. + Set result type to a reasonable type in which the literal + will fit. Give error message if literal is too big. + + * lex.l (equal_number): Switch (temporarily) to permanent obstack. + + * typeck.c (build_chill_slice_with_range): Check for empty + slice *after* we have checked for upper/lower limit in range. + + * grant.c (decode_mode): Remove unused code. (BOOL and + CHAR ranges are represented as INTEGER_TYPEs.) + + * tasking.c (build_process_header): Add missing call to + expand_start_bindings. + * parse.c (end_function): Add missing expand_end_bindings. + +Wed Aug 31 17:25:14 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * decl.c (init_decl_processing): Set set_alignment. + +Tue Aug 30 16:40:46 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * actions.c (print_missing_cases, check_missing_cases, + BITARRAY_TEST, BITARRAY_SET): New functions and macros, + to check for completeness of case actions and expressions. + * decl.c (c_decode_option, init_decl_processing): + Don't set warn_switch. + * expr.c (chill_expand_case_expr): Call check_missing_cases + instead of check_for_full_enumeration_handling. + * parse.c (parse_case_actions): Call check_missing_cases. + + * expr.c (build_chill_binary_op): Remove some dead code. + * expr.c (chill_truthvalue_conversion): Call build_chill_binary_op + instead of build_binary_op. + * ch-tree.h (binary_op_error, build_binary_op): Unused. Removed. + + * parse.c (end_function): Use kept_level_p in parameter to + poplevel. This reverts a June 13 change. + +Fri Aug 26 11:50:19 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) + + * configure: Ignore --without, as ../configure does. + +Wed Aug 24 01:17:28 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * lex.l: Change rule for decimal numbers to allow identifiers + to start with an underscore (_). + +Fri Aug 19 16:38:12 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * tasking.c (build_receive_signal_case_label): Remove backwards + chill_convert_for_assignment (which converted whatever garbage + was in the *target* to the type of the signal argument!). + +Fri Aug 19 07:10:43 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * inout.c (build_chill_io_list_type, build_enum_tables), + tasking.c (build_tasking_struct): Temporarily reset + maximum_field_alignment to 0, so that the compiler-built + data structures needed by the RTS can be independent of -fpack. + +Thu Aug 18 13:39:51 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * typeck.c (build_init_struct): Temporarily reset + maximum_field_alignment to 0, so that the compiler-built + data structures needed by the RTS can be independent of -fpack. + +Wed Aug 17 23:48:33 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * parse.c (parse_primval, expect, parse_on_exception_list): + Print error message only in pass 2. + +Wed Aug 17 13:47:50 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * decl.c (switch_to_pass_2): Revert June 13 change, + (Don't exit after pass 1 if an error was found.) + + * ch-tree.def (SLICE_EXPR): New tree-code. + * typeck.c (build_chill_slice): For building a slice of a + bit-string, just generate a SLICE_EXPR. + * decl.c (init_decl_processing): Declare __pscpy. + * actions.c (chill_expand_assignment): Handle a SLICE_EXPR + on the LHS of assignment, by calling __pscpy. + * expr.c (chill_expand_expr): Handle SLICE_EXPR (as a RHS + value) by using __psslice to copy slice to a temp. + +Wed Aug 17 05:52:44 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * Make-lang.in: Change version of GNUCHILL compiler to 1.4.1. + * expr.c (build_chill_length): Enable LENGTH built-in to process + Buffers and Events too (Z.200/1992). + * lex.l (yywrap): Always set yyin to finput and/or grt_in. On + a linux system the previous version was not able to run. + * tasking.c: Correct processing of infinite buffer- and event-length + to avoid RANGEFAIL warning. + +Thu Aug 11 11:46:55 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * parse.c (parse_if_expression_body): Don't call the C-specific + build_conditional_expr. Just do build_nt (COND_EXPR, ...). + * convert.c (convert): Convert a COND_EXPR by converting + each branch. + + * convert.c (convert): Don't call convert before + convert_to_reference. It's apt to do weird and unneedful things. + * convert.c (convert): If the expression is varying, just call + varying_to_slice, which simplifies quite a bit. + + * ch-tree.h (varying_to_slice): Add prototype. + * typeck.c (varying_to_slice): Remove prototype. + + * satisfy.c (satisfy): Move case PAREN_EXPR from type 'e' + to type '1'. + + * except.c (emit_setup_handler): Temporarily reset the + maximum_field_alignment to zero so the compiler's exception + data structures can be compatible with the run-time system, + even when we're compiling with -fpack. + + * expr.c (compare_records): Call saved_if_needed on operands. + + * expr.c (build_set_expr case NE_EXPR): Don't use __nepowerset + which has been reimplemented to just call __eqpowerset and + invert the result. Inline this new implementation by + handling as EQ_EXPR, and inverting the result. + * decl.c (init_decl_processing): Don't define unused __eqpowerset. + + * typeck.c (valid_array_index_p): The TRUTH_ANDIF_EXPR has + type boolean_type_node, not void_type_node. (Fixing this + avoids a crash in the back-end.) + + * grant.c (decode_constant): In a CALL_EXPR, if the argument + list is not a TREE_LIST (as in string repetiation), don't + emit parentheses. + +Wed Aug 10 13:13:55 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * decl.c (proclaim_decl): Use CH_DECL_ENUM to check that a + CONST_DECL is from a SET definition. (This is safer than + checking that the type is ENUMERAL_TYPE, because synonym + definitions may have a NULL TREE_TYPE.) + Also, if we have duplicate enums whose types are identical, + this is an error. + * decl.c (proclaim_decl, pushdecllist, push_scope_decls): Add + an extra 'quiet' parameter, which is true if we're called from + bind_sub_modules. (In that case an error message about duplicated + decls would be repeated later, so suppress it.) + + * parse.c (stmt_count): Removed, not used. + (INIT_ACTION): Call emit_line_note only if !ignoring. + (parse_begin_end_block): Do INIT_ACTION even if ignoring. + +Fri Aug 5 12:39:11 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * parse.c (parse_untyped_expr): Add missing semi-colon. + +Thu Aug 4 17:40:38 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * parse.c (parse_untyped_expr): Fix various problem for the + case that we see a '(': Add missing 'case' keyword. + Only recurse if '(' is followed by 'if', 'case' or '[', + and in that case emit a pedwarn (and do a missing NEXT_TOKEN). + + * parse.c (parse_send_action): Remove extra nreverse. + +Thu Jul 28 04:00:11 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * expr.c (build_allocate_global_memory_call, build_allocate_memory_call): + Add new checks. + +Tue Jul 26 22:48:15 1994 Michael Tiemann (tiemann@blues.cygnus.com) + + * parse.c (parse_untyped_expr): Added missing "case" before LPRN. + Added a missing call to `require' as well. + +Tue Jul 19 10:30:12 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) + + * lex.l (yywrap): Define as yywrap_chill to avoid conflicts with + the extern declaration in the flex skeleton. + +Mon Jul 18 23:06:04 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * tasking.c (build_copy_number, build_proc_type, expand_send_signal): + Check the type of the instance expr using CH_COMPATIBLE, + and not just == instance_type_node. (This allows + the expression to have mode READ INSTANCE). + * tasking.c (build_instance_type): Give instance_type_node + a non-null novelty (i.e. different from a struct). + * tasking.c (build_receive_case_start, build_delay_case_start): + Check that for a location using CH_LOCATION_P. + +Mon Jul 18 13:22:23 1994 Jim Wilson (wilson@sphagnum.cygnus.com) + + * expr.c (finish_chill_unary_op): Use TREE_SET_CODE not TREE_CODE + to modify a tree code. + +Mon Jul 18 11:24:57 1994 Bill Cox (bill@rtl.cygnus.com) + + * convert.c (digest_structure_tuple): Fix thinko in TREE_CODE + comparison. + +Mon Jul 18 05:40:15 1994 Doug Evans (dje@canuck.cygnus.com) + + * decl.c (warn_bad_function_cast): Define so cc1chill will link. + +Thu Jul 14 18:37:18 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * parse.c (parse_send_action): Do tree_cons *before* checking + for end of loop. + +Mon Jul 11 15:33:52 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * convert.c (digest_structure_tuple): Don't use convert to + coerce initial value, use chill_convert_for_assignment instead. + (Thus we also get range_checking.) + + * expr.c (build_chill_card): Use force_addr_of instead of + build_chill_addr_expr. + + * loop.c (build_temporary_variable): Stylistic tweak. + * loop.c (maybe_make_for_temp): Initialize temp using + explicitly, not using assignment. Avoids a problem if + the expression is read-only. + * typeck.c (smash_dummy_type): Always used the saved TYPE_NAME + and CH_NOVELTY_FLAG. + +Wed Jul 6 20:12:13 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * expr.c, ch-tree.h (finish_chill_unary_op): New function, + based on code ripped out of build_chill_unary_op. + (build_chill_unary_op): Call finish_chill_unary_op unless pass==1. + * satisfy.c (satisfy): Call finish_chill_unary_op when needed. + +Mon Jun 27 11:29:18 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * tree.c (save_if_needed), ch-tree.h: New function. + * typeck.c (build_chill_slice_with_range, + build_chill_slice_with_length): Call save_if_neeed on array arg. + * expr.c (varying_to_slice): Re-write to use save_if_needed. + + * typeck.c (extract_constant_from_buffer): Handle BOOLEAN_TYPE. + +Mon Jun 27 01:11:10 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * inout.c (build_chill_io_list_type): Change layout of __tmp_WIO_list + that it is always the same, regardless if compiled with -fpack + or not. + +Tue Jun 14 16:44:14 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * lex.l (yywrap): Kludge to work around mis-synchronization + between lexer (which read ahead) and parser: Don't emit + (left-over) uze_seizefile directives at the end of file. + + * typeck.c (build_chill_array_ref): Allow the derived + array indexing syntax for arrays of bit strings. + Add a comment explaining why. + + * typeck.c, ch-tree.h (string_assignment_condition): Change + the interface. Return a boolean expression (which can be + used in a conditional at run-time); never expand anything. + + * actions.c (chill_convert_for_assignment): Check + string_assignment_condition here, rather than in callers. + * actions.c (chill_expand_assignment): Don't need to check + string_assignment_condition here. + * expr.c (build_chill_function_call): Likewise. + * satisfy.c (safe_satisfy_decl): Update accordingly. + * decl.c (do_decl): Simplify testing and conversion by + deferring everything to chill_convert_for_assignment. + + * parse.c: Combine the two variables 'ignore_exprs' and + 'ignore_actions' into one variable called 'ignoring'. + * ch-tree.h: Add 'extern int ignoring'. + * actions.c, except.c, parse.c, tasking.c, timing.c, typeck.c: + Rename ignore_actions and ignore_exprs to ignoring. + Remove unneeded extern declarations. + * expr.c (build_chill_indirect_ref, build_chill_component_ref, + build_chill_arrow_expr, build_generalized_call, build_delay_action, + build_buffer_type, build_event_type): I changed my mind. It is + cleaner to check for 'ignoring' in the parser, rather than here. + * parse.c (parse_action, parse_primval, parse_opt_mode): + Therefore we must check for ignoring here. + * parse.c (parse_loc_declaration): Set ignoring in pass 2 + when parsing the mode. + + * tasking.c (generate_tasking_code_variable): Do arithmetic + on signal_code etc using unsigned rather than signed shorts. + + * grant.c (static char* current_grant_modename): Removed. + * grant.c (decode_decl case CONST_DECL): Remove error message. + + * Make-lang.in (CHILL_SRCS): Add $(srcdir)/ch/parse.c. + * Makefile.in: Fix dependencies for parse.o. + Remove some duplicate dependencies for $(TREE_H). + +Mon Jun 13 14:25:50 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * typeck.c (build_chill_cast): Allow a value cast between + non-discrete object of the same size, but with a pedwarn. + * typeck.c (bit_string_assignment_condition, + char_string_assignment_condition): Merge near-duplicate functions + and place the code in string_assignment_condition. + + * decl.c (parm_flag, declare_parm_level, in_param_level_p): + Removed. Not used. + * decl.c (start_chill_function, finish_chill_function): Make + parameter level have same nesting level as body, as required by Z200. + * decl.c (switch_to_pass_2): Always exit if an error has been found. + * decl.c (pop_module): Copy DECL_SEIZEFILE to a new ALIAS_DECL + generated from GRANT ALL. + * decl.c (lookup_name_for_seizing): Don't seize from + the nesting level of builtins (predefined objects). + * decl.c (lookup_name_for_seizing): Make more robust on error. + + * decl.c (start_chill_function): MAKE DECL_NAME (chill_result_decl) + be 'RESULT' (or 'result'). This makes it more accessible from gdb. + Also, use do_decl to declare it, so that debugging symbols are + generated. And, re-arrange so that actions that need to + be done both passes (such as push_levels) use the same code. + + * parse.c (get_type_of): If ignore_exprs, don't lookup name. + * parse.c (end_function): Fix poplevel params. + * parse.c (expect): Don't read forwards on an error. + * parse.c (parse_field): Don't define two tag_list locals! + * parse.c (parse_pass_1_2): Better error message. + + * parse.c (parse_mode, parse_opt_mode): Have parse_mode call + parse_opt_mode, rather than vice versa. If parse_opt_mode + returns NULL_EXPR, then parse_mode gives an error. + Change parse_opt_mode (and any functions it calls) to only + return NULL_TREE if there is no mode (even on ignore_exprs). + (parse_set_mode, parse_structure_mode, parse_procedure_mode): + Never return NULL_EXPR. + * tasking.c (build_buffer_type, build_event_type): Return + void_type_node instead of NULL_EXPR if ignore_exprs is true. + + * parse.c (parse_synonym_definition): Call parse_untyped_expr + only if we have a mode. + * parse.c (parse_send_action): Parse list of untyped_expr's, + rather than a list of (typed) expressions. + * parse.c (parse_primval): Emit error if '[' seen without + preceding mode name. (If this is to be allowed, call + parse_untyped_expr instead.) + + * parse.c (parse_array_index): Renamed to ... + (parse_index_mode): ... to match Z200 terminology. + Re-write to resolve some of the nastier ambiguities, + and allow things like ' CHAR(10) : CHAR(20) '. + + * parse.c (parse_tuple_element): Change interface to return + reversed list, so don't call nreverse. + * parse.c (parse_tuple): No longer nreverse element list here. + * parse.c (parse_opt_element_list): Do nreverse here instead. + * parse.c (parse_case_label_list): Call nreverse at end. + +Fri Jun 10 15:36:22 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * typeck.c (chill_similar): Remove bogus "else". + +Wed Jun 8 00:01:40 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-tree.h (TYPE_ARRAY_MAX_SIZE): New macro (and comment) + to make it clearer that we are using TYPE_MAX_VALUE in a special way. + * typeck.c (build_chill_slice): Use TYPE_ARRAY_MAX_SIZE. + * expr.c (chill_expand_expr case CONCAT_EXPR): Likewise. + * convert.c (convert): When converting a fixed string/array + to varying, and we need padding, set the TYPE_ARRAY_MAX_SIZE + of (the type of) the padding. + * convert.c (convert): If the concatenation is non-constant, use + the low-level 'build' to set the type of the result (which is usually + a fixed-size array) rather than depend on build_chill_binary_op + to figure it out (it's unable to simplify the size to a constant). + +Mon Jun 6 18:16:57 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * lang.c (lang_decode_option): Let -fspecial_UC imply + -fno-ignore-case without requiring it explicitly. + * lang.c (lang_decode_option): Support (experimentally) + the -fpack and -fno-pack flags. + +Thu Jun 2 20:49:51 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) + + * configure: Add support for --program-prefix and --program-suffix. + +Tue May 31 18:12:00 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * convert.c (digest_constructor): Check that initial value + is compatible with element mode before calling convert. + * typeck.c (chill_compatible): A string mode is not compatible + with an untyped constructor. + * decl.c (do_decl): Clean up error messages. Use error_with_decl. + + * ch-tree.h: Fix inconsistencies: bool_true_node -> + boolean_true_node, and bool_false_node -> boolean_false_node. + * typeck.c (valid_array_index_): Minor simplification. + +Tue May 31 04:33:28 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * inout.c (build_chill_writetext): Add correct processing + of POWERSET RANGE (setmode). + + * lex.l (same_file): Add searching for file(s) in + seize_path_list. + +Fri May 27 14:22:42 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * Make-lang.c (CHILL.mostlyclean, CHILL.distdir): Don't list + yacc/bison output files, since the grammer is no longer in yacc. + * config-lang.in (diff_excludes): Likewise. + +Thu May 26 16:38:13 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * gperf, hash.h, lex.l, parse.h: Rename PROCESS_TYPE token + (in some files spelled PROCESS_TYPE_ to avoid clashes + with the PROCESS_TYPE tree_code) to PROCESS_TYPE_TOKEN. + +Thu May 26 02:18:28 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * timing.c (build_cycle_start): Change call to __define_timeout. + * decl.c (init_decl_processing): Change definitions of + __define_timeout and __wait_timeout. + +Wed May 25 11:53:09 1994 Per Bothner (bothner@kalessin.cygnus.com) + + Replace yacc-based parser with a recursive-decent parser. + (This may seem backwards, but Chill [like C++] is not a + language that is remotely LALR(1). Using a R-D parser + allows us to use look-ahead and to back-up to resolve the + difficult ambiguities.) + * parse.y: Removed. + * parse.c, parse.h: New files, containing new r-d parser. + * Makefile.in: Update accordingly. + * actions.c (chill_convert_for_assignment): Don't return + NULL_EXPR if ignore_exprs is true. It simplifies the parser + if we consistently reserve NULL_EXPR for a missing expression. + * expr.c (build_chill_function_call): Likewise. + + * lex.l: Tweaks for new parser. + * lex.l (prepare_paren_colon, paren_paren_colon_level, + paren_level): Ugly hack no longer needed. + + * expr.c (build_chill_function_call): Cleanup. + Call chill_convert_for_assignment to convert IN/INOUT + paramaters on both input and output. For LOC parameters, + give error if actual is a non-referable location. + * actions.c (convert_for_assignment): Add new parameter (a + "place" string used in error messages). + * actions.c (adjust_parm_or_field): Removed. + * actions.c (chill_expand_assignment): Take just a single LHS, + and move support for multiple assignments to ... + (expand_assignment_action): ... here. Some cleaning up. + * timing.c (build_cycle_start): Adjust accordingly. + * actions.c (expand_assignment_to_varying_array): Likewise. + * tasking.c (many places): Ditto. + * ch-tree.h: Fix declarations appropriately. + + * parse.c (parse_defining_occurrence_list): Return a single + IDENTIFIER_NODE (instead of a singleton list) in the common + case. Minor complication to save a minor amount of space. + * decl.c (do_based_decls): Move guts of code into ... + (do_based_decl): ... this new function. + * decl.c (do_decls): Handle either IDENTIFIER_NODE or a TREE_LIST. + * decl.c (push_syndecl): Replace by ... + (push_syndecl): ... (which only supports a single name). + (push_modedef): Only handle a single name. + * tasking.c (build_process_header, build_signal_struct_type): + Adjust accordingly. + + * expr.c (build_generalized_call): Handle string repetition. + * expr.c (build_chill_repetition_op): Change interface. + * grant.c (decode_constant): Allow parameter list to be + a non-TREE_LIST. (Used for string repetition.) + +Wed May 25 11:28:48 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * lex.l (make_identifier): Replaced by ... + (read_identifier, handle_name): ... new functions. + * lex.l: Parse an identifiers using read_identifier using + read_identifier and handle_name, rather than having [f]lex + do it. (One reason is that lex uses a fixed-size buffer.) + + * lex.l (read_directive, skip_directive): New functions. + Use them to parse compiler-directives, instead of rather + ugly and useless use of lexer start conditions. + +Tue May 24 22:36:51 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * decl.c (unnamed_module_number): Renamed to ... + (module_number): .. and make non-static. + (push_module): Always increment module_number. + * lex.l (yywrap): Print warning if no modules seen. + + * decl.c (pop_module): Don't set DECL_SEIZEFILE of granted + decl to current_seizefile_name (which is unreliable). + * grant.c (chill_grant): Set it here instead. + + * expr.c (fold_set_expr): Use int_size_in_bytes instead of + TYPE_PRECISION (which is not defined for a SET_TYPE). + +Fri May 20 15:21:26 1994 Per Bothner (bothner@kalessin.cygnus.com) + + Cleanup to remove need for variables in common storage. + * decl.c: Remove unused use of current_obstack. + * actions.c (maybe_chill_check_decl): Remove unused function. + * actions.h, lang.c: Remove uses of doing_chill_thang. + * ch-tree.h (void_list_node): Make extern (rather than common). + * decl.c (void_list_node): Add definition. + +Thu May 19 06:54:56 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * configure (build): Build canon_host and canon_target + to pass it to all subsequently generated Makefiles (needed + for testsuite/execute in case of cross build). + +Wed May 18 13:27:12 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * grant.c (decode_mode): Remove. It checks the TYPE_NAME of + the input type, which loses with the no-longer-new 2-pass + implementation, since the input "type" could be an IDENTIFIER_NODE. + * grant.c (raw_decode_mode): Rename to decode_mode. + +Tue May 17 13:19:52 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * typeck.c (chill_location): Neither a STRING_CST nor a + CONSTRUCTOR is a location. + * typeck.c (chill_root_mode): Convert a function to a + pointer-to-function. + * expr.c (build_chill_indirect_ref, build_chill_component_ref, + build_chill_arrow_expr): If ignore_exprs, return operand + rather than NULL_EXPR. This makes it easier for the parser to + distinguish missing expressions. + * expr.c (build_max_min): Convert the lower bound of a + set to a long before calling run-time routine. + * expr.c (build_chill_pred_or_succ): Use discrete_type_p + to check the argument type. + * expr.c (build_chill_arrow_expr): If argument is not a location, + do a predwarn if it is a STRING_CST or has function type. + +Tue May 17 06:05:13 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * configure (build): Remove building of canon_host and canon_target. + It doesn't work in any case. + +Mon May 16 02:10:35 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * configure (build): Build canon_host and canon_target + to pass it to all subsequently generated Makefiles (needed + for testsuite/execute in case of cross build). + * Make-lang.in (chill-runtime): Change chill to CHILL in the case + statement to build chill-runtime automatically. + +Mon May 9 15:30:08 1994 Doug Evans (dje@canuck.cygnus.com) + + * Makefile.in (FLAGS_TO_PASS): Define. + (OBJDEPS): Define. + (../cc1chill): Depend on $(OBJDEPS) $(C_OBJS). + * Make-lang.in (cc1chill): Delete dependency on $(OBJS) $(BC_OBJS). + (CHILL.mostlyclean): Use `mostlyclean' as recursive target. + +Sun May 8 13:05:00 1994 Per Bothner (bothner@cygnus.com) + + * Make-lang.in (cc1chill): Should not depend on libgcc.a. + +Thu May 5 18:58:22 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * decl.c (copy_lang_decl): New (dummy) function. + +Mon May 2 14:33:44 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * parse.y (sendaction): Fix thinko (in sense of condition). + * tasking.c (build_receive_case_label): Another thinko. + + * parse.y (optsigdest): Force ignore_exprs to 0 while parsing + the (signal-)name. + + * decl.c (build_chill_function_type): Don't call layout_type + (since that may prevent parameter or result types being + properly satisfied). + * satisfy.c (satisfy): Layout FUNCTION_TYPEs. + * parse.y (procmode): Call build_chill_pointer_type, rather + than build_pointer_type (which incorrectly sets TYPE_SIZE). + + * parse.y (get_type_of): Handle TYPE_DECL (again). + * parse.y (optresultspec): Call build_chill_reference_type, rather + than build_reference_type (which incorrectly sets TYPE_SIZE). + * parse.y (range_or_mode): Rename to plain range, since it + no longer matches modename. + * actions.c (chill_handle_case_label_range): New function, with + functionality moved out of chill_handle_case_label. + * actions.c (chill_handle_case_label): Handle here the case that + the label_value is a TYPE_DECL (modename). Also clean up some. + * typeck.c (build_chill_slice_with_length): Convert max_index + to the type of min_value. (Old code broke on varying strings.) + +Sun May 1 13:53:36 1994 Doug Evans (dje@canuck.cygnus.com) + + * Makefile.in (BC_OBJS): Delete all references + (OBJS): Cat ../stamp-objlist to get language independent files. + (../cc1chill): Delete dependency on $(OBJS). + * Make-lang.in (cc1chill): Depend on stamp-objlist. + +Sat Apr 30 14:50:15 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * lex.h, lex.c: Remove lastiddecl. + * lex.l (name_type_signal): Simplify. We no longer check for + TYPENAME or SIGNALNAME (which was unreliable with two passes). + Also rename to make_identifier. + * parse.y: Cleaned up grammar to not need SIGNALNAME or TYPENAME. + * Makefile.in (stamp-parse); One conflict fewer! + * parse.y (rccase_label_flag): Moved to tasking.c. + * parse.y (rccase_label): Move most of the logic to + build_receive_case_label in tasking.c. + * parse.y (sendaction): Re-write to not depend on SIGNALNAME. + + * parse.y (name): Do name lookup here (and not in location). + * parse.y: Replace most uses of NAME by higher-level non-terminals: + simple_name_string, name_string, defining_occurrence, or name. + + * tasking.c (build_receive_signal_case_label, + build_receive_buffer_case_label): New functions, split out from + build_receive_case_label. + * tasking.c (build_receive_case_label): Change parameters + and return type. Moved stuff here (from the parser). + * tasking.c (struct rc_state_type): Removed had_errors. + Return error_mark_node instead. + * tasking.c (build_rccase_set_error), ch-tree.h: Removed. + + * expr.c (build_generalized_call): If func is a signal type, + call build_signal_descriptor. + + * parse.y (arrayindex): Renamed to index_mode, to match Z.200. + * parse.y (ioindexmode): Removed; use index_mode instead. + * expr.c (build_generalized_call): If args is a RANGE_EXPR, + we have either a slice or a range mode, depending on func. + * parse.y (index_mode): If we got an 'expr', only allow a name, + or a range mode. + * parse.y (call): A slice with both end points can be a range + mode, so defer handling to build_generalized_call (or index_mode). + + * typeck.c (build_chill_slice_with_length): Fix type-checking. + * typeck.c (chill_novelty): Undo (part of) change of April 28: + The novelty of a range mode is the novlety of the parent. + * typeck.c (chill_root_mode): Don't return integer_type_node + if argument has non-nil novelty. + + * decl.c (global_bindings_p): Return -1 as true, for the sake + of variable_size (in ../stor-layout.c). + +Fri Apr 29 13:42:43 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * parse.y: Remove TYPENAME and modename. These are now plain + NAMEs. Modify parsing actions appropriately. + * expr.c (build_generalized_call): Handle the case that + TREE_CODE (func) == TYPE_DECL (as in a cast). + * lex.l (name_type_signal): Never return TYPENAME. + * parse.y (get_type_of): If pass 1, just return the argument. + + * decl.c (do_decl): If an initializer has the wrong type, + replace it by NULL_TREE, to avoid subsequent errors. + +Thu Apr 28 15:21:56 1994 Wilfried Moser (moser@rtl.cygnus.com) + + * Makefile.in: Add new file timing.c to rules. + * timing.c: New file. Implements the timing actions AT, + CYCLE and AFTER. + * decl.c (init_decl_processing): Add new builtin function + descriptions. + * expr.c (build_chill_indirect_ref): Change error message and + add check agains an IDENTIFIER_NODE. + * gperf, hash.h: Change EVENT_CODE, BUFFER_CODE to IGNORED_DIRECTIVE. + They are no longer needed. + * grant.c (print_integer_type): Add processing of builtin types + DURATION and TIME. + * lex.l: Remove processing of directive EVENT_CODE & BUFFER_CODE. + * parse.y (timingactions): split up to afteraction, ataction + and cycleaction. + * parse.y (afteraction): New rule. + * parse.y (ataction): New rule and put actions in. + * parse.y (cycleaction): New rule and put actions in. + * parse.y (sendaction): Add code for SEND buffer. + * parse.y (rccase_label): Change error processing. + * tasking.c (build_gen_inst): More checks. + * tasking.c (build_gen_code): Add checking for argument is a + PROCESS or a SIGNAL. + * tasking.c (struct rc_state_type): Add new fields for easier + error processing. + * tasking.c (build_receive_case_if_generated), ch-tree.h: New function. + * tasking.c (build_rccase_set_error), ch-tree.h: New function. + * tasking.c (build_receive_case_label): Add processing of BUFFER's. + * tasking.c (build_receive_buffer_case_end, build_receive_signal_case_end): + New functions to process the end of a RECEIVE CASE action in case + of BUFFER's and SIGNAL's. + * tasking.c (build_receive_case_end): Do only general processing and + call one of the above mentioned functions. + * tasking.c (build_delay_case_start, build_delay_case_label, + build_delay_case_end): Rewritten due to new implementation of events. + * tasking.c (build_delay_action): Rewritten due to new implementation + of EVENT's. + * tasking.c (expand_send_buffer), ch-tree.h: New function. + * timing.c (build_at_action, build_cycle_start, build_cycle_end), + ch-tree: New functions. + +Thu Apr 28 14:11:29 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * typeck.c (smash_dummy_type): Handle the special case of a + NEWMODE of a range mode, as required by Z200, by creating a + new parent mode with the new novelty (and casting the min + and max of the range to teh new parent mode). + * typeck.c (chill_novelty, chill_root_mode): Remove special + kludges for of NEWMODE ranges. + * expr.c (build_chill_lower_or_upper): New function, combining + the "guts" of build_chill_lower and build_chill_upper. + * expr.c (build_chill_lower_or_upper): Simplify; no longer + need to kludge the novelties. + + * typeck.c (valid_array_index_p): A string index expression + need not be Compatible with the index type; only similar. + + * decl.c (layout_chill_variants): If error seen, skip stuff + (rather than aborting or crashing). + * decl (push_modedef): If newdecl's type is an error mark, + continue rather than aborting. + +Thu Apr 28 02:07:42 1994 Doug Evans (dje@cygnus.com) + + * Make-lang.in: Update of directory reorg from fsf. + * config-lang.in: Ditto. + +Mon Apr 25 13:09:46 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * typeck.c (chill_similar): Check RECORD_TYPEs properly, + * convert.c (convert): If all else fails, just call convert1. + Thus we can now convert RECORD_TYPEs (assuming they are similar). + + * parse.y, lex.l: Remove BUFFERNAME (use location/expr instead). + * parse.y: Re-do BUFFER handling (similar to previous EVENT change). + * grant.c (raw_decode_mode): Re-do BUFFER mode handling. + * ch-tree (lang_type_record): Removed max_queue_size field. + * tasking.c (build_buffer_type): Re-write. + * tasking.c (max_queue_size): Fix to support buffer modes. + * tasking.c (buffer_element_mode), ch-tree.h: New function. + * tasking.c ch-tree.h (expand_send_buffer): Now has 3 parameters. + * parse.y (modename): No longer match SIGNALNAME. Instead, add it + to name and simple_name_string. This removes a reduce/reduce conflict. + * Makefile.in (stamp-parse): Expect fewer conlicts. + + * lex.l (yywrap): Move check for circularly seizeing current + grant-file from here ... + * lex.l (handle_use_seizefile_directive): ... to here. + This is to avoid calling stat on a not-yet written grantfile, + now that we're using same_file (which calls stat). + * grant.c (set_use_this_gf): Removed. + * grant.c (set_default_grant_file): Set grant_file_name here, + because we need it earlier (due to above lexer change). + + * typeck.c (layout_chill_struct_type): Remove useless code to + remove zero-width bitfield (which messes up CONST_DECLs). + +Sat Apr 23 13:16:39 1994 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in (check): Assure that 'ld' is available before checking. + +Thu Apr 21 13:23:54 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * grant.c (print_an_int): Removed. + (raw_decode_mode): Generalized to use decode_constant + instead of print_an_int. + (decode_constant): Print directly, instead of calling print_an_int. + * parse.y (event_list): Fix syntax. + * parse.y (optqueuesize): Default is NULL_TREE, not zero. + * tasking.c (check_queue_size): New function, for error checking. + * ch-tree.h: Add declaration for check_queue_size. + * satisfy.c (satisfy case RECORD_TYPE): Satisfy constant fields + (used for queue size of EVENT and BUFFER), and call check_queue_size. + +Tue Apr 19 13:42:41 1994 Per Bothner (bothner@kalessin.cygnus.com) + + Re-implement EVENT modes to support general EVENT objects + (and not just EVENT names), according to Z200. (Not finished!) + * tasking.c, ch-tree.h (max_queue_size): New function. + * parse.y (dcalternative, event_list, event_list_head): New + implementation of DELAY CASE, avoiding parsing ambiguities. + (call, locdec, delayaction): Remove old EVENTNAME kludges. + * lex.l (name_type_signal): Remove EVENTNAME recognition. + * tasking.c (build_event_type): Re-written. + * typeck.c (chill_similar), decl.c (print_lang_type): + Use new max_queue_size function. + * typeck.c (layout_chill_struct_size): Ignore CONST_DECL. + * tasking.c (build_delay_action): Preliminary changes - just to + make it compile. FIXME! + * grant.c (raw_decode_mode): Use new max_queue_size function. + Move EVENT support from LANG_TYPE to RECORD_TYPE. + * ch-tree.h (process_event_decls): Removed. + +Tue Apr 19 11:44:01 1994 Bill Cox (bill@rtl.cygnus.com) + + * regression.sh: Complete previous change - eliminate all + references to objdir as a user parameter. + +Mon Apr 18 10:17:55 1994 Bill Cox (bill@cygnus.com) + + * Makefile.in (check): Simplified regression.sh call. + * regression.sh: Change command-line parsing. Default + srcdir to the script's path. Calculate objdir + internally - don't pass it in. + +Thu Apr 14 13:30:19 1994 Wilfried Moser (moser@phishhead.cygnus.com) + + * expr.c (build_chill_duration): Add range checking. + + * lex.l (init_lex): Add predefined names DURATION and TIME. + * lex.h (enum rid): Add RID_DURATION and RID_TIME. + * ch-tree.h: Add prototypes and externals. + * decl.c (init_decl_processing): Add builtin function + descriptions. + * expr.c (build_generalized_call): Add processing of some + builtin's. + * expr.c (build_chill_abstime): New function to process builtin + ABSTIME. + * expr.c (build_chill_inttime_type): New function to built type + for the INTTIME builtin. + * expr.c (build_chill_inttime): New function to process builtin + INTTIME. + * expr.c (build_chill_duration): New function to process builtin's + MILLISECS, SECS, MINUTES, HOURS and DAYS. + +Tue Apr 12 11:55:45 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * lex.l (chill_same_grant_file): Rename to same_file. Change to + take two files names rather than two DECLs. Also check that the + filesystems (st_dev) are equal. Finally, make static. + * lex.l (handle_use_seizefile_directive): Check for duplicate + USE_SEIZE_FILE directives using same_file. + * decl.c (pop_module): Remove dubious call to chill_same_grant_file. + +Sun Apr 10 17:19:56 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * decl.c, ch-tree.h (chill_result_decl): New variable. Used to + store RESULT value. (Cannot use DECL_RESULT; see comment in decl.c.) + * actions.c (chill_expand_result, chill_expand_return): + Use chill_result_decl appropriately. + * ch-tree.h, decl.c, actions.c (saved_result_rtx): Removed. + Subsumed by chill_result_decl. + + * expr.c (chill_expand-expr case CONCAT_EXPR): Generate temporary + using the mode of the result type, and don't assume it is BLKmode. + +Fri Apr 8 17:46:13 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * actions.c (chill_expand_assignment): Check for compatibility + _after_ "expanding out" a binary operation. This fixes + the case "STRING //:= CHAR". + + * lex.l (equal_number): Convert symbol to integer_type_node, to + force the value to be INT-derived (and avoid novelty conflicts). + +Mon Apr 4 22:06:31 1994 Per Bothner (bothner@cygnus.com) + + * ch-tree.h (CH_FUNCTION_SETS_RESULT): New flag. + * ch-actions.c (chill_expand_return), ch-tree.h: Extra + parameter, indicates if implicit return at end of function. + * ch-parse.y: Modify accordingly. + * ch-actions.c (chill_expand_return): Various improvements. + + * decl.c, ch-tree.h (result_never_set): New variable. + * actions.c (chill_expand_result, chill_expand_return): Clear it. + * ch-parse.y (end_function): Warn if no RETURN or RESULT action. + + * decl.c, ch-tree.h (saved_result_rtx): New variable. + * decl.c (start_chill_function): Use saved_result_rtx as return + value if there is a RESULT in a REG that might get clobbered. + * actions.c (chill_expand_result): Save result in saved_result_rtx + or assign to DECL_RESULT as appropriate. + * decl.c, ch-tree.h (current_function_returns_value, + current_function_returns_null, current_extern_inline): + Don't use. Only define first two to allow linking with ch-typeck.c. + + * typeck.c (chill_l_equivalent): Add forward declaration. + +Fri Apr 1 11:02:27 1994 Wilfried Moser (fs_moser at rcsw47) + + * lex.l (readstring): Handle control sequence in all cases (Z.200 + 5.2.4.4 page 54). + +Fri Apr 1 13:11:27 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * configure: Simplify and fix the logic for looping through + sub-directories. + +Thu Mar 31 18:59:57 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-tree.h (CH_L_EQUIVALENT): Moved from typeck.c. + * typeck.c (chill_similar): Add support for checking + FUNCTION_TYPEs for similarity. Also, treat + pointer-to-function-type the same as function-type. + +Thu Mar 31 11:22:56 1994 Wilfried Moser (fs_moser at rcsw47) + + * ch-tree.h: Change prototype of function expand_send_signal. + * parse.y: Change calls to expand_send_signal. + * tasking.c (expand_send_signal): Change handling of optsetto + argument. New argument signame to get a possible destination + process for the signal. + +Wed Mar 30 14:54:48 1994 Wilfried Moser (fs_moser at rcsw1j) + + * tasking.c (make_process_struct): Change error message in case of + a process argument has other attribute then IN or LOC. + * tasking.c (build_start_process): Add check that the optset is + referable in case it is specified (this makes + noncompile/start_.ch working). + +Tue Mar 29 13:24:27 1994 Wilfried Moser (fs_moser at rcsw1h) + + * Makefile.in: Change version string to 1.2.1 + * ch-tree.h (enum chill_built_in_function): Delete no longer valid + entries. + * ch-tree.h: Change prototype for build_chill_readtext. + * decl.c (init_decl_processing): Add builtin_function _readstring, + _readunixstd and READTEXT. + * expr.c (build_generalized_call): Add processing of READTEXT. + Delete handling of no longer valid builtin_functions. + * gperf: Remove keyword READTEXT. + * parse.y: Remove token READTEXT. + * inout.c (build_chill_io_list_type): Add building type for + READTEXT. + * inout.c (build_chill_readtext): Implement the function + (partial). + * inout.c (build_chill_writetext): Do some cleanups. + +Tue Mar 29 12:30:59 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * typeck.c (build_chill_cast): Re-arrange, to support casts + of const integer to type of different size, if there is + an integral type of the desired size: Go through the + const conversion code. + + * actions.c (adjust_parm_or_field): Move support for LOC to ... + * expr.c (build_chill_function_call): ... here. + Fix a number of bugs in OUT/INOUT handling. + + * ch-tree.h, actions.c (adjust_parm_or_field), grant.c (print_struct), + parse.y (location), typeck.c (chill_comptypes): Remove unused + support for ENCAPSULATED_ARRAY_P. + * typeck.c (build_chill_array_parm_type), ch-tree.h: Remove; unused. + + * ch-tree.h, decl.c (shadow_record_fields), decl.c + (shadow_record_fields), expr.c (chill_expand_case_expr, + build_chill_function_call), grant.c (chill_finish_compile), + typeck.c (build_empty_string, build_init_struct): Rename magic + identifiers of the form "<...>" to "__..." for better portability. + + * actions.c (adjust_parm_or_field): Remove extraneous + call to build_chill_repetition_op. + * expr.c (build_chill_function_call): Some simplifictions + (since neither valtail nor typetail can be NULL). + Clean up error message for OUT//INOUT not location to use only 1 line. + Add error message for OUT/INOUT if type is READonly. + * typeck.c (build_chill_modify_expr): Simplify. + +Sun Mar 27 19:30:25 1994 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: Clean up generally. Assure that + runtime is built before running regressions. + Build correct parameters to regression.sh. + Remove a lot of 'clean' cruft. + * Make-lang.in, config-lang.in: New files for + subdirectory architecture. + +Sat Mar 26 10:39:12 1994 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in (check): Build correct parameters for regression.sh. + +Fri Mar 25 10:13:06 1994 Bill Cox (bill@rtl.cygnus.com) + + * configure: Also mark regression.awk3 as executable. + * regression.sh: Add comments about command-line options. + Calculate srcdir correctly, defaulting to the script's path. + Add OPT flag to pass to the Makefiles, to specify the + compiler's optimization level, and -O and -O2 options. + Delete GLOBAL flag and tests. Use a different make.log + file for optimized and unoptimized test results. Add the + compiler's host and target triples to the report header. + +Wed Mar 23 21:41:26 1994 Bill Cox (bill@rtl.cygnus.com) + + * expr.c (build_chill_function_call): Handle INOUT and OUT + parameters better (for the rangefail test, at least). + +Wed Mar 23 14:13:45 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * regression.sh (srcdir, objdir): Fixed hard-wired paths. + (grep args): Changed [XYZ-] to [-XYZ] for SCO. + +Wed Mar 23 13:34:18 1994 Bill Cox (bill@rtl.cygnus.com) + + * expr.c (build_generalized_call): Revert previous change. + To do this correctly, we need a new parsing mechanism, and + C++ initializer technology. + +Wed Mar 23 09:34:50 1994 Bill Cox (bill@rtl.cygnus.com) + + * expr.c (build_generalized_call): Be sure we're inside the + module-level function before calling build_gen_inst, for + example. + +Wed Mar 23 09:34:50 1994 Bill Cox (bill@rtl.cygnus.com) + + * regression.sh (dodirectory): Count the gcov and abort tests + among the .dat files. + +Tue Mar 22 15:39:38 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * satisfy.c (safe_satisfy_decl): When checking that a SYN + value fits in a specified discrete type, don't convert first, + and use compare_int_csts instead of tree_int_cst_lt. + +Tue Mar 22 15:25:38 1994 Bill Cox (bill@rtl.cygnus.com) + + * configure: Generate better .gdbinit files. + +Tue Mar 22 11:59:38 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * actions.c (check_range): Don't emit dynamic checks + if not current_function_decl. + + * parse.y (arrayindex): Allow expr (error is emitted + at semantic level if not the NAME of a type). + * typeck.c (build_chill_cast): Re-enable some casts. + * satisfy.c (safe_satisfy_decl): Remove redundant CONST check. + +Tue Mar 22 11:46:28 1994 Bill Cox (bill@rtl.cygnus.com) + + * configure: Access the utils directory correctly. + * expr.c (build_compare_expr): Reenable compatibility test. + +Tue Mar 22 11:24:45 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * typeck.c (valid_array_index_p): Call + build_compare_discrete_expr instead of build_compare_expr. + * typeck.c (build_chill_cast): Improve logic. + * satisfy.c (safe_satisfy_decl): Simplify test. + +Tue Mar 22 10:17:58 1994 Bill Cox (bill@rtl.cygnus.com) + + * actions.c (chill_expand_assignment): Correct detection of + string assignment case. + * expr.c (chill_expand_expr): Now that we're using build_chill_function_call, + the actual parameters need to be converted to the unsigned long + type explicitly. Do that. + * satisfy.c (safe_satisfy_decl): Correct range-checking code. + +Mon Mar 21 16:25:07 1994 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: Correct prediction of grammar conflicts. + * actions.c(check_range): Fix reference to NULL_TREE pointer. + And allow compile-time errors even if range_checking is off. + * parse.y: Clean up some comments. + * satisfy.c (safe_satisfy_decl): Add range-check for a SYN's value. + +Mon Mar 21 13:29:23 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * typeck.c (layout_chill_range_type): Instead of tree_int_cst_lt + use compare_int_csts (which is more robust when signedness differs). + Also, convert the bounds *after* doing range checking. + + * ch-tree.def (SET_IN_EXPR): New. + * expr.c (chill_expand_expr): Code to expand SET_IN_EXPR, + moved from expand_expr in ../expr.c. Also add some extra + conversions (because we're now using build_chill_function-call). + * actions.c, decl.c, expr.c, grant.c, parse.y, typeck.c: + Use SET_IN_EXPR in place of IN_EXPR. + + * expr.c (build_compare_discrete_expr), ch-tree.h: New function, + with code moved from build_compare_expr. + * expr.c (build_compare_expr): Re-enable compatibility test. + +Mon Mar 21 11:02:33 1994 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: Rewrite byacc related rules. + * actions.c (chill_convert_for_assignment): Use the + referenced type only for generating range checks. + * configure: Add 'utils' directory to SUBDIRS variable. + +Sun Mar 20 21:49:59 1994 Bill Cox (bill@rtl.cygnus.com) + + * actions.c (check_range): Call build_compare_expr rather than + build_binary_op. + (adjust_parm_or_field): Call convert_for_assignment rathern than + convert, to get the range-checking. + * expr.c (build_chill_pred_or_succ): Fix up rangefail code. + Generate a compile-time message if possible. + (build_compare_expr): Comment out compatibility test - should + not be needed in here. Fix a couple of typos. Add some types + to some build calls. + +Sun Mar 20 11:48:10 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * decl.c (init_decl_processing): Clean up parameter type + list for __setbitpowerset, + + * typeck.c (chill_compatible_classes): Allow the M-reference + to be compatible with the N-value class, with suitable M and N. + * typeck.c (build_chill_slice): Don't smash a void TREE_TYPE. + (We don't need to, and it causes confusion.) + + * expr.c (build_compare_expr): Fix thinko. Add save_exprs. + + * expr.c (build_compare_expr): Fix a transcription bug + (for converting NULL INSTANCEs). Also #include convert.h. + + * expr.c (compare_int_csts): New. Compare INTEGER_CSTs. + Works even if their types have different TREE_UNSIGNED. + * expr.c (finish_chill_binary_op): Moved code dealing with + the comparison operators from here ... + * expr.c (build_compare_expr): ... to new function here. + Also, for discrete types, tries to Do The Right Thing, even for + differing values of TYPE_PRECISION and TREE_UNSIGNED. + the code from lay + * ch-tree.h: Declare new functions. + * typeck.c (valid_array_index_p): Various cleanups, + including using new build_parse_expr. + * parse.y: Use new build_compare_expr. + + * inout.c (build_chill_writetext): Handle REFERENCE_TYPE args. + +Sun Mar 20 08:54:27 1994 Bill Cox (bill@rtl.cygnus.com) + + * actions.c (expand_assignment_to_varying_array): + Call build_chill_array_ref to get index checking. + (chill_convert_for_assignment): Delete unused errstr + variable. + (chill_expand_assignment): Call build_chill_array_ref + to get runtime index checking. + (expand_varying_length_assignment): Use new interface + to varying_array_index_p. + * ch-tree.h (varying_array_index_p): New proto. + * convert.c (convert): Call build_chill_array_ref + to get runtime index checking. + * expr.c (build_chill_pred_or_succ): Fix cond tree + to have consistent operand types. + * typeck.c (valid_array_index_p): Change interface to pass + validity conditions back on caller's TREE_LIST. We + cannot link the conditions to anything which a + layout_type routine will expand, since that will occur + before the exception handler is set up. + Change calls to valid_array_index_p also. + +Fri Mar 18 14:40:50 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * actions.c, except.c, loop.c, tasking.c: Call + build_chill_function_call instead of the C-specific + build_function_call. + * except.c (initialize_exceptions): Fix parmtype of __builtin_setjmp. + * loop.c (top_loop_end_check): Coerce library function arg. + * convert.c, expr.c: Re-write to avoid calls to C-specific + function build_unary_op (e.g. by calling build1 directly). + + * typeck.c (chill_equivalent): Change to force failure + for non-matching integral types (even if not ranges). + + * typeck.c, ch-tree.h (build_chill_slice): Make non-static. + * expr.c (varying_to_slice): Call build_chill_slice (and not + build_chill_slice_with_length, which does bunches of range + checking and does not allow the length to be zero). + * convert.c (convert): Fix off-by-one error. + * actions.c (chill_expand_array_assignment): Minor cleaning up. + +Fri Mar 18 00:12:48 1994 Per Bothner (bothner@deneb.cygnus.com) + + * decl.c (init_decl_processing): __lepowerset and __ltpowerset + take *two* pointer parameters, not one. + * satisfy.c (satisfy): Only call the appropriate layout routine + if TYPE_SIZE is 0 (i.e. type hasn't already been laid out). + * typeck.c (build_chill_slice_with_length): Fix Bill's previous fix. + +Thu Mar 17 17:29:43 1994 Bill Cox (bill@rtl.cygnus.com) + + * expr.c (build_chill_function_call): Give function call the correct + type tree. + * typeck.c (build_chill_slice_with_length): Restore dynamic range + checking, so it doesn't obscure the CONSTANTness of the length. + +Wed Mar 16 17:23:31 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * typeck.c (build_chill_slice), expr.c (chill_expand_expr + [case CONCAT_EXPR]): Remove kludge setting slice size upper bound + in TYPE_LANG_SPECIFIC, and restore kludge setting it in MAX_VALUE. + * typeck.c (build_chill_slice): Use TYPE_MAX_VALUE of + array_type if needed for size upper bound of slice_type. + * expr.c (build_concat_expr): Improve calculation of size upper bound. + + * typeck.c (valid_array_index_p): Check compatibility using + correct types. + * typeck.c (build_chill_slice_with_length); For now revert + calling valid_array_index_p on length. (It makes it harder + to realize when the slice is constant length.) + * expr.c (build_chill_indirect_expr): Minor tweak. (This + seems to work around a weird C compiler bug. ??) + + * expr.c (build_chill_function_call): Cleanup so it doesn't + call build_function_call (in c-typeck.c). + * typeck.c, expr.c: Use build_chill_function_call instead of + build_function_call (in c-typeck.c). + + * parse.y (discrete_mode): Move some of the rules from + non_array_mode into new non-terminal. + (arrayindex): Use discrete_mode (with NAME and TYPENAME) to + avoid some misparses. + * ch-tree.h (SLICE_PTR, SLICE_LENGTH): Removed; unused. + * convert.c (digest_structure_tuple): Add missing parameter. + * decl.c (comptypes): Remove unused prototype. + * decl.c (build_chill_function_type): Handle NULL return_type + correctly (convert to void_type_node). + * decl.c (init_decl_processing): layout boolean_type_node *after* + we've set it's TYPE_MIN_VALUE and TYPE_MAX_VALUE. + +Wed Mar 16 16:08:22 1994 Bill Cox (bill@rtl.cygnus.com) + + * ch-tree.h: Add prototype. + * convert.c (convert): Correct calculation of padding length. + * decl.c (grok_chill_fixedfields): Move ignore_exprs test to + parse.y where it belongs. This permits the removal of a kludge + in make_process_struct. + * lex.l, parse.y: Call to_global_level for several errors. Add + code to output error in only one pass. + * tasking.c (make_process_struct): Delete kludge inserted on + March 8. + (build_receive_case_end): Add Wilfried's check for errors. + +Tue Mar 15 08:42:12 1994 Bill Cox (bill@rtl.cygnus.com) + + * actions.c: Fix comment. + (build_rts_call): Ifdef it out - never used. + (expand_varying_length_assignment): call valid_array_index_p. + rather than validate_varying_array_ref. + * ch-tree.h: Fix prototype for valid_array_index_p. + * expr.c (chill_expand_expr): Call build_chill_array_ref to get + index validation. + (build_hill_lower, build_chill_upper): Return value now inherits + the novelty of the input parameter. + (varying_to_slice): Use CH_NOVELTY macro rather than calling + chill_novelty directly. + * grant.c (newstring): Make len unsigned and cast xmalloc parameter + to unsigned. + (print_integer_type): Pass string value as APPEND's second parameter. + (decode_decl): Pass a boolean expression as print_proc_tail's + first parameter. + (chill_finish_module_code): Make xmalloc's parameter unsigned. + * lex.l: Pass sizes to xmalloc as unsigned ints. Pass second + parameter to in_word_set as unsigned. + * loop.c (build_loop_start): Check top_loop_end_check return value. + * parse.y: Add casts to int for third do_decls parameter, fifth + build_loop_iterator parameter, etc. + * tasking.c (build_receive_case_end): Chack cond_stack before popping. + * typeck.c (validate_varying_array_ref, chill_max_vary_array_index, + valid_array_index): Delete them. They're now unused. + (valid_array_index_p): Add function, call it everywhere that an + array index is checked. + (build_chill_slice): Restore old functionality where varying_to_slice + is called to handle slices of varying arrays, rather than handling + handling them here. + (build_chill_slice_with_range, build_chill_slice_with_length): + Check range limits for TREE_CONST before calling tree_int_cst_lt. + Delete now-obsolete checks of constant indices. + +Mon Mar 14 17:26:51 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * parse.y (modeless_expr): New rule to allow ([...]) and (if...) + to count as untyped_exprs. (This is not really permitted by the + Blue Book, but has been requested by customers.) + +Thu Mar 10 10:11:02 1994 Bill Cox (bill@rtl.cygnus.com) + + * chill.texi: Document new command-line options. + * expr.c (build_chill_num): Set unsigned parameter for + type_for_size call correctly (unsigned for enums). + * lang.c (lang_decode_option): Add command-line options to + enable/disable runtime range-checking. + * lex.l: Eat more whitespace. + +Thu Mar 10 09:41:37 1994 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: Have rules to make parse.h, y.tab.c and other + derived files. This allows the gcc/configure list of CHILL + files machinery to work. + * ch-tree.h (permanent_allocation): Add a parameter flag. + * decl.c (finish_chill_function, finish_decl): Provide the + new permanent_allocation flag. + (poplevel): Return early, avoid a seg fault. + * lex.l (NORMAL): Replace this whole state with the predefined + INITIAL state. Force compilation state to global level after + compiler directive error - prevents endless loop on error. + (handle_use_seizefile_directive): Rewrite for readability. + (chill_same_grant_file): Reindent. + Generally handle whitespace differently. + * regression.prpt: Print ten PR numbers per line. The report's + getting too long. + +Wed Mar 9 09:58:51 1994 Bill Cox (bill@rtl.cygnus.com) + + * decl.c (do_decl): Suppress the string-assignment-condition + error - it was too often seen. + * expr.c (expand_chill_expr): In CONCAT_EXPR, when argument has a + runtime-changing length (as in a slice), get the parent array's + allocation size from its type tree. + * typeck.c (build_chill_slice): Support VARYING arrays. Pass + parent array's static allocation size along in the slice type. + +Wed Mar 9 08:54:24 1994 Bill Cox (bill@rtl.cygnus.com) + + * lex.l (name_type_signal): Avoid dereferencing a NULL TRE_TYPE. + +Tue Mar 8 11:51:10 1994 Bill Cox (bill@rtl.cygnus.com) + + * expr.c (build_chill_sizeof): Fix typo in error msg, add + some whitespace. + * lex.l (name_type_signal): Add debug output. + * parse.y (call): Allow EVENTNAME and BUFFERNAME parameters + to a call, so that SIZE () works on them. + * tasking.c (make_process_struct): Force ignore_exprs non-zero + when processing a SEIZEd PROCESS declaration. This prevents + grox-fixed_fields from returning a NULL, and indirectly protects + the chill_integer_type_node tree from corruption. + +Mon Mar 7 19:14:05 1994 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: Use the 'all' target to build the runtime + library and chillrt0.o. + * README: Explain rules for files in this directory. + * addtest, addtest.man, build-release, + chill.regress.cron: Move to utils subdirectory. + * expr.c (build_chill_function_call): Mark the INOUT + temporary so it doesn't get optimized into a + register. Fixes the execute/inout.ch bug. + * typeck.c (layout_chill_range_type): Restrict it + from complaining about an empty string type's + bounds (0:-1). + +Mon Mar 7 09:06:39 1994 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in (compiler): Restore this target. + (OBJS, BC_OBJS): Delete unused variables. + Add $(FLAGS_TO_PASS) to sub-make invocations. + * ch_decomment.l, ch_makedepend, chill.patches, printf.c, + tcov.awk, tcov.el, tcov.sh: Move to utils subdirectory. + +Sat Mar 5 18:37:50 1994 Jim Wilson (wilson@sphagnum.cygnus.com) + + * except.c (finish_handler_array): When computing address of + the array ex_decl, don't call build_array_ref. + +Sat Mar 5 17:43:36 1994 Jim Wilson (wilson@sphagnum.cygnus.com) + + * loop.c (declare_temps): Force powerset temp to memory. + +Fri Mar 4 11:20:44 1994 Bill Cox (bill@rtl.cygnus.com) + + * typeck.c (layout_chill_range_type): Convert highval and + lowval to a common type before range-checking them. + +Fri Mar 4 11:20:44 1994 Bill Cox (bill@rtl.cygnus.com) + + * ch-tree.h: Add loop-related prototypes. + * decl.c, grant.c: Fix -Wall violations. + * parse.y: Fix format of %type directives. + +Fri Mar 4 10:04:18 1994 Wilfried Moser (fs_moser at rcsw1h) + + * Makefile.in: Update version number. + * expr.c: Fix a comment. + * inout.c (build_chill_writetext): Add handling of a REAL. + * lex.l (INITIAL): Remove all code to discard 'header lines'. + no longer needed. + * parse.y (optheader): Remove - it's obsolete, as is the + HEADEREL token definition. + +Fri Mar 4 09:41:18 1994 Bill Cox (bill@rtl.cygnus.com) + + * addtest: Fix suffix removal when suffix is .c186. + * regression.sh: Allow for underscores on PR filenames. + * typeck.c: Check in the rewrite mentioned earlier. + +Thu Mar 3 09:42:10 1994 Wilfried Moser (fs_moser at rcsw1h) + + * tasking.c (build_process_header): Build a debug structure + for easier access to PROCESS parameters. + +Thu Mar 3 09:42:10 1994 Bill Cox (bill@rtl.cygnus.com) + + * typeck.c (*string_assignment_condition): Complete rewrite + of a verbose first draft. + +Wed Mar 2 16:49:05 1994 Bill Cox (bill@rtl.cygnus.com) + + * actions.c (adjust_return_value): Simplify. + Delete references to CH_RETURNS_LOC, extra parameters to + push_extern_function and start_chill_functions. + (convert_for_assignment): Check whether to generate runtime + range-checking code. Handle reference_type in convert call. + (chill_expand_assignment): Produce an INDIRECT_REF for a + reference_type on the LHS. Delete conversions subsumed by + convert_for_assignment. + * ch-tree.h: Delete parameters from prototypes. + * decl.c (print_lang_decl): Print out signal flag. + (push_extern_function, start_chill_function): Delete + extra parameters, references to CH_RETURNS_LOC. + * grant.c (chill_finish_compile): Delete extra parameter. + * parse.y: Delete references to CH_RETURNS_LOC, extra parameters to + push_extern_function and start_chill_functions. + * regression.sh (checkprms): Skip PRMS discrepancies if we + can't access PRMS for some reason. + * satisfy.c: Correct indentation. + * tasking.c (build_process_header): Delete extra parameters + passed to push_extern_function and start_chill_functions. + +Wed Mar 2 10:33:50 1994 Bill Cox (bill@rtl.cygnus.com) + + * addtest: Require a fill filename. Be more careful about + adding the same test twice. + * expr.c: Add FIXME to comment. + * regression.sh: Add configure script call. + +Tue Mar 1 16:24:20 1994 Wilfried Moser (fs_moser at rcsw1h) + + * Makefile.in: Change version of chill to 1.1.2 + * inout.c: Add processing of SET and POWERSET types to WRITETEXT. + +Tue Mar 1 07:34:56 1994 Bill Cox (bill@rtl.cygnus.com) + + RETURN of LOC value is only half-baked. Stay tuned... + * actions.c (adjust_parm_or_field): Add to comment. + (adjust_return_value): New function for issuing errors about + RETURN and RESULT expressions. Also converts them. + (chill_expand_result, chill_expand_return): Call new + adjust_return_value function. + * ch-tree.h (CH_RETURNS_LOC): Add new flag for function types. + New parameter for push_extern_function and start_chill_function. + * decl.c (push_extern_function, start_chill_function): New parameter + to say whether return value is a LOC. + * expr.c (build_chill_indirect_ref): Further qualify the issuing + of the error message. + * grant.c (raw_decode_mode): Move test for instance mode under + STRUCT handling. + (start_chill_module_code, chill_finish_compile): Add new + parameter to start_chill_function calls. + * parse.y (get_type_of): Do lookup_name more often. + (quasi_pdef, procedure, procmode, optresultspec): Set + CH_RETURNS_LOC flag. + (optresultattr): Code keywords as a bitmask. + * tasking.c (build_process_header): Add new parameter to + start_chill_function call. + +Sat Feb 26 12:49:05 1994 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: Replace undefined $(RM) with rm -f. + * configure: Make sure scripts are executable. + * regression.sh: Make variables to invoke make + and awk. Don't process a directory if it + doesn't exist. + +Fri Feb 25 14:48:48 1994 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in (check): Force the building of ../gcov and + ../xgcc before testing. Move the printf dependency here + since we don't need it until we're testing. + * addtest: Strip suffix from each input filename. + * decl.c (do_decl): Correct error checking. Call + string_assignment_condition for some of it. + * tasking.c (build_gen_inst): Add ability to pass an integer + for either the process ID or the copy number. If a number + is passed, range-check it against the CHILL unsigned type + limits. + (build_buffer_descriptor): Add draft code to check the buffer + name for correctness. + +Wed Feb 23 15:07:12 1994 Per Bothner (bothner@kalessin.cygnus.com) + + New cleaner solution to the following problem: + Chill allows an action to be followed by an ON-handler. + But we don't know if an action has a handler until we've parsed + its end, yet we want to generate extra code to set up an + exception handling contour only if needed. The old solution + would generate code for the action into an rtl sequence, and then + splice in the exception-setup code if we later found we needed it. + This has a few problems (for example it confuses the management + of stack temporaries), and is ugly. Now that the compiler is 2-pass + we have a cleaner solution: In pass 1, we remember which actions + were followed by ON-handlers. In pass 2, we use this information + to generate appropriate code before an action. + * except.c (push_handler, pop_handler): In pass 1, set up data + structures (global_handler_list) to remember if an action has an + ON-handler. In pass 2, digest this information, and setup + handler if needed. + * except.c, actions.h (pop_handler): Take an extra int arg. + * except.c (emit_setup_handler): New function, with code (moved + from chill_start_on) to emit code before an action that has a handler. + * except.c (except_init_pass_2): New function. + * parse.y (pass1_2): Call except_init_pass_2 before pass 2. + * parse.y (POP_UNUSED_ON_CONTEXT): Don't call pop_sequence. + * parse.y: Invoke POP_UNUSED_ON_CONTEXT and POP_USED_ON_CONTEXT + in pass 1 as well as pass 2. + * parse.y (BEGIN ... END): Re-arrange logic to avoid block_stack + (local to ../stmt.c) getting out of sync. + * actions.c (push_action): Don't need to emit a NOP, + now that we're no longer moving sequences around. + * actions.c (push_action): Call push_handler even in pass one. + +Wed Feb 23 11:06:14 1994 Bill Cox (bill@rtl.cygnus.com) + + * decl.c (do_decl): Check for possible overflow in initializing + a declared variable. + * expr.c (build-chill_indirect_ref): Add error message for + a syntax error that C programmers converting to CHILL are + quite likely to make. + * satisfy.c (safe_satisfy_decl): Keep yesterday's change from + seg-faulting. + +Tue Feb 22 17:54:43 1994 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: Use $(CC) rather than FLAGS_TO_PASS, which isn't + defined. Build chill script differently, and build an install script. + Add an action to run the regression test. + * actions.c (chill_expand_assignment): Change + string_assignment_condition call. + * ch-tree.h: Add prototype. + * expr.c (build_chill_function_call): Change + string_assignment_condition call. + * satisfy.c (safe_satisfy_decl): Add check that string INIT value + will fit in the declared mode. + * typeck.c (string_assignment_condition): Add flag to disable + runtime code generation. Add code to generate runtime test. + +Mon Feb 21 14:04:20 1994 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in (check): Add target to trigger a regression test. + +Mon Feb 21 13:54:20 1994 Bill Cox (bill@rtl.cygnus.com) + + * decl.c (do _based_decls): Add error check for + decls BASED on a PROC or PROCESS name. + +Mon Feb 21 13:24:02 1994 Bill Cox (bill@rtl.cygnus.com) + + * grant.c (chill_finish_compile): Bypass handling + module-level code if an earlier error has made + is useless. + * tasking.c (build_start_process): Generate error, + return if process name unknown. + +Mon Feb 21 14:29:41 1994 Wilfried Moser (fs_moser at rcsw47) + + * expr.c (build_generalized_call): Use + build_arrow_expr semantics for ADDR () builtin. + +Mon Feb 21 12:49:14 1994 Bill Cox (bill@rtl.cygnus.com) + + * tasking.c (build_gen_inst): Output correct + constructor for GEN_INST. + +Mon Feb 21 08:14:59 1994 Wilfried Moser (fs_moser at rcsw47) + + * lex.l (yywrap): Fix punctuation error. + +Sun Feb 20 19:58:14 1994 Bill Cox (bill@rtl.cygnus.com) + + * regression.sh: Fix cvs update-related commands. + Have cron job always perform the update, so it's + always reporting on the current state of the + sources. + * typeck.c (string_assignment_condition): Allow a + mis-match if the LHS is varying. + +Fri Feb 18 18:10:04 1994 Bill Cox (bill@rtl.cygnus.com) + + * actions.c (expand_chill_assignment): Add call to test the + string assignment condition. + * expr.c (build_chill_function_call): Add call to test the + string assignment condition. + * regression.awk2: Report WITHDRAWN PRs as well. + * regression.sh: Delete extra commentary about FEEDBACK PRs. + * typeck.c (string_assignment_condition): Add function to + perform the check. + +Fri Feb 18 16:30:40 1994 Bill Cox (bill@rtl.cygnus.com) + + * regression.awk1, regression.awk3: Recognize 'withdrawn' PRs + and exclude them from the regression test report. Mark them + in the list of PRs as 'W' status. + +Thu Feb 17 09:13:42 1994 Wilfried Moser (fs_moser at rcsw47) + + * Makefile.in: Define a version number. Build chill script + differently. Makefile depends upon ../configure, not configure. + * chill.in: Define some new flags. + +Wed Feb 16 19:44:33 1994 Bill Cox (bill@rtl.cygnus.com) + + * grant.c (decode_constant): Restore a 'return result' statement + that seems to have gotten lost. + +Wed Feb 16 12:37:44 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-tree.h (various STRING-type macros): Use new TYPE_STRING_FLAG. + + * typeck.c (make_chill_array_type): Remove unused args. + Simplify to build only one-dimensionsal arrays, so change + index list to single index. Call layout_chill_array_type + if pass!=1. And rename to: build_simple_array_type. + * typeck.c (layout_chill_array_type): Only recurse + if TREE_TYPE has not been laid out. + * typeck.c (build_chill_array_type): Update accordingly. + * typeck.c (build_chill_slice): Replace calls to build_array_type + (which does hash-canonicalization, which breaks if we later set + the TYPE_STRING_FLAG) by calls to build_simple_array_type. + * convert.c (convert): The same. + + * grant.c (decode_constant): Clean up. Remove remnants of switch + on TREE_TYPE of the value, and fold those cases into first switch. + +Wed Feb 16 09:12:21 1994 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: Add printf as a dependency of ../cc1chill. + * regression.sh: Make srcdir and objdir really work. + +Wed Feb 16 09:12:21 1994 Bill Cox (bill@rtl.cygnus.com) + + * expr.c (build_char_array_expr): Fix spelling + error in error msg. + * tree.c (build_string_type): Make check for overlarge + string more robust. + +Wed Feb 16 02:37:43 1994 Mike Stump (mrs@cygnus.com) + + * grant.c (decode_constant): Remove useless tests + for STRING_TYPE (which isn't used by anyone, including CHILL). + +Tue Feb 15 15:35:07 1994 Bill Cox (bill@cygnus.com) + + * build-release: Add refinements to checkout commands. + * decl.c (init_decl_processing): Move initialization of + chill_unsigned_type_node before 1st call to build_string_type. + * tree.c (build_string_type): Add compile-time test of string + allocated length. + * typeck.c (layout_chill_range_type): Add compile-time range limit + checking. + +Tue Feb 15 08:55:37 1994 Bill Cox (bill@cygnus.com) + + * Makefile.in: Add stamp-chill-objs as a dependency of ../cc1chill. + * regression.sh: Rename test directory names. + +Mon Feb 14 09:24:16 1994 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: Change interface with parent directory's + Makefile, decoupling the lists of each others' files. + +Mon Feb 14 09:24:16 1994 Bill Cox (bill@rtl.cygnus.com) + + * lex.l: Delete obsolete comment. + * tasking.c (expand_send_signal): Add a type to the OPTSENDTO + instance constructor. + +Mon Feb 14 04:04:16 1994 Bill Cox (bill@rtl.cygnus.com) + + * lex.l (maybe_number): Add octal to numbers + handled by Feb 1 change. + +Sat Feb 12 16:24:22 1994 Bill Cox (bill@rtl.cygnus.com) + + * actions.c, convert.c, decl.c, expr.c, lex.l, + tasking.c, typeck.c: gcc -Wall cleanups. + * ch-tree.h: Change loop-related prototypes. + * loop.c, parse.y: Rewrite to set up correct loop scope. + Fix error path where loop variable not declared. + +Fri Feb 11 11:12:29 1994 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: Add rule to build printf. Make it a dependency + of ../cc1chill. + * printf.c: New tool for regression testing script. + * regression.sh: Look for print in ${objdir}. + +Thu Feb 24 17:31:12 1994 Wilfried Moser (fs_moser at rcsw1j) + + * tasking.c (build_gen_inst): Allow integer expression as argument + 1 to this function. This was a change request to get rid of + unsupported value conversion from INSTANCE to ARRAY (0:1) UINT + or STRUCT (t UINT, c UINT). + +Thu Feb 10 09:49:31 1994 Bill Cox (bill@rtl.cygnus.com) + + * regression.awk3: Recognize upper-case PRMS state names. + +Wed Feb 9 15:26:19 1994 Bill Cox (bill@cygnus.com) + + * parse.y (dowithaction): Allow EXIT from DO WITH. + +Tue Feb 8 13:13:54 1994 Bill Cox (bill@rtl.cygnus.com) + + * configure: Change to require grant.c for evidence that we've + found the source directory. + * decl.c (init_decl_processing): delete unused builtin_slice + function declaration. + * expr.c (chill_expand_expr): Calculate powerset's length + correctly, calling powersetlen to do it. + * regression.sh: Replace BASE references with objdir references. + * typeck.c (build_chill_slice): Build the compound expression + in the right order. + +Mon Feb 7 15:56:07 1994 Bill Cox (bill@rtl.cygnus.com) + + * expr.c (build_chill_lower, build_chill_upper): Handle + LOC parameter types. + * regression.sh: Correct path to executable sub-shell-scripts. + +Mon Feb 7 11:33:47 1994 Bill Cox (bill@rtl.cygnus.com) + + * regression.sh: Pervasive changes to allow for separate + source and object directories. + +Wed Feb 2 17:5620 1994 Bill Cox (bill@rtl.cygnus.com) + + * decl.c (find_implied_typed): Delete obsolete reference to + PROCESS_TYPE. + * ch-tree.def (PROCESS_DECL, PROCESS_TYPE): Delete - they're + obsolete. + +Wed Feb 2 13:37:56 1994 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: Delete bogus runtime/Makefile lines. + * configure: Build testsuite directory. + +Wed Feb 2 13:37:56 1994 Bill Cox (bill@rtl.cygnus.com) + + * configure: Correct srcdir for chill.examples directory. + +Wed Feb 2 11:24:57 1994 Wilfried Moser (fs_moser at rcsw47) + + * ch-parse.y (rule call): Add + BUFFERNAME LPRN untyped_expr RPRN + to enable generating a descriptor same as for SIGNALS. + * ch-tasking.c (generate_tasking_code variable, + decl_tasking_code_variable): Implement overflow check of + taskingcode in case a tasking code is specified with the + compiler directives SIGNAL_CODE, BUFFER_CODE, EVENT_CODE or + PROCESS_TYPE. + +Wed Feb 2 09:31:37 1994 Bill Cox (bill@rtl.cygnus.com) + + * configure: Add ${srcdir} to Makefile.in's path. + * loop.c: Delete unused whitespace. + +Tue Feb 1 17:09:41 1994 Bill Cox (bill@rtl.cygnus.com) + + * expr.c (string_char_rep): Process STRING_CST correctly. + +Tue Feb 1 15:29:28 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * expr.c (build_boring_bitstring): New function. + * expr.c (build_chill_repetition_op): Fix a number of bugs in + implementation of bitstring repetition. + Also, implement repetition of Booleans. + +Tue Feb 1 15:28:21 1994 Bill Cox (bill@rtl.cygnus.com) + + * configure: Delete code to check for gas or ld. Add code to + store a config.status file in each configured subdirectory. + * expr.c (): Spell concatbitstring as concatps, which is the + runtime routine name. + * regression.sh: Force use of GNU make. + +Tue Feb 1 15:22:12 1994 Bill Cox (bill@rtl.cygnus.com) + + * tasking.c: Mark compiler-generated temps to prevent + GRANTing them. + +Tue Feb 1 17:38:51 1994 Wilfried Moser (fs_moser at rcsw1j) + + * lex.l (equal_number): Improve check for number after = in a + compiler directive. + * tasking.c (build_tasking_struct): Make field TaskValue + pointer to chill_unsigned_type_node. + * tasking.c (generate_tasking_code_variable): Declare tasking + code variable as chill_unsigned_type_node. + * tasking.c (decl_tasking_code_variable): Declare tasking + code variable as chill_unsigned_type_node. + +Mon Jan 31 14:01:58 1994 Bill Cox (bill@rtl.cygnus.com) + + * addtest (update_Makefile): No longer build actions - they're + now in pattern rules. + * ch_makedepend: Do the grep first, to avoid processing non + USE_SEIZE_FILE lines. + * configure: Pervasive rewrite to support configuring regression + test directories. + +Mon Jan 31 04:35:53 1994 Michael Tiemann (tiemann@blues.cygnus.com) + + * typeck.c (build_chill_slice): Compute EXTENT correctly. + +Sun Jan 30 14:33:12 1994 Bill Cox (bill@rtl.cygnus.com) + + * tasking.c (build_gen_inst): Return a typed tuple with + INSTANCE type. + +Sun Jan 30 12:01:07 1994 Bill Cox (bill@rtl.cygnus.com) + + * actions.c (chill_expand_assignment): Recognize LENGTH builtin + in the left hand side, pass it to + expand_varying_length_assignment. + (expand_varying_length_assignment): Clean up bitrot. + * convert.c (convert): Revert most recent change. + * loop.c (maybe_skip_loop): New function, split out of + begin_chill_loop. Add conditional to skip processing an empty + VARYING array. + * parse.y (assignaction): Delete code to recognize LENGTH + on left-hand-side. + * typeck.c (validate_varying_array_ref): Correct misleading comment. + +Sat Jan 29 10:54:06 1994 Michael Tiemann (tiemann@blues.cygnus.com) + + * typeck.c (build_chill_slice): Pass a valid identifier to + `get_unique_identifier'. + + * convert.c (convert): Rename LENGTH variable to MAXIDX, and + use correct value for VAR_LENGTH when initializing a varying array. + + * decl.c (do_decl): Set DECL_COMMON. + + * actions.c (check_range): Temporarily inhibit warnings so the + compiler doesn't warn the user about useless range checks that it + might create. It's far easier for the compiler to figure out that + a range check need not be done than it is for us to try to figure + it out for ourselves. + + * expr.c (build_concat_expr): Generalize to handle bitstrings. + (scalar_to_string): New function. + (chill_expand_expr): Handle SET_TYPEs in CONCAT_EXPR by using new + library call (__concatbitstring). + +Sat Jan 29 08:43:54 1994 Bill Cox (bill@rtl.cygnus.com) + + * ch_makedepend: Fix the 'sed' command so that seize file + name can be delimited by double quotes as well as apostrophes. + +Thu Jan 27 17:26:19 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * typeck.c (my_build_array_ref): Do constant folding. + +Thu Jan 27 16:24:24 1994 Bill Cox (bill@rtl.cygnus.com) + + * actions.c, actions.h, ch-tree.h, chill.texi, convert.c, + decl.c, except.c, expr.c, grant.c, inout.c, lang.c, + lex.h, lex.l, loop.c, parse.y, tasking.c, tasking.h, + tree.c, typeck.c: New 'Copyright' line for 1994. + +Thu Jan 27 14:12:07 1994 Mike Stump (mrs@cygnus.com) + + * configure: Don't configure this directory with this configure, + just subdirectories and cleanup. + * Makefile.in (Makefile): Run config.status in parent directory, + if we need rebuilding. + +Thu Jan 27 10:37:33 1994 Bill Cox (bill@rtl.cygnus.com) + + * decl.c (bind_sub_modules): Need a parameter on the recursive call. + Thanks, Zoo! + +Thu Jan 27 10:37:33 1994 Bill Cox (bill@rtl.cygnus.com) + + * expr.c (build_concat_expr): Fix SunOS portability problem. + +Wed Jan 26 14:57:39 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * convert.c (digest_powerset_tuple): New function, used to set + TREE_CONSTANT and TREE_STATIC properly. + (digest_structure_tuple, convert (NULL to instance, non-varying + to varying)): Set TREE_CONSTANT and TREE_STATIC when appropriate. + * expr.c (varying_to_slice): Preserve novelty of slice type. + * expr.c (build_concat_expr): Make sure class of result is + correct (including correct novelty). + * satisfy.c (safe_satisfy_decl): If value of CONST_DECL is + not TREE_CONSTANT, emit an error. + * typeck.c (build_chill_slice): Preserve novelty of result. + * typeck.c (build_chill_slice): Simplify for varying argument + (by using varying_to_slice). + * typeck.c (expand_constant_to_buffer, extract_constant_from_buffer): + New functions. + * typeck.c (build_chill_cast): Use above new functions to convert + constant expressions. + * typeck.c (copy_novelty), ch-tree.h: New function. + * chill.texi: Update for new constant conversion semantics. + +Tue Jan 25 14:00:02 1994 Wilfried Moser (fs_moser at rcsw1j) + + * ch-decl.c (init_decl_processing): Add new builtin function + DESCR. Add call to build_chill_descr_type. + * ch-expr.c: Add function build_chill_descr_type, which actually + build the type the DESCR builtin returns. + Add function build_chill_descr, which process the DESCR builtin. + * ch-expr.c (build_chill_length): Add code to enable + LENGTH (bitstring). + * ch-expr.ch (build_generalized_call): Add processing of DESCR + builtin. + * ch-grant.c: Add code to avoid producing of unnecessary grant + files. + * ch-tree.h: Add enum for builtin function DESCR. Add prototype + for build_chill_descr. + * ch-inout.c (build_chill_io_list_type): Change generation of the + type passed to runtime library according to the new definition. + * ch-inout.c (build_chill_writetext): Change processing of format + string that a character constant is allowed as format string if + compiler gets called with -fold-strings option. + * ch-inout.c (build_chill_writetext): Change processing of + integers in case NEWMODE x = INT. + * ch-inout.c (build_chill_writetext): Remove processing of ranges. + * ch-inout.c (build_chill_writetext): Add processing of + bitstrings. + +Tue Jan 25 09:07:10 1994 Mike Stump (mrs@cygnus.com) + + * Makefile.in (all, OBSTACK): Build interesting things be default, + and make sure we include OBSTACK. + +Sun Jan 23 12:35:38 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * grant.c (decode_constant): Handle RANGE_EXPR. + Simplify handling of CONSTRUCTOR. + + * typeck.c (build_chill_slice): Use build_chill_array_ref_1, + not build_chill_array_ref. + +Sat Jan 22 16:23:30 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * parse.y: Generate a RANGE_EXPR (instead of a confusing + TREE_LIST) to indicate a range in case and tuple lables. + * actions.c (chill_handle_case_label), convert.c (digest_constructor): + Update accordingly to handle these RANGE_EXPRs. + * satisfy.c (satisfy): Don't call finish_chill_binary_op + for a RANGE_EXPR. + +Fri Jan 21 15:39:36 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * expr.c (force_addr_of): New function, to encapsulate passing + by reference a powerset or string to a library function. + * expr.c (build_min_max, build_set_expr): Use force_addr_of. + * expr.c (chill_expand_expr case CONCAT_EXPR): Fix passing of + rtl modes. (Old code fails on 64-bit Alpha.) + * expr.c (build_chill_function_call): Remove bogues check for + READonly variable passed as parameter. + * expr.c (build_set_expr): Merge common code. + * parse.y (string repetition): Fix logic for 2-pass scheme. + * expr.c (finish_chill_binary_op), grant.c (decode_constant), + satisfy.c (satisfy): Handle REPLICATE_EXPR. + * chill.texi: Fix typo. + +Mon Jan 17 13:55:48 1994 Jim Wilson (wilson@sphagnum.cygnus.com) + + * Makefile.in (INCLUDE): Add -I$(srcdir)/ch so that toplevel + tree.c can find ch-tree.h. + +Sat Jan 15 15:34:11 1994 Mike Stump (mrs@rtl.cygnus.com) + + * configure: Fix problem so that building in a separate directory + works. + +Sat Jan 15 09:51:02 1994 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: Recurse down into runtime to + create its Makefile, and to clean up. + * configure: Recurse into runtime to make its Makefile. + +Sat Jan 15 09:15:22 1994 Bill Cox (bill@rtl.cygnus.com) + + << This set of CHILL frontend sources is now the + maintainable and master set. Accept no substitutes! >> + * Makefile.in, configure: Completely rewritten + to be invoked by gcc/Makefile.in and + gcc/configure. + * addtest (update_ChangeLog): Fix insertion + of the '*'. + * regression.sh: Add global option to suppress results of + proprietary tests. + * cpy.sh: Add necessary edits to files as they + are copied down. + * actions.c, ch-tree.def, ch-tree.h, convert.c, + decl.c, except.c, expr.c, grant.c, inout.c, + lang.c, lex.h, lex.l, loop.c, parse.y, + satisfy.c, tasking.c, typeck.c: Latest + versions from the repository. + +Fri Jan 14 12:28:39 1994 Bill Cox (bill@rtl.cygnus.com) + + * addtest: Fix insertion of line into ChangeLog. + * configure: Add a script. + * Makefile.in: Hack from ../Makefile.in + * actions.c, convert.c, decl.c, expr.c, grant.c, inout.c, + * lex.l, loop.c, parse.y, satisfy.c, typeck.c: Latest sources. + +Mon Jan 10 11:38:07 1994 Bill Cox (bill@rtl.cygnus.com) + + * build-release: Rewrite for easier tailoring. + +Wed Jan 5 08:38:21 1994 Bill Cox (bill@cygnus.com) + + * actions.c, convert.c, decl.c, except.c, expr.c, + inout.c, loop.c, parse.y, satisfy.c, typeck.c: + Current versions from devo/gcc. + +Wed Dec 29 14:07:10 1993 Bill Cox (bill@rtl.cygnus.com) + + * addtest: Don't add comment headers to source or .dat files + if they're already present. + +Wed Dec 29 13:15:11 1993 Bill Cox (bill@rtl.cygnus.com) + + * mktg_leads: New file. + * regression.sh, regression.awk2: Updated status report scripts. + * addtest: New script to add a test to a directory. + * ch_makedepend: Add full path to ch_decomment. + * actions.c, convert.c, decl.c, expr.c, grant.c, inout.c, + lex.l, loop.c, parse.y, satisfy.c, tasking.c, typeck.c: + Updated copies of actual sources. + * chill.brochure, chill.texi: Update with current status. + * cpy.sh: Script for updating copies of sources. + * chill.patches: New script for creating a patch release. + Pretty rough. + +Wed Dec 8 09:35:54 1993 Bill Cox (bill@rtl.cygnus.com) + + * build-release: Delete lots of unused regression-testing cruft. + * chill.brochure: Initial draft of marketing brochure. + * chill.patches: Preliminary script for building patch sets + for CHILL. + * tcov.awk, tcov.el, tcov.sh: New files. Script, tools for + building a tcov report on the CHILL compiler. + +Sun Nov 21 08:34:33 1993 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: Adjust gperf rule for names in this directory. + * ch_decomment.l: New file. Ignores CHILL comments. + Executable is used bu ch_makedepend. + * ch_makedepend: New script. Makes CHILL dependencies for + Makefiles. + * gperf, hash.h: New files about lexer tokens. + * regression.sh: Delete notes justifying non-summing + report rows. + * regression.awk2: Report PRMS status when there are + missing test results. + * regression.awk3: Add #! line, so this can be used separately. + * Other files: latest versions copied from devo/gcc. + +Sat Oct 30 15:02:24 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * chill.texi: Add new node about conversions. + +Fri Oct 29 14:17:31 1993 Bill Cox (bill@cygnus.com) + + * chill.regress.cron: Change path to executable, enable PR report. + * regression.awk2: Add terminating periods to messages. + * regression.sh: Change path to testsuites. Add disclaimer at end + of report. Print explicit lists of resolved/unresolved PRs. + +Thu Oct 28 09:22:20 1993 Bill Cox (bill@rtl.cygnus.com) + + * regression.sh: More PR-related status is printed. + +Thu Oct 21 19:24:02 1993 Bill Cox (bill@rtl.cygnus.com) + + * regression.sh: Simplify the paths, make the source + and test files accessed separately from the executables. + +Wed Oct 20 16:35:30 1993 Bill Cox (bill@rtl.cygnus.com) + + * regression.sh: Finally fix the file-delete problem. + Thanks, Jeffrey! + * build-release: Make more verbose, fix comment. + +Mon Oct 18 00:21:24 1993 Bill Cox (bill@cygnus.com) + + * regression.sh: Build linker if -U option. Put stderr + into make.log files, too. Also report on Z.200 examples. + * regression.awk3: New script to help build release note. + +Fri Oct 15 16:33:54 1993 Bill Cox (bill@cygnus.com) + + * regression.sh, regression.prpt: Output PR status only + conditionally. Add command-line flag for CVS updates. + +Thu Oct 14 07:53:59 1993 Bill Cox (bill@rtl.cygnus.com) + + * regression.sh: Count PRs accurately. + * Makefile.in: New file. + +Sat Oct 9 19:46:58 1993 Bill Cox (bill@rtl.cygnus.com) + + * regression.awk?: Add program fragments for + report of PRMS/test exceptions. + * regression.sh: Add options and PRMS reports. + +Fri Oct 8 06:44:41 1993 Bill Cox (bill@rtl.cygnus.com) + + Create chill frontend directory, populate it. + Later, the chill-specific frontend files will be moved here. + + * chill: Moved here from gcc directory. + * chill.regress.cron: Add crontab file for regression tests. + * regression.sh: Add regression test control script. + +# +# What follows is a copy of the former devo/gcc/ChangeLog.Chill file, +# +Sat Jan 15 14:54:07 1994 Bill Cox (bill@rtl.cygnus.com) + + * ch-*.*: All of these files are now moved to the ch subdirectory. + Further update changes should be recorded in the ch/ChangeLog file. + +Fri Jan 14 21:09:44 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * c-typeck.c, ch-actions.c, ch-convert.c, ch-decl.c, ch-except.c, + ch-satisfy.c, ch-typeck.c: Undo all of initializer-related changes + that Tiemann did earlier this month. + * c-typeck.c (really_start_incremental_init): Save + constructor_elements and (old value of) constructor_stack + on constructor_stack, to allow for nested initializers. + * ch-convert.c (digest_constructor): If we need a varying + array, and have a constructor (for the array elements), + make sure to use convert so that the constructor gets + wrapped in an implicit record constructor. + * ch-decl.c (do_decl): If there is no initializer for a + varying array (or bitstring), create default constructor. + + * ch-expr.c (build_chill_lower): Fix thinko for ARRAY_TYPE. + * ch-satisfy.c (safe_satisfy_decl): Make sure that we make + original decl to check if we need to make an rtl. + + * ch-typeck.c (build_chill_array_ref_1), ch-tree.h: New function + which does the actual work for build_chill_array_ref (which + now just loops over an argument list). + * ch-actions.c, ch-expr.c, ch-inout.c: Use build_chill_array_ref_1 + instead of build_chill_array_ref where appropriate. + * ch-actions.c, ch-expr.c, ch-typeck.c: Make operand 1 of a + VARY_ARRAY_REF is a single index, not an index list. + + * ch-grant.c (__init_list): Renamed to _ch_init_list, to + avoid a conflict on the Alpha. + +Wed Jan 12 10:19:35 1994 Bill Cox (bill@rtl.cygnus.com) + + * ch-lex.l (WS): Add BS, VT and CR to definition of + whitespace. + (convert_number): Allow for uppercase hex digits. + +Tue Jan 11 19:43:55 1994 Bill Cox (bill@cygnus.com) + + * ch-actions.c (lookup_and_handle_exit): Correct + conditional so error messages are output. + * ch-expr.c (build_chill_addr_expr): Add error message. + * ch-grant.c (chill_finish_module_code): Avoid abort by + giving the init_list constructor a type. + (chill_finish_compile): Delete unused code. + * ch-lex.l: Make most build_init_2 calls from the + permanent obstack, so that enumeration values endure. + * ch-loop.c (build_chill_iterator): Add several error + messages. + +Tue Jan 11 12:31:55 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-expr.c, ch-typeck.c: Rewrite some instances of + 'struct ch_class class = chill_expr_class (expr);' to + 'struct ch_class class; class = chill_expr_class (expr);' + to work around a bug in /usr/ucb/cc on SunOS4. + +Mon Jan 10 18:29:36 1994 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (chill_convert_for_assignment): Avoid seg fault. + * ch-expr.c (expand_packed_set): Add new parameter to pass + set's minimum ordinal value. Fix loop invariant problem. + (fold_set_expr): Change to add new parameter to + expand_packed_set call. + * ch-grant.c: Move extern declaration to ch-tree.h. + * ch-lex.l (convert_bitstring): Also output the bitstring + if yydebug is set. + * ch-tree.h: Add prototype. + +Mon Jan 10 11:29:41 1994 Bill Cox (bill@rtl.cygnus.com) + + * ch-inout.c: Fix comment. + * ch-tree.h: Add prototype. + +Sun Jan 9 18:22:22 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-tree.h (chill_expr_class): New prototype. + * ch-expr.c (build_chill_pred_or_succ, build_chill_unary_op): + Convert result to correct class. + * ch-expr.c (build_chill_repetition_op): Preserve CH_DERIVED_FLAG. + Also, fix some bugs for bitstrings (with ranges). + + (Patches from Tiemann.) + * ch-convert.c (convert1): New function to force TREE_TYPE. + (convert): Use convert1 where appropriate. + * ch-typeck.c: Formatting change. + * ch-parse.y (build_chill_constructor): Fix thinko. + + * ch-expr.c (varying_to_slice): If array is not referable, + call save_expr on it, rather than stabilize_reference. + * ch-satisfy.c (safe_satify_decl, for CONST_DECL): + Don't force value to value class if mode is not explicitly + specified. Also, make sure convert etc is only done once. + +Sat Jan 8 16:37:10 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-decl.c (build_chill_function_type): Don't call + build_function_type, because it does hash canonicalization, + which once in a while looses badly. + * tree.c (build_function_type): Remove no-longer-needed test + for doing_chill_thang. + + * ch-tree.h (CH_DERIVED_FLAG): New flag. + * ch-tree.h (enum ch_expr_class): Renamed to ch_class_kind. + (struct ch_class): New type, used to represent a Chill + 'class' as a first-class value. + (CH_ROOT_RESULTING_MODE): Replaced by CH_ROOT_RESULTING_CLASS. + * ch-typeck.c (chill_expr_class): Change interface to return + a struct ch_class. + (chill_compatible, chill_compatible_classes): Update accordingly. + (chill_root_resulting_mode): Replace by .... + (chill_root_resulting_class): ... new function. + * ch-convert.c (convert_to_class): New function. + * ch-decl.c (layout_enum): Mark enum values with CH_DERIVED_FLAG. + * ch-lex.l (string_or_int): Rename to string_or_char. + * ch-lex.l (build_chill_string, string_or_char, convert_bitstring, + convert_float, convert_number): Set CH_DERIVED_FLAG for literals. + * ch-expr.c (finish_chill_binary_op): Use convert_to_class. + * ch-satisfy.c (safe_satisfy_decl): For CONST_DECL, make sure + DECL_INITIAL gets set to result of convert. + Also, clear CH_DERIVED_FLAG for SYN value. + * expr.c (store_constructor): If a [power]set is exactly one + word long, use single-word move. + +Sat Jan 8 08:38:29 1994 Michael Tiemann (tiemann@blues.cygnus.com) + + * c-typeck.c (chill_initializer_constant_valid_p): Fix typo. + +Wed Jan 5 05:18:46 1994 Michael Tiemann (tiemann@blues.cygnus.com) + + * ch-typeck.c (build_chill_slice_with_length): Test that ARRAY is of + ARRAY_TYPE before assuming so. Also, subtract 1 from LENGTH in + computation of SLICE_END. + + * ch-typeck.c (chill_location): Treat CONSTRUCTORs like STRING_CSTs. + + * ch-expr.c (build_chill_indirect_ref): Handle MODE == NULL_TREE. + + * ch-expr.c (fold_set_expr): Handle OP1 == NULL_TREE (which happens + for unary set operations). + + * ch-expr.c (build_chill_array_expr): Take new argument FORCE. All + callers changed. All callers changed. + + * ch-convert.c (digest_structure_tuple): Handle SELECTED_VARIANT + being NULL_TREE until we've started walking the list of values via + the loop over VARIANTs. + + * ch-parse.y (build_chill_constructor): If we see an IDENTIFIER_NODE, + treat it as an enum value (and hence constant). Also, only set + TREE_STATIC if the constructor is indeed constant. + * c-typeck.c (chill_initializer_constant_valid_p): If we see a + VAR_DECL, test the TREE_CONSTANT field of the DECL_INITIAL, don't + recurse on the DECL_INITIAL. + +Wed Jan 5 01:24:50 1994 Bill Cox (bill@cygnus.com) + + * Makefile.in: Add CHILL to LANGUAGES variable. + * ch-actions.c (check_range): Call build_binary_op instead of + fold, build to get the common types chosen. + (cond_range_exception, cond_overflow_exception, + cond_type_range_exception): Delete, obsolete. + (chill_convert_for_assignment): Enable this, get particular + about when to generate rangecheck code. + * ch-expr.c (build_chill_function_call): Sketch in where to + perform chill_convert_for_assignment on actual parameters. + (build_chill_addr_expr): Correct compiler warning. + * ch-loop.c (build_chill_iterator): Add runtime check for + negative loop step expression. + * ch-tree.h: Add prototype. + * ch-typeck.c (chill_max_vary_array_ref): Correct misunderstanding. + A varying array's length field counts the NUMBER of active array + array entries, not the byte-length of them. + +Tue Jan 4 17:57:39 1994 Michael Tiemann (tiemann@blues.cygnus.com) + + * ch-decl.c (do_decl): Call `suspend_momenary' if the + converted constructor must live on the permanent_obstack. + * ch-convert.c (convert): When building a new SET_TYPE + constructor, re-set the TREE_CONSTANT and TREE_STATIC bits. + * c-typeck.c (chill_initializer_constant_valid_p): Handle VAR_DECLs. + + * ch-typeck.c (chill_location): CONSTRUCTORS that are static + are locations. + * ch-satisfy.c (safe_satisfy_decl): Convert DECL_INITIAL of CONST_DECL + on permanent_obstack if necessary. + + * ch-convert.c (digest_structure_tuple): When building a new SET_TYPE + constructor, re-set the TREE_CONSTANT and TREE_STATIC bits. + + * ch-decl.c (do_decl): Fix handling of REFERENCE_TYPEs which + the patch below helped to mess up. + + * ch-expr.c (build_chill_arrow_expr): Call `mark_addressable'. + (build_chill_addr_expr): Take new argument ERRORMSG. + All callers changed. Also, call `build_chill_addr_expr' where + we used to call `build1 (ADDR_EXPR, ptr_type_node, ...)' since + that now calls `mark_addressable' automagically. + + * ch-decl.c (do_decl): Keep OPT_INIT in DECL_INITIAL if possible. + This is needed because variables may appear in initialization + statements, and their DECL_INITIALs are their values at + initialization time. + * ch-convert.c (digest_structure_tuple,digest_constructor): Changed + to handle VAR_DECLs as initializers. + + * ch-convert.c (digest_structure_tuple): Copy elements of INITS so + they aren't destroyed for later use. + +Tue Jan 4 15:25:30 1994 Bill Cox (bill@cygnus.com) + + * ch-expr.c (chill_expand_expr): Correct check-range lo_limit + parameter for varying_array_ref calculations. + (build_chill_indirect_ref): Prevent seg fault due to syntax error. + * ch-typeck.c (build_chill_slice_with_range): Correct issuance + of bogus error in votrics. + (build_chill_slice_with_length): Change for debug tracability. + +Tue Jan 4 02:43:37 1994 Michael Tiemann (tiemann@blues.cygnus.com) + + * ch-convert.c (digest_structure_tuple): Fix phasing problem in + handling variant record initializers. + (various places): Change `pop_init_level' calls to match + `push_init_level' wrt implicit variable. + + * ch-typeck.c (build_chill_slice): Convert the dynamic max index to + `integer_type_node' before using it in comparisons. FIXME: should + this be done in `chill_max_vary_array_index' by default? + +Tue Jan 4 00:24:14 1994 Bill Cox (bill@cygnus.com) + + * ch-actions.c: Fix comments. + * ch-parse.y: Define caseaction_flag. + (caseaction): Create new caseaction_flag node at the start, + then free it at the end. Check it before the ELSE code. + (expanded_case_label): Check the flag here. If set in either + place, generate a jump to the end of the case. + * ch-typeck.c (build_chill_slice_with_length, + build_chill_slice_with_range): Add lots of compile-time + parameter range checking. + +Mon Jan 3 21:49:04 1994 Michael Tiemann (tiemann@blues.cygnus.com) + + * ch-convert.c (digest_structure_tuple): Call `push_init_level' with + implicit==0 everywhere, not 1. + (digest_constructor): Ditto. + + * ch-actions.c (check_range): Permit limits to be NULL_TREE. + Also, hack out some dead code. + * ch-typeck.c (build_chill_slice): Check varying and non-varying + slice constructs for range failures. + (build_chill_slice_with_range): Reindented, but not changed. + + * ch-typeck.c (chill_max_vary_array_index): New function. + * ch-expr.c (chill_expand_expr): Call it. + + * ch-decl.c (var_data_id, var_length_id): New variables. + (init_decl_processing): Initialize them. All calls to + get_identifier (VAR_LENGTH or VAR_DATA) are now replaced + by references to these variables. This simplifies the code + w/o obscuring anything. + +Mon Jan 3 21:24:44 1994 Bill Cox (bill@cygnus.com) + + * c-typeck.c: Fix comment. + * ch-actions.c (chill_expand_assignment): Error assigning to + READONLY location. (PR_3903) Pass filename, linenumber + to setbitpowerset runtime routine. + * ch-decl.c (init_decl_processing): Add filename, linenumber + parameters to setbitpowerset prototype. + * ch-expr.c (build_chill_function_call): Error when passing a + READonly location as a LOC or INOUT parameter. + * ch-parse.y (mode): Correct code marking type as readonly. + +Mon Jan 3 19:03:55 1994 Michael Tiemann (tiemann@blues.cygnus.com) + + * ch-actions.c (chill_expand_assignment): Disable code that defeats + building varying array references. + * ch-expr.c (chill_expand_expr): Add rangecheck code to + VARY_ARRAY_REF case. + * ch-typeck.c (build_chill_array_ref): Don't call an `expand_' + function (in this case, `validate_varying_array_ref') when we're + doing a `build_' operation. + + * ch-typeck.c (validate_varying_array_ref): Simplify interface + since INDEX parameter can never meaningfully be an INDEXLIST. + * ch-actions.c (expand_varying_length_assignment): Caller changed. + +Mon Jan 3 07:29:45 1994 Michael Tiemann (tiemann@blues.cygnus.com) + + * ch-typeck.c (build_chill_cast): Set TREE_CONSTANT on NOP_EXPRs. + * ch-convert.c (digest_structure_tuple): Switch to permanent_obstack + if we need to build a CONSTRUCTOR for a SET_TYPE initializer. + (digest_structure_tuple): If TREE_VALUE (VALUE) == NULL_TREE, don't + call CH_COMPATIBLE or try to convert it to TREE_TYPE (FIELD). This + can happen when constructors are output incrementally. + * c-typeck.c (initializer_constant_valid_p): Handle SET_TYPEs. + * varasm.c (output_constant): Handle NOP_EXPRs in SET_TYPE + CONSTRUCTORS. + +Sun Jan 2 08:17:09 1994 Michael Tiemann (tiemann@blues.cygnus.com) + + * ch-convert (digest_structure_tuple): Handle SET_TYPEs. Also, call + `convert' so we can handle INSTANCE types (and other anomolies) + correctly. + + * ch-convert.c (digest_structure_tuple): Fixed variant + structure initialization. Also fixed a typo (TYPE_NAME + was being used on a FIELD_DECL instead of DECL_NAME). + * c-typeck.c (initializer_constant_valid_p): Pass missing + ENDTYPE argument on recursive call. + (set_init_field): New function, needed by ch-convert.c change above. + + * ch-decl.c (layout_chill_variants): Added a FIXME next to an + almost certain typo. + + * ch-expr.c (build_chill_arrow_expr): Call `build1' and set + TREE_CONSTANT for static references. + * ch-except.c (chill_start_on): Change calls to + `build_unary_op' (which is C-specific) to `build_chill_arrow_expr' + which has CHILL semantics. + * ch-convert.c (convert): Ditto (albeit in some disabled code). + +Sat Jan 1 21:26:43 1994 Michael Tiemann (tiemann@blues.cygnus.com) + + * ch-satisfy.c (safe_satisfy_decl): Reorder conditional test of + TREE_CODE of DECL in case it's altered by actions in the switch. + + * ch-satisfy.c (satisfy): Undo abort added earlier on 1 Jan. CVS log + mentions where to find code that triggers this case. + + * ch-actions.c (adjust_parm_or_field): Handle CONSTRUCTORS here as + well. + + * ch-convert.c (digest_structure_tuple): Push to permanent_obstack if + we're dealing with a CONSTRUCTOR that is TREE_PERMANENT. + (digest_constructor): Ditto. + +Sat Jan 1 10:29:19 1994 Michael Tiemann (tiemann@blues.cygnus.com) + + * ch-parse.y (handleraction,resultaction,assignaction,call): Modified + so that CONSTRUCTORS are properly handled before being used. + + * ch-convert.c (chill_start_init): New function. All callers to + `start_init' changed to call this function instead. + (digest_struct_tuple): Defend against initialization machinery + mucking with CONSTRUCTOR_ELTS of CONSTRUCTORs by grokking both + IDENTIFIER_NODEs and FIELD_DECLs in the TREE_PURPOSE slots. This is + needed because CONSTRUCTORS stored in DECL_INITIALs of CONST_DECLs + can be refered to throughout the compilation unit. Also remove an + extraneous call to `process_init_element' erroneously added to the + variant record sub-loop. + (digest_constructor): Propagate TREE_CONSTANT and TREE_STATIC to + CONSTRUCTORS of SET_TYPE. + * ch-parse.y (build_chill_constructor): Refix typo. Also set + TREE_STATIC if at top level. + + * ch-expr.c (build_chill_arrow_ref): Fix yet another case of + TREE_CONSTANT not being set by calling `build1' when `build_unary_op' + should have been called. + + * ch-convert.c (digest_struct_tuple): Restore code which tracks + field initializations so that the compiler can deduce what variant + initializations to assume. + + * ch-satisfy (safe_satisfy_decl): Turn on initialization machinery + when we push into a scope that has a DECL with a CONSTRUCTOR as its + DECL_INIT. + + * ch-parse.y (build_chill_constructor): Change the name of the + parameter to something more meaningful. Fix typo. Also, handle case + where element is an untyped CONSTRUCTOR. + + * ch-except.c (finish_handler_array): Set TREE_CONSTANT on + constant ADDR_EXPRs. + (chill_start_on): Call `build_unary_op' to set TREE_CONSTANT + on JBUF_REF (instead of calling `build1' which does not). + + * ch-convert.c (convert): Test LENGTH instead of NEEDED_PADDING. + + * ch-typeck.c (chill_expand_tuple): Deleted. + * ch-parse.y (primval rule): Don't call `chill_expand_tuple'; + instead, use initialization machinery for CONSTRUCTORS that + come through here. + * ch-except.c (finish_handler_array): Ditto for CONSTRUCTORS + that are created here. + * ch-satisfy (satisfy): Abort in case we would have called + chill_expand_tuple. FIXME: some other code is needed here, + but I don't know what yet. + + * ch-parse.y (build_chill_constructor): New function to + propagate TREE_CONSTANT bits to CONSTRUCTORS. + (untyped_expr rule): Use it. + (primval rule): Use it. + + * ch-decl.c (do_decl): Call `finish_init'. + * ch-convert.c (convert): If we spontaneously create a CONSTRUCTOR in + this function, make sure the initialization machinery is set up. + + * ch-convert.c (digest_structure_tuple, digest_constructor): Add + missing prototypes. + +Fri Dec 31 11:31:01 1993 Michael Tiemann (tiemann@blues.cygnus.com) + + * ch-grant.c (chill_finish_module_code): Mark ADDR_EXPR built by hand + as being TREE_CONSTANT. Otherwise it gets bounded by the initializer + code. + + * ch-decl.c (do_decl): Change in CONSTRUCTOR handling due to... + * ch-convert.c (digest_structure_tuple,digest_constructor): Mostly + rewritten to work with GCC's initialization code. The basic change + was to keep the initializers in sync with the initialization + machinery that `process_init_element' imposes. Both of these + functions now return `void'. + * ch-convert.c (convert): Changed calls to `digest_...' functions. + + FIXME: the code handling UNION_TYPE (and variant records) has not + been tested yet. + +Fri Dec 31 15:32:56 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-lex.l (convert_number): Output the converted number if + yydebug is enabled. + * ch-parse.y (signaldef): Set ignore_exprs correctly for a + SIGNAL declaration. + +Fri Dec 31 13:17:48 1993 Bill Cox (bill@cygnus.com) + + * ch-parse.y: Cleanup handling of RETURN actions, to distinguish + a RETURN without a value (which cannot have an exception + handler) from a RETURN with a value (which can). Eliminate + some shift/reduce and reduce/reduce conflicts. + +Thu Dec 30 17:42:32 1993 Michael Tiemann (tiemann@blues.cygnus.com) + + * ch-inout.c (build_chill_writetext): Deal with 2 cases where + types returned from `type_for_size' are not expected. FIXME. + * ch-decl.c (init_decl_processing): Mark `char_type_node' unsigned. + This is required when range checking is enabled. + +Thu Dec 30 14:28:25 1993 Bill Cox (bill@rtl.cygnus.com) + + DELAY CASE works now. + * ch-decl.c (init_decl_processing): Move rest of tasking-related + initialization into tasking_init(). + * ch-parse.y (delaycaseaction): Pervasive additions/corrections. + (optsetprio): New non-terminal. + * ch-tasking.c (get_task_name): Delete, obsolete. + (build_instance_type): build pointer to instance type also. + (build_receive_case_start): Cleanup per -Wall messages. + (build_receive_case_label): Move between start and end functions. + (build_delay_case_start): Pass SET name and priority also. + Generally update to correct functioning. + (build_delay_case_label): Move between start and end fucntions, + correct its functioning. + (build_delay_case_end): Correct the code. + (tasking_init): Lots of tasking-related code moved here from + init_decl_processing. + * ch-tree.h: Update, add prototypes. + +Wed Dec 29 10:13:10 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-expr.c (build_chill_indirect_ref): Revert change which + failed full regression testing. + * ch-lex.l (name_type_signal): Add debug output. + * ch-parse.y (structured_variable): Add a debug variable. + +Wed Dec 29 02:05:51 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (get_next_decl): Revert change which failed full + regression testing. + +Tue Dec 28 18:20:14 1993 Bill Cox (bill@rtl.cygnus.com) + + DELAY actions work now. + * ch-decl.c: Correct spelling in comments. + (get_next_decl): NULL out the decl's TREE_CHAIN before returning + it, to prevent accidental access to the remembered_decls. + (init_decl_processing): Add wait_event to runtime functions. + * ch-expr.c (build_chill_indirect_ref): Prevent a syntax error from + becoming a seg fault. + * ch-grant.c: Correct a comment. + * ch-loop.c: Delete/correct comments. + * ch-parse.y (delaycaseaction): Add push/poplevel calls. Turn 'sorry' + into rough draft of actual code. + (delayaction): Don't make a new scope here, use get_unique_identifier + instead. + (locdec): process event decls here, too. + (mode): Add code to forbid READonly EVENT and BUFFER decls. Delete + code which required EVENTs and BUFFERs to be declared at global scope. + (simple_name_string): Add an EVENTNAME. + * ch-satisfy.c (safe_satisfy_decl): Prevent a syntax error from + becoming a seg fault. + * ch-tasking.c (tasking_setup): Add the event queue's max. length + as the 'entry_point' parameter in the list. + (build_receive_case_start, build_receive_case_label): Defer + calling runtime routine until we know whether we have a signal + or a buffer to wait for. + (build_delay_case_start, build_delay_case_end, + build_delay_case_label, build_delay_action, + process_event_decls): Added functions. + * ch-typeck.c (chill_similar): Allow all integers of differing + precisions to be similar. + +Thu Dec 23 18:00:40 1993 Bill Cox (bill@rtl.cygnus.com) + + * gcc.c (CHILL SPECS): Delete references to -M -MM -MD -MMD + options. Delete C-specific defines. Disable piping from + pre-processor to cc1chill (even if -pipe is specified), since cc1chill + rewinds its input for its second pass. Piping still works + from cc1chill to as. + +Thu Dec 23 12:31:55 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-tasking.c (decl_tasking_code_variable): Assure that the + tasking_code variable is allocated on the permanent obstack. + (tasking_setup): Lots of changes - handle EVENT/BUFFER max. + queue length (passed as the entry_point parameter). + Other changes to variable names to increase 'self-documentation' + the only kind GNU CHILL will get, for a while.. + +Wed Dec 22 10:46:31 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (do_seize): Delete - it's unused. Fix comments. + * ch-loop.c (build_chill_iterator): Convert BY expression + so loop involving a SET works. Additional errors generated + for numbered SET expression as start or end expression. + * ch-tree.h: Prototypes for future DELAY functions. + * ch-typeck.c: Standard indentation. + +Tue Dec 21 15:30:57 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-actions.c (build_cause_exception): New function. + (expand_cause_exception): Re-write to use build_cause_exception. + (check_expression, check_range): New functions. + (chill_convert_for_assignment): New function. + * ch-expr.c (build_chill_pred_or_succ): New function. + (build_chill_succ, build_chill_pred): Removed. + (build_generalized_call): Use build_chill_pred_or_succ. + * ch-lex.h, ch-lex.l (init_lex): Add RID_OVERFLOW and RID_RANGEFAIL. + * ch-lex.l (init_lex): Use new macro to make more terse. + * ch-typeck.c (chill_equivalent): New function. + Also check that ranges have the same bounds. + * ch-typeck.c (my_build_array_ref): Add optional range-checking. + * ch-typeck.c (chill_location): Handle COMPOUND_EXPR properly. + Return 2 if also a referable. + * ch-typeck.c (chill_referable): Re-define to use chill_location. + * ch-tree.h (CH_EQUIVALENT): Re-defined to use chill_equivalent. + + * dbxout.c (dbxout_type): Output the type attribute "@S;" to + distinguish a string from a char array, and to distinguish a + bitstring from regulat (power)set. (Needed for Chill.) + * dbxout.c (dbxout_type): Only check for baseclasses in + type.binfo is a vector. (It is used in Chill for tagged unions.) + +Fri Dec 17 09:56:07 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c, ch-convert.c, ch-decl.c, ch-expr.c, + ch-grant.c, ch-inout.c, ch-loop.c, ch-parse.y, + ch-satisfy.c, ch-tasking.c, ch-tree.h, ch-typeck.c: + Fix -Wall problems. + * ch-actions.c (chill_expand_assignment): Error if assigning + a value to a BUFFER or EVENT variable. + * ch-expr.c (invalid_left_operand): Delete, unused. + * ch-grant.c (tasking_setup): Call build_enum_tables. + * ch-inout.c (get_final_type_and_range, build_enum_tables,): + New functions. + (build_chill_writetext): Lots of changes to support other + basic CHILL data types. + * ch-loop.c (build_chill_iterator): Lots of new code to check + the expressions in a STEP loop. + * ch-tasking.c (rc_state): Add fields to flag SIGNAL and BUFFER + names in receivecasealternative. Generate error messages + if they're mixed in the same receive case. + (process_buffer_decl): Renamed from build_buffer_decl. + * ch-tree.h: Fix prototypes. + * ch-typeck.c (smash_dummy_type): Handle all four kinds of LANG_TYPE + correctly. Thanks Per! + +Wed Dec 15 15:05:56 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-decl.c (push_scope_decls): Re-arrange some more, so + that normal SEIZES (without ALL) are handled before SEIZE ALL. + +Wed Dec 15 13:01:22 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-loop.c (declare_temps): Calculate end-of-array pointer + using correct type (NOT chill_integer_type). + (begin_chill_loop): Build loop-bypass expression in the + type of the start expression, not in the unsigned type. + +Tue Dec 14 15:41:32 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-decl.c (push_scope_decls): Re-arrange so that normal + (non-seize) declarations are proclaim_decl'd *before* we + handle the ALIAS_DECLs for seizes. The advantage is + that we can now test for (an approximation) to the + 'seizeable' concept, thus avoiding duplicate definitions + when a module has both GRANTs and SEIZE ALL. + + * ch-expr.c (build_chill_arrow_expr): No longer re-write + addr-of-conversion to pointer-conversion-of-addr. + * ch-expr.c (build_chill_addr_expr): Re-write to just use + build_chill_arrow_expr. + +Mon Dec 13 16:44:43 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-expr.c (build_chill_addr_expr, build_chill_addr_expr): Don't re-write + + * ch-tree.h (chill_root_resulting_mode): Fix typo (missing '_'). + + * ch-expr.c (finish_chill_binary_op): Use CH_ROOT_RESULTING_MODE + macro (which works on expressions), rather than CH_RESULTING_MODE + (which works on modes, and isn't quite correct). + * ch-tree.h (CH_IS_BOUND_REFERENCE_MODE): New macro. + * ch-typeck.c (chill_read_compatible, chill_compatible): + Use the new macro, which handles NEWMODEs of PTR correctly. + * ch-typeck.c (chill_similar): Return 1 rather than 0 for + dynamic-length array (and string) types (e.g. slices). + * ch-typeck.c (chill_root_mode): If the mode has a Novelty, + just return it as is. (This is still not 100% correct for + NEWMODE of RANGEs, but is close enough.) + +Mon Dec 13 16:27:06 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-parse.y (locdec): Avoid passing IDENTIFIER_NODEs to + build_buffer_decl, which then seg faults. + * ch-tasking.c (build_buffer_descriptor): Move declaration + of bufdecl closer to its use. + +Mon Dec 13 14:57:55 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (chill_expand_result): Use expand_expr_stmt + to avoid C-specific conversions. + * ch-lex.l (name_type_signal): Rewrite to support BUFFERs and EVENTs. + * ch-parse.y (sendaction): Delete unused statement, use the 'name' + variable. + * ch-tasking.c: Use expand_expr_stmt to avoid C-specific + conversions. + (build_buffer_decl): Save the tasking_code_variable's decl + in the buffer decl tree. + (build_buffer_descriptor): Real, working version. + +Mon Dec 13 03:13:36 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (print_lang_identifier): Delete code + to print buffer size - it's no longer kept here. + * ch-parse.y (expand_send_buffer): Renamed from + build_send_buffer. + (locdec): Enable building of a buffer decl. + (optresultspec, optresultattr): Add optional + result attributes such as LOC. Semantics + not enabled yet. + * ch-tasking.c (expand_send_buffer): Renamed. + * ch-tree.h (build_send_buffer): Renamed. + * ch-typeck.c (chill_expr_class): Do more complete, + job of classifying expressions. Thanks, Per. + +Mon Dec 13 00:59:30 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-typeck.c (chill_expr_class): Return CH_DERIVED_CLASS + for bitstring constants. + * ch-typeck.c (chill_novelty): The novelty of an (unnamed) + range mode is that of its parent mode; the novelty of READ M + is that of M. + +Sat Dec 11 15:14:41 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-expr.c (varying_to_slice): Call stabilize_reference + rather than save_expr. + * ch-typeck.c (build_chill_slice): Don't emit warning + if array is a SAVE_EXPR (it is effectively referable). + * ch-typeck.c (chill_root_resulting_mode): Handle + correctly the case that one operand is DERIVED and one is VALUE. + +Fri Dec 10 10:00:42 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-grant.c (decode_decl): Restore code mistakenly deleted. + Move instance-handling code to raw_decode_mode. + * ch-parse.y (formpar): Allow READ modifier in SPEC MODULE. + Add rough draft of DELAY statement handling. + * ch-tasking.c (build_event_type): New function. + * ch-tree.h (build_event_type): Add prototype. + * ch-typeck.c (smash_dummy_type): Add buffer & event handling. + +Wed Dec 8 18:02:26 1993 Bill Cox (bill@rtl.cygnus.com) + + Parse and grant BUFFER modes. + * ch-grant.c (raw_decode_mode): Format BUFFER, EVENT modes. + Moved from decode_decl. + * ch-parse.y: Fix several sorry() messages. + * ch-tasking.c (build_buffer_type): Use a LANG_TYPE to pass the + info. + +Wed Dec 8 12:59:54 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-actions.c (chill_expand_assignment): In a multiple + assignment, check that all the targets are equivalent. + + * ch-typeck.c (chill_l_equivalent, CH_L_EQUIVALENT): New function + and macro to (partially) implement the relation l-equivalent. + * ch-typeck.c (chill_read_compatible): Implement at least + initial check of read-only-ness. + * ch-typeck.c (build_readonly_type): Fix thinkos. + +Wed Dec 8 09:11:46 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (pop_module): Only warn about duplicate grant + statements if they inhabit different files, by examining + inode numbers. Only report compatibility problems in pass 1. + * ch-lex.l (chill_same_grant_file): New function to support the + above test. + +Tue Dec 7 17:10:36 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-decl.c (start_chill_function): Handle attributes in pass 1, + rather than in pass 2. (It seems to make more sense that way.) + * ch-parse.y (procedureattr): Build attribute list if pass != 2. + + * ch-parse.y (mode): Don't call build_readonly_type in pass 2. + +Mon Dec 6 14:35:31 1993 Per Bothner (bothner@kalessin.cygnus.com) + + This implements NOVELTY and READONLY checking. + * ch-tree.def: Added comment about use of LANG_TYPE. + * ch-typeck.c (build_readonly_type, smash_dummy_type): New functions. + * ch-tree.h: New prototypes. + * ch-decl.c (push_modedef): If newmode, lazily "copy" the given mode + immediately (even if it's just a type name), using a LANG_TYPE. + * ch-parse.y (mode): Call build_readonly_type to handle READ. + * ch-decl.c (find_implied_types), ch-grant.c (raw_decode_mode), + ch-satisfy.c (satisfy): Handle a LANG_TYPE. + * ch-decl.c: Remove chill_modes_equiv and other unused junk. + * ch-satisfy.c (safe_satisfy_decl/CONST_DECL): Better + mode compatibility checking for SYN declarations. + + * ch-typeck.c (chill_similar): Be more general when checking set + modes for similarity - specifically support calling chill_similar + BEFORE the modes have been satisfied (needed by proclaim_decl). + * ch-decl.c (proclaim_decl): Allow duplicate definitions + of set elements of similar set modes. + + * ch-parse.y (caseaction): Call language-independent + expand_start_case rather than c_expand_start_case (which + doesn't allow chars or booleans). + +Sat Dec 4 22:16:19 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (cond_range_exception, + cond_type_range_exception): Check command-line flag before + generating code. Fix comments. + * ch-expr.c (build_chill_num): Add generation of OVERFLOW + code, commented out. + * ch-loop.c (build_chill_iterator): Comment out + exception code generation. + * ch-parse.y: Delete quasi_signal flag, use + current_module->is_spec_module instead. + * ch-tasking.c (build_buffer_decl, build_buffer_descriptor): + Delete quasi_decl flag. Look at current_module + instead. + * ch-tree.h: Take quasi_decl flag out of buffer + related prototypes. + * ch-typeck.c (valid_array_index, chill_similar): + Comment out runtime range checking for now. + * expr.c (store_constructor): Fix word-size set problem. + * varasm.c (emit_set_data): Fix word-size set problem. + +Wed Dec 1 19:08:12 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c: Delete unused prototype for build_compound_expr. + * ch-loop.c (begin_chill_loop): Convert operands of the conditional + expression to lp->iter_type before expanding it. Prevents an abort + deep in expand_expr and friends. + +Wed Dec 1 17:00:44 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (chill_expand_assignment): Comment out strange + test and its error message. + * ch-loop.c (begin_chill_loop): Correct call to generate conditional + jump around the loop. + * ch-typeck.c (build_chill_slice): Call correct temporary generator. + +Wed Dec 1 14:19:51 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (cond_exception): Clarify that it generates + an exception if the given expression is TRUE. Make it so, Number One. + * ch-decl.c (DOLLARS_IN_IDENTIFIERS): Disable these. + (print_lang_type): Print max queue size. + Add casts to DECL_TASKING_CODE_DECL references. Fixes a + portability problem. + (init_decl_processing): Add filename and linenumber arameters + to tasking and memory-allocate runtime prototypes. + * ch-expr.c (finish_chill_binary_op): Check for division + by a constant zero. Replace build_temporary_variable + calls with decl_temp1 calls, to decouple from ch-loop.c. + (build_chill_succ, build_chill_pred): Sketch code to generate + exceptions. Add error check for numbered set. + (build_generalized-call): Correct call for return_memory. + Standardize whitespace before left parens. + * ch-grant.c: Use new macro for checking for BUFFER mode. + * ch-lex.l (name_type_signal): Add attempts to recognize BUFFER + and EVENT names. + * ch-loop.c (build_temporary_variable): Make static, unavailable + to outsiders. + (declare_temps): Make user's variable for him/her, in the + true Z.200 case, where it hasn't previously been declared. + (begin_chill_loop): simplify control flow a bit. + * ch-parse.y (quasi_locdec): Set/reset quasi_flag. + (rccase_label): Delete bogus error checks. Rough draft of + BUFFER-related code. + (assertaction): Remove logical negation - it's now in cond_exception. + (locdec): Sketch of buffer-related code. + (non_array_mode): Add EVENT and BUFFER modes here. Add setting of + set-numbered flag for pred and succ functions. + (optqueuesize): Default to integer_zero_node. + (simple_name_string): Add BUFFERNAME. + * ch-tasking.c: Add casts to DECL_TASKING_CODE_DECL references. + (build_chill_start_process, expand_send_signal, + build_receive_case_start, build_send_buffer): Add filename, linenumber parameters + to tasking-related runtime calls. Sketches of BUFFER mode + processing. + * ch-tree.h: Remove left-hand-side cast in DECL_TASKING_CODE_DECL + macro, for portability to non-gcc compilers. Add prototypes + for buffer-related functions. + * ch-typeck.c: Replace build_temporary_variable calls with + decl_temp1 calls, to decouple from ch-loop.c. + (chill_similar): Add tests for BUFFER and EVENT modes. + +Wed Dec 1 14:05:26 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-actions.c (malloc prototype): Remove; can cause conflicts. + +Wed Dec 1 09:49:58 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-grant.c (raw_decode_mode): Process a REFERENCE_TYPE. + +Tue Nov 30 14:05:23 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (init_decl_processing): Add filename, line number + parameters to tasking-related runtime routines. + * ch-grant.c (decode_decl): Check for BUFFER mode differently. + * ch-parse.y (BUFFER_CODE, EVENT_CODE): Move token to + lex-only list. + (quasi_locdec): Set/reset quasi_decl flag. + * ch-tasking.c (build_start_process, expand_send_signal, + build_receive_case_start, build_send_buffer): Add filename. linenumber to + (build_buffer_decl, build_buffer-type): New rough-draft functions. + generated runtime routine call. + * ch-tree.h (CH_IS_BUFFER_MODE, CH_IS_EVENT_MODE): New macros + to mark a synchronization mode. Update the prototypes. + * ch-typeck.c (chill_similar): Check EVENT or BUFFER modes for + similarity. + +Tue Nov 30 09:51:47 1993 Doug Evans (dje@canuck.cygnus.com) + + * cccp.c (main): Add missing chill sanitization. + +Sun Nov 28 15:50:10 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-loop.c (initialize_iter_var): Build count expression + more robustly. + (bottom_loop_end_check): Call emit_line_note. + (end_chill_loop): Delete emit_line_note call. + * ch-parse.y (doaction): Move DO keyword + after end_chill_loop call. + +Wed Nov 24 08:49:07 1993 Bill Cox (bill@rtl.cygnus.com) + + * c-typeck.c (c_expand_start_case): Back out previous + change. + +Tue Nov 23 12:33:50 1993 Bill Cox (bill@rtl.cygnus.com) + + * c-typeck.c (c_expand_start_case): Allow any CHILL discrete + type as a CASE label. + +Tue Nov 23 11:37:42 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-decl.c (grok_chill_variantdefs): Use NULL as the name + of variant fields (not __CASE or anything based on it). + * ch-decl.c (handle_one_parent), ch-expr.c (compare_records): + Don't check for field name __CASE. + +Tue Nov 23 09:37:54 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (grok_chill_variantdefs): Use a unique dummy + name for the FIELD_DECL. + * ch-parse.y (optstartset): More error tests. + * ch-tasking.c (make_process_struct): Only report error in pass 1. + (build_start_process): Remove bogus restriction, allowing + an INSTANCE expression as the optset parameter. + +Mon Nov 22 17:56:34 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-tree.h (expand_function_end): Now is takes parameters, not 2. + * ch-decl.c (finish_chill_function): Add 3rd parameter to + call of expand_function_end. + + * ch-expr.c (chill_expand_expr): For set and strings ops, + if target is in a register, use a stack temporary (since we must + take its address). (Similar to Oct 29 change for store_constructor.) + * ch-expr.c (resolve_component_ref): Fix variant field lookups. + +Mon Nov 22 14:23:13 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-expr.c (chill_expand_expr): Assure that emit_library_call + parameter 1 and its mode are always in sync. + (build_chill_pred, build_chill_succ): Allow pred/succ of a + pointer. + * ch-loop.c (chill_unsigned_type): New function, used instead of + unsigned-type, since it understands the chill_integer_type. + (decl_iteration_var): Delete, use build_temporary_variable + instead. + (declare_temps): Use lp->iter_type for the temp evaluations. + (initialize_iter_var): More careful calculation, to handle + MININT to MAXINT loops w/o overflow/underflow. + (begin_chill_loop): Use the original start/end expressions + for the loop bypass test. + +Mon Nov 22 14:02:06 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-typeck.c (build_chill_slice): If the argument is + is constant, use a read-only static variant, as the + existing algorithm assumes addressability. + * ch-typeck.c (chill_compatible): De-reference reference types. + * ch-typeck.c (layout_chill_range_type): Set TREE_UNSIGNED. + +Sat Nov 20 20:17:15 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (init_decl_processing): Add filename + and linenumber to allocate, free memory calls. + * ch-expr.c (build_allocate_memory_call, + (build_allocate_global_memory_call): Add + filename, linenumber to call. + * ch-loop.c: Complete rewrite for maintainability. + +Sat Nov 20 17:30:05 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-except.c: Make it so that (by default at least) the + code to push/pop the __exceptionStack is done using library + functions __ch_link_handler and __ch_unlink_handler. This + provides better flexibility (for e.g. multi-threading). + + * ch-decl.c (layout_chill_variants): Allow (useless) selectors + even for tag-less variants. + +Fri Nov 19 14:32:20 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (init_decl_processing): Add memmove builtin + function definition. + * ch-actions.c (chill_expand_array_assignment): Use memmove + call to copy an array or slice across the assignment. + +Wed Nov 17 18:23:15 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-satisfy.c (satisfy): If a CONTRUCTOR already has a + TREE_TYPE, temporarily clear it before calling chill_expand_tuple, + to force expansion (processing of the elements). + * ch-grant.c (decode_constant): If a tuple (CONTRUCTOR) has + a mode, write it out. + * ch-decl.c (init_decl_processing): Add some missing inits. + +Wed Nov 17 17:13:20 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-loop.c: Fix unterminated strings in design comments. + Add enumeration to the iterator structure for type of loop. + unused for now. + +Wed Nov 17 16:40:05 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (init_decl_processing): Add long parameters to lots + of powerset runtime routines. + * ch-expr.c (chill_expand_expr): Change parameters to powerset + runtimes so bitlengths are long unsigned ints. + * ch-inout.c (build_chill_writetext): Add filename and linenumber + as runtime parameters, for better error messages. + * ch-loop.c: general pre-rewrite cleanup. + * expr.c (store_constructor): Rewrite set interface to + setpowersetbits for long bitnumbers, rather than shorts. + +Tue Nov 16 13:41:12 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-expr.c (build_chill_function_call): Stop generating empty + copyback statements, which lead to a seg fault. + +Tue Nov 16 12:20:17 1993 Per Bothner (bothner@cygnus.com) + + * ch-satisfy.c (satisfy): If satisfying a type whose + TYPE_MAIN_VARIANT is not itself, also satisfy the TYPE_MAIN_VARIANT. + * ch-actions.c (build_exception_variant): Remove some crud. + * ch-actions.c (build_exception_variant), ch-tree.h, ch-decl.c: + Remove unused first argument. + * ch-decl.c (start_chill_function): Call build_exception_variant + in pass 1, not in pass 2. + +Tue Nov 16 11:10:03 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (shadow_record_fields): Call new function + build_chill_arrow_expr, which returns a ptr-to-a-type. + * ch-expr.c (build_chill_arrow_expr): New function, works like + build_chill_addr_expr used to do, returning a typed ptr. + (build_chill_addr_expr): Now returns unbound ref - analogous + to C 'void *'. + * ch-parse.y (PREDEF_MODEDECL): Delete unused token. + (operand6): Call build_chill_arrow_expr. Reindent a bit. + * ch-tree.h (build_chill_arrow_expr): New prototype. + +Mon Nov 15 16:38:28 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * stor-layout.c (layout_type): If a SET_TYPE needs more than + INT_TYPE_SIZE bits, use BLKmode (and never DImode). + + * ch-decl.c (start_chill_function): Set DECL_CONTEXT of params. + +Mon Nov 15 14:49:17 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (init_decl_processing): Move tasking stuff (__whoami + build_function_call, etc.) to tasking_init. + * ch-gperf, ch-hash.h: Add ASM keyword. + * ch-parse.y: Add ASM statement rules. + (format_str, text_arg): Delete last rules for WRITETEXT, READTEXT. + * ch-tasking.c: Move tasking stuff here. + +Sun Nov 14 15:50:34 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-parse.y (mode2): Split into array_mode and non_array_mode + to resolve layout ambiguity. + * ch-parse.y (checked_name): Remove. Use name_string instead. + * ch-parse.y (variantdef): Don't crash if no tag fields. + * ch-typeck.c (build_chill_array_type): If varying_p, + actually do build_varying_struct here (rather than in ch-parse.y). + +Fri Nov 12 15:37:45 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-satisfy.c (safe_satisfy_decl): Don't mangle function-local + static names. (Let make_decl_rtl generate a unique name.) + +Sun Nov 14 13:15:26 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-expr.c (build_chill_lower, cuild_chill_upper): + Rewrite for modes, values, etc. + * ch-inout.c (build_chill_writetext): Add ability + to write out characters. + * ch-satisfy.c (safe_satisfy_decl): Don't mangle function-local + static names. (Let make_decl_rtl generate a unique name.) + * varasm.c (unpack_set_constructor): Subtract + lower domain value from a bit's index value, + to match the runtime and allow powersets + with negative lower bounds. + +Fri Nov 12 14:00:48 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-inout.c (build_chill_writetext): Save reserved words in + uppercase if -fspecial_UC was specified. + +Fri Nov 12 13:27:12 1993 Per Bothner (bothner@rtl.cygnus.com) + + * ch-expr.c (chill_expand_expr, build_concat_expr): Simplify + string concatenation by treating varying strings as slices. + (varying_to_slice): New function. + * ch-typeck.c (build_chill_slice): Changed to support the above. + +Fri Nov 12 12:07:28 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-convert.c (convert): Fall through & convert a VARY_ARRAY_REF. + * ch-expr.c (build_generalized_call): Start module before a + writetext action, so its variables are inside the module-level + function. + * ch-loop.c (init_loop_counter): Correct for_u_bound computation + for enumeration loop on a varying array. + +Thu Nov 11 07:49:53 1993 Bill Cox (bill@rtl.cygnus.com) + + * cccp.c (main): Disable trigraphs for CHILL. + * ch-decl.c (grok_chill_fixedfields): Add special_UC + to conditional to determine case of reserved words. + Make PACK/UNPACK warning more specific. + * ch-expr.c (build_generalized_call): Enable recognition + of WRITETEXT call here. + * ch-gperf, ch-hash.h: Remove WRITETEXT as a reserved + word. It's only predefined. + * ch-inout.c: Add special_UC to conditionals + to determine case of reserved words. + (build_chill_writetext): Change for call from + build_generalized_call. Add code to format + integers. + * ch-lang.c (lang_decode_option): Add special_UC and + special_LC flags and logic to interlock with + ignore_case flag. + * ch-lex.l: Add special_UC to conditionals + to determine case of reserved words. + * ch-parse.y: Delete WRITETEXT as reserved word. + * ch-tasking.c: Add special_UC to conditionals + to determine case of reserved words. + (build_instance_type): Make components of INSTANCE + unsigned 16-bit integers. + * ch-tree.h (build_chill_writetext): Fix prototype. + * ch-typeck.c (build_chill_array_type): Make PACK + /UNPACK warning more specific. + * toplev.c (lang_options): Add -fspecial_LC + and -fspecial_UC flags. + +Wed Nov 10 02:29:53 1993 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: Move ch-hash.h from ch-lex.o + rule to ch-lex.c rule, so flex is rerun. + * ch-actions.c (chill_expand_assignment): Error if + user tries to assign to a LHS function. + * ch-decl.c (grok_chill_fixedfields): Use of PACK + /UNPACK is only a warning. + (init_decl_processing): Add ADDR as a builtin function. + * ch-expr.c (build_generalized_call): Add ADDR + as a builtin function. + (build_chill_addr_expr): Sanity check parameters. + * ch-gperf: Remove ADDR as a reserved word, + make ASM into one. + * ch-hash.h: gperf'd version of the above. + * ch-inout.c (chill_stdio_p): Recognize upper/lower + case file names. + * ch-lex.l: Make ignore-case work. Downcase + token before checking for reserved words. + * ch-parse.y: Delete ADDR as a reserved word. + (mode2, optlayout): Allow PACK/UNPACK specifier. + (call): Use build_generalized_call for + primval LPRN modename RPRN. + (primval): Delete ADDR reference. It's now only + predefined, not reserved. + * ch-tree.h: Add BUILT_IN_ADDR as a predefined. + * ch-typeck.c (build_chill_array_type): Just + a warning for PACK/UNPACK usage. + * toplev.c: Add -fignore-case and -fno-ignore-case. + +Tue Nov 9 15:07:02 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c: Reindent for readability. + * ch-convert.c (convert): Turn a NULL keyword into [0, 0] for + a conversion to INSTANCE. + * ch-decl.c: Change special_UC to ignore_case everywhere. + (init_decl_processing): Add builtin_function calls for lots of + predefined functions. + * ch-expr.c: Change builtin function handlers back to accepting + args, not a treelist. + (route_to_predefined_function): Delete it and its call. + (build_generalized_call): Add lots of builtin functions. + * ch-gperf (backwards, duration, inttime, null): Delete them. + * ch-hash.h: New version. + * ch-inout.c: Change special_UC to ignore_case everywhere. + * ch-lang.c: Delete special_UC flag. + * ch-lex.l: Change special_UC to ignore_case everywhere. + * ch-loop.c (high_domain_value, low_domain_value): Change + interfaces to build_chill_upper and built_chill_lower. + * ch-parse.y: Delete lots of stuff which should only be predefined. + * ch-tasking.c: Change special_UC to ignore_case everywhere. + Change builtin function handlers back to accepting args, + not a treelist. + * ch-tree.h: Add lots of builtin functions to the enumerator. + +Mon Nov 8 18:08:27 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-tasking.c (tasking_init): Disable last-minute change for now. + +Mon Nov 8 17:30:22 1993 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: New commands to build ch-hash.h. Add ch-lex.h to + dependencies where it's used. + * ch-decl.c (init_decl_processing): Build predefined constants + for TRUE, FALSE and NULL. Add declaration for abs builtin + function. + (lookup_name): Check for a CONST_DECL, don't ask about DECL_NESTING + stuff for builtin constant like TRUE. + * ch-expr.c (route_to_predefined_function): Add a bunch of + predefined functions to the list. + * ch-gperf: Define the list of reserved words, minus the predefined + words, using the special_UC flag. Remove NULL, TRUE, FALSE - + these are only predefined, not reserved. + * ch-hash.h: Check this into repository, even though it's derived + from ch-gperf, for those users who don't have gperf. + * ch-inout.c (build_chill_io_list_type): Use the special_UC flag + to refer to the IO types. Standardize the indentation. + * ch-lex.h: Add enumerators for TRUE, FALSE, NULL. + * ch-lex.l: Total rewrite of reserved-word recognition, using + the ch-hash.h lookup routines. + * ch-parse.y: Delete a bunch of unused rules for predefined + procedures and their parameters. + * ch-tasking.c (tasking_init): Build predefined functions + for COPY_NUMBER, GEN_CODE, GEN_INST, and GEN_PTYPE. Not + complete yet. Change interface to builtin handlers to accept + just an expression list. + +Wed Nov 3 18:07:08 1993 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: Debug, activate rule to make CHILL hash table. + * ch-actions.c: Compress parameter type lists per standard. + * ch-decl.c: Correct spelling in comment, compress parameter lists. + (init_decl_processing): Check special_UC flag to build builtin + function declarations. + * ch-expr.c (route_to_predefined_function): Check for upper OR + lowercase function names. + * ch-gperf: Update the list of keywords. + * ch-inout.c (build_chill_io_list): Check for special_UC flag + to build I/O list type. Compress parameter lists. + (chill_stdio_p): Check for special_UC flag in recognizing + file streams. + * ch-lang.c (lang_decode_option): Add command-line options + for upper-case keywords and user labels. + * ch-lex.l (init_lex): Initialize ridpointers to uppercase + if special_UC flag is set. + (downcase, getlc, check_newline): Don't do this if ignore_case + flag is set. + * ch-parse.y (variantdef, case_expr): Report 'sorry' for use of + multiple selector expressions. + +Sat Oct 30 01:06:19 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-expr.c (compare_record, finish_chill_binary_op): Compare + STRUCTs (and INSTANCEs) for equality. + * ch-expr.c (invalid_operand): New functions, combines most of + the functionality of invalid_left_operand and invalid_right_operand. + * ch-convert.c (digest_constructor): Set TREE_CONSTANT if it is. + +Sat Oct 30 11:12:47 1993 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in (chill): Add back in the commands to build chill + (the script) from chill.in. + +Fri Oct 29 16:25:38 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * expr.c (store_constructor): If SET_TYPE target is in a register, + use a stack temporary (since we must take its address). + + * ch-expr.c (build_allocate_global_memory_call, + build_allocate_memory_call): Cast argument pointer to PTR, + if needed (using location cast). Also, some other cleanups. + * ch-parse.y (bracketed_action): Re-arrange things so that + a handler following BEGIN END comes before the final poplevel. + * ch-typeck.c (build_chill_cast): Just return if already correct type. + + Re-do DO WITH so that build_component_ref for is done lazily + (at each reference) instead of eagerly (at the beginning + of DO WITH). This is needed for tagged variants, + * ch-tree.def (WITH_DECL): New declaration tree code. + * ch-decl.c (lookup_name): Recognize WITH_DECLs. + * ch-decl.c (handle_one_level): Variant parts are currently + indicacted with '__CASE'. Recognize that. + Generate a WITH_DECL (instead of ALIAS_DECL) for each field name. + +Thu Oct 28 22:17:41 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-expr.c (build_chill_length), ch-typeck.c (build_chill_cast): + Remove some old crud. + * ch-typeck.c (build_chill_cast): Another attempt at a + compromise between robustness and generality for casts. + Location conversions are now less likely to confuse things. + * ch-parse.y (optactions): Allow further optactions following + an initial semicolon. + * ch-parse.y: Add error messages on EVENT and BUFFER. + + * ch-decl.c, ch-expr.c, ch-parse.y, ch-typeck.c: + Undo some of the Oct 27 changes. + + Convert (some) builtin functions previously using reserved + names to be just predefined. + * tree.h (enum builtin_in_function): Added END_BUILTINS at end. + * ch-decl.c: Add predefines for allocate_memory, + allocate_global_memory, return_memory, writetext. + * ch-expr.c (check_arglist_length): New function. + * ch-expr.c (build_generalized_call): If "function" is + a builtin, build the appropriate tree. + * ch-parse.y, ch-lex.l: No longer recognize many pre-defined + functions at the lexer/parser level. + * ch-tree.h (enum chill_built_in_function): New type. + +Thu Oct 28 16:43:36 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-expr.c (allocate_memory, allocate_global_memory): + Check for invalid parameters, issue errors. + * expr.c (store_constructor): Calculate bitlength, startrtx + and endrtx of powerset correctly. Define targetx, use it + and XEXP correctly. + +Wed Oct 27 08:25:56 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-expr.c (build_max_min): Error for passing empty tuple + as the argument. + +Wed Oct 27 08:25:56 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (init_decl_processing): Make allocate + builtins have a pointer-to-pointer-to-void + first parameter, rather than a reference parameter. + * ch-expr.c (build_allocate_memory_call, + build_allocate_global_memory_call): Do automatic + ADDR () on the first parameter, for backward + compatibility. + * ch-grant.c (grant_one_decl): Don't grant if + DECL_SOURCE_LINE is zero. + (start_chill_module_code): Set DECL_SOURCE_LINE + to zero so that module-level function isn't granted. + * ch-parse.y (handleraction): Add return_memory action. + * ch-typeck.c (chill_similar): Allow a void_type + to be similar to anything. This makes allocate_memory + and return_memory pointer parameters slide through. + +Tue Oct 26 00:12:19 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-typeck.c (build_chill_array_ref): Check for and complain + if there are more index expressions than the array rank. + + * ch-actions.c (chill_expand_assignment): Emit appropriate + error message if RHS of multiple assignment is tuple/case/if. + * ch-tree.def (CONCAT_EXPR): Change TREE_CODE_CLASS from + 'e' to the more specific '2'. (Fixes a satisfy bug.) + +Thu Oct 21 17:25:33 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-parse.y: Revert experimental error-generating change + that was checked in by mistake. + +Thu Oct 21 12:15:30 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-satisfy.c (safe_satisfy_decl): Satisfy the hidden tasking + code variables associated with a process or signal. + (Apparently I forgot to actually check these in last time.) + * ch-tasking.c: Replace last calls to get_tasking_code with + working references to DECL_TASKING_CODE_DECL. + +Thu Oct 21 10:27:42 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-satisfy.c (safe_satisfy_decl): Satisfy the hidden tasking + code variables associated with a process or signal. + * ch-tasking.c (build_gen_inst, build_gen_ptype): Use the decl's + tasking_code_decl pointer, rather than trying to look it up + in the hash table or linked scope list. + +Wed Oct 20 09:52:44 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (lookup_and_handle_exit): Only output error message + in pass 1. + * ch-convert.c (convert): Correct conversion of VARYING array to/ + from non-VARYING one. + * ch-decl.c (print_lang_decl): Add debug output for DECL_TASKING_CODE_DECL + field in the node. + (decl_tasking_code_var): Delete it. Its calls are replaced woth + generate_tasking_code_variable calls, plus a little glue. + (push_extern_process): generate tasking_code_variable as local + static variable, point the process' function_decl at it for later + reference by build_start_process. + (print_mode): Use CHILL upper-case convention to print modes. + * ch-lex.l: Must initialize tasking-related trees to NULL at start + of each pass, or we lose the fact that the user did or did not + specify a value for each of them. + * ch-parse.y (check_end_label, action, exceptlist): Only output + error message in pass 1. + (sendaction): Add comments. + (sigdef): Comment out special handling for external signals. + Chain tasking_variable_decl onto signal structure decl, for + easier non-symbol-table access later. + * ch-tasking.c (generate_tasking_code_variable): Do work in both + passes, using do_decl so we can pass the pass 2 value of the + process_type or signal_code to it. Only update the process_type + if the incoming pointer isn't null and pass == 2. Use a new + parameter to know whether to include an init expression. + (build_process_header): Attach tasking-code_variable to process + function_decl for easy access later, not through the hash table. + (build_start_process): Get tasking_code_variable out of the process' + function decl. + (build_signal_struct_type): Return the type decl, to be accessed by ... + (build_signal_descriptor): .. this function. + (build_receive_case_label): Get data buffer pointer not from hash + table, but from Tiemann's current rc_state structure instead. + * ch-tree.h: Change prototype, fix comment, add DECL_TASKING_CODE_DECL + macro for tasking_code_variable storage. + +Tue Oct 19 17:39:40 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-lex.l (equal_number): If the "number" is a CONST_DECL, + return its DECL_INITIAL. + * ch-satisfy.c (safe_satisfy_decl): Change logic for rtl + generation for decls to not use DECL_ASSEMBLER_NAME. + * ch-decl.c: Set DECL_ASSEMBLER_NAME to DECL_NAME. + This matches C, and allows dbxout to emit proper user-level names. + (It would be cleaner to fix dbxout to use DECL_NAME ...) + * ch-decl.c (outer_decls): New global list of the decls granted + into the outer scope. + (pop_module): Change code that grants into outer scope accordingly. + (lookup_name_for_seizing): Similarly update. + (push_scope_decls): Handle SEIZE ALL from the global scope + by searching outer_decls. + * ch-grant.c (grant_array_type): Fix thinko. + * ch-inout.c (build_chill_writetext): Remove excessive TREE_TYPE. + +Mon Oct 18 15:57:00 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * varasm.c (output_constructor): Add support for non-zero + lower array bound. + * c-typeck.c (output_init_element): Revert recent changes. + * varasm.c (emit_set_data): Fix emitting set constant data. + * ch-lex.l (yywrap): Reset line number to 0, not 1. + It sets incremented to 1 by check_newline. + * ch-tree.h: Restore old version. + * ch-expr.c (finish_chill_binary_op): Convert TRUNC_DIV_EXPR + to RDIV_EXPR if an operand is floating. (This functionality + got dropped when hacking finish_chill_binary_op). + + * ch-actions.c (build_chill_case_expr): Set type to NULL_TREE. + not error_mark_node. + * ch-actions.c (chill_expand_assignment): Allow such borderline + constructs as: LHS OR:= [X]. + * ch-convert.c (convert): Hande CASE_EXPR (and COND_EXPR) + with unknown (NULL_EXPR) type, not just CONSTRUCTORS. + * ch-decl.c (do_decl): Remove CONSTRUCTOR kludge. + * ch-typeck.c (chill_compatible): Allow expr to have NULL mode + if it's a CASE_EXPR or COND_EXPR (and not just CONSTRUCTOR). + +Mon Oct 18 13:20:53 1993 Ken Raeburn (raeburn@rover.cygnus.com) + + * c-typeck.c (output_init_element): Limit previous changes to + ARRAY_TYPE and SET_TYPE initializers. + +Sun Oct 17 23:15:00 1993 Bill Cox (bill@cygnus.com) + + * c-typeck.c (output_init_element): Handle NULL domain case. + * ch-decl.c (do_decl): Revert bogus initializer type change. + * ch-grant.c (chill_finish_module_code): Put module's decl onto + the module_init_list, for chill_finish_compile's possible use. + (chill_finish_compile): Rename variables for clarity, add + commented-out code as example for assignment of module address to its + init_list entry. + +Sun Oct 17 15:16:54 1993 Bill Cox (bill@cygnus.com) + + * ch-convert.c: Move semicolon to separate line - easier to see. + * ch-decl.c (do_decl): Handle untyped_expr initializers by + simply using the variable's declared type - no compatibility + check can be made if the expression has no type. + * ch-expr.c (expand_packed_set): Fix endless loop - increment + the loop variable. + (fold_set_expr): Fix two other endless loops by passing + correct parameters to unpack_set_constructor. + * varasm.c: Standardize 'for' loop. + +Sun Oct 17 12:16:21 1993 Bill Cox (bill@cygnus.com) + + * c-typeck.c (output_init_element): Handle initializer for + array with non-zero lower index bound. + +Sat Oct 16 16:48:48 1993 Per Bothner (bothner@cygnus.com) + + * ch-expr.c (finish_chill_binary_op): Use TREE_SET_CODE + to change TREE_CODE. + +Sat Oct 16 08:07:17 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-expr.c (finish_chill_binary_op): Disable + rough-draft code, not intended for release. + +Fri Oct 15 21:44:11 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com) + + * expr.c (store_constructor): use PROTO for pack_set_constructor + +Fri Oct 15 10:30:09 1993 Bill Cox (bill@cygnus.com) + + * ch-expr.c (finish_chill_binary_op): Activate some + type-setup code. + * expr.c (store_constructor): Subtract arrays minimum element. + Makes orientexpress work. + +Fri Oct 15 09:26:24 1993 Bill Cox (bill@cygnus.com) + + * ch-convert.c, ch-expr.c: Add externs so it'll compile. + * ch-tree.def: Add BASED_DECL definition. + +Thu Oct 14 13:20:02 1993 Bill Cox (bill@cygnus.com) + + * ch-actions.c (build_chill_cause_exception): Pass the + *address* of the filename string to the runtime routine, + rather than passing the string by value. + +Thu Oct 14 13:08:07 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * expr.c (store_constructor): Use a (usually) more efficient + algorithm for setting SET types. + +Thu Oct 14 13:08:07 1993 Per Bothner (bothner@kalessin.cygnus.com) + + Changes to better support 1984 version of Chill, which doesn't + really distinguish BOOL and BITS(1) or CHAR and CHARS(1). + * ch-lang.c, toplev.c, ch-tree.h (flag_old_strings): New flag. + * ch-typeck.c (chill_similar): Support flag_old_strings. + * ch-convert.c (convert_to_boolean): Generalize code to + convert singleton bitstring to Boolean. + * ch-convert.c (convert): Use string_one_type_node. + * ch-convert.c (convert): Add code to convert Boolean to BOOLS(1). + * ch-convert.c (convert): In code that converts fixed string to + varying use new 'e' variable, rather than original 'expr' variable. + Allows cascaded conversions: CHAR -> CHARS(1) -> varying CHARS. + * ch-decl.c (string_type_node, const_string_type_node, + int_array_type_node), ch-tree.h: Removed. + * ch-decl.c (string_one_type_node, bitstring_one_type_node, + bit_zero_node, bit_one_node), ch-tree.h: New globals tree nodes. + * ch-decl.c (init_decl_precessing): Remove some junk. + * ch-expr.c (build_generalized_call): If flag_old_strings, + treat string index as string slice. Also, better error checking. + + Added support for (some kinds of) BASED declarations. + * ch-tree.def (BASED_DECL): New tree code. + * ch-decl.c (lookup_name): Implement BASED_DECL using + build_chill_indirect_ref. + * ch-decl.c (do_based_decls): Make a BASED_DECL. + * ch-parse.y: Call do_based_decls for DCL ... BASED(...). + * ch-satisfy.c (safe_satisfy_decl): Handle BASED_DECL. + + Improve handling of set binary operations. + * ch-expr.c (expand_packed_set): New function. + (fold_set_expr): Re-write. Simpler, more general algorithm. + (build_set_expr): Only used for comparsions now. + (finish_chill_binary_op): Handle set ops better (more directly). + (fold_set_and, fold_set_diff, fold_set_eq, fold_set_or, + fold_set_ne, fold_set_xor): Removed. No longer needed. + + * ch-decl.c: Remove calls to allocate_lang_decl. + * ch-tree.c (build_string_type): If const length, layout immediately. + +Mon Oct 11 17:23:02 1993 Bill Cox (bill@cygnus.com) + + * ch-decl.c (init_decl_processing): Define __whoami and + __wait_buffer functions. + * ch-lex.l (ch_lex_init): Reset tasking numbers to zero. + * ch-parse.y (sigdef): Add new add_taskstuff_to_list + parameter. + * ch-tasking.c (get_tasking_code): Search tasking_list for + tasking code name match. Can't use lookup_name. + (get_task_name): New function. + (generate_tasking_code_variable): Return if pass 1. + Always update *tasking_code_ptr. + (build_process_header): Add new add_taskstuff_to_list + parameter. + (tasking_setup): New code to unpack the tasking + list entries no built by .. + (add_taskstuff_to_list): Accept new parameter, + add it to the list. + * ch-tree.h (add_taskstuff_to_list): Add new + parameter. + +Mon Oct 11 14:54:50 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * Makefile.in (cc1chill): Also link in $(BC_OBJS). + +Mon Oct 11 06:28:39 1993 Doug Evans (dje@canuck.cygnus.com) + + * ch-decl.c (flag_allow_single_precision): New global, + from ss-931002 merge. + +Sun Oct 10 09:11:52 1993 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: Remove references to chill.in and + ch-hash.h. Remove bogus cc1chil : chill + dependency. + +Fri Oct 8 16:00:04 1993 Bill Cox (bill@cygnus.com) + + * ch-actions.c (adjust_parm_or_field): Add parameter to + decl_temp1 call. + *ch-decl.c (decl_tasking_code_var): Replace do_decl call with + decl_temp1 call. + (decl_temp1): Add parameter to signal 'make this external'. + (shadow_record_fields): Add parameter to decl_temp1 call. + * ch-expr.c (chill_expand_case_expr): Add parameter + to decl_temp1 call. + * ch-grant.c (chill_finish_compile): Add code to spoof + get_file_function_name, so we don't get __tmp_s1_code, + for example, as the module-level code's name. + * ch-loop.c (build_temporary_variable, begin_for_range, + init_loop_counter): Add parameter to decl_temp1 call. + * ch-parse.y (quasi_signaldef): Clear quasi_signal flag here, + for easier maintenance. + (sendaction): Rewrite to receive SIGNALNAME token correctly + from ch-lex.l (name_type_signal). + (signaldef): Don't clear quasi_signal here. + * ch-tasking.c (generate_tasking_code_variable): Tell decl_temp1 + to make the variable public (visible to linker). + (build_start_process): Add parameter to decl_temp1 call. + (tasking_setup): Comment out band-aid hack which calls + generate_tasking_code_variable. Shouldn't be necessary. + Use null_pointer_node rather than integer_zero_node in + entry_point. More rewrites. + (build_signal_descriptor): Name the non-signal in the error msg. + Rewrite the building of the signal envelope - avoid seg fault. + Add parameter to decl_temp1 call. + (expand_send_signal, build_receive_case_start, + build_receive_case_end, build_buffer_descriptor): Add parameter + to decl_temp1 call. + * ch-tree.h: Add parameter to decl_temp1 proto. + * chill: Add new CHILL frontend directory + +Tue Oct 5 13:51:27 1993 Bill Cox (bill@cygnus.com) + + * ch-grant.c: Standardize indentation. + * ch-parse.y (end_function): Unconditionally poplevel for processes. + * ch-tasking.c (build_process_header): Unconditionally pushlevel. + (generate_tasking_code_variable): Stop using pass number to + force a one-time action. + * ch-tree.h (build_chill_slice): Delete proto since function went static. + +Mon Oct 4 13:52:36 1993 Bill Cox (bill@cygnus.com) + + * ch-decl.c (decl_tasking_code_var): Use do_decl, since we're + called here in both passes. Set DECL_ASSEMBLER_NAME. + (lookup_name_for_seizing): Move NULL test forward to prevent + seg fault. + * ch-expr.c (finish_chill_binary_op): Mode access to TREE_CODE + to prevent a seg fault in telebras/dynsto.ch. Make indentation + changes. + * ch-tasking.c (build_signal_struct): Rename to build_signal_struct_type. + (build_send_signal): Rename to expand_send_signal. + (generate_tasking_code_variable): Return the var's decl. + (build_signal_struct_type): Move generate_tasking_code_variable + and add_taskstuff_to_list calls to .. + * ch-parse.y (sigdef): .. here. And make indentation changes. + * ch-tree.h: Rename functions, add return values. + +Mon Oct 4 15:43:56 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-convert.c (digest_constructor): Convert element to element_type. + * ch-parse.y (end_function): Use DECL_ARGUMENTS to check + for parameterless process. + +Fri Oct 1 13:57:30 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-typeck.c (chill_location): New function. + Based on lvalue_p, but also handle Chill-specific VARY_ARRAY_REF. + * ch-typeck.c, ch-tree.h (CH_LOCATION_P), ch-convert.c: Use + chill_location instead of lvalue_p. + + +Fri Oct 1 11:28:42 1993 Bill Cox (bill@cygnus.com) + + * ch-convert.c (convert): Back out Michael's changes, unintentionally + checked in. + * ch-lex.l (handle_use_seizefile_directive): No longer downcase + seize file names. + * ch-parse.y (sendaction): Fix a couple of seg faults. Comment out + SEND BUFFER processing for now. + * ch-tree.h: Fix comment. + +Thu Sep 30 17:00:42 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-tree.h (CH_CHARS_ONE_P, CH_BOOLS_ONE_P): New macros, + for recognizing singleton strings. + * ch-tree.h (MARK_AS_STRING_TYPE): New macro. + * ch-tree.c (build_string_type, build_bitstring_type), + ch-convert.c (convert): Use it. + * ch-typeck.c (build_chill_slice): Take length rather than upper + bound. This makes it easier to recognize that A(X UP LENGTH) + really has fixed length. Also, if the argument is string, + mark the slice as a string too. Also, handle varying strings. + + * ch-typeck.c (conflate_singleton_strings): New global. + * ch-typeck.c (chill_similar): If conflate_singleton_strings is + set (as it currently is), allow CHARS(1)/BOOLS(1) to be similar + to CHAR/BOOL, as required by the 1984 version of Z.200. + * ch-convert.c (convert_to_char): Convert CHARS(1) to CHAR. + * ch-convert.c ( build_array_type_for_scalar): If input is string, + so is output. + * ch-convert (maybe_turn_scalar_into_arra), ch-tree.h: Removed. + * ch-convert.c (convert): Convert CHAR to CHARS(1). + + This fixes 'X // := Y' and is also a general simplification. + * ch-actions.c (chill_expand_assignment): Convert 'LHS OP := RHS' + to 'LHS := LHS OP RHS' (using stabilize_reference on LHS). + Also, call save_expr on RHS if a multiple assignment. + * ch-parse.y (assignaction): Therefore, no longer need to call + stabilize_reference on RHS. + * ch-typeck.c (build_chill_modify_expr), ch-tree.h: Remove + modifycode parameter. Make it the caller's responsibility to + handle . + * ch-actions.c, ch-decl.c, ch-except.c, ch-expr.c, ch-grant.c, + ch-loop.c: Fix calls to build_chill_modify_expr accordingly. + +Wed Sep 29 18:02:55 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-lang.c (string_index_type_dummy), ch-tree.h: New variable. + * ch-decl.c (integer_minus_one_node), ch-tree.h: New variable. + + * ch-parse.y (arrayindex: modename): Remove useless code. + * ch-satisfy.c (satisfy): Don't gag on string_index_type_dummy, + * ch-tree.c (build_string_type): Pass string_index_type_dummy as + the parent type of the index range. + * ch-typeck.c (layout_chill_range_type): Recognize and handle + string_index_type_dummy - specifically allow an empty range. + +Wed Sep 29 13:36:23 1993 1993 Bill Cox (bill@cygnus.com) + + * ch-convert.c (convert_to_reference): Check for loc-identity + mismatches correctly (and remove one of those chill_compatible + calls). + * ch-decl.c (decl_tasking_code_var): New function, called from + push_extern_process and push_extern_signal. + * ch-parse.y (end_function): Delete parameter. Check current_function_decl + whether it's actually a process, and whether it has parameters. + Make Michael's change simplifying the pass 2 test, preventing a seg + fault. + (procedure, process): Change calls to end_function, remove + code saving value from build_process_header. Delete redundant chill_ + phrases from some function calls. + * ch-tasking.c: Remove some redundant _chill phrases from function + names. + * ch-tree.h: Remove some redundant _chill phrases from function + names. Add the CH_VARYING_ARRAY_TYPE macro, call it from + all relevant places. + * ch-typeck.c: Use the new macro. Cast TREE_CODEs to chill_tree_code. + +Wed Sep 29 13:07:43 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-convert.c (convert_to_reference): Remove redundancies. + * ch-convert.c (convert): Handle convert_to_reference + with a recursive convert call. + * ch-decl.c (do_decl): Add missing compatibility-checking + of initializer (don't depend on convert). + +Tue Sep 28 00:02:25 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-tree.h (CH_LOCATION_P): New macro. + * ch-typeck.c (layout_chill_range_type): Fix call to + type_for_size, when figuring out a defaulted parent type. + * ch-expr.c (build_chill_lower, build_chill_sizeof): Check + for TREE_CODE_CLASS != 't' rather than == 'd'. + * ch-expr.c (build_chill_function_call): Use CH_LOCATION_P + to check for location, rather than TYPE_CODE_CLASS == 'd'. + + * ch-tree.c (build_string_type): Make 2-pass safe. Also, + change parameter to be length, not index type. + * ch-parse.y (mode2), ch-expr.c (build_concat_expr), ch-lex.l + (build_chill_string): Modify callers of build_string_type accordingly. + * ch-lex.l (check_newline): Don't look for # directive inside a + C-style comment. + * ch-grant.c (grant_array_type): Make more robust for char- + and bit-strings (allow non-constant sizes). Change parameters + and return types. (raw_decode_mode): Use grant_array_type + for bitstrings. (otherwise): Fix grant_array_type callers. + +Mon Sep 27 16:57:57 1993 Per Bothner (bothner@kalessin.cygnus.com) + + Remove changes of Sep 15. + * ch-tree.h (CH_SINGLETON_DOMAIN): Removed. + * ch-typeck.c (chill_similar): Don't allow a singleton + powerset to be similar to its domain. + * ch-convert.c (convert_to_boolean): Don't convert a singleton + SET_TYPE constructor to a Boolean. + + * ch-actions.c (chill_expand_assignment): Handle IN_EXPR on + LHS of assignment, which is what we're current (temporarily?) using. + +Mon Sep 27 06:01:57 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c, ch-convert.c, ch-decl.c, ch-expr.c, + ch-grant.c, ch-inout.c, ch-parse.y, ch-satisfy.c, + ch-tasking.c, ch-tree.c, ch-tree.h, ch-typeck.c: + -Wall cleanup. Add prototypes where missing. + Delete unused variables. Cast uses of tree_codes + to chill_tree_code, which they are. + +Sun Sep 26 13:09:57 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (do_decl): Save initializer in pass zero + case also. + * ch-lex.l: Fix comments, indentation. + * ch-parse.y: Standardize error messages to use + uppercase for CHILL keywords rather than quoting them. + Suggestion from docs department. + * ch-tasking.c: Pervasive changes to get processes to + compile and START. + * ch-tree.h: Delete prototypes for functions whic + I made static inside ch-tasking.c. + +Sun Sep 26 02:40:02 1993 Michael Tiemann (tiemann@blues.cygnus.com) + + * ch-lex.l (yywrap): Call `check_newline' in case the file + started with a line directive. + +Sat Sep 25 13:54:41 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-decl.c: Expand pre-amble comment. + * ch-decl.c (struct scope, push_module): Use new field + tail_chain_module to build child-module list in order. + (Just to make compiler debugging a little less confusing.) + + * ch-decl.c (struct scope): New field weak_decls. + * ch-decl.c (find_implied_types): New interface. Now pre-pend + new enum types to a given input list. This makes it easier to + avoid duplicates, which should at least be more efficient. + Also, handle FUNCTION_DECL. + * ch-decl.c (bind_saved_names): Removed. Distribute its + functionality over new functions (push_scope_decls, pop_scope_decls, + build_implied_names, bind_sub_modules). The goal (which seems to + have been more-or-less attained) was to fix weak name handling. + * ch-decl.c (poplevel): Use new function pop_scope_decls. + + * ch-tasking.c (build_signal_struct, build_tasking_message_type): + Use build_decl directly, rather than grok_chill_fixedfields + (which depends on ignore_exprs and has more overhead). + * ch-tasking.c (build_signal_struct): Construct the type + only in pass 1. + * ch-typeck.c (build_chill_slice): Use my_build_array_ref rather + than build_array_ref (which does C-specific "optimizations"). + (Hence move my_build_array_ref up earlier in the file.) + +Sat Sep 25 03:47:28 1993 Michael Tiemann (tiemann@blues.cygnus.com) + + * ch-tasking.c: Declare static variable `void_ftype_void'. + (chill_tasking_init): Initialize `void_ftype_void' here. + (build_tasking_struct): Use, don't declare `void_ftype_void'. + (generate_tasking_code_variable): Call `do_decl', not + `decl_temp1' to declare TASKING_CODE_NAME. + (tasking_setup): Drop into 1-pass mode so that all + tasking-related declarations are installed in the global + scope. Use correct CHILL types for initializers (since + ptr_type_node doesn't have the right meaning for CHILL). + Also, call `do_decl' instead of `decl_temp1' for + `init_struct'. + (add_taskstuff_to_list): Set TASKING_LIST in pass 1 to keep + `chill_finish_compile' in sync between passes. + + * ch-decl.c (do_decl): Set DECL_ASSEMBLER_NAME for + declarations on pass zero. Keep obstacks in sync, and always + call `finish_decl' for pass zero declarations. + (push_chill_extern_function): Keep obstacks in sync, and always + call `finish_decl' for pass zero declarations. + (build_enumerator): Ditto. + (grok_chill_variantdefs): Change PASS test to exclude only + pass one. + (finish_struct): Ditto. + * ch-expr.c (build_chill_component_ref): Ditto. + (build_chill_binary_op): Ditto. + * ch-tree.c (build_powerset_type): Ditto. + (build_bitstring_type): Ditto. + * ch-typeck.c (build_chill_range_type): Ditto. + (build_chill_struct_type): Ditto. + + * ch-decl.c (build_chill_exception_decl): Clarify reasons for + extra pushing and popping of obstacks. + + * ch-inout.c (build_chill_io_list_type): Call `satisfy_decl' + on IO_DESCRIPTOR. This causes IO_DESCRIPTOR to be laid out. + + * ch-grant.c (chill_finish_compile): Clear out both + MODULE_INIT_LIST and TASKING_LIST if either contains stuff + from pass one. + + * ch-parse.y (rccase_label): Add NAME rules so that pass one + works w/o knowing we're parsing a signal. Simplify SIGNALNAME + rules since we only get SIGNALNAME tokens in pass two. + (sendaction): Ditto. + * ch-lex.l (name_type_signal): Enable returning SIGNALNAME and + BUFFERNAME on pass two. The grammar now handles this. + * ch-decl.c (lookup_remembered_decl): Deleted. + +Fri Sep 24 15:27:13 1993 Bill Cox (bill@cygnus.com) + + * ch-decl.c (lookup_remembered_names): Removed. It was being + misused in ch-lex.l. + * ch-lex.l (name_type_signal): Revert last change. Basically, + we cannot use the C typedef/variable name trick in CHILL, due + due to the language's 2-pass nature. + * ch-parse.y (arrayindex): Rewrite for correctness, and to avoid + a seg fault. + * ch-tree.h (lookup_remembered_name): Comment out the prototype. + +Fri Sep 24 11:01:31 1993 Michael Tiemann (tiemann@blues.cygnus.com) + + * ch-decl.c (do_decl, push_chill_extern_function): Change pass + checks so the pass == 0 case is handled for built-in types. + (push_modedef): Add check for error_mark_node. + (lookup_remembered_decl): New function. + (pushlevel, poplevel) Change pass checks. + (pushdecl): Check type as well for NULL. + (build_enumerator): Handle pass == 0 case. + * ch-lex.l: Use lookup_remembered_decl to get lastiddecl + during pass 1. + * ch-parse.y: Set pass to zero to indicate initial decl processing. + Replace NAME references with SIGNALNAME references. + (startaction): Only check copy number if not ignoring actions. + Always call build_chill_start_process. + (optstartset): Don't lookup the instance name. + * ch-tasking.c (generate_tasking_code_variable): Replace + do_decl call with decl_temp1 call. + (build_chill_start_action): Check for ignore_actions here. + (build_tasking_message_type): Layout the type. + (rc_state_type): New structure to keep nested receive-case + info in. + (build_chill_receive_case_start, build_chill_receive_case_end): + Use the new struct. + + +Fri Sep 24 04:19:15 1993 Michael Tiemann (tiemann@blues.cygnus.com) + + * ch-tasking.c (build_chill_receive_case_start): `namedecl' + should be a _DECL, not an IDENTIFIER_NODE. + +Thu Sep 23 18:18:24 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-decl.c (find_implied_types): Handle VAR_DECLs. + + * ch-decl.c (print_lang_identifier): Print IDENTIFIER_OUTER_VALUE. + * ch-actions.c (chill_expand_result): Allow value-less RETURN. + * ch-expr.c (resolve_component_ref): Recognize error_mark. + + * ch-convert.c (digest_constructor): Handle a nested powerset tuple. + * ch-satisfy.c (satisfy): Use return value of layout_chill_range_type. + * ch-typeck.c (chill_similar): Repeatedly get parent modes + of ranges, not just once. + * ch-typeck.c (chill_root_resulting_mode), ch-tree.h: New function. + * ch-typeck.c (layout_chill_rang_type): Re-do type-checking + to follow Blue Book better (check for Compatibility). + + * ch-tree.h (CH_ROOT_RESULTING_MODE): New macro. + * ch-lex.l (use_seizefile_name, current_seizefile_name), ch-tree.h: + New variables. The latter replaces in_seizefile. + + Changes to store in the new DECL_SEIZEFILE field each seize + ALIAS_DECL the name in the most recent use_seize_file directive. + (This requires that use_seize_file directives written to the + grant file be written before the SEIZEs that need it.) + Allow clashing declarations granted into the global scope + (produce a warning), but remember the seizefile case from + (using the DECL_SEIZEFILE field of the grant ALIAS_DECL). + The a SEIZE will select the granted decl that matches its + DECL_SEIZEFILE (in other words: grants from the most recent + use_seize_file will be preferred). + * ch-tree.h (DECL_SEIZEFILE), ch-tree.def: New macro. + * ch-tree.h (global_value, IDENTIFIER_GLOBAL_VALUE): Renamed + to outer_value, IDENTIFIER_OUTER_VALUE. + Changes to cause the use_seize_file directives to be written + out in order as they're seen in source. + * ch-lex.l (files_to_seize, next_file_to_seize, last_file_to_seize): + Changed to have type TREE_LIST of pointer to IDENTIFIER_NODE. + * ch-lex.l (handle_use_seizefile_directive): Modify appropriately. + Don't call grant_use_seizefile. + * ch-lex.l (mark_use_seizefile_written): New function. + * ch-grant.c (decode_decl): Write out use_seize_file directive, + if needed, before writing a seize declarations. + * ch-decl.c (pop_module): Handle decls granted into the global + module specially, setting IDENTIFIER_OUTER_VALUE. + * ch-decl.c (lookup_name_for_seizing): Check IDENTIFIER_OUTER_VALUE. + +Thu Sep 23 19:05:37 1993 Bill Cox (bill@cygnus.com) + + * ch-decl.c (push_chill_extern_process): Delete unused variables, + declare the process' tasking_code variable as external. + * ch-parse.y (process): Force ignore_exprs to FALSE while parsing + the process header. + * ch-tasking.c (sigdef): Move resetting of quasi_signal from here + to (signaldef). + * ch-tree.h: Add prototype. + * expr.c (store_constructor): Emergency first-aid. Rewrite later. + +Thu Sep 23 12:57:53 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-expr.c (build_chill_function_call): Move possible call to + chill_start_module_code until we know we're not calling a builtin. + * ch-decl.c (save_expr_under_name): Use pushdecllist, + not proclaim_decl (which provide for popping the decl). + * ch-parse.y (optname): Also allow TYPENAME. + +Thu Sep 23 09:18:35 1993 Bill Cox (bill@cygnus.com) + + * ch-decl.c (print_lang_decl): Make weak name output more standard. + (print_lang_identifier): Make signal-data flag output more standard. + (push_chill_extern_process): Pass correct arg tree to + push_chill_extern_function. + (push_syn_decls, fixup_unknown_type, chill_modes_equiv): + Standardize function header layouts (Makes the tcov script + work better). + * ch-except.c (chill_finish_on): Standardize function header. + * ch-expr.c (fold_set_or): Standardize function header. + * ch-grant.c (print_proc_tail, print_proc_exceptions): Standardize + function headers. + (decode_constant): Make sure that alpha operators are surrounded + with whitespace. + * ch-parse.y: Spell Z.200 correctly in comments. + +Wed Sep 22 10:42:31 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-expr.c (build_chill_addr_expr), ch-tree.h: New function. + * ch-parse.y, ch-decl.c (shadow_record_fields): Use it. + * ch-lex.l (handle_use_seizefile_directive): Don't emit + use_seize_file directive if in_seizefile. + + * ch-convert.c (digest_structure_tuple): Fix code that checks + for excess init values. + * ch-decl.c (layout_chill_variants): Move increment of nlabels + inside the proper loop. + * ch-grant.c (print_struct): Add missing loop for tag_list. + (print_struct): Look for variant fields by checking for a + UNION_TYPE, not a NULL name, since we must use a dummy name. + * ch-parse.y (structured_variable): Various fixing. + * ch-decl.c (shadow_record_fields): Rename arg decl -> struct_val. + + * ch-satisfy.c (safe_satisfy_decl): Disable copying of modes + for NEWMODE (and hence novelty checking), until we figure out + a better way. + + * ch-except.c (finish_handler_array): Use null_pointer_node, + not integer_zero_node (which fails to type-check). + + * c-typeck.c (get_constructor_element_type): New function. + * ch-tree.h (CH_NOVELTY_FLAG): Now also used in TYPE_DECLs. + (CH_NOVELTY): Redefined to call new function chill_novelty. + (CH_CLASS_IS_XXX, TYPE_NEWMODE, CH_CLASS_MODE): Removed. + * ch-typeck.c (classify_chill_expr renamed to chill_expr_class): + Take extra output parameter (for M, as in M-value class). + * ch-typeck.c (chill_novelty): New function. (Also de-references.) + + * ch-expr.c (resolve_component_ref, build_chill_component_ref): + New functions. Handle 2-pass and variant records. + * ch-parse.y (primval DOT name): Use instead of build_component_ref. + * ch-satisfy.c (satisfy, case COMPONENT_REF): + New case, call resolve_component_ref. + + * ch-expr.c (build_generalized_call): Extract single arg from + arg list before calling build_chill_cast. + + * ch-parse.y (defining_occurrence_list): New non-terminal. + Use it to replace locnamelist, synnames, and modenames. + * ch-parse.y: Re-write parsing of variant records. + + * ch-decl.c (grok_chill_variantdefs): Now return a FIELD_DECL + rather than just its type. + * ch-inout.c (build_chill_io_list_type), ch-parse.y: + Change callers appropriately. + + * ch-tree.h (TYPE_TAG_VALUES): Add an extra level of TREE_LIST, + to support multiple tag fields. + * ch-grant.c (print_struct), ch-decl.c (layout_chill_variants): + Support multiple tag fields. + + * ch-convert.c (remove_tree_element, digest_structure_tuple): + New functions, to digest structure tuples, without calling the + code in c-typeck.c. Handles variant tuples and tags (partially). + * ch-convert.c (digest_constructor, convert): Call + digest_structure_tuple when appropriate. + * ch-convert.c (digest_constructor): Re-arrange a bit. + + * ch-decl.c (push_modedef): Defer copying of tree until ... + * ch-satisfy (safe_satisfy_decl): ... here. + + * ch-decl.c (getdecls): Add kludge to help dbxout_init. + +Tue Sep 21 14:19:11 1993 Bill Cox (bill@cygnus.com) + + Partial tasking update - not done yet. + * ch-actions.c: Comments, indentation. + * ch-decl.c (push_chill_extern_process): No longer need to + reformat the arg list for make_process_struct. + (pop_module): Don't seg fault on null DECL_NAME. + (handle_one_level): Error, not warning if tree not recognized. + (shadow_record_fields): Rename formal param for readability. + * ch-grant.c (decode_decl): Write proper header for a process. + * ch-parse.y (quasi_pdef): process now uses processparlist, + which doesn't change with the passes. + (quasi_locdec): Call build_chill_reference_type to defer + doing the type's layout. + (processpar): Use paramnamelist, but reformat it into a + list of identifiers in pass 2, so a processpar is the same + structure in both passes. + (locdec): Call build_chill_reference_type to defer doing the + type's layout. + * ch-tasking.c (generate_tasking_code_variable): Call do_decl to + build the decl. Only update the variable's tree in pass 2. + (make_process_struct): Call build_chill_reference_type to defer + doing the type's layout. + (build_process_header): New code to call make_process_struct. + New pass-2 code to make a PARM_DECL for start_chill_function. + Pass a void_type_node, not a NULL_TREE for an empty list. + Get input for shadow_record_fields from current_function_decl. + (build_buffer_decl): Call do_decl not decl_temp1. + * ch-typeck.c: Reindent to standards. + * gcc.c (SPECS): Add recognition for the '.chi' CHILL suffix. + +Mon Sep 20 12:00:24 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-typeck.c (classify_chill_expr): An expression with a + REFERENCE_TYPE still has VALUE class, even if an ADDR_EXPR. + * ch-actions.c (adjust_parm_or_field):, ch-tree.h: Change last + parameter, so we can reliably recognize LOC parameters. + * ch-tasking.c, ch-expr.c: Change callers appropriately. + +Sun Sep 19 22:26:25 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-tree.h (CH_READ_COMPATIBLE, CH_REFERABLE): New macros. + * ch-typeck.c (chill_referable, chill_read_compatible): New functions. + * ch-typeck.c (chill_compatible): Allow un-resolved CONSTRUCTOR + (with NULL TREE_TYPE), when reasonable. (Simplifies callers.) + Also, handle case of expr being of reference class. + * ch-actions.c (adjust_parm_or_field): Major re-arrange + to handle conversions and LOC args better. + * ch-actions.c (chill_expand_assignment): Simplify conversions. + * ch-expr.c (build_chill_function_call): If needed, call + chill_start_module_code. + * ch-decl.c (declare_predefined_file): New function, used + to pre-define stdin, stdout, and stderr. + * ch-inout.c (chill_stdio_p): Change names of predefined + files from chill-stdin etc to plain stdin (and change their types). + * ch-lex.l: Remove some obsolete stuff. + * ch-convert.c (convert): Move conversion from reference to + to beginning of convert() so other conversion can work better. + Also, remove bogus direct setting of TREE_TYPE. + +Fri Sep 10 12:23:41 1993 Wilfried Moser (fs_moser@cygnus.com) + + * Makefile.in: Change installation of the chill script. gcc will + be called always with the full path. That made problems when + somebody was using chill but didn't have the installation + directory in PATH. + * ch-parse.y: Change parsing of WRITETEXT action. + * ch-tree.h: Add some new prototypes according to the + (partial) implementation of WRITETEXT. + * ch-typeck.c: Add new function chill_varying_string_type_p. This + functions checks a type for being CHAR(n) VARYING. + * ch-decl.c (init_decl_processing): Add new built-in functions + _writestring and _writeunixstd. + Add call to build_chill_io_list_type in ch-inout.c. + * ch-inout.c (build_chill_writetext): Add some code there. + Add new function build_chill_io_list_type. + Add new static function chill_stdio_p. This function checks + the text argument for being chill_stdin, chill_stdout or + chill_stderr. + +Fri Sep 17 22:02:04 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-decl.c (push_modedef): Fix TYPE_MAIN_VARIANT thinko. + +Thu Sep 16 18:38:53 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-decl.c (allocate_lang_decl): Do nothing. + * ch-tree.h (struct lang_decl, DECL_GRANT_FILE, DECL_SEIZE_FILE): + No longer used; remove. + + * ch-tree.h (TYPE_TAG_FIELD renamed to TYPE_TAGFIELDS), ch-grant.c + (print_struct), ch-parse.y (opttagfield -> opttagfields), ch-decl.c + (make_chill_variants, layout_chill_variants): Add (initial) part + of support for multiple tags. + * ch-decl.c (lookup_tag_fields): New function. + * ch-parse.y (stmt_count): Not used; removed. + * ch-parse.y (mode2): Clear current_fieldlist before + parsing STRUCT fields; restore afterwards. + + * ch-parse.y (push_action): Moved to ch-actions.c. + +Wed Sep 15 18:19:37 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-convert.c (convert_to_boolean): Convert a SET_TYPE + constructor to a boolean. + +Wed Sep 15 17:52:10 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (push_modedef): Enable novelty-setting code. + * ch-tree.h (CH_SINGLETON_DOMAIN): New macro. + * ch-typeck.c (chill_similar): Add checking of singleton + powerset against its base type. + +Tue Sep 14 17:11:52 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (adjust_parm_or_field): Create a + temporary for an non-referencable actual parameter + passed to a LOC formal parameter. + (chill_expand_assignment): Correct compatibility checking. + + * ch-decl.c (push_modedef): Set up a type's NOVELTY value. + * ch-parse.y (opsigdest): Only check for process name + in pass 2, when we know. + * ch-tree.h (CH_NOVELTY_FLAG, CH_NOVELTY): Define. + * ch-typeck.c: Fix comment. + +Mon Sep 13 17:33:11 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-grant.c (lookup_decl_in_process, register_decl_as_output, + decl_seen_p, processed_decls, allocated, nr_decls): Removed + no-longer-useful functions and variables that used to guard + against writing a decl multiple times. Since we now just + go through the decl list linearly, that is no longer an issue. + * ch-satisfy.c (safe_satisfy_decl): Handle missing current_module. + + * ch-decl.c (start_chill_function): Clear DECL_ASSEMBLER_NAME. + Don't make TREE_PUBLIC. Don't generate rtl yet. + * ch-decl.c (pop_module): If a decl is granted, set TREE_PUBLIC, + and its DECL_ASSEMBLER_NAME. + * ch-decl.c (fix_identifier): New function. + * ch-grant.c (grant_one_decl): Don't set TREE_PUBLIC. + * ch-tree.h (struct module): New field prefix_name. + * ch-satisfy.c (safe_satisfy_decl): If assembler_name isn't + set, prefix it by the module name(s). + * ch-satisfy.c (safe_satisfy_decl, case FUNCTION_DECL): + Call make_function_rtl if needed and !LOOKUP_ONLY. + * ch-typeck.c (chill_similar): Flesh out substantially. + * ch-typeck.c (chill_compatible): Re-structure. + + * ch-actions.c (adjust_parm_or_field): Use CH_COMPATIBLE + instead of chill_comptypes to compare actual and formal. + +Sun Sep 12 21:10:10 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-parse.y (labellist): Don't do anything if ignore_exprs. + + * c-typeck.c (output_pending_init_elements): Handle + !constructor_incremental case of filling in empty positions. + (Patch by Jim Wilson. CYGNUS LOCAL until we have approval.) + * ch-decl.c (pop_module): Don't grant a seized name. + * ch-grant.c (decode_constant): Support CALL_EXPR. + * ch-tree.c (build_bitstring_type): Don't try to fold non-constant + size if pass==1 (since it may be an unsatisfied name). + + +Sun Sep 12 18:06:23 1993 Bill Cox (bill@rtl.cygnus.com) + + 2-pass fixes for processes. Partially done. + * ch-actions.c (chill_expand_assignment): Add real + novelty-checking sketch, $ifdef'd out for now. + * ch-decl.c: Generally fix indentation. Move tasking + init code from init_decl_processing to ch-tasking.c. + Delete ObjC-related cruft. More accurate parameter name + for shadow_record_fields. Move debug_scope before + its first call. + * ch-expr.c (build_chill_function_call): Return if not + pass 2. + * ch-grant.c (print_proc_tail): Avoid trying to format + a VOID return type, or using a NULL pointer. + (decode_decl): Minor changes for PROCESS arg access. + * ch-lang.c (lang_decode_option): Use -itu flag to + enable 'pedantic' mode. + * ch-lex.l (init_lex): Initialize compiler-directive + variable trees. + (name_type-signal): Disable the returning of SIGNAL and BUFFER + name tokens. + * ch-parse.y (rccase_label_flag): Renamed from rccase_ifs. + All uses renamed also. + (end_function): Always poplevel, not just in pass 2. + (quasi_pdef): Check for end-label matching. + (quasi_formparlist): Write more clearly. + (rcaltlist, optelsercvcase, optstartset): Add ignore_actions + guards. + (rccase_label, sendaction): Use NAME, not SIGNALNAME + or BUFFERNAME. + (process): Handle like procedure. + (mode): Add SIGNAL as a generic signal parameter. This + is a client-specific extension, so pedantic is checked. + * ch-tasking.c: Pervasive rewrites for 2-pass. Still not done. + * ch-tree.h (CH_NOVELTY): Make it an lvalue. + * ch-typeck.c: Fix comment. + +Sun Sep 12 15:03:21 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * c-typeck.c (digest_init): Compare types using comptypes + instead of comparing pointers. (Helps Chill front end.) + * ch-expr.c (finish_chill_binary_op): + * ch-typeck.c (build_chill_array_ref, build_chill_bitref), + ch-expr.c (finish_chill_binary_op): For now, prefer IN_EXPR + over BIT_FIELD_REF because of various problems with BIT_FIELD_REF + (incomplete support for variable fields, and possible bug in + optimize_bit_field_compare). + * ch-expr.c (finish_chill_binary_op): Fix type-checking + and appropriately coerce operands for IN_EXPR and comparsions. + * expr.c (expand_expr, case ARRAY_REF): Coerce lower bound (if + non-zero) to sizetype before subtraction. + * expr.c (expand_expr): Remove Chills-specific calls to + __inpowerset from case BIT_FIELD_REF to case IN_EXPR. + +Fri Sep 10 15:47:52 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-tree.def (UNDEFINED_EXPR): New kind of expression. + * ch-grant.c (decode_constant), ch-expr.c (chill_expand_expr), + ch-convert.c (convert): Handle UNDEFINED_EXPR. + + * ch-expr.c (build_char_array_expr): Move CONCAT_EXPR support to ... + * ch-expr.c (build_concat_expr): ... here. + Now also folds concatenation of STRING_CST and UNDEFINED_EXPR. + Also, make result varying only if one of the operands are. + + * ch-expr.c (build_chill_binary_op): Move stuff from here to ... + * ch-expr.c (finish_chill_binary_op): ... here, as needed for + proper 2-pass split. Also, clean up and simplify heavily. + + * ch-tree.h (enum ch_expr_class): The 5 kinds of expression classes. + * ch-typeck.c (classify_chill_expr): New function: Determine + class of expression. + * ch-typeck.c (chill_compatible_classes): Re-structure; fix + asymmetry bugs. + * ch-tree.h (CH_CLASS_IS_XXX): Re-define to use classify_chill_expr. + + * ch-convert.c (maybe_turn_scalar_into_array): Complain + unless scalar is a char constant (and we want a string). + * ch-convert.c (convert): New code for converting to variable + string/array. Avoid type errors by padding (with an UNDFIEND_EXPR). + * ch-typeck.c (chill_expand_tuple): Don't do conversion to + varying type here; that is handled by convert now. + * ch-decl.c (digest_constructor): Moved to ... + * ch-convert.c (digest_constructor): ... here. + * ch-decl.c (do_decl): Simplify; just use convert for initializer. + * ch-decl.c (chill_digest_init): Merged into convert, and removed. + * ch-decl.c (init_decl_processing): Set constructor_no_implicit flag. + * ch-except.c (finish_handler-array), ch-decl.c (finish_decl): + Replace chill_digest_init by convert. + * ch-actions.c (chill_expand_array_assignment): Simplify; use convert. + * ch-lex.l (build_chill_string): Make string type be derived + from integer, not sizetype, because upper bound can be -1. + +Thu Sep 9 18:21:46 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-typeck.c (my_build_array_ref): Delete pedantic + C-specific error message. + +Thu Sep 9 17:44:20 1993 Jeffrey Wheat (cassidy@eclipse.cygnus.com) + + * gcc.c: pass {I*} spec to cc1chill. Fixes -Ifoo not working problem. + +Thu Sep 9 12:22:22 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-typeck.c (build_chill_array_ref): Remove redundant and + broken call to my_build_array_ref. + +Wed Sep 8 13:03:49 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-except.c (finish_handler_array), ch-decl.c (finish_decl): + Don't use store_init_value, since it calls digest_init instead + of chill_digest_init. + * ch-except.c (finish_handler_array): Use build1 (ADDR_EXPR, ...) + instead build_unary_op to avoid C-specific optimizations. + * ch-typeck.c (my_build_array_ref): Don't use default_conversion + to convert array to pointer. + * c-typeck.c (process_init_default): New function, to support + default values for array tuples in Chill. + * c-typeck.c (default_conversion): Don't convert array to pointer + if compiling Chill. + * ch-decl.c (digest_constructor): New function; used to be guts + of chill_digest_init. Now recursive, to handle nested tuples. + + * ch-decl.c (chill_digest_init): Handle struct labels. + * ch-grant.c (get_tag_value): Use decode_constant in general case. + * ch-grant.c (decode_constant): Add support for lots of missing + binary and unary operators. + +Wed Sep 8 10:11:04 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-lang.c: Look for '-I' option for seize file path. + * ch-lex.l: Fix comment about above option. + +Wed Sep 8 00:37:32 1993 Per Bothner (bothner@rtl.cygnus.com) + + * ch-satisfy.c: Move code to set (and restore) file-and-line + from satisfy_decl to safe_satisfy_decl, for the sake of satisfying + alias decls that refer to real decls with errors. + * ch-actions.c (lang_init): Move to ch-lang.c. + * ch-decl.c (init_decl_processing): Move code to initialize + file-and-line from here ... + * ch-lang.c (lang_init): ... to here, to avoid clobbering. + + * ch-decl.c (chill_digest_init): Add support for SET_TYPE, + and index values. + * ch-typeck.c (chill_expand_typle): Just call chill_digest_init. + * c-typeck.c: Fix various things that got broken + in the latest merge. + +Tue Sep 7 15:45:58 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-decl.c (build_enumerator): Handle a "unnamed set element" + (obsolete feature) by generating a dummy name. + * ch-decl.c (finish_decl): Call rest_of_decl_compilation with + "correct" value of top-level (to get better debugging output). + * ch-decl.c (bind_saved_names): Allow a null DECL_NAME. + +Tue Sep 7 15:48:35 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (chill_expand_return): Correct breakage + due to recent fsf merge. + +Tue Sep 7 11:16:10 1993 Bill Cox (bill@rtl.cygnus.com) + + * .cvsignore: Add multilib.h. + * ch-decl.c (chill_digest_init): New function. Calls were + changed, since it has fewer parameters than old digest_init. + * ch-parse.y (untyped_expr, primval, tupleelement): Calls to + new init stuff. + (elementlist): Delete unused code. + * ch-satisfy.c (safe_satisfy_decl): Just return if decl == NULL. + * ch-tasking.c (build_tasking_enum): Attempt to adapt to 2-pass. + * ch-tree.h: Delete digest_init prototype. + * ch-typeck.c (digest_init): Much new code. + +Tue Sep 7 12:06:28 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c, ch-parse.y, ch-tree.h, ch-typeck.c: Revert + files to their pre-init-change state. + +Mon Sep 6 15:28:27 1993 Bill Cox (bill@rtl.cygnus.com) + + Preliminary adaptation to rms' new initializer code. + * ch-decl.c (do_decl): Call chill_digest_init, not + digest_init, which rms made static. + * ch-expr.c (chill_truthvalue_conversion): Delete C- + specific code. + * ch-loop.c (init_loop_counter): Indent for readability. + * ch-parse.y (untyped_expr, primval, tupleelement): Call new init code. + * ch-tree.h: Prototype changes for new init code. + * ch-typeck.c (chill_expand_tuple): Call new init code. + * chill.texi: Add necessary '-f' prefix on options. + +Wed Sep 1 13:21:53 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-convert.c (build_array_type_for_scalar), + ch-tasking.c (build_chill_receive_case_end): Index type + specification is now chain of types (not chain of TREE_LIST). + * ch-satisfy.c (satisfy): Don't try to satisfy the + abstract_origin of an ALIAS_DECL if DECL_POSTFIX_ALL. + * ch-expr.c (build_chill_binary_op): If pass 1, do NOT + call finish_chill_binary_op. + * ch-parse.y (arrayindex): Simplify. + +Tue Aug 31 14:57:35 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (print_lang_decl): Print weak-name status. + (print_lang_identifier): Print signal_data as T or F. + * ch-lex.l (convert_bitstring, convert_charliteral, + convert_float, convert_number): Pass string directly to convert + as a parameter. Return token code consistently, return 0 + for error. + (equal_number): Parse differently, allowing hex, binary + and octal constants. + * ch-parse.y (dowithaction, structured_variable): Only + push/pop scopes once per DO WITH. + (structured_variable_list): Check ignore_actions flag here. + * gcc.c: Delete 'traditional' from string, add 'itu' + as the standard flag's name. + +Mon Aug 30 15:12:26 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-typeck.c, ch-tree.h (build_chill_range_type): Take 3 + parameters instead of 2 (explicit low and high bounds). + * ch-parse.y (arrayindex): Build range type from low:high. + (rangesize, optrangesize): Removed. + (where appropriate): Use new build_chill_range_type interface. + * ch-grant.c: Clean up writing of range and array types. + * ch-satisfy.c (satisfy): Don't ignore the return value of + layout_chill_array_type. (It may be an error mark.) + * ch-typeck.c (build_chill_array_type): Simplify. + * ch-typeck.c (layout_chill_array_type): Clean up checks. + +Fri Aug 27 12:55:59 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-decl.c (decl_temp1): Set DECL_ASSEMBLER_NAME. + (push_chill_extern_function) Don't set current_function_decl. + * ch-parse.y (tupleelement): Don't wrap index is a TREE_LIST + (i.e. a range), don't wrap a PAREN_EXPR around it. + * ch-grant.c (decode_constant): For tuple CONSTRUCTORs, + add support for ranges in purpose. + +Wed Aug 25 16:58:13 1993 Bill Cox (bill@rtl.cygnus.com) + + * .cvsignore: Add g++.sum + * ch-actions.c (chill_expand_result): Stop building a temp. + Assign the expression directly into function's DECL_RESULT. + * ch-decl.c: Add formfeeds. + (start_chill_function): Don't need to zero DECL_RESULT's pointer any more. + (push_chill_function_context): Delete C pedwarn message. + * ch-expr.c: Move builtin functions together. + * ch-parse.y (end_function): Delete unused code. + Reformat %union for readability. Delete _MAX and _MIN + tokens. + +Wed Aug 25 13:24:06 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (get_result_tmp_name): Delete unused function. + (chill_expand_result, chill_expand_return): Rewrite for + 2-pass. + * ch-decl.c (start_chill_function): NULL out the RESULT_DECL's + chain field, so we can make a temp, evaluate a RESULT action's + expression into it, and hang it on here. + * ch-parse.y (end_function): Look for RESULT temps to emit. + (assertaction): Indentation. + +Wed Aug 25 08:34:36 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-lex.l, ch-parse.y: Delete CONTINUE_EVENT token. + It wasn't used anyway. + +Tue Aug 24 17:51:18 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (chill_expand_result, chill_expand_return): + No need to make a temp for the value, just use DECL_RESULT. + +Tue Aug 24 16:38:24 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-tree.c (layout_powerset_type): Remove redundant code. + Generalize (in error message) to also handle bitstrings. + * ch-tree.c (build_bitstring_type): Remove all layout-like + stuff, and defer that to layout_powerset_type. + * ch-expr.c (chill_expand_expr): For various SET_xxx_EXPRs, + allocate stack temp for target using correct mode. + +Tue Aug 24 10:27:19 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c, ch-decl.c, ch-except.c, + ch-grant.c, ch-lang.c, ch-loop.c, ch-tree.h, + ch-typeck.c: Change build_modify_expr calls to + build_CHILL_modify_expr calls. + * ch-expr.c (build_chill_modify_expr): Adapted from + build_modify_expr in c-typeck.c. + +Mon Aug 23 16:48:39 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c, ch-convert.c, ch-decl.c, ch-expr.c, + ch-grant.c, ch-lang.c, ch-lex.l, ch-loop.c, + ch-satisfy.c, ch-tasking.c, ch-tree.c, ch-typeck.c: + Major re-allocation of functions to files. + +Mon Aug 23 12:15:11 1993 Bill Cox (bill@rtl.cygnus.com) + + Thanks for the tip, Jim. + * Makefile.in: Add dependency lines for ch-except.o and + ch-satisfy.o. Correct dependency lines for ch-convert.o, + ch-expr.o, ch-inout.o, and ch-loop.o. + (chill, install-common): Add clean-up commands. + +Sat Aug 21 17:11:26 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (get_type_precision): New function. + (layout_enum): Call it. + * ch-tree.c (layout_powerset_type, build_bitstring_type): + Call it. + +Sat Aug 21 13:59:40 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (init_decl_processing): Define setbitpowerset + runtime function. + * ch-expr.c (chill_expand_assignment): Call setbitpowerset + to set a bit. + * ch-parse.y: Indentation. + +Fri Aug 20 17:29:56 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-parse.y: Delete unused %type declaration. + * ch-tasking.c (build_signal_struct): Delete return, since + function returns void. + * ch-typeck.c: Indent to standard. + * stor-layout.c: Fix comment. + * toplev.c: Change -L option ti -I. + * varasm.c (emit_set_data): Align set constant to word + boundary. + +Fri Aug 20 08:20:07 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c: Fix indentation, comments. + * ch-decl.c (push_chill_extern_signal): Use same interface + as build_signal_struct. + * ch-parse.y (quasi_signaldef): Move build_signal_decl + here to sigdef. Add quasi_signal to distinguish contexts + where sigdef gets used. + * ch-tasking.c: Replace make_signal_struct and build_signal_decl + with build_signal_decl, which doesn't loop through a + TREE_LIST. + * ch-tree.h: Fix protos. + +Wed Aug 18 17:36:53 1993 Bill Cox (bill@cygnus.com) + + * ch-actions.c: Fix comments. + * ch-decl.c (push_modedefs): Return the new decl. + (shadow_record_fields): Move pushlevel (0) calls into + the grammar, so they'll get done in both passes. + * ch-parse.y (dowithaction): Always compute & save # of + 'with' variables seen (both passes), and always pop that + number of levels. + (structured_variable_list): Always chain variables into a list. + (structured_variable): Put pushlevel here (from shadow_record_fields). + * ch-tasking.c: Indentation fixes. + * ch-tree.h: Change proto. + * chill.texi: Add Blue Book section numbers to unimplemented + features list. + +Wed Aug 18 15:48:43 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-actions.c (build_generalized_call): New function. + Classifies semantically (if pass 2) this that look like calls. + * ch-parse.y (call): Invoke build_generalized_call. + * ch-parse.y (sigdef): Use defining_occurrence instead of NAME. + * ch-parse.y (opt_untyped_exprlist): New non-terminal. + * ch-satisfy.c (satisfy): Handle CALL_EXPR. + +Tue Aug 17 16:36:15 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-decl.c (find_implied_types): Handle INTEGER_TYPEs (ranges). + +Mon Aug 16 18:07:36 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-tree.h (TUPLE_NAMED_FIELD): New macro. + * ch-parse.y (labelled structure tupleelement): + Set TUPLE_NAMED_FIELD flag. + * ch-grant.c (decode_constant): Check for TUPLE_NAMED_FLAG. + * ch-satisfy.c (satisfy): Check for TUPLE_NAMED_FLAG. + Do satisfy the elements of a CONSTRUCTOR even if call + chill_expand_tuple isn't correct. + * ch-satisfy.c (satisfy): Satisfy TYPE_TAG_VALUES of a RECORD_TYPE. + * ch-parse.y (label_spec): Defer any semantic checking until ... + * ch-decl.c (layout_chill_variants): ... here. + Also make sure to call layout_type on the union type. + * ch-decl.c (bind_saved_names): For weak names, allocate an + ALIAS_DECL, rather than a CONST_DECL. + + Add support for implied (weakly visible) names. + * ch-tree.h (DECL_WEAK_NAME): New macro. + * ch-satisfy.c (satisfy of IDENTIFIER_NODE): Don't complain + if lookup_name fails if LOOKUP_ONLY - name might be weakly visible. + * ch-decl.c (proclaim_name): Handle DECL_WEAK_NAME appropriately. + * ch-decl.c (concat_lists, find_implied_types): New functions. + * ch-decl.c (bind_saved_names): Search for implied names. + * ch-tree.h (C_DECL_VARIABLE_SIZE): Removed. + * ch-lang.c (layout_chill_struct_type): Don't use + C_DECL_VARIABLE_SIZE. + +Mon Aug 16 16:10:43 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c: Delete extra space in error message. + * ch-parse.y: Fix comment. + * expr.c (store_constructor): Avoid passing NULL to convert, + and getting back an error_mark_node and trying to process + *that* node. + +Mon Aug 16 14:41:29 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-decl.c: Add more overview comments. + * ch-decl.c (proclaim_decl): New function. + * ch-decl.c (temp_pushdecl, struct shadowing): Removed. + * ch-decl.c (bind_saved_names): Remove blevel parameter; + use current_scope global instead. Do some other cleanups. + * ch-decl.c (save_expr_under_name): Create an ALIAS_DECL. + * ch-decl.c (pushdecllist, save_expr_under_name): Use proclaim_decl. + * ch-satisfy.c (satisfy, safe_satisfy_decl): Be more careful + to not do inappropriate things (e.g. type layout) if LOOKUP_ONLY. + + * chill.texi: Start collecting Chill documentation here. + * ch-parse.y (mode): Ignore READ specifier, for now. + +Mon Aug 16 11:13:07 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (chill_comptypes): Correct handling reference + of type 1. + (build_chill_length, build_chill_num, + build_chill_sizeof): Convert result to CHILL integer. + (build_chill_function_call): Clean up INOUT and OUT + parameter handling. + * ch-decl.c (build_chill_function_type): Handle INOUT and + OUT parameters. + * ch-loop.c: Fix up comments. + * ch-parse.y: Fix up comments. + +Sun Aug 15 15:06:01 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_chill_lower, build_chill_upper): + Re-write, mostly to delete bogus ENUMERAL_TYPE handling. + * ch-decl.c (save_expr_under_name): New function to save + addressing expressions for DO WITH and DO FOR handling. + (handle_one_level): Call new function. + * ch-loop.c (init_loop_counter): Call it here, too. + Check lp->user_var before passing it to lookup_name. + (high_domain_value, low_domain_value): Correct call + to build_chill_upper and build_chill_lower. + (begin_chill_loop, end_chill_loop): Move pushlevel, + poplevel up into the grammar, so they're done in both + passes. + * ch-parse.y (doaction): Unconditionally make a scope + for a loop, pop it later. + (controlpart, iteration): Save return from + build_chill_iterator. + * expr.c: Readability changes. + +Sat Aug 14 19:42:32 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-expr.c (chill_expand_case_expr): Complete rewrite + for 2-pass. About 1/2 the size, too. + * ch-parse.y (actionlabel): Unconditionally do INIT_ACTION. + This assures that a label preceding a module's first action + is enclosed in the module-level function that's generated. + +Sat Aug 14 14:56:07 1993 Per Bothner (bothner@kalessin.cygnus.com) + + Re-implement how EXIT is done. + 'LABEL: BEGIN ... EXIT LABEL; ... END' is converted to + 'LABEL: BEGIN ... GOTO EXIT!LABEL; ... EXIT!LABEL: ; END'. + Hence we no longer need any support for EXIT in stmt.c. + * stmt.c (stamp_nesting_label, expand_exit_labelled): Removed. + * ch-actions.c (lookup_and_handle_exit): Handle like 'GOTO EXIT!name'. + * ch-tree.c, ch-tree.h (munge_exit_label): New function. + * ch-parse.y: Re-write bracked actions to support EXIT new way. + * ch-decl.c, ch-loop.c: Remove calls to stamp_nesting_level. + * ch-parse.y: Replace SC by new token semi_colon, which + resets the 'label' global. Also make sure that label gets + reset whenever we might start a new action statement. + * ch-parse.y (possibly_define_exit_label): New function. + + * ch-except.c (chill_start_on): Wrap an ADDR_EXPR round the jmpbuf. + * ch-grant.c (chill_finish_compile): Make sure + get_file_function_name is only called once. + * ch-expr.c (chill_expand_array_assignment): Use store_expr, + instead of incorrectly calling emit_block_move. + + * ch-parse.y (procedure): Call push_chill_function_context + in *both* passes (if nested). + * ch-parse.y (primval): Call get_type_of before chill_expand_type. + * ch-parse.y (tupleelement): Only build PAREN_EXPR during pass 1. + +Fri Aug 13 16:36:36 1993 Per Bothner (bothner@kalessin.cygnus.com) + + Re-implement GRANT and SEIZE, to support prefixes and prefix + rename. All of the Blue Book semantics for these should + now work (except FORBID). + * ch-tree.def, ch-tree.h (DECL_OLD_PREFIX, DECL_NEW_PREFIX, + DECL_POSTFIX, DECL_POSTFIX_ALL): New ALIAS_DECL layout and macros. + * ch-tree.c (get_identifier3, build_alias_decl, decl_old_name, + decl_check_rename): New functions. + * ch-lex.h, ch-lex.l, ch-grant, ... (grant_all_seen): Removed. + * ch-satisfy.c (satisfy_decl): Handle SYN initialized with tuple. + * ch-satisfy.c (satisfy_decl): Set DECL_ASSEMBLER_NAME here ... + * ch-decl.c (pushdecllist): ... instead of here, which is too late. + * ch-grant.c (decode_prefix_rename): New function. + Use to print out GRANT and SEIZE statements. + * ch-decl.c (ALL_POSTFIX): New global variable. + * ch-decl.c (bind_saved_names, pop_module): Change to use new + ALIAS_DECL layout, and support general prefix rename and ALL. + * ch-decl.c (various places): Don't barf if DECL_ANME is NULL. + * ch-parse.y (build_prefix_clause): New function (handle PREFIXED). + * ch-parse.y (optprogendname, optname): Rename to opt_end_label. + * ch-parse.y: Add support for compound name strings, but defer + using all over teh place, due to parser ambiguities. + Howver, do use defining_occurrence where appropriate. + * ch-parse.y: Re-write syntax and semantics of GRANT and SEIZE + statements to support Blue Book functionality. Neato! + +Fri Aug 13 17:10:52 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c: Redo decl_temp1 calls to save resulting decl. + * ch-decl.c (decl_temp1): Rewrite to return generated decl. + (decl_temp): Deleted. + * ch-loop.c: Redo decl_temp1 calls to save resulting decl. + * ch-satisfy.c (safe_satisfy_decl): Reorder switch for + readability, add comment. + * ch-tasking.c: Redo decl_temp1 calls to save resulting decl. + * ch-tree.h: Delete decl_temp proto, change decl_temp1. + +Fri Aug 13 13:39:59 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (decl_temp): Break the chain of decls. This + prevents an infinite loop. + * ch-lang.c (make_chill_pointer_type): Fix compiler warning. + * ch-lex.l (equal_number): Check passes in looking up a + symbolic value. + * ch-parse.y: Fix comments. + * ch-tasking.c (tasking_setup): Only act in pass 2. + (make_signal_struct, build_signal_decl, + build_chill_receive_case_label): Don't go indirect + thru NULL decl pointer. + +Thu Aug 12 11:02:34 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (route_to_predefined_function): New function called + from build_chill_function_call, to call the proper predefined routine. + (build_chill_card, build_chill_length, build_chill_lower, + build_chill_max, build_chill_min, build_chill_num, + build_chill_pred, build_chill_sizeof, build_chill_succ, + build_chill_upper): Rewritten to run only in pass 2. + * ch-decl.c (init_decl_processing): Build predefined functions for card, + length, lower, max, min, num, pred, sizeof, succ and upper. Delete + unused builtin_function calls. + * ch-grant.c (chill_finish_module_code): Save current_function_decl + before calling finish_chill_function, and use that to build the + initializer structure. + * ch-lex.l: Remove following tokens, since they're now just predefined, + not reserved: card, length, lower, max, min, num, pred, sizeof, succ + and upper. + * ch-loop.c: Readability, indentation changes. + * ch-parse.y: Delete tokens for card, length, lower, max, min, num, pred, + sizeof, succ and upper. Delete special rules for calls to these. + Delete mode_location and upper_lower_arg non-terminals. + (pmodearg): Eliminate convolutions. + (call): Add rule for typename parameter. + * ch-tasking.c: Readability changes. + * ch-tree.h: Add prototypes. + +Thu Aug 12 00:38:17 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-decl.c (save_decl): Set DECL_CONTEXT (decl). + * ch-grant.c (chill_finish_module_code): Call + finish_chill_function with nested==0. + * ch-tree.h, ch-decl.c, ch-tasking, ch-parse.y: Rename + {push,pop}_c_function_context to {push,pop}_chill_function_context. + * ch-parse.y (end_function): If nested, call + pop_chill_function_context regardless of which pass we're in. + +Wed Aug 11 02:34:02 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-actions.c (finish_chill_binary_op): Handle error marks. + * ch-decl.c (do_decl): Laying out decl and generating rtl + is too late to do here (if there are forward references), so ... + * ch-satisfy.c (satify_decl): ... do it here instead. + * ch-decl.c (finish_enum): Fixup types of enum decls now. + * ch-satisfy.c (safe_satisfy_decl): New routine. Supports + checking illegal cyclic definitions. + All *satisfy* routines now take a 'chain' parameter (instead + of 'lookup_only') used for checking cycles. + * ch-satisfy.c (satisfy_decl): Return DECL_INITIAL if appropriate. + * ch-satisfy.c (satisfy): Lots of little fixes. + + * ch-lex.l (init_lex): Make all the standard ridpointers be + lowercase, so that lookup_name on lower-cased user input + will find the standard types. + * ch-lex.l: Remove all the standard types, in effect + converting them from reservered anmes to predefined names. + * ch-lex.l, ch-parse.y: Remove PREDEF_MODEDECL - no longer used. + * ch-grant.c (gfile): Rename to grant_file_name. + * ch-lex.l (yywrap): Don't try to seize current grant_file_name. + + * initname.c: Removed. get_file_function_name is now in tree.c + * Makefile.in (CHILL_OBJS): Remove initname.o + + * ch-decl.c (do_decl): New function, based on loop body of do_decls, + * ch-decl.c (do_decls): Just call do_decl. + * ch-grant.c (chill_finish_module_code): Minor cleasnups. + Use new do_decl routine. Clear init_entry_decl's source line. + * ch-grant.c (print_proc_tail): Fix for new param list structure. + * ch-parse.y (whatpdef): Removed. Cleaned up procedure + and process, allowing proper end-label-checking. + * ch-typeck.c (build_chill_cast): Remove decl->type conversion. + +Wed Aug 11 00:33:44 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-decl.c (layout_enum): Don't call rest_of_type_compilation. + + * ch-lex.l (RETURN_PREDEF): Don't call lookup_name. + * ch-expr.c (build_chill_indirect_ref): Call get_type_of. + * ch-parse.y (call): Call get_type_of before build_chill_cast. + +Tue Aug 10 21:33:10 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-actions.c (build_char_array_expr): If a concat operand is + a constant char, convert it to a STRING_CST. + * ch-decl.c (finish_decl): Call rest_of_decl_compilation + with toplev=0. + * ch-typeck.c (build_chill_cast): Allow type to be TYPE_DECL. + + * ch-parse.y (actionlabel): Call define_label in both passes. + * ch-actions.c (lookup_and_expand_goto, lookup_and_handle_exit): + New functions, using lookup_name to find LABEL_DECLs. + * ch-parse.y (GOTO, EXIT): Use above new functions. + * ch-tasking.c (struct rc_state_type *current_rc_state): + Use to store state for the current receive case statement. + (build_chill_receive_case_start, build_chill_receive_case_end): + Don't generate temporary LABEL_DECL; just use gen_label_rtx. + * ch-decl.c: Remove all stuff dealing with specific label scopes, + including functions push_label_level, pop_label_level. + * ch-decl.c (define_label): Re-write for 2-pass. + * ch_tree.h (lang_identifier): Removed label_value. + * ch-tree.h (IDENTIFIER_LABEL_VALUE): Removed. + + * ch-parse.y (modename): Changed to yield identifier, not type. + This allows following changes, which work better for 2-pass: + (location): primval ARROW optmodename -> primval ARROW optname. + (primval): Tuple can now be prefixed by unsatisfied name. + + * ch-actions.c (chill_grant_only): Renamed to grant_only_flag. + * ch-lex.l (yywrap): Don't read seizefiles if grant_only_flag. + * ch-decl.c (switch_to_pass_2): Exit if grant_only_flag, + + * ch-satisfy.c (satisfy): Support CONSTRUCTOR, REFERENCE_TYPE. + * ch-satisfy.c (satisfy_decl, satisfy): Kludge around + to a TYPE_DECL can be simplified to its type. + * ch-expr.c (build_chill_indirect_ref): New function. + * ch-lex.l (prepare_paren_colon): Make kludge even uglier, + since the left paran might already have been seen. + * ch-lang.c (make_chill_pointer_type): Allow parameter + to select pointer or reference type. + (build_chill_reference_type): New function. + Either function: Be more careful (in case arg is identifier). + * ch-except.c (initialize_exceptions): Make + exception_stack_decl be public. + * ch-actions.c (build_char_array_expr): Can only + constant fold if operands are STRING_CST. + * ch-grant.c (raw_decode_mode): Allow TYPE_DECL. + (chill_finish_compile: Set TREE_PUBLIC of init function to 1. + +Tue Aug 10 17:55:12 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_char_array_expr): Set array sizes correctly. + * ch-decl.c: Fix comment. + * ch-parse.y (pmodearg): Build tree_list in all cases. + * varasm.c (assemble_tasssking_entry): Delete unused code. + +Tue Aug 10 13:58:21 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_char_array_expr): save/restore + a tree's constant status. + (build_chill_binary_op): Don't convert an expression + if the type we're converting to is NULL. + * ch-convert.c (maybe_turn_scalar_into_array): New functions. + Call it from convert, and from .. + * ch-expr.c (chill_expand_assignment): call new function. + Move convert code earlier, too. + * ch-decl.c (lookup_name): Delete bogus error message. + * ch-tree.h (CH_NOVELTY, SCALAR_P): Handle NULL_TREE. + Add protos. + * ch-typeck.c (valid_array_index): Comment out some strange code + which now seg faults. + (chill_expand_tuple): Re-enable prepending of VARYING + length to a tuple. + (chill_similar): Return FALSE if either mode is NULL_TREE. + +Tue Aug 10 07:29:31 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c: Delete proto for unused function shadow_tag_warned. + Add commented-out calls to pushtag, in case we decide later + to fill in TYPE_STUB_DECL for dbxout. + * ch-lang.c (build_chill_struct_type): Add commented-out + calls to pushtag, in case we decide later to fill in + TYPE_STUB_DECL for dbxout. + +Mon Aug 9 23:09:08 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-decl.c (chill_seize): Don't get_next_next in pass 2. + * ch-decl.c (get_next_decl): Skip ALIAS_DECLs. + * ch-decl.c (bind_saved_names): Handle SEIZE ALL. + * ch-lang.c (layout_chill_struct_type): Don't call + rest_of_type_compilation - it crashes without a TYPE_STUB_DECL. + * initname.c (get_file_function_name): Get new file and + function for language-independent constructor name generation. + * ch-grant.c (get_init_function_id): Removed. + * ch-grant.c (chill_finish_compile): Call get_file_function_name + instead of get_init_function_id. + +Mon Aug 9 18:33:36 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c: Formfeeds and comments. + * ch-parse.y (quasi_formpar): Treat just like real formpar. + Eliminate restriction on single name. + (pmodearg, pmodearglist): Remove ignore_exprs stuff. + +Mon Aug 9 17:21:14 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-lex.h (enum rid), ch-lex.l (init_lex): Added RID_ALL. + * ch-lang.c (build_chill_pointer_type): Layout the pointer type, + if the pointee is laid out, even if pass==1. + * ch-parse.y: Set ignore_exprs=(pass=2) for entire spec module. + +Mon Aug 9 15:44:01 1993 Bill Cox (bill@rtl.cygnus.com) + + This version compiles the 5-line program. Thanks, Per! + * ch-decl.c (print_lang_decl, print_lang_identifier): + Add appropriate calls to indent_to(). Rename reverse_scopes + to switch_to_pass_2, and wait to set pass = 2 until + here. + * ch-grant.c (chill_finish_module_code): Set module_init_list + non-NULL in pass 1; in pass2, chain on the module_init + structure's decl. + (chill_finish_compile): Clear module_init_list to NULL. + * ch-parse.y (quasi_formparlist): Rewrite to avoid seg fault. + Rename reverse_scopes to switch_to_pass_2, delete setting + of pass = 2. + * ch-tree.h: Rename reverse_scopes proto. + +Mon Aug 9 13:21:34 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-decl.c (build_enumerator): If name is NULL, + don't call save_decl or get_next_decl. + * ch-decl.c (layout_enum): Fix calculation of next value. + * ch-grant.c (print_enumeral): Re-do for new 2-pass scheme. + * ch-grant.c (decode_constant): Better CONSTRUCTOR support. + +Mon Aug 9 11:59:12 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c, ch-convert.c, ch-decl.c, ch-grant.c, + ch-lang.c, ch-parse.y, ch-tree.h: gcc -Wall cleanup. + Lots of new prototypes. + +Mon Aug 9 01:00:33 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-lex.h: Remove unused RID_'s. Make sure RID_MAX is last. + * ch-decl.c (init_decl_processing): Moved ridpointers + initialization to init_lex(). Use them consistently. + * ch-lex.l (RETURN_PREDEF): New macro. Uses ridpointers + for all preferedined types. + * ch-lex.l (init_lex): Upper case all RIDs, so grantfiles + (and error messages?) will use uppercase. + * ch-decl.c (build_chill_enumerator): Merged into build_enumerator. + * ch-lang.c (finish_chill_enum): Merged into ... + * ch-decl.c (finish_enum): .... this function. + * ch-decl.c (layout_enum): New function. Does all the pass-2 + stuff for enumerations. + * ch-decl.c (finish_enum, start_enum): Only trivial pass-1 stuff. + * ch-satisfy.c (satisfy): Support ENUMERAL_TYPE. Improve ranges. + * ch-parse.y: Check ignore_exprs instead of ignore_decls when + parsing and building types. + +Sun Aug 8 16:26:40 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-lex.h: Add some missing RID_'s. + * ch-decl.c (init_decl_processing): + +Sun Aug 8 15:32:54 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-grant.c (module_has_actions): Delete this and all + references. It was a botch. + (chill_finish_module_code): Move finish_chill_function_call inside + the test whether actions were found at module level. + Use current_function_name in the initializer build, + and init_entry_id in the module_list setup. + (chill_finish_compile): Call lookup_name to get the + decl from a module_init_list entry. + * ch-parse.y: Revert module_has_actions additions. + * ch-satisfy.c (satisfy): After satisfying the type referenced + by a pointer_type, call layout type for the pointer. + * ch-tasking.c (tasking_registry): Only active in pass 2. + * ch-typeck.c: Call build_chill_pointer_type everywhere. + +Sun Aug 8 13:13:29 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-tree.def (PAREN_EXPR): New unary op: '(' EXPR ')'. + * ch-parse.y (primval): If pass 1, generate PAREN_EXRR. + * ch-satisfy.c (satisfy): Reduce PAREN_EXPR to its operand. + * ch-grant.c (decode_const): Handle PAREN_EXPR. + * ch-decl.c (pop_module): Fix think. Inprove error message. + +Sun Aug 8 10:31:04 1993 Bill Cox (bill@rtl.cygnus.com) + + Generally, replace 'function' with 'procedure' + and 'type' with 'mode' in error/warning messages. + * ch-actions.c: See Generally. Fix up 'too many' and 'too few' error msgs. + * ch-decl.c: See Generally. + (init_decl_processing): Call build_tasking_enum from here. + Now, it doesn't need a flag to do its work only once. + Also, build the TaskingStruct decl here. + * ch-grant.c: Remove references to `current_grant_file'; + there's now only one. See Generally. Do gcc -Wall cleanup. + * ch-lex.l: Remove references to `current_grant_file' + and delete USE_GRANT_FILE token. + * ch-parse.y: Remove call to build_tasking_enum, and its extern. + * ch-tasking.c (tasking_setup): Move TaskingStruct build + to init_decl_procesing. Delete build_tasking_enum calls. + * ch-tree.c: See Generally. + * ch-tree.h: Add proto for build_tasking_struct. + +Sun Aug 8 08:59:23 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c: Make unnamed_module_number static, reset it to zero + before pass 2, so same module names get generated in both passes. + (push_module): Return user name or generated name. + (init_decl_processing): Build __tmp_initializer_type. + Code moved from chill_finish_module_code. + * ch-grant.c: New flag module_has_actions. Set TRUE by push_actions, + used, reset by chill_finish_module_code. Replaces test of + module_function_name. Shuffled finish-up code to end of module. + (chill_finish_module_code): Use global_bindings_p to determine + 'nested' parameter for finish_chill_function. Use new + module_has_actions flag to trigger generation of module_init list + entry. We now can handle not only multiple modules per file, + but modules nested inside functions (I think). + * ch-lang.c (build_chill_pointer_type): Restore missing assignment. + * ch-parse.y (push_actions): Set module_has_actions flag. + (modulion, spec_module): Save possibly-generated module name + returned by push_module. + * ch-satisfy.c (satisfy): Put switch cases into alpha order, add + case for POINTER_TYPE. + * ch-tasking.c: Replace build_pointer_type calls with + build_chill_pointer_type calls. + * ch-tree.h: Fix, add prototypes. + +Sat Aug 7 17:32:22 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-parse.y: Remove many useless tests for ignore_decls. + * ch-parse.y: Remove obsolete support for _EXTERN and _INIT. + * ch-parse.y: Reset ignore_exprs while parsing declarations, + but handle initializers appropriately. + * ch-grant.c (decode_constant): Update (for 2-pass) support + for CONSTRUCTOR and SET_TYPE. + * ch-grant.c (chill_initializer_name): Renamed to + module_function_name. + * ch-grant.c (function_generated): Removed; + use module_function_name != NULL instead. + * ch-tree.h, ch-parse.y: Removed unused current_locnamelist. + * ch-decl.c (push_modedef): Simplify to take just one mode. + * ch-tasking.c (make_process_struct, make_signal_struct): + Change calls to push_modedef correspondingly. + * ch-tree.c (build_powerset_type): Move the stuff that's + suitable for pass 1 into new function make_powerset_type, + and that for pass 2 into new function layout_powerset_type. + * ch-lang.c: Move pass-1 stuff from build_chill_pointer_type + into new function make_chill_pointer_type, and split + build_chill_struct_type into make_chill_struct_type + and layout_chill_struct_type. + * ch-decl.c (grok_chill_variantdefs): Similarly split up + into make_chill_variants and layout_chill_variants. + * ch-satisfy.c (satisfy): Add support for SET_TYPE, and UNION_TYPE. + Call layout_chill_struct_type for RECORD_TYPE. + +Sat Aug 7 09:59:55 1993 Bill Cox (bill@rtl.cygnus.com) + + Fixup previous check-in. + * ch-decl.c: Restore unnamed_module_number, which *was* + used after all. + * ch-grant.c (get_init_function_id): Return type s.b. tree. + +Sat Aug 7 09:28:17 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (print_lang_decl, print_lang_type): Add + correct parameter list. Add print statements for + nesting_level, signal_dest, buffer_size, and the + signal_data flag. + (decl_temp, decl_temp1): Delete unused code. + (init_decl_processing): Call build_instance_type and + build_tasking_type in both passes. + Generally change current_scope comparisons against + global_scope to global_biidings_p calls. + * ch-except.c (push_handler): Add space before parameter paren. + * ch-grant.c (chill_start_module, chill_finish_module, + chill_finish_compile): Complete re-write for 2-pass and + multiple modules per source file. + * ch-parse.y (pass1_2): Call chill_finish_compile once each pass. + * ch-tasking.c: Diffused small adaptations to 2-pass. + * ch-tree.h (print_lang_decl, print_lang_type): Correct + the prototypes. + (chill_finish_module_code): Add module name parameter. + * ch-typeck.c: Fix comments, add whitespace. + +Fri Aug 6 12:17:07 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-decl.c (temp_pushdecl, bind_saved_names): The simple-minded + way I allocated the shadow_list on an obstack was too fragile, + so just use xmalloc/free instead. + +Fri Aug 6 08:31:49 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-satisfy.c (satisfy): Satisfy TYPE_MIN_VALUE and + TYPE_MAX_VALUE for vanilla integer type. Only need + to satisfy TREE_TYPE for integer range type. + +Fri Aug 6 00:53:11 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-lang.c (build_chill_range_type): Split up into two new + functions (make_chill_range_type, layout_chill_range_type); + only former part is done in pass 1. + * ch-lang.c (build_chill_array_type): Split up in the same + way (yielding make_chill_array_type, layout_chill_array_type). + * ch-satisfy.c (satisfy): Handle array and range types. + * ch-tree.h (TYPE_RANGE_PARENT): Removed. Not used. + * ch-parse.y (mode2): Handle optional rangesize. + +Thu Aug 5 15:13:42 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-grant.c (print_an_int): Re-enable (but don't search for SYN). + * ch-grant.c (raw_decode_mode): Support printing + of an IDENTIFIER_NODE (unresolved type name). + * ch-grant.c (decode_constant): Support printing of an unresolved + IDENTIFIER_NODE, as well as some kinds of binary operations. + * ch-grant.c (grant_one_decl): Don't call globalize_decl. + + * ch-grant.c (decode_decl): Add support for ALIAS_DECLs + (from SEIZEs and GRANTs). + * ch-grant.c: Remove support for multiple grantfiles. + * ch-grant.c, ch-parse.y: Removed grant_count, for now at least. + * ch-lex.h (in_seizefile): Moved to ch-tree.h. + * ch-tree.h (CH_DECL_SEIZED), ch-tasking.c, ch-decl.c: Removed. + * ch-tree.h (CH_DECL_GRANTED): Added. + * ch-actions.c (build_chill_exception_decl): Use + IDENTIFIER_LOCAL_VALUE, not obsolete IDENTIFIER_GLOBAL_VALUE. + * ch-grant.c (write_grant_file -> write_spec_module): Rename. + Change to accept list of remember_decls and granted_decls. + +Thu Aug 5 11:58:21 1993 Stan Shebs (shebs@rtl.cygnus.com) + + * expr.c: Remove no-longer-used PROCESS_DECL tree type. + +Thu Aug 5 10:03:27 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (init_decl_processing): Only build types + in pass 2, since dbxout machinery is only ready for + output then. + * ch-grant.c (chill_finish_module_code): Do most of the + work in pass 2. + +Thu Aug 5 06:54:10 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-parse.y (receivecaseaction): Pass label-group + numbers around. + * ch-tasking.c (build_chill_receive_case_start): + Generate unique labels for each case, pass back + the label-group's number. + (build_chill_receive_case_end): Accept label-group + number from parser, use it to build labels + * ch-tree.h: Change prototypes. + +Wed Aug 4 13:21:13 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-decl.c (decl_temp1): Call finish_decl(). + + * ch-grant.c (chill_start_module_code): Don't call + push_c_function_context - not needed since we're not nested. + * ch-grant.c (chill_finish_module_code): Call finish_chill_function + with nested=0, not 1 (twice). + * ch-grant.c (chill_finish_module_code): Clear function_generated. + +Tue Aug 3 20:06:22 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-decl.c (push_chill_extern_function): Set TREE_PUBLIC. + +Tue Aug 3 19:08:51 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_chill_function_call): Handle parameter + attributes better - LOC still not handled. + * ch-tree.def: Amplify comment. + +Tue Aug 3 18:07:36 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-lex.l (handle_use_seizefile_directive): Update + next_file_to_seize correctly. + * ch-actions.c (build_chill_abs): Create an ABS_EXPR, not an rts_call. + +Tue Aug 3 14:03:50 1993 Bill Cox (bill@rtl.cygnus.com) + + First Aid, not real long-term fixes... + * ch-decl.c (pop_module, lookup_name_for_seizing): Check + current_module pointer for NULL before using it. + (init_decl_processing): Set up wchar_type_node before using it. + * ch-grant.c (chill_finish_module_code): Don't build + initializer_type or initializer_decl until pass 2. + * ch-lex.l: Readability - single statement per line. + * ch-tasking.c (make_process_struct): Hide get_parm_info + call inside #ifdef for now. + +Tue Aug 3 09:59:23 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (pushdecllist): Add forward decl. + * ch-parse.y (handler): Add rules which allo + empty onalternativelist. + * ch-tasking.c (get_tasking_code_name): Add + cast of alloca() result. + +Tue Aug 3 00:11:40 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-lex.l (handle_use_seizefile_directive): Make files_to_seize + a queue. Check for duplicate use_seizefile-s immediately. + * ch-lex.l (yywrap): Use this more portable mechanism, + rather than the flex-specific <>. Also, clear saw_eof. + * ch-lex.l: Don't call push_module/pop_module automatically. + * ch-decl.c (push_chill_extern_function: Modify for 2-pass. + +Mon Aug 2 14:24:59 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-parse.y: Rename actionstatement -> nonempty_actionstatement. + New actionstatement is now nonempty_actionstatement | SC. Use + where appropriate. This is closer to Blue Book terminology. + + * ch-tree.def (ALIAS_DECL): New tree type. + * ch-decl.c: Merged all the code we need (I hope) from c-decl.c, + which is no longer used for cc1chill. + * c-decl.c: Remove all Chill-related code. + * Makefile.in (CHILL_OBJS): Don't use c-decl.o. + * ch-decl.c: No longer use IDENTIFIER_GLOBAL_VALUE anywhere. + Introduce a 'nesting_level' level concept instead. + * ch-decl.c: Merged push_scope into pushlevel; pop_scope into + poplevel; struct scope and struct binding_level. + * ch-decl.c: Other major name lookup algorithm changes. + * ch-tree.h (struct lang_identifier): Remove granted_value field. + * ch-tree.h (IDENTIFIER_GRANTED_VALUE macro): Removed. + * ch-tree.h (DECL_NESTING_LEVEL): New macro. + * ch-satisfy.c (satisfy, satisfy_decl): New 'lookup_only' arg. + * ch-tree.h (struct module): New fields nesting_level, granted_decls. + * ch-grant.c (seize_implied_names, do_seize, chill_seize): Move ... + * ch-decl.c: ... here. + * ch-grant.c (start_chill_function2): Remove. + * ch-grant.c (chill_start_module_code): Now called in both passes. + * ch-actions.c (lang_init): Code moved to ... + * ch-decl.c (init_decl_processing): ... here. + * ch-actions.c (chill_expand_result, chill_expand_return): + Handle being called during pass 1. + * ch-lex.l (name_type_signal): Don't try lookup_name during pass 1. + * ch-parse.y (PUSH_ACTION, push_action): Is now invoked during + both passes, for the sake of chill_start_module_code. Change all + actions rules to invoke PUSH_ACTION unconconditionally. + * ch-parse.y, ch-decl.c (push_module): Module label is now optional. + +Mon Aug 2 15:02:32 1993 Bill Cox (bill@rtl.cygnus.com) + + * expr.c (store_constructor): Convert library function + parameters to proper integer precision before calling + emit_library_call. + +Mon Aug 2 08:46:06 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-grant.c (seize_implied_names): Check POWERSET's + base type for names to seize. + +Fri Jul 30 19:59:30 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-tree.h: Delete unused definition of JOINER + macro. Expand comment about INSTANCE_TYPE. + +Thu Jul 29 14:57:11 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-convert.c (unreferenced_type_of): New function. + (convert): Call new function. + +Thu Jul 29 07:34:57 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-lex.l: Allow C-style comments before the module + header. Use #undef to assure that strchr isn't a + macro (portability), and remove the extra paren- + theses in its extern name. + (check_newline): Call getlc less often, so that user + labels aren't lowercased before their time. Add BEGIN + INITIAL before starting pass 2, so the header is + correctly ignored. + +Wed Jul 28 14:23:24 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-grant.c (chill_start_module_code): Cast alloca() + return value. + +Wed Jul 28 12:39:51 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com) + + * ch-grant.c: remove extra parens around extern function + declarations (they confuse the DECstation compiler) + +Wed Jul 28 12:28:56 1993 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: Stop deleting flex's #line lines. + +Wed Jul 28 07:05:25 1993 Bill Cox (bill@cygnus.com) + + Adjust after FSF merge: + * calls.c (expand_call): Add comment. + * ch-expr.c: Add newline. + * expmed.c (store_split_bit_field): Add comment. + +Tue Jul 27 17:32:13 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_chill_binary_op): Set code0 and + code1 only in pass 2. + (get_result_tmp_name): Cast alloca return for portability. + * ch-decl.c (pop_module): Test current_module ptr before + using it. + * ch-lex.l: Set lineno and input_filename for pass 2 + error messages. + +Tue Jul 27 15:14:06 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-lex.l: Fix the syntax error at line 329. Will I + *ever* quit fixing these in the ch-lex.c file? Stay tuned.. + +Tue Jul 27 15:01:25 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-lex.l: Pervasive rewrite for queueing seize files, + then parsing them at the end of pass 1. Still some + problems. + +Tue Jul 27 07:40:39 1993 Bill Cox (bill@rtl.cygnus.com) + + * chill.in: Check for .i suffices only, and use -xchill + to bracket the argument. + +Thu Jul 22 19:17:23 1993 Bill Cox (bill@rtl.cygnus.com) + + * c-decl.c (print_lang_identifier): Oops. Syntax error. + +Thu Jul 22 18:56:16 1993 Bill Cox (bill@rtl.cygnus.com) + + * c-decl.c (pushdecllist): Standardize loop for readability. + * ch-decl.c (decl_temp): Call pushdecllist to store decl + into hash table, move after current_scope declaration. + (decl_temp1): Move also. + * ch-lex.l (getlc): New function. Force char to lower case. + (check_newline): Call it, so comparisons work on uppercase + keywords. + +Wed Jul 21 22:17:22 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (do_decls): Add saving of decl tree + address into ID node in pass 2, reindent. + * ch-grant.c (start_chill_function2): New function. + (chill_start_module_code, chill_finish_module_code): Call it. + * ch-loop.c (build_temporary_variable, begin_for_range): + Replace start_decl, finish_decl pairs with decl_temp1 calls. + * ch-parse.y (parnamelist): Eliminate warning by eliminating + the %type for now. + * ch-actions.c, ch-tasking.c: Replace do_decls calls with + decl_temp1 calls. + * ch-tree.h: New prototypes. + * stmt.c (stamp_nesting_label): Check parameters for NULL. + * toplev.c (lang_options): Add '-L' option. + +Wed Jul 21 21:06:18 1993 Bill Cox (bill@rtl.cygnus.com) + + Portability fixes. + * ch-decl.c (save_decl): Make definition match forward declaration. + * ch-lex.l (RETURN_TOKEN): Don't use the 'do { .. return } while 0' + in the macro - Sun's compiler throws warnings. Thanks, Brendan. + * ch-satisfy.c (satisfy): Add forward declaration. + (SATISFY): Add outer parens for greater safety. + +Wed Jul 21 12:59:20 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * c-decl.c (pushdecllist): New function. Add a list of decls + to the current scope, checking for duplicates. + * c-decl.c (start_function): Remove some Chill junk. + (This function should no longer be used for Chill.) + * ch-lex.l (ch_lex_init): New function, to re-init for 2nd pass. + * ch-lex.l (<>): Cleanup, and re-start for 2nd pass. + * ch-tree.h (UNSATISFIED, UNSATISFIED_FLAG): New flags. + * ch-tree.h (CH_CLASS_IS_VALUE, CH_CLASS_IS_REFERENCE): + Implement. Add comments. + * ch-tree.h (CH_COMPATIBLE_CLASSES, CH_ROOT_MODE, CH_RESULTING_MODE): + Better Blue Book type checking. + * ch-actions.c (finish_chill_binary_op): Handle folding + and other stuff that couldn't be done in pass 1. + * ch-actions.c (build_chill_binary_op): Bail out early if pass 1. + Use new CH_ROOT_MODE macro to handle integer promotions etc. + * ch-except.c (push_handler): Bail out if pass 1. + * ch-tasking.c (make_process_struct): Defer making this work. + * ch-parse.y (assignaction): Simplify, and move some code ... + * ch-expr.c (chill_expand_assignment): ... here. + * ch-typeck.c (chill_root_mode, chill_resulting_mode, + chill_compatible_classes): New functions, implementing the + correspondingly named Blue Book concepts. + * ch-parse.y generally: Lots of little tweaks to support + 2-pass compilation. + * ch-parse.y (push_module, pop_module): Moved to ... + * ch-decl.c (push_module, pop_module): ... here. + * ch-parse.y (push_action): New function. + * ch-parse.y (pdef): Move complicated action to ... + * ch-parse.y (end_function): ... new function here. + * ch-parse.y (procedure): Major re-write. + * ch-parse.y (paramname, paramnamelist): New, to avoid conflict (?). + * ch-decl.c (do_decls, push_syndecls, push_modedef, + start_chill_function, finish_chill_function): Do different things + on each pass. Hence, can use code in c-decl.c to lesser extent. + * ch-decl.c (build_chill_function_type): First arg is now + just the return type, rather than a singleton list. + * ch-decl.c (massage_param_node): Remove not needed (we + now encode parameter attributes directly in the TREE_PURPOSE). + * ch-decl.c (chill_munge_params): New function, called by parser. + * ch-decl.c (push_parms): Removed function. + * ch-decl.c (push_cope, pop_scope, save_decl, get_next_decls): + New functions, to coordinate decls between passes. + +Wed Jul 21 14:23:25 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (lang_decode_option): Add option -Lpath + to specify seize file path. + (ch_singleton_set): Readability formatting. + Add comment, move functions to easier found places. + * ch-lex.l (setup_seizefile_read): Check for *no* slashes. + (register_seize_path): Use memcpy so pathlen has an effect. + * gcc.c (default_compilers): Add -L option to chill + compiler SPECs. + +Wed Jul 21 12:59:20 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-satisfy: New file. Used for name lookup. + * Makefile.in (CHILL_OBJS): Add ch-satisfy.o. + +Wed Jul 21 12:16:51 1993 Bill Cox (bill@rtl.cygnus.com) + + * toplev.c (main): Delete -L option handling - breaks + non-chill compilers. + +Wed Jul 21 09:29:24 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-grant.c: #undef strchr and strrchr names in extern + declarations, to prevent RS6000 compiler from reporting + their misuse as macros. + * ch-lex.l (setup_seizefile_read): Refer to list of paths + for seizefiles specified by -L options on command line. + (register_seize_path): Add a new path to the seize file list. + * toplev.c (strip_off_ending): Recognize chill suffix. + (main): Recognize -L option, specifying a seize file path. + +Tue Jul 20 12:41:52 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-lex.l (convert_float): Make it really portable, + using the appropriate macros. + +Tue Jul 20 11:26:02 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-lex.l (convert_float): More casts for vxworks + portability. + +Tue Jul 20 11:01:30 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-lex.l (convert_float): Give variable `d' correct + type so build_real call is correct. Should remove + vxworks portability problem. + (convert_float): Re-indent to standards. + +Mon Jul 19 17:32:10 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_char_array_expr): Add field decls to + constructor. Now, it generates the library call. + * ch-expr.c (chill_expand_array_assignment): Make sure that all + error messages say 'mode' not 'type'. + +Mon Jul 19 14:44:46 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c, ch-convert.c, ch-decl.c, ch-grant.c, ch-lang.c, + ch-loop.c, ch-parse.y, ch-tasking.c, ch-tree.c, ch-typeck.c: + Make sure that all error messages say 'mode' not 'type'. + * ch-decl.c (push_modedef): Add novelty computation, + storage in each newmode. + * ch-parse.y: Delete novelty counter - moved to ch-decl.c. + Reformat slightly for readability. Fix comments. + * ch-tree.h: Delete print_lang_type prototype. + +Mon Jul 19 06:43:51 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (chill_expand_return): Disable + error message which requires 2-pass analysis, for + now. + * ch-convert.c (convert): Build length-only constructor + for empty string (PR 2930). + +Fri Jul 16 16:08:33 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-expr.c (chill_expand_array_assignment): Check + non-varying string assignments for conformance to + the "string assignment condition" (PR 2920). + +Thu Jul 15 13:25:33 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_chill_array_expr): Check parameters. + Call convert to build unitary array from scalar if + needed. Rewrite CONCAT_EXPR handling. + * ch-convert.c (build_array_type_for_scalar): New functions. + (convert): Call new function, to convert scalar to unitary + array. Only call chill_expand_tuple if expression hass + NULL_TREE type. + * ch-expr.c (chill_expand_expr): Allow a larger static + varying array to be assigned to a smaller, with a runtime + test (to be provided). + * ch-parse.y (locdec): Comment out bogus error msg. + (elementlist): Replace several lines with chainon call. + * ch-tree.h (SCALAR_P): New macro. New prototype for + build_array_type_for_scalar. + * ch-typeck.c (build_chill_cast): Re-indent. + (chill_expand_tuple): Comment out strange addition of + varying string's length to front of constructor list. + +Thu Jul 15 05:58:46 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-except.c (start_handler_array): Use unique identifier for + exception array, so we can have > 1 array per reach + (PR 2931). The change was originally entered June 23, and + subsequently lost. + +Mon Jul 12 16:07:53 1993 Bill Cox (bill@rtl.cygnus.com) + + Get executable test cases running again... + * c-typeck.c (build_function_call): Bypass default + parameter promotions, format param syntax check for + CHILL; they've already been converted in + build_chill_function_call. + * ch-actions.c (chill_expand-return): Correct tests + for function which returns no value. + * ch-convert.c (base_type_size_in_bytes): Check for + NULL type parameter, just return. + (convert): Allow conversion of CHAR to varying array + of CHAR. + Change error msg to "conversion" from "assignment". + Remove default from case, which short-circuited before + REFERENCE_TYPEs got converted. Deleted second copy + of REFERENCE_TYPE code. + * ch-lang.c (build_chill_range_type): Simply exit if + NULL input parameter. + * ch-loop.c: Fix comment. + +Sun Jul 11 11:27:08 1993 Bill Cox (bill@cygnus.com) + + * ch-actions.c (chill_expand_result, chill_expand_return): + Move here from ch-typeck.c. Add a temporary to remember the + result value in. Change return handler to fetch that + temporary value, if there is one. + * ch-parse.y (pdef): Call chill_expand_return to fetch + the temp's value. + * ch-tree.h, ch-typeck.c: Move return, result functions to + ch-actions.c. And their prototypes. + +Fri Jul 9 15:47:51 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c, ch-convert.c, ch-decl.c, ch-except.c, + ch-expr.c, ch-grant.c, ch-inout.c, ch-lang.c, + ch-lex.l, ch-loop.c, ch-parse.y, ch-tasking.c, + ch-tree.c, ch-tree.h, ch-typeck.c: gcc -Wall cleanup. + +Fri Jul 9 09:41:05 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-grant.c (decode_decl): Grant BUFFER, INSTANCE variables. + (print_integer): Delete old non-working INSTANCE code. + * ch-lex.l (name_type_signal): Recognize BUFFER name, too. + * ch-parse.y (rccase_label): Move all actions inside if. + Use BUFFERNAME to recognize receice case buffer clause, + eliminate one shift-reduce conflict. + * ch-tasking.c (build_buffer_descriptor): Check for + CH_DECL_BUFFER flag, remove unused code. + +Thu Jul 8 11:17:32 1993 Bill Cox (bill@rtl.cygnus.com) + + Declaring and sending buffers.. first draft + * ch-actions.c (lang_init): Define the send_buffer runtime + function. + * ch-decl.c (do_decls): Standardize loop, so stepping + isn't hidden. + * ch-lex.l: Clean up prototypes for readability. + * ch-parse.y (sendaction): Add send buffer action. + (locdec): Add rule for buffer declaration. + * ch-tasking.c (generate_tasking_code): standardize indentation. + (make_signal_struct): Readability changes. + (build_chill_send_buffer, build_buffer_decl, + build_buffer_descriptor): New functions. + * ch-tree.h (IDENTIFIER_BUFFER_SIZE): Add place to save + buffer's maximum queue length in buffer decl. + (CH_DECL_BUFFER): Add flag in decl. Clean up for + readability. Add prototypes. + * ch-typeck.c (build_chill_cast): Call convert rather + than storing directly into TREE_TYPE field. + +Tue Jul 6 12:34:32 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (lang_init): Set warn_switch so case labels + get checked. Move build_chill_case_expr to ch-expr.c. + * ch-expr.c (chill_expand_case_expr): Enable checking + of expression case labels. + * ch-grant.c: Move a comment. + +Mon Jul 5 10:02:27 1993 Wilfried Moser (fs_moser at rcsw1j) + + * ch-lex.l: Add compiler directive SUPPORT_CAUSING_ADDRESS. + * ch-except.c (initialize_exceptions): Change the layout of the + structure __ch_handler. The entry __jbuf is moved to the end + of the structure and its size was changed to _JBLEN+10. + * ch-decl.c (push_chill_extern_process): Add processing of + processes with no arguments. + * ch-grant.c (decode_decl, do_seize): Add processing of + processes with no arguments. + * ch-tasking.c (build_process_header, build_chill_start_process): + Add processing of processes with no arguments. + (make_process_struct): Add processing of IN attribute for + process arguments. + (tasking_setup): Add NUL-character to name of a tasking + element. The name must be NUL terminated. + (build_chill_send_signal): Default SEND_SIGNAL_PRIORITY + to 0 with a warning if -Wall specified on command-line. + +Fri Jul 2 16:01:57 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-parse.y: Change 'empty' comments to new non-terminal + so that exyacc doesn't discard them. + * ch-lang.c (build_chill_range_type): New error messages. + +Fri Jul 2 12:43:25 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-parse.y (action): Catch and report actions which + shouldn't have exception clauses, but do. Unfortunately, + catching more than one of these per compilation will + have to await the general addition of syntax error + recovery to the parser. + +Fri Jul 2 10:45:35 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-parse.y (locdec): Issue error for initialization + of bitstring with tuple, not for powerset init with + tuple. + +Thu Jul 1 15:29:26 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-lang.c (build_chill_array_type): Check for indices + that didn't fold into constants, issue error (PR 2924b). + * ch-parse.y: Add novelty counter, alphabeticalize. + * ch-tree.h: Define CH_NOVELTY for novelty checks later. + +Thu Jul 1 14:03:04 1993 Bill Cox (bill@rtl.cygnus.com) + + For Wilfried Moser. + * chill.in: Add -ansi switch at compiler call to avoid + translation of i.e. sun to 1 by cpp. + +Wed Jun 30 22:21:33 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-grant.c (raw_decode_mode): Add code for + integer and enumeral ranges. Standardize indentation. + +Wed Jun 30 14:02:23 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-grant.c (print_an_int): New function to print a + decimal integer string or the CONST_DECL (SYN) which + best matches it. + (print_integer): Call the above function. Replace + calls to SAME_TYPE macro with TYPE_MAIN_VARIANT + comparisons, as suggested by Jim Wilson. + (decode_decl): Set current_grant_modename sooner, + be sure to clear it when done. + +Wed Jun 30 10:10:57 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_max_min): Change interface to accept + just a max/min flag. Get min/max values from an + enumeral constructor. + (build_chill_max, build_chill_min): Change calls to + build_max_min. + * ch-lang.c (deep_const_expr): Check for NULL_TREE + arguments, don't seg fault. + +Wed Jun 30 09:20:09 1993 Bill Cox (bill@rtl.cygnus.com) + + * config/sparc/sparc.c (sparc_type_code): Add SET_TYPE + to switch cases, preventing abort. + +Tue Jun 29 19:04:37 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-expr.c: Update comment. + * ch-parse.y (range_or_mode): New non-terminal used in + lexpr to implement mode as case label. + +Tue Jun 29 13:13:46 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_chill_case_expr): Pass in the + optional ELSE clause, error for multiple case-selector + expressions, error for missing ELSE clause. + * ch-expr.c (chill_expand_assignment): Error if multiple + location assignment and locations not novelty + equivalent. + * ch-parse.y (caseaction): Add range_list_clause non- + terminal, sorry message for it. + (assignaction): error if operator used on multiple + assignment. + (case_expr): Pass optional ELSE tree to + build_chill_case_expr for checking. + * ch-tree.h (build_chill_case_expr): Change proto. + +Fri Jun 25 17:22:41 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (chill_comptypes, build_chill_binary_op): + Allow PROC mode variables. + * ch-convert.c (convert): Turn a NULL literal into a zero + valued pointer-to-function, given such a type. Also + build the ADDR_EXPR of a function variable. + * ch-grant.c: Pervasive -Wall -pedantic cleanup. + (print_enumeral, print_integer, print_struct) Moved these + large functions out of the switch in raw_decode_mode for + readability, and to encourage future code-sharing. + (print_proc_tail, print_proc_exceptions): Moved these out + of decode_decl, to share them. They're used also to + output PROC modes. + * ch-parse.y (mode2): Enable PROC modes. + (procmode): Represent PROC mode as a ptr-to-function type. + (call): Recognize ptr-to-function as indirect call. + Cleanup 'primval LPRN untyped_exprlist RPRN' action code. + +Thu Jun 24 15:59:20 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-grant.c: (raw_decode_mode): Add support for unnamed + and user-numbered enumeration members. + +Thu Jun 24 13:52:10 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_chill_array_expr, build_chill_length): + Explicitly convert a varying array's length field to an + integer_type_node, now that it's only a chill_integer_ + type_node. + * ch-expr.c (chill_expand_expr, + expand_assignment_to_varying_array, + chill_expand_array_assignment, + expand_varying_length_assignment): Explicitly + convert a varying array's length field to an integer_type_node, + now that it's only a chill_integer_type_node. + * ch-loop.c (init_loop_counter, top_of_loop_test): Change + to handle varying array location iterations. + * ch-parse.y (mode2): Count number of named SET members, + as opposed to '*' members. Issue error if there were none. + (setelement): Count named set members. Generate a unique + identifier for the '*' element. + * ch-typeck.c (validate_varying_array_ref): Explicitly + convert a varying array's length field to an integer_type_node, + now that it's only a chill_integer_type_node. + +Wed Jun 23 19:18:28 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-lang.c (finish_chill_enum): Change test for too- + large enumerations. + * ch-parse.y (setelement, optsetvalue): Allow numbered, + unnamed set elements. + +Wed Jun 23 16:25:06 1993 Bill Cox (bill@rtl.cygnus.com) + + * c-typeck.c (process_init_constructor): Suppress + errors about un-initialized array elements if the + array is VARYING, as signaled by C_TYPE_VARIABLE_SIZE. + * ch-actions.c (lang_init): Set flag_short_enums, so that CHILL + enumerations *can* be only a byte in size. + (adjust_parm_or_field): Convert untyped parameter before + looking at its type to process it. + * ch-convert.c (convert): Generate [ -1, -1 ] value for + an INSTANCE type. + * ch-decl.c (do_decls): Assure that a CONSTRUCTOR has a + type, so that output_constant doesn't seg fault. + * ch-except.c (start_handler_array): Use unique identifier for + exception array, so we can have > 1 array per reach. + * ch-lang.c (finish_chill_enum): Error if number of + enumeration values exceeds 256. + * ch-parse.y (check_end_label): Error, not warning if start + and end labels don't match. + (assignaction): Convert RHS. Allows untyped tuples to be + passed to stabilize_reference. + (exceptlist, onexceptprefix): Error if non-unique exception + name is coded. + * ch-tree.c: Added form feeds, comment reformatted. + * ch-typeck.c (chill_expand_tuple): Compare tree value to + NULL_TREE, not zero. Add a constructor element for a + VARYING array's length to the constructor list. + (build_varying_struct): Mark the type as VARYING for + process_init_constructor. + * toplev.c (lang_options): Add '-lang-chill' and + '-fchill-grant-only' options to table. + +Tue Jun 22 13:13:41 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_chill_function_call): Add check + to prevent calling a PROCESS like a PROCEDURE. + * ch-parse.y (rcalternative): Add check for an + receive case alternative after a RECEIVE CASE + statement. + * ch-tree.h: Fix macro ENCAPSULATED_ARRAY_P. + * ch-lang.c (lang_finish): Remove resetting errorcount + and sorrycount for granting. + +Mon Jun 21 17:56:48 1993 Bill Cox (bill@rtl.cygnus.com) + + Receiving signals works. + * ch-actions.c (lang_init): Add else_clause flag to + __wait_signal parameter list. + * ch-lex.l: Add SIGNALNAME token, return when appropriate. + * ch-parse.y (SIGNALNAME): New token. Delete + empty_untyped_exprlist token, no longer used. Add + name_or_signal non-terminal. Standardize a few NULL + tests. Add real RECEIVE CASE semantics. Add checks that + SIGNALS, BUFFERs are only declared at global scope. + (call): Add signal declarations with/without data fields. + * ch-tasking.c (get_tasking_code_name, get_tasking_code, + build_chill_receive_case_start, build_chill_receive_case_end, + build_chill_receive_case_label): New functions. + Replace build (CONSTRUCTOR, ... calls with build_nt + (CONSTRUCTOR, calls. + * ch-tree.h: New prototypes. + +Thu Jun 17 18:36:38 1993 Bill Cox (bill@rtl.cygnus.com) + + SIGNAL declaration compilation, seizing & granting, + SENDing also. + * ch-actions.c (lang_init): Move instance_type_node + build to ch-tasking.c. Call build_tasking_message_type. + Build a type for send_signal. Put builtin_function + calls into alpha order. + (adjust_proc_param): Rename to adjust_parm_or_field, + add is_signal flag, so signal fields can use it. Rename + calls to it, add flag to calls. + * ch-decl.c (push_chill_extern_signal): Add function. + * ch-grant.c (decode_decl): Correct signal decl output. + (do_seize): Correct check for process seizure. Add + code for seized signal decl. + * ch-lex.l (yylex): Treat POS, ROW, STEP as reserved. + * ch-loop.c (get_unique_identifier): Standardize loop + temporary's name to assure that it's not granted. + * ch-parse.y (SIG_NAME): Delete unused token. + (spec_declist): Delete silly printf. + (quasi_signaldef): Add non-terminal. + (sendaction, optsendwith, optsendto, optpriority): + Implement actual working semantics. + (call, empty_untyped_exprlist): Allow empty signal + fields between parens. + * ch-tasking.c: Rename adjust_proc_param calls, add + is_signal flag to calls. Make instance_type_node a + type, not a TYPE_DECL, change references. Fix all + CONSTRUCTOR builds. Add make_signal_struct function. + Move build_instance_type here from lang_init. + (build_tasking_message-type, build_signal_descriptor, + build_chill_send_signal): New functions. + * ch-tree.h: Add, update protos. + * ch-typeck.c (build_chill_cast): Check for NULL expression + type as well as error_mark. + +Thu Jun 17 12:28:03 1993 Jim Wilson (wilson@sphagnum.cygnus.com) + + * Makefile.in (STAGESTUFF): Add chill to list. + +Wed Jun 16 07:12:53 1993 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: Complete the renaming of ch-process.c + to ch-tasking.c. + * ch-decl.c (push_chill_extern_function): Drop is_process + parameter, and marking process decl trees. + (push_chill_extern_process): New function for + SEIZEd processes. Lotsa form feeds added for print + readability. + * ch-grant.c (decode_decl): Handle GRANTing of SIGNAls. + (do_seize): New parameter seize_all. Handle sseizing + processes. + (chill_seize): Pass seize_all parameter. + (chill_grant): Check for __tmp_ prefix, to disable + *either* seizing or granting. + * ch-parse.y (quasi_pdef): Delete is_process parameter for + push_chill_extern_functon, call push_chill_extern_process + for processes. + (specialinit): Comment these rules as needed only until + 2-pass compiler is operational. + (extprocedure): Delete is_process parameter. + (simpledec): Delete `sorry' about SIGNAL decls. + (optsigdest): Correct check for process name. + * ch-tasking.c (build_signal_decl): Finish coding. + * ch-tree.h: Add macro to save a SIGNAL's destination + process name in an id node. Add/change prototype. + +Mon Jun 14 18:17:13 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (lang_init): Build instance_type_node. + Change `this' to a runtime function call. + * ch-grant.c (do_seize): Generate tasking-code + variable for seized process. + * ch-lex.l (equal_number): Also accept synonym + name for numeric value. + * ch-parse.y (primval): Add process-related + function calls. + (signaldef, etc.): Rough draft of SIGNAL definition + processing. + (stopaction): Call runtime function. + (pdef): Pop symbol level if ending a process + and there were parameters. + (primval): Call `whoami' runtime function for THIS. + * ch-tasking.c (build_process_header): Be sure + to define the tasking enum, if it hasn't already + been done. Only call shadow_record_fields if there + are parameters. + (build_tasking_enum): Only call start_enum *after* + checking the already_built flag. + (build_copy_number, get_tasking_code, + build_gen_code, build_gen_inst, build_get_ptype, + build_proc_type): New functions for process-related + builtins. + (build_signal_decl): New function for SIGNAL + declaration - rough draft. + * ch-tree.def (INSTANCE_TYPE): new tree code. + * ch-tree.h: New prototypes. Defines for instance + type field access. + +Sat Jun 12 21:15:02 1993 Bill Cox (bill@rtl.cygnus.com) + + Get start-process action working: + * ch-actions.c (adjust_proc_param): new function, + extracted from build_chill_function_call and called + from there. + * ch-tree.h, ch-grant.c (do_seize): Add process_type + parameter to add_taskstuff_to_list call, prototype. + * ch-parse.y (start_parlist): New non-terminal for + START action. + (startaction): Reference start_parlist, check for + integer-valued process copy-number. + (optstartset): Check instance parameter - must be + an INSTANCE_TYPE location. + * ch-tasking.c (generate_tasking_code_variable): New + function, extracted from tasking_setup and called + from there. Also called from build_process_header. + (build_process_header): Add process_type parameter + to add_taskstuff_to_list call. Remove incrementing + of process_type (moved into generate_tasking_code + _variable). + (build_chill_start_process): Complete rewrite. + (add_tasking_stuff_to_list): Add stuffnumber parameter + putit on the list. + +Sat Jun 12 06:08:09 1993 Bill Cox (bill@rtl.cygnus.com) + + Getting processes compiled, initialized and granted: + * .cvsignore: Add chill file. + * c-decl.c (shadow_record_fields): Allow PARM_DECL + as well as VAR_DECL. + * ch-actions.c (lang_init): Move build of + initializer_type into ch-tasking.c. Change + definition of THIS to function call. + * ch-decl.c (massage_param_node): Add comments. + (start_chill_function): Set nested flag in + start_function call based upon current_function_decl, + not as constant zero. + * ch-grant.c (decode_decl): lotsa code by Wilfried to + GRANT process decls. + (finish_chill_module): Completely rewrote interface + to runtime. + * ch-lex.l (THIS): Just return the token code. + * ch-parse: Add THIS token. + (processpar, processparlist): New rules, to collect + process parameters. + (pdef): Add code to pop the process' WITH scope. + (procedure): Set process WITH scope flag to zero. + (process): Move most code into build_process_header. + (primval): Output function call for THIS. + * ch-tasking.c (add_taskstuff_to_list, build_tasking_enum, + make_process_struct, build_process_header): New code + to handle process translation and interface to runtime. + * ch-tree.h: New prototypes. + +Thu Jun 10 13:32:51 1993 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: Change ch-process.c to ch-tasking.c. + A delayed part of the last change.. + +Thu Jun 10 11:14:59 1993 Bill Cox (bill@rtl.cygnus.com) + + * .cvsignore: Add 'chill' file. + * ch-actions.c (lang_init): Add new runtime function + __register_process. + * ch-decl.c (push_chill_extern_function): Add is_process + input flag, use it. + * ch-grant.c (decode_decl): Recognize a process for + granting. + (do_seize): Put seized processes onto the tasking_list. + (chill_finish_module_code): Declare init_list entry, + link it onto the init_list. Call tasking_setup and + tasking_registry. + * ch-lex.l: Make tasking-related variables global, + delete their initialized flags. + * ch-parse.y: Add is_process flag to push_chill_extern_function + calls. Put processes onto the tasking_list. + * ch-process.c: Renamed to ch-tasking.c. + * ch-tasking.h: New file. + * ch-tree.h: New, adjusted prototypes. + +Wed Jun 9 10:59:27 1993 Wilfried Moser (moser@deneb.cygnus.com) + + * chill: This file is replaced by chill.in and will be + generated during 'make' and 'make install'. This script + now finds the correct chillrt0.o and libchill.a during + linking. + * chill.in: New file that replaced chill. + * Makefile.in: Add rules to make chill out of chill.in. + +Wed Jun 9 09:03:55 1993 Bill Cox (bill@rtl.cygnus.com) + + * .cvsignore: Add gfloat.h and xlimits.h. + * ch-actions.c (lang_init): Create new type for module- + level initializer list entry. + * ch-grant.c (chill_start_module_code): Rename actual + module-level code to just the modulename, which is + *not* public. + (chill_finish_module_code): Allocate space for initializer + list entry, build real initializer function, which puts + the list entry on the runtime list. Name the init function + as the module's constructor function. + * ch-tree.h (build_init_struct): Add prototype. + * ch-typeck.c (build_init_struct): Add function, called + from lang_init. + Note: these changes require a new devo/chillrt/chillrt0.c. + +Thu Jun 3 17:04:01 1993 Bill Cox (bill@rtl.cygnus.com) + + * c-decl.c: Fix comment. + * ch-actions.c, ch-grant.c: Standardize front end: + #define first, etc. Add comments. + (lang_init): Delete unused flag, code for inapplicable + gen-decls option. (lang_decode_option): Delete + gen-decls option, add grant-only option, flag. + * ch-convert.c, ch-decl.c, ch-except.c, ch-tree.c, + ch-typeck.c: Add form feed after front end. + * ch-expr.c: Standardize testing for error_mark node. + * ch-lang.c: Remove unused deep_fold function. + +Fri May 21 11:04:22 1993 Bill Cox (bill@rtl.cygnus.com) + + * c-typeck.c (build_binary_op, build_unary_op): + Recognize BOOLEAN_TYPE. + * ch-actions.c (build_chill_unary_op): Remove + some crufty work-arounds. + +Thu May 20 19:03:48 1993 Per Bothner (bothner@deneb.cygnus.com) + + * ch-grant.c (decode_constant): If the granted value is a + cast, make sure to emit an appropriate expression conversion. + +Thu May 20 16:35:35 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-lang.c (build_chill_range_type): Initialize the + precision variable. Double-negative ranges work now. + +Thu May 20 11:24:42 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_unary_op): Compound a wretched + hack which hides a BOOLEAN_TYPE from the underlying + C code. + +Wed May 19 16:45:54 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c: (CH_SINGLETON_SET): Add function, call it + from chill_comptypes. (build_chill_unary_op): Give + better name to unsigned flag. + * ch-expr.c (chill_expand_assignment): Correct calling + sequence for setpowersetbits runtime routine. + * ch-grant.c (raw_decode_mode): Give better name to + unsigned flag. (decode_constant): Check for null + 'val' ptr, avoid seg fault. + * ch-lex.l (convert_number): Give better name to + unsigned flag. (convert_bitstring): Move increment + of bl counter to emphasize that it increments once + per loop. + * ch-tree.h: (NO_SOURCE_UNARY_MINUS): Define new flag. + * ch-typeck.c (chill_expand_tuple): Build BOOLEAN + constructor if given a singleton set constructor. + +Thu May 13 17:03:04 1993 Bill Cox (bill@rtl.cygnus.com) + + * c-decl.c (pushdecl): Complete May 9 change. + * ch-actions.c (build_chill_unary_op): Set the + TREE_UNSIGNED flag FALSE for raw_decode_mode. + * ch-grant.c (grant_array_type): Correct the May 12 + check for circularity. + (raw_decode_mode): Use TREE_UNSIGNED flag to + control range's printing. + (chill_grant): Remove useless, bogus code. + * ch-lex.l (convert_number): Set the TREE_UNSIGNED + flag TRUE for raw_decode_mode. + +Wed May 12 18:04:01 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (push_syndecls, push_modedef): Comment + reminders to check for circular definitions. Later! + * ch-grant.c (grant_array_type, decode_decl): Prevent + circular definitions in the use of the array's + type name. + +Wed May 12 16:06:13 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-grant.c (grant_array_type): If array_type has + a name, just use it. + * ch-lang.c (build_chill_range_type): Don't force + unsigned ranges on output. + * expr.c (store_constructor): Preclude seg fault. + +Wed May 12 07:49:00 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (fold_set_*): Correct tests for + range set-constructor list entries. + (lang_init): Define setpowersetbits function. + * expr.c (store_constructor): Handle non-constant + set constructors. + +Tue May 11 18:25:40 1993 Per Bothner (bothner@cygnus.com) + + * ch-lang.c (build_chill_range_type): If the parent type + is unknown, and the endpoints of the range are integer + constants, use the smallest suitable integer type. + * ch-lang.c (build_chill_range_type): Remove kludge + for dealing with char ranges. + +Tue May 11 15:24:31 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_chill_repetition_op): Build a + range-type set constructor if there's only one value + in the repeated constructor. + (fold_set_*): Abort if range value seen, for now. + * expr.c (store_constructor): Handle range-type by + storing bytes rather than bits as much as possible. + +Mon May 10 18:45:18 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (invalid{left right}_operand): Add + handlers for REPLICATE_EXPR. + (build_chill_repetition_op): Build constructor list + for repetition of bitstring. + * ch-parse.y (call): Recognize more trees as arrays, + to avoid error msg. + (operand5): Add count, string temporaries, use them. + +Mon May 10 16:49:08 1993 Per Bothner (bothner@cygnus.com) + + * ch-grant.c (seize_implied_names): Fix code that assumed + a FUNCTION_DECL (or PROCESS_DECL) to work on types instead. + * ch-grant.c (generate_set, grant_parent_of_enum, + grant_parent_enum): Removed unused functions. + * ch-grant.c (raw_decode_mode): Remove commented-out code. + +Mon May 10 10:54:57 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-grant.c (do_seize, seize_implied_types): Move + result and parameter processing to proper place. + (chill_seize): Mark unseized identifier with + error_mark_node, to avoid excessive errors. + * ch-parse.y (call): Check for ERROR_MARK before + reporting an error. + +Sun May 9 17:21:24 1993 Bill Cox (bill@rtl.cygnus.com) + + * c-decl.c (pushdecl): If a strongly-visible name is + seen, in conflict with a weakly-visible name, take + the strongly-visible one and don't complain. + * ch-actions.c (chill_comptypes): Allow chain of ref- + erence types > 1 in length. + * ch-grant.c: Turn disguised for-loops into actual + ones, so continue works. Delete redundant code in + seize_implied_names. Reindent. + * expmed.c (store_split_bit_field): Disable abort for + CHILL. + +Sun May 9 17:11:33 1993 Per Bothner (bothner@cygnus.com) + + * ch-convert.c (convert): Move handling of SET_TYPE until + after we've handled de-referencing and such like. + * ch-grant.c (grant_array_type): Simplify; remove (now-) + bogus call to generate_set. + * ch-grant.c (get_type): Remove obsolete stuff. + +Fri May 7 10:30:34 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (lang_init): Add definition of psslice + runtime routine. (build_chill_binary_op_1, + build_chill_binary_op): Have result type of + TRUTH_ANDIF_EXPR be boolean, not integer. Some + reindenting. + * ch-convert.c (convert): Use consistent notation + for expression. + * ch-parse.y: Add front-end pass count. (locdec): + Add syntax for other BASED declaration. + * ch-tree.c: Fix comment. + * ch-typeck.c (build_chill_slice): Implement a runtime + call for bitstring slices. (build_chill_cast): + Add code for BITS_BIG_ENDIAN bit loop. + (chill_expand_tuple): Don't pass ref type to + digest_init, only underlying type. + +Thu May 6 12:52:14 1993 Per Bothner (bothner@cygnus.com) + + * ch-typeck.c (build_chill_cast): type_for_size takes + a size in bits, not bytes. + +Wed May 5 19:02:55 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c: Break out separate routines for set + folding, handle ranges in set_fold_eq and set_fold_ne. + Fix folding as req'd by TTC test. + * ch-grant.c (raw_decode_more): Check for content match + to decide output mode, not pointer identity. + * ch-typeck.c: Add cross-reference comment. + * varasm.c (emit_set_data): Clarify parameter name. + Handle INTEGER_CST as set constructor. + (output_constant): Handle CONSTRUCTOR node for sets. + Apparently forgot to actually 'checkin' this one last + time. + +Wed May 5 12:23:58 1993 Jim Wilson (wilson@sphagnum.cygnus.com) + + * ch-parse.y, ch-tree.h (get_current_declspecs): Obsolete; deleted. + +Tue May 4 15:47:44 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (fold_set_expr): new function to fold + set expressions. Calls inserted into + build_chill_binary_op and build_chill_unary_op. + (build_chill_repetition_op): New function, called + from build_chill_function_call. + * ch-expr.c (chill_expand_assignment): Call + build_chill_repetition_op. + * ch-grant.c (decode_constant): Comment out deep_fold + call. The earlier fold_set_expr calls should make + this one unnecessary. Prevent seg fault when name + of structure field is NULL. Standardize for loop. + * ch-parse.y: Fix comments. + (operand5): build a REPLICATE_EXPR. Don't call + build_repetition_op until we have a type. + * ch-tree.def (REPLICATE_EXPR): Define tree-code. + * ch-tree.h (build_chill_repetiton_op): Fix proto. + * ch-typeck.c (chill_expand_result): Call + build_chill_repetition_op if needed. + * varasm.c (emit_set_data): Clarify parameter name. + Handle INTEGER_CST as set constructor. + (output_constant): Handle CONSTRUCTOR node for sets. + +Mon May 3 13:06:47 1993 Per Bothner (bothner@cygnus.com) + + * ch-typeck.c (build_chill_cast): Allow more liberality to + casting: Any discrete type to any non-discrete type that is the + same size as some other discrete type (and vice versa). + * stor-layout.c (layout_type, case SET_TYPE): If the number + of bits will fit in a char or short, only use that many bits. + +Mon May 3 08:22:45 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-grant.c (decode_constant): Revert interpretation + of SET_TYPE as integer. + +Mon May 3 07:55:46 1993 Bill Cox (bill@rtl.cygnus.com) + + * chparse.y (casealternative): Allow empty action list. + +Sat May 1 15:07:01 1993 Bill Cox (bill@rtl.cygnus.com) + + * expr.c (expand_expr): Add parameter to __inpowerset + runtime call, to match new runtime. + +Sat May 1 14:55:58 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c: Cleanup from -Wall. Reindent. + Redefine __inpowerset to take a 'minval' parameter + that matches the new runtime. Added comments. + * ch-expr.c (chill_handle_case_label): Handle + NULL or ERROR trees. + * ch-grant.c (get_type): Survive bogus type params, + return empty string. + * ch-tree.c (build_powerset_type): Diagnose powerset + of non-discrete type. + * ch-typeck.c (discrete_type_p): Reindent. + +Fri Apr 30 16:08:54 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-grant.c (decode_constant): Interpret SET_TYPE + with integer value, so we output the same stuff as + the user gave us. + * ch-parse.y: Fix indentation. + +Fri Apr 30 09:34:03 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (chill_comptypes): Simplify, correct + integer subrange analysis. + * ch-grant.c (seize_implied_names): Add handling for + PROCESS_DECL, PROCESS_TYPE. + (do_seize): Call seize_implied_names for process, + procedure parameters and return value. + * ch-lang.c (finish_chill_enum): Canonicalize enum + types. + * ch-tree.def (PROCESS_TYPE): Add. + * ch-typeck.c (valid_array_index): Call chill_comptypes + rather than broken macro CH_COMPATIBLE. The logic + in chill_comptypes will get moved to the macro later. + +Thu Apr 29 13:07:55 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_chill_lower, build_chill_upper): + Handle enumeration types. + (build_chill_binary_op): Call chill_comptypes + to error check IN arguments. Change error + messages to say 'mode' rather than 'type'. Cast + tree codes when build is called. + * ch-expr.c (chill_expand_array_assignment): Call + chill_comptypes to validate assignment args. + * ch-lex.l: Add newline for readability. + +Wed Apr 28 15:22:18 1993 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in (ch-hash.h): Add rule to build this + from chill.gperf. Not yet used. + * ch-actions.c (build_chill_binary_op): Allow enum + subranges on RHS of IN operator. + * ch-grant.c (decode_constant): Recognize + error_mark_node as empty powerset initializer, + re-indent a bit. + * ch-lang.c (deep_fold): Return error_mark_node for + NULL input pointer or incoming error_mark_node. + * ch-lex.l: Ignore PACK and UNPACK keywords. Return + POS, ROW, and STEP as user-defined names. + (name_or_type): New function for above. + * ch-parse.y: Move token defs for following, comment + them separately: NOPACK, PACK, POS, ROW, STEP + * varasm.c (output_constant): Check for VAR_DECLs in + records & unions, like arrays. Don't abort. + +Tue Apr 27 17:42:29 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (CH_PROMOTING_INTEGER_TYPE_P): + rewrite for generality. + * ch-decl.c (grok_chill_variantdefs): Use chill + comptypes, so that subrange compatibility is ok. + (start_chill_function): Use lookup_name(), not + IDENTIFIER_GLOBAL_VALUE, for full generality. + * ch-expr.c (chill_expand_assignment): Need to + handle non-NOP modify codes here, since C code + in build_modify_expr won't understand powersets, + etc. + +Tue Apr 27 09:05:31 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_max_min): Assign the set's + base type to the function's return type. + (build_chill_function_call): Before complaining + about parameter mismatches, convert certain actual + parameters. + * ch-expr.c (chill_expand_assignment): Before + complaining about LHS/RHS mismatches, convert + certain RHS expressions. + * ch-grant.c (decode_constant): Deep-fold incoming + expression, so we can output it. + * ch-lang.c (deep_const_expr): New function, called + from const_expr, actually traverses the tree + looking at its leaves for 'const'ness. + (deep_fold): New function to fold already-built + trees. + * ch-parse.y (case_expr): Add whitespace. + * ch-tree.h: Add prototype for deep_fold. + +Tue Apr 27 07:21:43 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (chill_comptypes): Allow enumeration + subranges as compatible with the parent enum. + (build_chill_function_call): Before checking type + compatibility, use convert on typeless expressions, + like constructors. + * ch-expr.c (chill_expand_assignment): Before + checking type compatibility, use convert on + typeless expressions, like constructors. + * ch-lex.l: Add comment. + +Thu Apr 22 17:23:25 1993 Bill Cox (bill@rtl.cygnus.com) + + * .cvsignore: Add genopinit, insn-opinit.c + * c-common.c (binary_op_error): Prevent seg fault on + unknown node code. + * ch-typeck.c (build_chill_array_ref): Remove old + lower-bound-of-array-index-nonzero code. + * expr.c (expand-expr, get_inner_reference): Remove + old lower-bound-of-array-index-nonzero code. + +Thu Apr 22 16:01:09 1993 Bill Cox (bill@rtl.cygnus.com) + + * c-decl.c (shadow_record_fields): Add pushlevel for + each PROCESS parameter, too. + * ch-process.c (make_process_struct): First working + version. + * ch-tree.def: Add PROCESS_DECL definition. + * ch-tree.h: Add CH_IS_EVENT_MODE macro, change proto + for make_process_struct. + * expr.c (expand_expr): Add references to + PROCESS_DECL. Add #include of ch-tree.h. + * tree.c (decl_function_context): Add check for a + PROCESS_DECL, and #include for ch-tree.h. + +Thu Apr 22 09:25:08 1993 Bill Cox (bill@rtl.cygnus.com) + + * expr.c (expand_expr): Add missing prototypes, and + parameters to expand_expr call. + +Wed Apr 21 16:17:07 1993 Bill Cox (bill@rtl.cygnus.com) + + * c-decl.c (shadow_record_fields): Add ability to + handle pointers to records/unions. For PROCESS + compilation. + +Thu Apr 22 09:25:08 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-expr.c (chill_expand_expr): Add missing + parameters to expand_expr calls. Some trivial + reformatting for readability. + +Wed Apr 21 16:17:07 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-lex.l: Make send_*_prio externally visible, + default them to zero, eliminate the init flags. + Same for process_type. + +Sat Apr 17 10:59:50 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_chill_binary_op): Build a + BIT_FIELD_REF tree for IN_EXPR operations. + * ch-typeck.c (build_chill_array_ref): Build a + BIT_FIELD_REF tree for access to packed array of + bits. + +Fri Apr 16 12:33:34 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-parse.y (EXIT action): Improve error checking, + messages. + * ch-typeck.c (chill_expand_tuple): Remove code to + pack sets (moved to varasm.c long ago). + * varasm.c (unpack_set_constructor): Rename size to + bit_size, since 'size' always means bytes. + (pack_set_constructor): Rename size to wd_size, + since 'size' always means bytes. + (output_constant): Set size to zero, so that extra + bytes of padding aren't output after set constants. + +Fri Apr 16 11:57:50 1993 Bill Cox (bill@rtl.cygnus.com) + + * .cvsignore: Add .gdbinit. + * ch-decl.c (start_chill_bindings): Add function name + to binding contour's exit_label for EXIT stmt. + * ch-parse.y (EXIT action): Call lookup_name to avoid + inserting label for function name. Also check + IDENTIFIER_LABEL_VALUE for label's decl. + (caseaction, beginendblock, ifaction): Call + stamp_nesting_label to put action's label into + contour for EXIT to find. + +Thu Apr 15 17:17:05 1993 Bill Cox (bill@rtl.cygnus.com) + + * expr.c (expand_expr): Unify, clean up handling of + IN_EXPR, and handling of bit-string element ref. + Now, all goes through IN_EXPR handler. + * stmt.c (stamp_nesting_label, expand_exit_labelled): + New functions, which allow either label or + function decls. + +Thu Apr 15 17:17:05 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c ch-actions.h ch-convert.c ch-decl.c ch-except.c + ch-expr.c ch-grant.c ch-inout.c ch-lang.c ch-lex.h ch-lex.l + ch-loop.c ch-parse.y ch-process.c ch-tree.c ch-tree.def + ch-tree.h ch-typeck.c: Add 1993 copyright, fix titles. + * ch-actions.c (build_chill_binary_op): Move runtime function call + to expr.c. Just build a tree here. Clean up error checking. + * ch-convert.c (convert): Simply store a type into an expression if + TREE_TYPE (expr) == NULL. Prevent error if an enum is to be + converted to a set of such enums. + * ch-loop.c (init_loop_counter): Restore error msg for undeclared + variable if no local scope is to be created for the loop. + * ch-typeck.c (build_chill_array_ref): Turn bit array ref into IN_EXPR, + remove redundant code which wasn't ever called. + +Wed Apr 14 07:54:00 1993 Bill Cox (bill@rtl.cygnus.com) + + * .cvsignore (y.tab.c) : Add to list. + * ch-convert.c (convert): Check pointers better - avoid NULL reference. + Remove redundant check for ERROR_MARK - already checked earlier. + * ch-parse.y (get_type_of): Add parameter checks for NULL ptrs and + error_mark_node. + +Tue Apr 13 16:00:37 1993 Per Bothner (bothner@cygnus.com) + + * c-decl.c (start_function): If there is a previous + function declaration of the same name, steal its RTL. + This is a kludge needed for forward declarations of + nested functions. + * ch-decl.c (push_chill_extern_function), ch-tree.h: New + function, for external and seized function declarations. + Make sure to use permanent obstack. + * ch-parse.y (quasi_pdef, extprocedure): Use new function. + + * ch-grant.c (chill_finish_module_code): Since module + function is no longer visible,, can't get it using + lookup_name(). Use current_function_decl instead. + + * ch-decl.c (build_chill_function_type): Add void_type_node + to end of parameter types list. + + * ch-grant.c (chill_start_module_code): Make sure module + function isn't visible (and hence isn't granted). + +Tue Apr 13 15:48:25 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-loop.c (begin_chill_loop): Also stamp the user's loop name into + current contour for DO FOR EVER loops. + +Tue Apr 13 14:37:39 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-parse.y (actionstatement): Add error rule. Delete + POP_UNUSED_ON_CONTEXT. Add comments about label name usage. + (nohandleraction): Better error check in EXIT processing. + (optexprlist): Comment out make_function_rtl call. + (seizestatement): Change error to warning. + +Tue Apr 13 08:29:31 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-grant.c (raw_decode_mode): Supply missing parameter in get_type + call. + * ch-loop.c (begin_chill_loop): Take loop label as parameter. Stamp + its name into the current contour's exit_label, for EXIT to use. + * ch-parse.y: (actionlabel): Save label tree in global variable. + (actionstatement): Clear label to NULL when action is finished. + (handlerstatement, nohandlerstatement): Split actions into + categories which do/don't permit exception handlers. + (exitaction): Move code into nohandleraction, make it work. + (doaction): Pass (possibly NULL) label tree to begin_chill_loop. + * ch-tree.h: Add parameter to begin_chill_tree prototype. + * stmt.c (stamp_nesting_label, expand_exit_labelled): Add functions. + Note: This implementation of EXIT only exits from loops, not yet + from other bracketted statements. + +Mon Apr 12 13:41:55 1993 Per Bothner (bothner@rtl.cygnus.com) + + * ch-grant.c (chill_grant): Remove obsolete code. + + * ch-decl.c (push_synmode, push_newmode): Merged to yield ... + * ch-decl.c (push_modedef): ... w/ slightly different interface. + * ch-tree.h, ch-process.c (make_process_struct), ch-parse.y + (modedefinition): Use new push_modedef function. + * ch-parse.y (modedefinition): Don't depend on inherited + attributes (- implemented incorrectly!): Use a global variable + parsing_newmode to distinguish synmode and newmode. + +Mon Apr 12 08:10:34 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-loop.c: Diffuse cleanup after big functional changes. + * ch-parse.y: Eliminate temporary variables, now unnecessary. Use + parse-time stack instead. + * ch-tree.h: Change build_chill_iterator prototype. + +Sun Apr 11 15:50:33 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-convert.c (convert): Replace an ERROR_MARK type - from a + untyped_expr with the given type. Move chill_expand_case_expr + call inside chill_expand_expr. + * ch-expr.c, ch-tree.h, ch-typeck.c (chill_handle_case_default, + chill_handle_case_label, chill_expand_case_expr): Move to ch-expr.c + from ch-typeck.c. + * ch-loop.c: Major reorganization to support multiple iterators in + DO FOR loop, very little new code, just a re-org. + * ch-parse.y (iterationlist): Add handling for multiple loop iterators. + +Sat Apr 10 14:40:12 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_chill_lower, build_chill_upper): Clean up. + * ch-grant.c (chill_grant): Avoid making strange SYNMODE for enum + member. + * ch-lex.l (equal_number): Add function to look in the input for '=' + followed by a decimal literal. Call it from directive scanning. + (start state 'ccitt'): Deleted, unused. Moved unused, but reserved, + tokens to NORMAL state. + (compiler_directive): Replaced by equal_number. Now the only + recursive call to yylex happens in check_newline at the beginning + of a compilation. + +Sat Apr 10 09:55:50 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_chill_case_expr): Added from ch-parse.y. + * ch-lex.l (ENTRY, PERVASIVE, ROW, STEP): Add token recognition to + 'reserve' them. + * ch-parse.y (case_expr): Move code into ch-actions.c. There will + need to be much more written. + * ch-tree.def (VARY_ARRAY_REF): Add comment. + * ch-tree.h (build_chill_case_expr): Add prototype. + * ch-typeck.c (build_chill_cast): Allow untyped_expr - just assign the + type to the expr. Check for CASE_EXPR, call expand_case_expr. + +Sat Apr 10 01:10:51 1993 Per Bothner (bothner@rtl.cygnus.com) + + * ch-parse,y (in_pseudo_module): New variable. Try if we're + in a seizefile, but not in a module nested in the seizefile. + Use for backwards compatibility with old grantfiles. + * ch-decl.c (do_decls, push_syndecls, push_newmode, push_synmode): + If in_pseudo_module, grant new declaration. + * ch-decl.c (pushd_newmode): If there is a granted previous + incomplete type, fix it up. + * ch-grant.c (seize_implied_names): Do remaining types. + Guard against recursion. + * ch-tree.h (IDENTIFIER_ENUM_VALUE): Removed, not used. + * ch-tree.h (CH_DECL_ENUM), ch-grant.c (chill_grant), ch-lang.c + (finish_chill_enum): Enum constants are marked with + CH_DECL_ENUM so they don't get written to the grantfile. + * ch-tree.h (IDENTIFIER_GRANTED_VALUE): Allow fast seizing. + * ch-lex.l: Re-write to use start states, to avoid calling + yylex() recursively. + * ch-lex.l (compiler_directive); This is now obsolste. FIXME. + * ch-lex.l: Call push_module and pop_module when reading a + seizefile. This creates a pseudo-module. + * ch-parse.y: Clean up handling of empty declarations and + action statements; semicolons are now optional a number of + places. + * ch-parse.y: Remove some bogus tests for "statement + out of sequence" (they're both legal and work). + * varasm.c (mak_function_rtl): Remove kludge that may + not be necessary (and loses anyway). + +Fri Apr 9 09:37:38 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-expr.c (chill_expand_array_assignment): Remove false error about + arrays that are too small. + * ch-parse.y (callaction): Don't pass an error_mark_node to + c_expand_expr_stmt. + +Fri Apr 9 00:26:54 1993 Per Bothner (bothner@rtl.cygnus.com) + + * ch_tree.h (DECL_HIDDEN_BY_MODULE, ENCAPSULATED_ARRAY_P): + New macros. + * ch-actions.c (build_chill_function_call): Use latter. + * ch-typeck.c (chill_similar): Fix typo. + * ch-grant.c (raw_decode_mode): Handle ENCAPSULATED_ARRAY_P + parameter types. + * ch-grant.c (seize_implied_names): Handle ranges of enums. + * ch-grant.c (do_seize): Set DECL_SOURCE_FILE and _LINE of + seized declaration to be the point of the seize itself. + * ch-grant.c (chill_grant), ch-tree.h: Add a parameter + which is the list (in order) of decls in the module. + Don't reverse the getdecls() list; that is handled by caller. + * ch-grant.c (chill_grant): Test that a declaration is + visible before writing it. + * ch-parse.y (push_module): Make sure to hide declarations + from surrounding module. + * ch-parse.y (pop_module): Restore those declarations. + * ch-parse.y (pop_module): This function is now responsible + for writing out for calling chill_grant() to the grant file. + * ch-actions.c (lang_finish): Remove calls to chill_grant(). + +Thu Apr 8 16:56:52 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_char_array_expr): Add handling of varying + arrays in relational expressions. + * ch-decl.c: Add prototype for lookup_name_current_level. + * ch-expr.c (chill_expand_expr): Make concat_expr's temp a BLKmode, + so its length is used as the temp's size. + (chill_expand_array_assignment): Correct for varying := varying + assignment, clean up. + * ch-typeck.c: Add prototype for require_complete_type. + +Wed Apr 7 16:41:29 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-loop.c (for_location, begin_chill_loop, end_chill_loop): Major + diffuse changes to fix location loops. + * ch-parse.y (location): Remove ref through NULL ptr. + +Wed Apr 7 13:42:06 1993 Per Bothner (bothner@rtl.cygnus.com) + + * ch-decl.c (massage_param_node): New function. + It handles the LOC/IN/OUT/INOUT parameter distinction, + as well as calling build_chill_array_parm_type if needed. + * ch-tree.h (massage_param_node): New prototype. + * ch-decl.c (push_parms): Use new massage_param_node(). + * ch-parse.y (pmodearg): Use new massage_param_node(). + * ch-parse.y (formpar): Don't call build_chill_array_parm_type; + now handled by massage_param_node. + * ch-typeck.c (my_build_array_ref): Handle non-zero array + lower bounds. + * ch-actions.c (build_chill_function_call): If the formal + parameter is a pseudo record wrapped around an array, make + sure we wrap the actual parameter in a record CONSTRUCTOR. + * ch-typeck.c (build_chill_array_parm_type): Make sure + the pseudo struct type is allocated on the permanent_obstack. + * ch-parse.y (location): Remove thinko. + * ch-actions.c (chill_comptypes): Comment out test for + NEWMODEness - it gets broken by the forward declaration hacks. + +Tue Apr 6 18:05:40 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c: Move build_varying_struct to ch-typeck.c. + * ch-parse.y (formpar): Turn ARRAY_TYPE parms into structure. + * ch-parse.y (location): Do build_component_ref for an array wrapped + in a structure. + * ch-tree.h: Add prototype, #define for build_chill_array_parm_type. + * ch-typeck.c (build_chill_array_parm_type): Add function, move + build_varying_struct here from ch-actions.c. + +Mon Apr 5 19:56:56 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c, ch-decl.c: Use tree_int_cst_equal and integer_zerop + rather than in-line code - tests LOW and HIGH values. + * ch-lang.c: Use tree_int_cst_lt rather than inline code. + * ch-typeck.c (my_build_array_ref): Handle case where array low bound + isn't zero. + +Mon Apr 5 15:45:10 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-typeck.c (my_build_array_ref): Add some more code from + build_array_ref. Change checks, error messages to mention + 'discrete types'. I.E. types which don't kiss and tell.. + +Sat Apr 3 09:27:03 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-except.c, ch-expr.c: Turn externs into prototypes. + * ch-grant.c (chill_grant): Remove orphan #else. + * ch-tree.h: Add prototype for build_chill_bin_type. + * ch-typeck.c: Turn externs into prototypes, delete code which + was commented out in chill_expand_return; it will never be used. + +Fri Apr 2 21:55:14 1993 Per Bothner (bothner@rtl.cygnus.com) + + Major re-write of New module/seize/grant stuff. + Now, a grantfile is a spec module and contains all the + top-level declarations of the granting module, not just + those that are granted. It also contains explicit grant + statments naming those declared names that are granted. + It also has seize statements and use_seize_file directives + to correctly handle transitive dependencies. + + * ch-parse.y: Change to allow multiple modules per source file. + Allow spec modules (including quasi definitions) as well as + regular modules. + Allow spec modules inside normal modules; these behave as if + they were outermost. This violates the Blue Book, but is + needed by the new grantfile mechanism. (A grant file is a + spec module that gets included by the use_seize_file directive.) + * ch-parse.y (struct module *current_module, push_module, + pop_module): Support module nesting (for spec modules only). + + * ch-tree.h (struct module): New. + * ch-grant.c (granted_decls): New list of declarations + that have been granted into the outermode pseudo-module. + * ch-grant.c (decode_mode): If the decl has a name, + always write the name, not just if the decl has already + been written. Since we write out all decls, we can assume + it will be written later, and depend on the forward + declaration kludges to catch it. + * ch-grant.c (decode_decl): Don't write out _EXTERN. + Instead write out standard (Blue Book) quasi-definitions. + * ch-grant.c (push_granted): New function. + * ch-grant.c (seize_implied_names): New function. Re-write + how set element names are seized when a set type is seized. + * ch-grant.c (chill_seize): Work by seraching the + granted_decls list and copying the declaration. + * ch-grant.c (chill_grant): Write all declarations + declared in this module. Write GRANT statements for + those granted. seize statements for decls seized from + other modules. Write extra syntax to make a complete + spec module. + * ch-grant.c (grant_use_seizefile): Copy use_seize_file + directives into grant file. + * ch-lex.l (setup_seizefile_read): Call grant_use_seizefile. + + * ch-lex.l (struct input_state, current_input_state, + push_input_file, pop_input_file): New (type, variable, + function*2). Used to save and restore state on an input file. + * ch-lex.l: Clean up to handle nested input seizefiles + (needed by new grant/seize mechanism. + * ch-lex.l (skip_to_end_of_directive): New function. + * ch-lex.l (compiler_directive: USE_SEIZE_FILE): Make sure + we skip to the end of the directive *before* we switch + input files. + * ch-lex.l (setup_seizefile_read): Prevent reading the + same seizefile twice (otherwise likely with new grant/seize). + * ch-lex.l: Recognize SPEC. Misc cleanups. + + * ch-parse.y: Fixed foreward references of types. + Removed the unknown_type_node crock. + * ch-decl.c: Remove all uses of unknown_type_node. + Check for TYPE_SIZE zero instead. + * ch-decl.c (fixup_unknown_type): Make sure new mode + gets copied into old mode. Merge their variant chains. + * c-decl.c (lookup_name_current_level): Make non-static. + * ch-decl.c (lookup_name_current_level): No longer needed. + + * ch-parse.y (call): Allow an implicitly defined function + name following the CALL keyword. + * ch-tree.h (struct lang_identifier): Add implicit_decl, + and make sure order of fields matches c-tree.h. + + * ch-actions.c (lang_init, build_allocate_memory_call, + build_allocate_globals_memory_call): Fix names (add initial '_') + and prototypes of _allocate_[global_]memory (2nd param is ref). + Use build_chill_function_call, not build_function_call, + so the reference parameter gets handled. + * ch-actions.c. (lang_init): Make sure boolean_{true,false}_node + have boolean_type_node as their types. + * ch-actions.c (build_chill_lower, build_chill_upper): Fix to + work for arrays with BOOLEAN_TYPE ranges (and simplify some). + + * ch-except.c: Make sure an end_label is generated, + and jump to it if there is no exception. + + * ch-convert.c (convert_to_reference): Strip off NOP_EXPR casts. + * expr.c (expand_expr): Handle NOP_EXPR as Chill-style casts. + (Need cleaning up and FSF installation!) + * ch-parse.y: If taking the address of a cast, move the + ADDR_EXPR inside the NOP_EXPR. + + * ch-typeck.c (my_build_array_ref): Simplified, more suitable + versions of build_array_ref from c-decl.c. (E.g. don't barf + if index type is char or bool.) + * ch-typeck.c (build_chill_array_ref): Use my_build_array-ref. + + * ch-typech.c (build_chill_bin_type): New function. + Support BIN(N) range type specification. + * ch-parse.y (mode2), ch-lex.l: Recognize BIN(N). + + * ch-tree.h (CH_SIMILAR): Redefine in terms of chill_similar. + * ch-typeck.c (chill_similar): New function. Recognize that + that range types are similar to their parent types. + + * ch-tree.h: Declare flag_local_loop_counter. + * ch-loop.c: Whether the loop variable is local to the loop + in now controlled by flag_local_loop_counter, instead of + #ifdef'd on CREATE_SCOPE. + * ch-actions.c (lang_decode_option): Recognize flags + "-f[no-]local-loop-counter". + * toplev.c (lang_options): Add Chill flags -f[no-]local-loop-counter. + + * varasm.c (make_function_rtl): Due to problems with forward + references, don't rename nested functions in Chill. (Kudge!) + +Sun Mar 28 10:12:45 1993 Ken Raeburn (raeburn@kr-pc.cygnus.com) + + * ch-lex.l (push_back, readstring): Fix prototypes. + +Fri Mar 26 18:32:15 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-parse.y: Put %type directives back into alpha order. + (variant_alternative): Simplify error_mark test. + (variantfields, varianthack): Add error_mark checks. + +Fri Mar 26 13:36:23 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-lex.l (convert_charliteral): Rewrite to avoid bogus error msg. + * ch-parse.y (get_type_of): Add function to deal with possible fwd + declared type name. Call it from lotsa places. Add lotsa checks + for error_mark_node. Standardize indentations. + +Thu Mar 25 15:00:11 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-expr.c (chill_expand_assignment): Avoid seg fault while checking + for array assignments. + * ch-parse.y (action): Add recognition for allocate_memory and + allocate_global_memory system calls. + (mode2): Remove ill-conceived error check that broke REFs to + as-yet-undeclared types. Check for IDENTIFIER_NODE, lookup its + DECL if there, pass TREE_TYPE of decl to build_pointer_type. + (variantfields, varianthack): Clean up. + (variantfield): Check for IDENTIFIER_NODE, lookup its DECL if + there, pass TREE_TYPE of decl to grok_fixedfields. + (labellist): Explicitly assign error_mark_node to signal error. + * ch-typeck.c (chill_compatible): Report FALSE for bad parameters, + rather than seg faulting. + +Thu Mar 25 10:35:58 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (lang_init): build_function_type for allocate_memory + and allocate_global_memory runtime routines. Move discrete_type_p + into ch-typeck.c. + * ch-typeck.c (discrete_type_p): Move here, where it belongs, call it + in build_chill_cast. + +Wed Mar 24 16:25:16 1993 Per Bothner (bothner@rtl.cygnus.com) + + * ch-grant.c: Don't grant previously seized names. + +Tue Mar 23 15:25:39 1993 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in (ch-actions.o): Add dependencies (expr.h insn-codes.h) + * dwarfout.c (fundamental_type_code): Add handling of BOOLEAN_TYPEs, + avoid abort. + +Tue Mar 23 09:03:35 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_char_array_expr): Just build a type for the + result of a CONCAT_EXPR, and pass the tree back. + chill_expand_array_assignment can do a better job of + code-generation. + * ch-expr.c (chill_expand_array_assignment): Generate the CONCAT_EXPR + code. + +Mon Mar 22 12:42:58 1993 Per Bothner (bothner@rtl.cygnus.com) + + * ch-except.c (start_handler_array): Make sure the handler + array and its type get on the permanent obstack. + * ch-grant.c (write_grant_file): Don't write the _INIT=name + specifier: It isn't needed, and loses (because of funny + characters in the chill_initializer_name). + * ch-decl.c (push_synmode): Set TYPE_NAME(mode) = syndecl. + * ch-lang.c (finish_chill_enum): Don't allocate a dummy + TYPE_DECL for the enum. I don't think it is needed (?), + and removing it is needed for the change above. + + * ch-grant.c (grant_array_type, decode_mode): Remove unused + 'decl' parameter. + * ch-grant.ch (raw_decode_mode): New function, based on old + decode_mode. + * ch-grant.c (decode_mode); This is now just a wrapper around + raw-decode_mode - but does not call raw_decode_mode if the + type is named and has already been emitted. + +Fri Mar 19 11:55:35 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c: Add prototypes, remove unused variables. Attempt to + continue generating grant file in presence of error (Wilfried's + patch to lang_finish). + * ch-expr.c: Change assign_stack_temp calls so temps get recovered + after each statement. Move convert call into + chill_expand_assignment from ch-parse.y. + * ch-grant.c: Generally re-order, clean up. Include Per's decode_mode + simplification. Include commented-out hack in decode_mode to return + type's name if type SEIZEd or already GRANTed in this file. + * ch-lex.l: Add prototypes. + * ch-parse.y (assignaction): Move convert call into + chill_expand_assignment. + +Thu Mar 18 16:04:45 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-convert.c (convert): Remove unused variable, fix int_size_in_bytes + comparison. + * ch-decl.c: Add prototypes, correct error message spelling, remove + unused variables. + * ch-lang.c (build_chill_range_type): Add error message. Add prototypes. + Correct comment spelling. + * ch-lex.l: Add prototypes, remove unused variable, put double parens aarround + assignment in conditional. + * ch-loop.c: Add prototypes, remove unused variable. + * ch-parse.y (structured_variable): Return NULL_TREE is invalid WITH + parameter is seen, don't count it in structured_variable_list. Pre- + vents seg fault when only WITH operand is invalid. + * ch-parse.y (label_spec): Correct assignment within IF expression which + was intended to be equality test. Remove unused variables. + * ch-tree.h: Add prototype. Remove unused EXCP_CODE enumeration, and + prototyping editorial comments. + * ch-typeck.c: Disable generation of code to validate array index for + now. Should be done as a call-back from more generic array_ref code. + Clean up parameter checking. Remove unused variables. + +Fri Mar 12 11:57:32 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (chill_varying_type_p): Return FALSE if given NULL type. + * ch-actions.c (build_chill_binary_op): Pass ALL arrays to + build_char_array_expr. + * ch-convert.c (convert): protect against seg fault, if type == NULL. + * ch-expr.c (chill_expand_expr): Add FIXME comment. + +Fri Mar 12 11:04:02 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-expr.c (chill_expand_expr): Completely rethink set unary ops. + Thanks very much to dje! + +Thu Mar 11 21:06:55 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_char_array_expr, build_chill_binary_op): + Move CONCAT_EXPR handling from binary_op to array_expr. Add + handling for relationals between varying arrays to array_expr. + +Thu Mar 11 19:20:37 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_set_expr, build_chill_binary_op): Calculate + *BIT* length of powersets and arrays of BOOLs. + (invalid_left_operand, invalid_right_operand): Disallow relationals + with arrays of BOOL as operands. + * ch-convert.c (convert): Test TREE_CODE for ERROR_MARK rather than + comparing pointers. + * ch-decl.c (push_newmode): Re-indent. + * ch-expr.c (chill_expand_expr): Calculate *BIT* length of powersets + and arrays of BOOLs. + * ch-lang.c (build_chill_array_type): Add parameter error checking. + +Mon Mar 8 17:13:00 1993 Bill Cox (bill@rtl.cygnus.com) + + * expr.c (store_constructor): Handle set construction. + * varasm.c (output_constant): Prevent seg fault - terminate case + alternative with a 'break'. + +Mon Mar 8 17:13:00 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-expr.c (): Move SET_TYPE constructor to expr.c. + * ch-loop.c (end_chill_loop): Only do expand_end_loop if not POWERSET loop. + * ch-typeck.c (build_chill_cast): Fix error msg spelling. + +Mon Mar 8 13:16:05 1993 Bill Cox (bill@rtl.cygnus.com) + + * fold-const.c (fold_convert): Allow CHAR_TYPE CONVERT_EXPR to + be folded. + +Mon Mar 8 10:13:57 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-grant.c (get_tag_value): Correctly output certain enumerations. + Correct some non-standard indentations. + +Fri Mar 5 14:58:35 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c: Fix up comment. + +Thu Mar 4 18:05:43 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c: Define builtin '__nepowerset' and call it - avoid + negating the result of calling __eqpowerset. New function + discrete_type_p(). + * ch-grant.c (get_tag_value): Don't seg fault referring to an + anonymous enumeration's name. + * ch-lex.l: Turn EVEN token into an ignored compiler directive. + * ch-loop.c (end_chill_loop): Output end-of-loop marker. + * ch-parse.y (label_spec): redefine variant structure label_spec + to agree with the Z.200 spec. + (locdec): Error if set/bitstring initialized with a tuple. + (case_label, arrayindex): Use new discrete_type_p + function. + * ch-process.c: Fix typo. + +Wed Mar 3 14:30:53 1993 Per Bothner (bothner@rtl.cygnus.com) + + * ch-lang.c, ch-tree.h: Rename build_range_type to + build_chill_range_type. Call new build_range_type() in tree.c. + * ch-parse.y: Call build_chill_range_type as approriate. + * ch-typeck.c (build_chill_cast); Clean up. + +Wed Mar 3 09:36:56 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-parse.y: Define CONTINUE_EVENT token. + * ch-parse.y (mode2): Give error message for SYN modea = modeb + where modeb is undefined. + +Tue Mar 2 20:16:37 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c: Add builtin function descriptions for memset and + bitsetpowerset. Allow build_chill_num expression to exceed 16 bits, + but not 32. + * ch-tree.h: Correct chill_handle_case_default prototype. + * ch-actions.h, ch-lex.h: Add prototypes. + * ch-lex.l, chill.gperf: Add CONTINUE_EVENT token. + +Thu Feb 25 17:35:46 1993 Bill Cox (bill@rtl.cygnus.com) + + * c-decl.c (init_decl_processing): Disable creation of C-specific + builtin functions. They pollute the CHILL name space. + * stor-layout.c (variable_size): Allow variable-size objects at file + scope, for CHILL. + +Fri Feb 26 07:14:34 1993 Bill Cox (bill@rtl.cygnus.com) + + * c-decl.c (finsh_decl): Don't output non-constant storage size + error for CHILL + * ch-actions.c: Call build_temporary_variable, fix build_tree_list + call in build_chill_cause_exception. + * ch-convert.c, ch-expr.c: Use tree_cons to build list's last entry + * ch-loop.c (build_temporary_variable): New function + * ch-process.c: Call build_temporary_variable, spell start_process + correctly. + * ch-tree.h: Extern for build_temporary_variable + +Thu Feb 25 12:09:01 1993 Bill Cox (bill@rtl.cygnus.com) + + * c-decl.c (init_decl_processing): Disable initial creation of C-specific + builtins - they pollute the CHILL name space. + * ch-typeck.c (valid_array_index): Correct upper-bound check. + * expr.c (expand_expr): Use actual library name for __inpowerset + builtin. + * stor-layout.c (variable_size): Disable complaint about variable- + size type or decl at file scope. Perhaps later this s.b. a warning. + * varasm.c (emit_set_data): Add function. + (output_constant): Call new emit_set_data function for VAR_DECLs, + in addition to CONSTRUCTORs. + +Thu Feb 25 11:34:36 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c: Change all builtin functions names to their + actual library names. Change references to boolean_type_node + to references to the TREE_CODE == BOOLEAN_TYPE, to follow the + convention. + build_set_expr: Remove length parameter, call powersetlen() instead. + remove handling of CHAR arrays - they're handled in build_char_array_expr. + Call __eqpowerset to test for equality - we can't use a byte-length - + need bitcount instead. + build_chill_compound_expr, internal_build_compound_expr: Copy from C + version that does stuff we don't want. + build_binary_op: Check for in_size_in_bytes return < 0, indicating + size is changeable at run time. Build two memcpy calls to implement + string concatenation. + powersetlen: Add function. + build_chill_card: Call powersetlen. + build_chill_max_min: Common code for powerset max/min. + build_chill_length: Move VARYING array handling before regular char + array handling. + * ch-expr.c chill_expand_expr: Disable concatenate code - we need to + the VARYING status of the target to do this correctly. Use powersetlen + for the powerset operations, not a byte length. + * ch-loop.c: Make CREATE_SCOPE #define to enable creation of a new scope + for each CHILL loop, as Z.200 requires. Add powerset and error flags + to loop structure. Evaluate user's powerset expression into a temp, + scan it destructively with __ffsetclrpowerset or __flsetclrpowerset + for powerset loop. Only do loop-end assignments if NOT a powerset + loop, which has much less overhead now. + * ch-tree.h: Add prototype for powersetlen. + +Fri Feb 19 08:40:24 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-lex.l (convert_number): Evaluate number and pass it as + HOST_WIDE_INT. + +Fri Feb 19 08:56:44 1993 Michael Tiemann (fs_tie at rcsw18) + + * ch-typeck.c (build_chill_array_ref): Handle newmodes + correctly. + + * ch-actions.c (chill_comptypes): Always initilize ERRSTR if + we are going to return 0. + + * ch-convert.c (convert_to_reference): Don't use + TYPE_MAIN_VARIANT, because REFTYPE's type may be a newmode + (which must match the type of the expr). + + * ch-grant.c (chill_seize): Don't let a type be copied just + because we are seizing it. + + * ch-lang.c (finish_chill_enum): Convert TYPE_MIN_VALUE and + TYPE_MAX_VALUE to integer type. + + * ch-loop.c (begin_for_range): Set lp->iter_type based on the + tree type of the bounds. + (build_loop_top): type of GE_EXPR and LE_EXPR is + boolean_type_node, not lp->iter_type. + (for_location): Ditto. + + * ch-action.c (build_chill_lower,build_chill_upper): Handle + ENUMERAL_TYPE. Also, handle different kinds of arguments more + cleanly. + + * ch-parse.y (iteration): Convert start_exp and end_exp to + match the type of modename. + + * ch-grant.c (chill_seize_aggr): Search also through anonymous + types. + + * ch-grant.c (chill_seize): Check to see if SEIZEITEM has + already been seized, and if so, do nothing. + + * c-typeck.c (process_init_constructor): If DEFAULT_VALUE + comes out error_mark_node, set ERRONEOUS. + + * ch-actions.c (build_chill_binary_op_1): If EXP is NULL_TREE, + don't use it. + + * ch-action.c (chill_comptypes): Test for structural + equivalence of enums. + + * ch-typeck.c (build_chill_array_ref): Convert INDEX to + TYPE_MIN_VALUE of DOMAIN if the types are compatible. + + * ch-grant.c (chill_seize): If DECLS is a TYPE_DECL for an + ARRAY_TYPE, seize the domain type if its a set. + +Thu Feb 18 20:02:15 1993 Per Bothner (bothner@rtl.cygnus.com) + + * c-typeck.c (process_init_constructor): Emit error if some + array elements are not initialized. + * c-typeck.c (process_init_constructor): Call digest_init() + recursively to expand default_value. + * ch-expr.c (chill_expand_array_assignment): Simplify, and + handle the case that the lhs has dynamic size (e.g. a slice). + * ch-parse.y (elementlist): Handle the case that tupleelement + generates more than one TREE_LIST node. + +Thu Feb 18 12:40:56 1993 Michael Tiemann (fs_tie@rcvie.co.at) + + * .cvsignore: add yacc sources, xgcc and stmp-* files. (Bill) + * c-typeck.c (lookup_field): add function, calls. + * ch-actions.c (build_chill_binary_op): figure return_type differently. + * ch-convert.c (convert_to_reference): return error_mark_node, + STRIP_NOPS. (convert): Braces for readability. + * ch-decl.c (build_chill_function_type): accept typespec as parm. + Handle exceptions. + (grok_chill_variantdefs): call comptypes, not chill_comptypes. + * ch-expr.c (chill_expand_assignment): handle references. + * ch-grant.c (chill_seize_set, chill_seize_aggr): new functions + * ch-parse.y (structured_variable): check for REFERENCE_TYPE, + call convert. Generally handle reference types. + + +Thu Feb 18 09:30:11 1993 Michael Tiemann (fs_tie@rcvie.co.at) + + * ch-actions.c (chill_comptypes): Figure out which newmode or + synmode decls look most canonical. + * ch-convert.c (convert): handle location conversions of records, + unions and arrays. + * ch-decl.c (fixup_unknown_type): changes for variant records + * ch-parse.y (tupleelement): avoid confusing digest_init. + * ch-typeck.c (build_chill_array_ref): give element ref the + type of the ELEMENT, not the array (Bill Cox). + +Wed Feb 17 11:52:20 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-parse.y: change push_newmode and push_synmode interfaces. + * ch-actions.c (build_chill_binary_op): convert operands. + +Wed Feb 17 10:54:24 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_chill_binary_op, build_chill_unary_op): + handle reference types. + * ch-decl.c (push_newmode, push_synmode): rewritten + * ch-process.c (make_process_struct): new push_newmode interface. + * ch-typeck.c (build_chill_cast): change interface, error checks. + +Wed Feb 17 09:50:37 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c, ch-parse.y, ch-tree.h: delete old INOUT, OUT parameter + code. + * ch-typeck.c (valid_array_index): new function. + +Tue Feb 16 22:36:34 1993 Per Bothner (bothner@rtl.cygnus.com) + + * ch-convert.c (convert): Slightly more correct conversion + for ARRAY_TYPEs (return as OK if CH_COMPATIBLE). + * ch-expr.c (chill_expand_array_assignment): Invoke + __builtin_memcpy using build_function_call, not directly at + the rtx level (which doesn't work). + * ch-typeck.c (build_chill_slice): First attempt at slices. + * ch-tree.h, ch-typeck.c (build_chill_slice_with_range, + build_chill_slice_with_length): New functions. + * ch-parse.y: Use new slice-building functions. + * expr.c (get_inner_reference): Subtract low bound of + array when doing an ARRAY_REF. + +Tue Feb 16 14:17:55 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_chill_function_call): better comments. + * ch-decl.c (push_parms): encode OUT, INOUT parms in additional way. + * ch-parse.y: indentation cleanup + +Tue Feb 16 12:03:53 1993 Michael Tiemann (tiemann@cygnus.com) + + * ch-decl.c (grok_chill_variantdefs): Really implement variant + records for CHILL. + * ch-grant.c (get_tag_value): New function. + * ch-grant.c (decode_mode): Grant variant records. + + * ch-grant.c (chill_seize): If we seize a set, seize the set + values. + + * ch-lex.l (RETURN_TOKEN): Make this safe to use in if/else + constructs. + + * ch-parse.y (EMPTY): New pseudo-token to disambiguate + variant_alternatives. + (current_fieldlist): New variable to help processing tag + declarations in variant records. + (fields): Renamed from structdef. + (field): Renamed from fields. + (varianthack): New non-terminal to handle parsing ambiguity + for variant records. + (optlabellist): Changed to preserve CONST_DECLs when they are + parsed. + + * ch-tree.h (TYPE_TAGFIELD): New macro. + (TYPE_TAG_VALUES): Ditto. + +Mon Feb 15 00:49:34 1993 Per Bothner (bothner@rtl.cygnus.com) + + * ch-grant.c (decode_mode): Fix output for powerset modes. + * ch-grant.c (decode_constant): Support grant output of + powerset literals. + * ch-actions.c (build_chill_binary_op): IN_EXPR fix. + * expr.c (expand_expr): Add Chill-specific kludge for + BIT_FIELD_REF if operand is SET_TYPE to call runtime function. + * ch-expr.c (chill_expand_assignment): Remove no-longer-needed + special-case support for a BIT_FIELD_REF in right-hand-side. + * ch-lang.c (finish_chill_enum): Patch up enum elements to + have the correct type (instead of integers, as in C). + + * ch-lex.l, ch-parse.y: Add disgusting hack (involving + context-dependent look-ahead) so we can parse exception + handlers correctly. + * c-typeck.c (digest_init): Set output type for SET_TYPEs. + * varasm.c (unpack_set_constructor): Add support for + (power-)set ranges (i.e. low_element:high_element). + +Sun Feb 14 13:37:52 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-inout.c: delete unused #include + * ch-typeck.c (build_chill_slice): turn abort call into error msg. + +Sat Feb 13 13:13:31 1993 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: Add cc1chill to STAGESTUFF per Eichin's suggestion. + +Sat Feb 13 12:17:41 1993 Bill Cox (bill@rtl.cygnus.com) + + * Makefile.in: add lots of header files to the CHILL dependencies + +Fri Feb 12 15:48:27 1993 Per Bothner (bothner@rtl.cygnus.com) + + * ch-actions.c (build_chill_function_call): Don't return + error_mark_node on empty parameter-list. + +Fri Feb 12 12:54:52 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_chill_function_call): fix start_decl parms. + * ch-parse.y (PUSH_ACTION): guarantee to generate an insn! + +Fri Feb 12 10:32:37 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_chill_function_call): create temps, do + assignments to handle INOUT and OUT parameters. + * ch-decl.c (build_chill_function_type): better parameter name. + * ch-parse.y (action): keep rules in alpha order. + (pmodearg): turn INOUT, OUT parameter types into reference types. + * ch-typeck.c (build_tree_slice): indentation change. + +Thu Feb 11 23:16:34 1993 Per Bothner (bothner@rtl.cygnus.com) + + * ch-lex.l (convert_bitstring), Changed SET_TYPE_CONSTRUCTOR to + take a list of elements which are in the set. This corresponds + better to the tuple input form in Chill (and Pascal). + * varasm.c (unpack_set_constructor, pack_set_constructor): + New functions, to expand SET_TYPE CONSTRUCTORs. + * varasm.c (output_constructor): Use pack_set_constructor + to assemble a SET_TYPE constant from a CONSTRUCTOR. + + * ch-grant.c (decode_constant): Better grant for strings, + enumeral, and bitstring constants. + * ch-grant.c: Fixes in seize to avoid duplicates, and emit + things in the correct order. + * c-typeck.c (chill_initializer_constant_valid_p): Kludge + needed to export a static function. + * ch-typeck.c (convert): Avoid needlessly (and lossingly) calling + chill_expand_tuple to convert fix string to varying. + * ch-actions.c (build_chill_binary_op): Promote short + integer operands if needed (otherwise emit routines barf). + * ch-tree.h (SET_WORD_SIZE): New macro. + * ch-parse.y: Fix syntax for RECEIVE CASE. + * ch-parse.y (location): If IDENTIFIER is a CONST_DECL + return its value instead. + +Thu Feb 11 07:41:45 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_chill_max, build_chill_min): clean up + * ch-typeck.c (chill_expand_tuple): correct set initialization from + an enumeration tuple. Add sort_constructor function. + +Thu Feb 11 07:41:45 1993 Bill Cox (bill@rtl.cygnus.com) + + * config/sparc.c (sparc_type_code): handle CHAR_TYPE and + BOOLEAN_TYPE w/out an abort. + +Wed Feb 10 14:59:53 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c: change most integer_type_node references to + chill_integer_type_node. Rewrite _max and _min routines, + redefine the signatures for those runtime routines. Move + empty-set check into runtime. + * ch-expr.c, ch-loop.c, ch-process.c, ch-tree.c, ch-typeck.c: change + most integer_type_node references to chill_integer_type_node. + +Tue Feb 9 16:00:05 1993 Per Bothner (bothner@rtl.cygnus.com) + + * ch-except.c: New file. Stuff for exception handling. + * ch-parse.y: Add working exception handling support. + * ch-lex.l, ch-parse.y: Prefer standard type terminology + (BOOLS, CHARS) even though non-standard (BITS, CHAR) is ok. + * ch-grant.c: Fix various problems related to granting + types such as bitsets. + * ch-tree.c (build_bitstring_type): Set TYPE_MIN_VALUE + to distinguish bitstrings from powersets (in the same way + we distinguish char strings from char arrays). + * ch-tree.h: New macro CH_BOOL_TYPE_P. + * ch-tree.h, ch-actions.c (lang_init), ch-grant.c (decode_mode): + Undo kludge where integer_type_node was hardwired to 16 bits. + Make integer_type_node etc have the same size as in cc1. + New types chill_integer_type_node and chill_unsigned_type_node + that correspond to the Chill source types INT and UINT. + For now, these match the C 'short' types, but that should + become a configuration option later, + +Tue Feb 9 11:41:25 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_chill_unary_op): allow NOT of a set. + +Tue Feb 9 08:27:18 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_chill_function_call): add test for + too many/few actual parameters (and avoid seg fault). + * ch-decl.c (do_decls): code cleanup for readability. + * ch-loop.c (begin_chill_loop, end_chill_loop): remove + emit_nop() calls - they now (since exceptions) cause seg faults. + Make derogation on poor CHILL compiler non-specific. + * ch-parse.y (mode2): enable VARYING keyword in CHAR(expr). + * ch-tree.h: remove prototypes added to c-tree.h. + * ch-typeck.c (build_chill_array_ref): correct getting domain + subtree for a PARM_DECL. Subscripting a SET_TYPE is turned into + an IN_EXPR. + +Sun Feb 7 18:20:49 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-tree.def: add a new tree type - just for varying array + references. We were using ARRAY_REF, but the underlying C + code also generates that one. + * ch-convert.c, ch-expr.c, ch-typeck.c: use the new tree type. + +Sun Feb 7 17:33:17 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-convert.c: test given type against type of expr before + calling chill_expand_tuple. We were getting lots of spurious + calls... + +Fri Feb 5 15:24:01 1993 Per Bothner (bothner@rtl.cygnus.com) + + * cccp.c: Merge in various Chill-specific changes. + * gcc.c (default_compilers array): Pass -lang-chill + to cpp, not -lang-ch. + +Fri Jan 29 17:18:22 1993 Per Bothner (bothner@rtl.cygnus.com) + + * Makefile.in (install-libchill, install-librmt): Removed. + * ch-actions.c (build_chill_exception_decl): Change decl + to initialized char array, rather than unitialized common. + (Simplifies extracting string name of exception.) + * ch-actions.c: Adjust interface to cause_exception accordingly. + * ch-typeck.c (build_chill_array_ref): Cause rangefail if + index > limit, not >= limit. + + * ch-actions.c (build_chill_function_call): Rename misleading + formal parameter. + * ch-decl.c (do_decls): Allow (again) general initializer exprs. + * ch-parse.y (call): Test for function call needs to test for + FUNCTION_TYPE, not FUNCTION_DECL. + nreverse arg list to build_chill_array_ref. + * ch-typeck.c (build_chill_array_ref): Do recursive call at end + and only if multiple indexes. + * ch-typeck.c: Cleanups. + +Fri Jan 29 11:05:58 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (do_decls): handle set initializations better, more to do. + * ch-loop.c (begin_for_range): correct interface to expand_start_cond + and build_binary_op. + * ch-tree.h: lots more prototypes + * ch-typeck.c (build_array_from_set): added function. + * ch-typeck.c (chill_expand_tuple): handle set initializations better. + +Thu Jan 28 17:41:58 1993 Per Bothner (bothner@rtl.cygnus.com) + + * ch-grant.c (set_default_grant_file): Change default. + Normally, grant file should end up in cwd. + * ch-lang.c (build_chill_struct_type): Call pushtag, + for the sake of debugging. + * ch-lex.l: Improve comment parsing. + * ch-lex.l (readstring): Some improvements. + Initial support for control sequences in string literals.a + +Thu Jan 28 16:16:00 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-convert.c (convert): correct fixed->varying conversion. + * ch-parse.y (mode2): delete unesthetic newline. + +Thu Jan 28 10:32:55 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c: delete maybe_array_ref() + * ch-expr.c (chill_expand_assignment): handle RHS array_ref, delay + calling convert(). + * ch-lex.l, ch-parse.y, chill.gperf: add keywords, syntax for time + supervision actions & builtins + * ch-parse.y (call): eliminate optlocarrayidx, call build_chill_slice, + smaller actions directly (maybe_array_ref() used to call them). + * ch-tree.h: add build_chill_function_call, build_chill_slice + * ch-typeck.c: add build_chill_slice() + +Thu Jan 28 08:44:28 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-tree.h: bring up to date with ch-actions.c changes. + +Wed Jan 27 23:45:20 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-expr.c (chill_expand_assignment): handle an RHS varying array + reference. + +Wed Jan 27 22:28:36 1993 Per Bothner (bothner@rtl.cygnus.com) + + * ch-grant.c (decode_constant): Add REAL_TYPE support. + * ch-actions.c (build_chill_exception_decl): New function. + * ch-actions (build_chill_cause_exception, cond_exceptions): + Convert to take a (char*) parameter (the exception name). + * ch-actions.c, ch-expr.c, ch-typeck.c: Convert calls to + cond_exception. + * ch-parse.y (check_end_label): New function, to check if + and end label matches start label. + * ch-parse.y: Fix syntax to properly recognize and + test optional end labels (using check_end_label). + * ch-decl.c (finish_chill_function): Simplify, since + we assume check_end_label has already been called. + * ch-parse.y: Put in infrastructure for exception handling. + +Wed Jan 27 15:45:20 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c: delete convert_chill_parameter, replace call with + call to convert(). + * ch-convert.c (convert): combine chill_give_type_to_expr in here. + * ch-decl.c: call convert rather than chill_give_type_to_expr. + * ch-expr.c: delete chill_expand_array_assignment, move code to convert. + * ch-expr.c (chill_expand_assignment): just call convert. + * ch-loop.c (end_chill_loop): expand the end of the loop for a + do while. + * ch-parse.y: call convert rather than chill_give_type_to_expr. + * ch-process.c: checkpoint. + * ch-typeck.c: delete chill_give_type_to_expr, call convert instead. + +Wed Jan 27 15:45:20 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-grant.c (grant_array_type): new function to allow handling of + VARYING array types. + +Wed Jan 27 15:45:20 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-typeck.c (chill_give_type_to_expr): fix typo. Reorder to + avoid checking types on CONSTRUCTORs. Correct typo. + * ch-expr.c (expand_assignment_to_varying_array): use proper + expansion function expand_expr_stmt. + * ch-expr.c (expand_chill_assignment): only convert VARYING + array refs or RHS. + +Wed Jan 27 15:32:21 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_chill_length, build_chill_lower, + build_chill_upper): accept parameters, too. + * ch-expr.c (chill_expand_assignment): decipher ARRAY_REF on RHS. + * ch-typeck.c (chill_give_type_to_expr, build_chill_array_ref): + assign proper type to ARRAY_REF expression. + +Wed Jan 27 09:51:46 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c (build_chill_binary_op): delete unused variable, + get set's base type from TYPE_DOMAIN rather than TREE_TYPE. + * ch-actions.c (build_chill_repetition_op): handle differently-built + declaration trees. + * ch-loop.c (begin_for_set): adapt to new powerset declaration tree. + * ch-typeck.c (chill_give_type_to_expr): give type to constructor + +Tue Jan 26 11:32:38 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-parse.y (ifaction): re-add lost call to expand_end_code(). + * ch-parse.y (siezelist, grantlist): use 'name' rather than + 'checked_name'. It makes no sense to check sieze/grant names + for WITH expansion. + * ch-expr.c (chill_expand_expr): delete unnecessary (and + seg-fault-causing) code. + * ch-expr.c (chill_expand_assignment): make test for varying array + on the LHS more specific. + * ch-actions.c (invalid_left_operand, invalid_right_operand): error + for use of MOD, REM operators. + * ch-actions.c (build_chill_repetition_op): error for bit-field + initializers (which will get handled in the lexer). + +Mon Jan 25 17:26:47 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-typeck.c (build_chill_array_ref), + * ch-expr.c (chill_expand_expr, chill_expand_assignment): + translate varying array ref into ARRAY_REF, defer processing + until chill_expand_expr. Update array's length field in + new function expand_assignment_to_varying_array. + +Mon Jan 25 14:57:24 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-parse.y (mode2): eliminate old method to mark varying arrays. + * ch-expr.c (expand_varying_length_assignment): repair scaling of + RHS expression. + +Mon Jan 25 11:44:21 1993 Per Bothner (bothner@cygnus.com) + + * ch-parse.y: Allow character and bitstring literals + in string repetition operator. + +Sat Jan 23 14:18:11 1993 Per Bothner (bothner@cygnus.com) + + * ch-parse.y (primval): Re-recognize '(' expr ')'. + * ch-parse.y (name): Remove call to check_identifier - + this is not appropriate in certain contexts. + * ch-parse.y (checked_name): Same as , but *with* the + call to check_identifier. Use where appropriate. + * ch-parse.y (operand5): Only allow string repetition of + string literals, because otherwise you get a conflict. + +Thu Jan 21 16:32:39 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-actions.c, ch-parse.y, ch-process.c, ch-tree.h: sync modules, + continue start_process development. + +Thu Jan 21 13:51:06 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (do_decl): fix handling of multi-char initializer. + +Thu Jan 21 13:14:00 1993 Bill Cox (bill@rtl.cygnus.com) + + * .cvsignore: add CHILL files to be ignored + +Thu Jan 21 07:38:57 1993 Bill Cox (bill@cygnus.com) + + * ch-parse.y: rough draft of start_process handling. + +Wed Jan 20 17:11:05 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-inout.c: fix mismatch with readtext proto in ch-tree.h. + +Wed Jan 20 16:48:13 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-tree.h, ch-process.c, ch-inout.c, Makefile.in: + create new modules for I/O and process-related stuff. + * ch-actions.c: move routines to new modules. + call xmalloc, not malloc. + * ch-lang.c (build_chill_struct_type): add parameter checking. + * ch-lex.l (init_lex): remove redundant cast. + +Tue Jan 19 16:33:56 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-parse.y (operand5): delete unnecessary argument to + build_chill_unary_op. Add rule for string repetition. + * ch-parse.y (primval): delete string repetition attempt. + * ch-parse.y (start_process): rough draft of action. + * ch-actions.c (build_repetition_op): add it + * ch-actions.c (build_chill_binary_op): handle constant arguments + of CONCAT_EXPR, combine into a single string if possible. + * ch-actions.c (invalid_left_operand, invalid_right_operand): + allow single character arguments to CONCAT_EXPR. + * ch-tree.h: add prototype for build_repetition_op + +Tue Jan 19 15:03:29 1993 Fred Fish (fnf@cygnus.com) + + * dwarfout.c (output_type): Add hack that matches the one in the + chill front end to distinquish between true string types and + arrays of char, since it uses ARRAY_TYPE for both, rather than + trying to use the existing support for STRING_TYPE. + +Tue Jan 19 13:54:27 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-tree.h: added prototypes for all non-static CHILL functions. + * ch-actions.c (lang_init): declare builtin type for start_process + * ch-actions.c (build_chill_binary_op): combine string literals when + concatenated. + * ch-actions.c (formpars2struct): added for later start_process + implementation. + * ch-actions.h: remove un-needed function declarations. + * ch-decl.c: extern cleanup. + * ch-expr.c (chill_expand_array_assignment): add missing first + parameter to cond_exception call. + * ch-lex.l: make build_chill_string non-static. + +Mon Jan 18 19:15:08 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (do_decls): get varying array length initialized. + +Mon Jan 18 09:51:43 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-expr.c (chill_expand_array_assignment): fix the copy length + in the memcpy call (it was just 4 bytes always). Simplify some + code, also. + +Mon Jan 18 08:24:21 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c (do_decls): change CH_VARYING_TYPE_P to function. + +Mon Jan 18 08:00:11 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-lex.l, ch-parse.y: make BOOLS synonymous with BIT and + CHARS synonymous with CHAR, in the lexer. Delete unnecessary + 'bools' non-terminal. + * ch-parse.y (assignaction): add lhs version of length() function + * ch-actions.c: add builtin_concat function, lots of support for + CONCAT_EXPR. + * ch-actions.c, ch-tree.h: make a function out of former + macro CH_VARYING_TYPE_P + * ch-expr.c: add expand_varying_length_assignment (). + * ch-expr.c (chill_expand_expr): add CONCAT_EXPR support. + * ch-expr.c (chill_expand_array_assignment): call emit_library_call + rather than build_rts_call, to eliminate a recursion problem. + * ch-lang.c: eliminate 'sorry' about varying arrays. + * ch-typeck.c (validate_varying_array_ref): re-enable constant + index validation. + +Sun Jan 17 18:20:04 1993 Per Bothner (bothner@cygnus.com) + + * ch-grant.c, ch-lex.l: Major simplification of how + seizes are done and how seizefiles are read. + * ch-actions.h: Remove declaration of check_seize(). + * ch-decl.c (do_decls): Handle READONLY types. + * ch-parse.y (mode2): Allow REF to be followed by any mode. + * ch-parse.y (mode2): Allow literal expressions in string length. + * ch-parse.y (tupleelement): Allow elemenst to be untyped_expr. + * ch-parse.y (seizestatement, etc): Call chill_seize each + time something is seized, rather than building a list first. + +Sat Jan 16 12:24:44 1993 Bill Cox (bill@rtl.cygnus.com) + + * chill.gperf, ch-hash.h: add Wilfried's tokens + * ch-lex.l: fold in Wilfried's changes. Some tokens + weren't getting recognized, and INSTANCE wasn't correctly + reported to ch-parse.y as a PREDEF_MODEDCL. + +Thu Jan 14 15:02:39 1993 Per Bothner (bothner@cygnus.com) + + * ch-tree.h (CH_CHARS_TYPE_P): New macro. Add comment + explaining difference between char strings and char arrays. + * ch-tree.h (CH_STRING_TYPE_P): Add FIXME re bitstrings. + * ch-tree.c (build_string_type): Add comment. + +Wed Jan 13 15:19:15 1993 Per Bothner (bothner@cygnus.com) + + * calls.c, expr.c, function.c, stmt.c, varasm.c: Set + MEM_IN_STRUCT_P for SET_TYPE where it is set for other aggregates + * expmed.c (store_bit_field, extract_field_field): Undo + yesterday's removal of MEM_IN_STRUCT_P "sanity test". + + * ch-decl.c (do_decls): Put back support for initializing. + (Was accidentally removed in Jan 8 change.) + +Wed Jan 13 14:13:11 1993 Jim Wilson (wilson@sphagnum.cygnus.com) + + * ch-lex.l (convert_bitstring): Correct typo in cast. + +Tue Jan 12 20:29:08 1993 Per Bothner (bothner@cygnus.com) + + * ch-lex.l (convert_bitstring): Change to pack bits + within words, not bytes, and to use machine bit-order + (not always little-endian). + * ch-parse.y: Allow BOOLS(n) as well as BITS(n). + Use build_bitstring_type, not build_string_type. + * expmed.c (store_bit_field, extract_field_field): Remove + "sanity test" that prevents use with SET_TYPE. + * tree.c (build_bitstring_type, build_powerset_type, + build_string_type): Move (so far) Chill-specific functions to ... + * ch-tree.c: ... new file. + * ch-tree.c (build_powerset_type, build_bitstring_type): Re-write. + * ch-typeck.c (build_chill_array_ref): Handle bit strings better. + * ch-typeck.c (chill_expand_tuple): Kludge to handle SET_TYPE. + * Makefile.in (CHILL_OBJS): Add ch-tree.o. + * ch-decl.c (do_decls): Call expand_decl. + * stor-layout.c (layout_type): Handle SET_TYPE. + * expr.c (expand_expr): Add FIXMEs about IN_EXPR. + * ch-actions.c (lang_init): Add type and decl for new + function __builtin_setbitinstring. + * ch-expr.c (chill_expand_assignmment): Special-case handling + for BIT_FIELD_REF with non-constant bit position (which is + not yet handled by expand_expr). + * ch-convert.c (convert): Handle SET_TYPE. + +Tue Jan 12 12:49:13 1993 Fred Fish (fnf@cygnus.com) + + * chill: If -B arg is given, use to find gcc. + +Fri Jan 8 20:21:43 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c: revert to avoid seg fault + +Fri Jan 8 14:20:42 1993 Bill Cox (bill@rtl.cygnus.com) + + * ch-decl.c: fix storage into correct offset in varying array. + * ch-actions.c: define sizetype for everyone, use it to build + varying structure. + * ch-parse.y: tiny cleanup. + +Wed Jan 6 13:25:33 1993 Bill Cox (bill@cygnus.com) + + * modules: use gdb rather than naked-gdb, to get opcodes + in chill definition. + +Wed Jan 6 09:48:35 1993 Bill Cox (bill@cygnus.com) + + * ch-typeck.c: add code to handle references to elements of VARYING + arrays. Simplify chill_give_type_to_expr. Add rough draft of run- + time index checking for VARYING arrays (under #if 0). + * ch-actions.c: new function cond_type_range_exception & calls. + New function cond_range_exception, for more general range-checking. + New function build_varying_struct, to do just that. Use the macros + for the special varying field names. + * ch-tree.h: define macros for varying field names. + * ch-expr.c: use macros for varying struct names. Simplify + chill_expand_array_assignment. + * ch-parse.y: assure that build_varying_struct is called everywhere + that it applies. Add a line-number note before the body of a DO + loop. + * ch-loop.c: #ifdef out creation of new scope for DO loop body. + +Tue Jan 5 17:26:14 1993 Bill Cox (bill@cygnus.com) + + * c-decl.c: correct order of declaration of start_decl params, + for readability. + +Tue Jan 5 15:59:36 1993 Per Bothner (bothner@cygnus.com) + + * ch-grant.c (still_start_module_code), ch-parse.y (procedure): + Move shared code into ... + * ch-decl.c (start_chill_function): ... here. + * ch-decl.c (start_chill_function): Add missing call to + expand_start_bindings. + * ch-decl.c (finish_chill_function): Add missing call to + expand_end_bindings. + +Tue Jan 5 01:00:47 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) + + * Makefile.in: took out the rest of the runtime support + +Mon Jan 4 18:02:06 1993 Bill Cox (bill@cygnus.com) + + * ch-expr.c: make chill_expand_array_assignment not static. + +Mon Jan 4 17:57:48 1993 Per Bothner (bothner@cygnus.com) + + * ch-grant.c, ch-parse.y: Remove all code for explicitly + calling initializer functions. This is not needed, since we + use the same mechanism used for C++ static constructors. + * ch-grant.c (chill_start_module_code): Make sure the + init_name starts with the magic string also used for C++ + initializers. Also, don't embed the file name in the name, + just use the module name. + * ch-grant.c (chill_finish_module_code): Now that the + initializer name follows the standard 'collect' convention, + don't need to call assembler_constructor_alias, but can + use the standard assemble_constructor instead. + * varasm.c (assemble_constructor_alias): Remove no-longer- + needed function. + * ch-parse.y: Move code that is common to the beginning of + all functions to a new macro INIT_ACTION. + Make sure INIT_ACTION is also done for callaction, fixing a bug. + * ch-parse.y (INIT_ACTION): Do chill_start_module_code() + before emit_line_note(), not after. + +Mon Jan 4 11:43:12 1993 Bill Cox (bill@cygnus.com) + + * ch-parse.y: restore requirement for :upper-bound in array decl. + * ch-actions.c: enhance upper, lower, length functions for VARYING. + +Mon Jan 4 09:28:44 1993 Bill Cox (bill@cygnus.com) + + * ch-actions.c: fix NOT of boolean expr. + +Mon Jan 4 08:42:57 1993 Bill Cox (bill@cygnus.com) + + * ch-actions.c: provide range-checking function + * ch-lex.l: better compiler-directive error messages, + allow underscores in exponents + * ch-loop.c: prevent passing NULL ptr to printf + +Sun Jan 3 11:57:13 1993 Bill Cox (bill@cygnus.com) + + * ch-typeck.c: correct & enable array index range-checking + +Sun Jan 3 11:36:39 1993 Bill Cox (bill@cygnus.com) + + * ch-parse.y: define IGNORED_DIRECTIVE + * ch-typeck.c: subtract array's lower domain value, even if + index expression is constant. + +Sat Jan 2 23:05:14 1993 Fred Fish (fnf@cygnus.com) + + * ch-lex.l (convert_float): Fix misspelling in error message. + +Sat Jan 2 16:02:16 1993 Per Bothner (bothner@rtl.cygnus.com) + + * Makefile.in: Took out chill-runtime support. + Chill run times are now in ../chillrt, not ./chillrt.p + +Sat Jan 2 15:04:13 1993 Bill Cox (bill@cygnus.com) + + * ch-hash.h, chill.gperf: cleanup. fewer keywords seen by ch-parse.y. + +Sat Jan 2 13:27:49 1993 Per Bothner (bothner@rtl.cygnus.com) + + * ch-lex.l (check_newline): Use the orginal versions (derived + from the C code, not the simplified, special-case version). + Also, fix that version of check_newline to not call yylex() + recursively. + * ch-lex.l (yy_input): Call check_newline to handle + newlines and check for # directives. + * ch-lex.l (syntax): Don't recognize #-directives; these + are now handled by check_newline. + * ch-actions.c (lang_init): Call the modified version of + check_newline(). Do this at the *after* we've initialized + standard types, so this can be done while lineno is still 0. + +Sat Jan 2 10:57:20 1993 Bill Cox (bill@cygnus.com) + + * ch-hash.h, chill.gperf: add remaining reserved words. + +Sat Jan 2 09:59:55 1993 Bill Cox (bill@cygnus.com) + + * ch-tree.h, ch-parse.y, ch-lex.l: add remaining reserved words, + names for exceptions + +Fri Jan 1 12:30:31 1993 Fred Fish (fnf@cygnus.com) + + * ch-tree.h (JOINER): Define joiner character the same way + C++ defines it. + * ch-grant.c (chill_start_module_code): Use JOINER character + to implement name mangling for the initializer function name. + Algorithm is designed to be simple, distinct from C++ mangled + symbols, and easy to convert to demangled form. + +Thu Dec 31 10:30:51 1992 Bill Cox (bill@rtl.cygnus.com) + + * ch-expr.c: make array assignments work with indirect refs. + * ch-actions.c: prepare for array parameter handling. + * ch-loop.c, ch-parse.y, ch-tree.def, ch-typeck.c: clean up. + +Thu Dec 31 15:29:20 1992 Per Bothner (bothner@rtl.cygnus.com) + + * ch-lex.l (yy_input): Re-write to return more than one + character at a time (execpt when reading seize-files). + Don't increment lineno until we start reading the next line. + This fixes some off-by-one errors in lineno. + +Wed Dec 30 16:15:23 1992 Per Bothner (bothner@rtl.cygnus.com) + + * ch-convert.c: Assume use of new common.c. + * ch-convert.c (convert_to_reference, convert_from_reference): + New routines, to handle loc-identity declared variables and + LOC parameters (both of which are implemented as references). + * ch-lang.c (convert_to_boolean, convert_to_char): Move to + ch-convert.c, where they would seem to belong. + * ch-convert.c (convert): New function, since we no longer + link in c-convert.c. + * ch-expr.c (chill_expand_assignment): Handle by calling + convert() instead of chill_comptypes(). + Also handle the LHS being a reference. + * ch-parse.y: Add a procedure call as an action. + * ch-parse.y (locdec, optlocinit): Move handling of + loc-identity declarations from optlocinit to locdec + - and add working semantics for it. + * ch-parse.y (seizestatement, visibilty_stmt): Simplify. + * ch-parse.y (grantstatement etc): Don't bother making list. + * ch-lex.l: #include before . + +Wed Dec 30 16:06:55 1992 Bill Cox (bill@rtl.cygnus.com) + + * ch-parse.y, ch-expr.c: add support for declaring & assigning + VARYING arrays. + * ch-typeck.c: allow VARYING structures in assign_type_to_expr. + +Tue Dec 29 15:28:48 1992 Bill Cox (bill@cygnus.com) + + * ch-actions.c: implement expressions of arrays of char, + ( concatenation, relationals ), correct type of code parameters + * ch-expr.c: correct type of code parameters + +Tue Dec 29 11:16:19 1992 Bill Cox (bill@cygnus.com) + + * ch-decl.c: cleanup. + * ch-parse.y: put emit_line_note() calls in lotsa places, + per Fred's request; be sure that statements get counted also. + * ch-lex.l: standardize function headers. + +Tue Dec 29 10:41:56 1992 Fred Fish (fnf@cygnus.com) + + * ch-decl.c (start_chill_function): Always return 1, rather + than a random value. + * ch-lex.l (check_newline): Add a version for chill that + just snarfs the right value for main_input_filename out of + the first line of the input file, without disturbing the + lexer state or requiring it's assistance. + * ch-actions.c (lang_init): Call check_newline, like the + other language frontends, to get main_input_filename set + from first line of input file. + +Mon Dec 28 18:49:01 1992 Bill Cox (bill@cygnus.com) + + * ch-parse.y: clean up conflicts. The remaining one is + harmless. + +Mon Dec 28 17:28:40 1992 Bill Cox (bill@cygnus.com) + + * ch-parse.y, ch-lex.l, ch-actions.c: add stubs for I/O, + clean up some parser conflicts. + +Mon Dec 28 15:00:20 1992 Bill Cox (bill@cygnus.com) + + * ch-parse.y, ch-lex.l: add keywords and parsing for most of + CHILL I/O + +Sat Dec 26 20:48:23 1992 Fred Fish (fnf@cygnus.com) + + * chillrt/chillrt0.c: Oops, SVR4 doesn't need leading '_' + on build_exceptions. + +Sat Dec 26 11:00:36 1992 Fred Fish (fnf@cygnus.com) + + * ch-grant.c (chill_finish_module_code): Call + assemble_constructor_alias rather than assemble_constructor. + * varasm.c (assemble_constructor_alias): New function, + like assemble_constructor, but also handles the case where + ASM_OUTPUT_CONSTRUCTOR is not defined and GNU ld is not + being used. Emits a symbol table alias name with the correct + prefix for collect to find and add to the __CTOR_LIST__. + * chillrt/chillrt0.c: Build on previous hack that gets + _build_exceptions into the __CTOR_LIST__, to make it work + for both the non GNU-ld case and for the SVR4 case. + +Tue Dec 22 18:24:55 1992 Bill Cox (bill@cygnus.com) + + * ch-loop.c: clean up location enumeration - one more + pass to do. + +Tue Dec 22 16:31:48 1992 Bill Cox (bill@cygnus.com) + + * ch-loop.c: Working version of location enumeration loop + +Tue Dec 22 14:42:14 1992 Bill Cox (bill@cygnus.com) + + * ch-lex.l: readability cleanup + +Mon Dec 21 14:58:39 1992 Bill Cox (bill@cygnus.com) + + * ch-parse.y, c-decl.c: Add Jukka's Pascal WITH code. + ch-loop.c: rough draft of location enumeration + ch-lex.l, ch-expr.c, ch-decl.c: minor cleanup + ch-actions.c: finish making pred() and succ() work. + +Mon Dec 21 10:04:35 1992 Bill Cox (bill@cygnus.com) + + * ch-actions.c: allow pred(char) and succ(char). + +Sun Dec 20 16:04:28 1992 Bill Cox (bill@cygnus.com) + + * ch-expr.c, ch-actions.c, ch-parse.y, ch-loop.c, + c-expr.c: make DO WITH work. + +Sun Dec 20 12:22:53 1992 Bill Cox (bill@cygnus.com) + + * ch-loop.c, ch-actions.c, ch-typeck.c: powerset loops + now work + +Sat Dec 19 14:20:23 1992 Per Bothner (bothner@cygnus.com) + + * c-typeck.c (process_init_constructor): Add warning if + there is a duplicate default initializer element. + * ch-typeck.c (chill_give_type_to_expr): New function, + to handle coercion of an expression to context-given type, + Takes care of untyped tuples, and case expressions. + * ch-decl.c (do_decls), ch-typeck.c (chill_expand_return, + chill_expand_result), ch-parse.y : + Use chill_give_type_to_expr(). + * ch-typeck.c (chill_handle_case_label): New parameter list, + to handle the (new) conventions for , including + default elements and ranges. + * ch-parse.y , ch-typeck.c + (expand_case_expr): Use new version of chill_handle_case_label. + * ch-decl.c (push_syndecls): Change parameters: Instead of + TREE_LIST representing a compete , + just pass the parts of a single as 3 + different parameters. Also, use chill_give_type_to_expr(), + to handle untyped tuples in the RHS. + * ch-parse.y : Don't bother trying to construct + a tree - just call push_syndecls() on each + as we see it. + * ch-parse.y (exprlist_get_single): Remove; no longer needed. + * ch-parse.y: Handle without mode name diferently from + with mode name. The latter is a that can be + in most contexts, but if the is missing, the + is only allowed in certain contexts. Use the new non-terminal + to indicate those contexts where untyped tuples + (and case expressions) are valid because the expression gets a + type from its context (such as the RHS of an assignment). + Use chill_give_type_to_expr in those contexts. + +Sat Dec 19 14:01:26 1992 Bill Cox (bill@cygnus.com) + + * ch-actions.c, ch-loop.c, Makefile.in: looping stuff. + +Sat Dec 19 10:16:20 1992 Bill Cox (bill@cygnus.com) + + * ch-parse.y: clean up warning messages from byacc. bison + still complains thrice. + +Fri Dec 18 12:33:29 1992 Michael Tiemann (tiemann@rtl.cygnus.com) + + * ch-actions.c (maybe_chill_comptypes): Delete unused + function. + (chill_comptypes): Add new parameter ERRSTR. All callers + changed. + (build_chill_binary_op): Fix indentation to match GNU coding + style. + +Fri Dec 18 08:18:13 1992 Bill Cox (bill@rtl.cygnus.com) + + * ch-parse.y, ch-expr.c, ch-actions.c, expr.c: major + cleanup of expression and assignment handling. + +Thu Dec 17 10:16:32 1992 Bill Cox (bill@cygnus.com) + + * ch-parse.y: standardize indentation after c-parse.y + +Wed Dec 16 15:22:12 1992 Per Bothner (bothner@cygnus.com) + + * c-typeck.c (process_init_constructor): Add support for + a default initializer element. + * ch-parse.y: Implement default elements for tuples + (as in '(else):' and '(*):' ). + + * ch-parse.y: Previous change to dis-ambiguate case-labels + seems to have allowed getting rid of all of the expr_or_list hair. + * ch-decl.c (do_decls): Undo Tiemann's change to "Handle + initialization of multiple variables by a tuple" - the + idea is bogus. + +Wed Dec 16 11:17:53 1992 Bill Cox (bill@cygnus.com) + + * ch-parse.y: complete re-write of DO statement handling. + now operational, except WITH is stubbed out. Improved + syntax error message. + * ch-actions.c: DO support: high_domain_value(), low_domain_value (). + * ch-expr.c: fixes to IN_EXPR handling. + +Tue Dec 15 17:15:13 1992 Jim Wilson (wilson@sphagnum.cygnus.com) + + * ch-grant.c: Add casts to alloca return to avoid compiler warning. + * ch-lex.c: Likewise. + + * Makefile.in (ch-lex.c): Delete incorrect free declaration added + by flex to avoid compiler error. + +Tue Dec 15 08:41:08 1992 Michael Tiemann (tiemann@rtl.cygnus.com) + + * ch-decl.c (do_decls): Handle initialization of multiple + variables by a tuple. + + * ch-decl.c (do_decls,start_chill_function): Make DECL public + if we're doing a GRANT ALL at top level. + + * ch-lang.c (build_range_type): Deal with typecast to CHAR in + range expression. + + * c-typeck.c (digest_init): SET_TYPE is not a scalar type. + BOOLEAN_TYPE and CHAR_TYPE are scalar types. + +Mon Dec 14 14:58:32 1992 Michael Tiemann (tiemann@rtl.cygnus.com) + + * ch-lex.l (get_chill_{linenumber,filename}): New functions. + (convert_number): Use LONG_TYPE_NODE instead of INTEGER_TYPE_NODE. + +Mon Dec 14 13:36:44 1992 Bill Cox (bill@cygnus.com) + + * expr.c: install and test newer Pascal IN_EXPR code, + but don't activate it - it's very verbose. + +Mon Dec 14 00:22:49 1992 Fred Fish (fnf@cygnus.com) + + * Makefile.in (LANGUAGES): Add chill. + * Makefile.in (CHILL_INSTALL_NAME, CHILL_CROSS_NAME): + New macros for chill native and cross installation names. + * Makefile.in (COMPILERS): Add cc1chill. + * Makefile.in (CHILL_OBJS): New macro, chill objects. + * Makefile.in (CHILL_TREE_H): New macro, chill headers. + * Makefile.in (CHILL, chill, cc1chill, chill-runtime, libchill.a, + sublibchill.a, ch-parse.o, ch-parse.c ch-*.o, install-libchill, + install-librmt): New targets. + * Makefile.in (install-native): Add install-libchill, + install-librmt. + +Sun Dec 13 15:21:06 1992 Bill Cox (bill@cygnus.com) + + * ch-actions.c, ch-expr.c: Fix the pop-count in library calls. + +Sun Dec 13 14:07:32 1992 Bill Cox (bill@cygnus.com) + + * ch-actions.c: fix unary operations, modulus ops, + (discovered after extending regression tests). + +Sun Dec 13 12:16:32 1992 Bill Cox (bill@cygnus.com) + + * resync with Michael and Wilfried + +Sun Dec 13 09:11:25 1992 Michael Tiemann (tiemann@rtl.cygnus.com) + + * ch-parse.y (output_constant): Fixed some whitespace + problems. + * ch-tree.h: Add declarations for new chill functions that + have been implemented but not (yet) declared. + +Sat Dec 12 00:17:23 1992 Per Bothner (bothner@cygnus.com) + + * c-typeck.c (process_init_constructor): Warn about duplicate + labels for labelled initializer elements. + * ch-lex.l (various operator tokens, such as "+"): Don't + set yylval.code to a TREE_CODE; this is better done in parser. + * ch-parse.y: Some work with case labels and tuples. + Get literal range as tuple (and case) labels working. + Fix some problems introduced by recent grammar overhaul. + +Fri Dec 11 13:28:48 1992 Bill Cox (bill@cygnus.com) + + * ch-actions.c, ch-parse.y ch-tree.h ch-expr.c, ch-typeck.c: + got long, real expressions working. We can also call a func- + tion and use its return value. + +Thu Dec 10 14:45:17 1992 Per Bothner (bothner@cygnus.com) + + * ch-parse.y: Major change to remove or at least identify + parser ambiguities. One result: We now allow actions that + start with '(', as required by teh Blue Book. This does break + some things; look for FIXME for things that need work. + * ch-typeck.c (chill_expand_case_expr): We need an extra + level of looping to (in the future) support s with more than one . + +Thu Dec 10 09:21:41 1992 Bill Cox (bill@cygnus.com) + + * ch-actions.c, ch-expr.c: Implement string assignments + and relationals. + +Thu Dec 10 07:17:35 1992 Bill Cox (bill@cygnus.com) + + * ch-decl.c, ch-typeck.c: rest of previous commit. + +Wed Dec 9 18:26:29 1992 Bill Cox (bill@cygnus.com) + + * ch-parse.y, ch-actions.c, ch-expr.c: redo type checking. + regression test and fix bit arrays and set ops. + +Mon Dec 7 14:57:46 1992 Bill Cox (bill@cygnus.com) + + * ch-actions.c: implement crude relationals between + non-exotic operands, such as integers. + +Mon Dec 7 10:42:35 1992 Bill Cox (bill@cygnus.com) + + * ch-actions.c: implement relational, logic operations + on arrays of BOOLs. + +Mon Dec 7 08:55:20 1992 Michael Tiemann (tiemann@rtl.cygnus.com) + + * ch-actions.c (lang_init): Set LINENO to 1 at beginning to + indicate we are done with initialization. + + * ch-decl.c (do_decls): Set TREE_PUBLIC if we are doing a + `grant all'. + (start_chill_function): Ditto. + + * ch-lex.c (convert_bitstring): Set TREE_CONSTANT. + (compiler_directive): Don't confuse compiler directives with + equality comparison operators. + + * ch-parse.y: Clear CURRENT_LOCNAMELIST after calling do_decls. + +Sun Dec 6 13:12:32 1992 Bill Cox (bill@cygnus.com) + + * ch-actions.c: repair set inequality code. + +Sun Dec 6 11:15:59 1992 Bill Cox (bill@cygnus.com) + + * ch-parse.y, ch-actions.c, ch-expr.c: Implement set-oriented + relational expressions, including (<, <=, =, /=, >, >=, IN). + +Fri Dec 4 13:54:58 1992 Brendan Kehoe (brendan@lisa.cygnus.com) + + * tree.def: Move CARD_EXPR and SET_LE_EXPR back down with the other + Pascal-required ones, since C++ no longer needs them. When + Chill's public, a comment can be added to the effect that + SET_LE_EXPR is also used by Chill. + +Fri Dec 4 12:05:01 1992 Bill Cox (bill@cygnus.com) + + * Restore CARD_EXPR and SET_LE_EXPR to tree.def. + +Fri Dec 4 10:23:10 1992 Bill Cox (bill@cygnus.com) + * Get *.def and *.c in sync. + +Fri Dec 4 06:48:41 1992 Fred Fish (fnf@cygnus.com) + + * ch-actions.c (lang_init): Change types "long" and + "ulong" from 16 bits to 32. + * dwarfout.c (fundamental_type_code): Use FT_signed_char + for type "byte" and FT_unsigned_char for type "ubyte". + +Thu Dec 3 15:13:24 1992 Bill Cox (bill@cygnus.com) + * ch-actions.c, ch-tree.def, ch-parse.y: preparation + for powerset expressions. + +Tue Dec 2 17:02:30 1992 Bill Cox (bill@cygnus.com) + * ch-actions.c: sketch code for exceptions generated + by builtin routines. + +Tue Dec 2 12:49:50 1992 Bill Cox (bill@cygnus.com) + * ch-actions.c, ch-parse.y: add support for lower() + upper() builtin functions. + +Wed Dec 2 12:03:30 1992 Fred Fish (fnf@cygnus.com) + + * Makefile.in (chillrt0.o, install-chillrt0): Remove. + * chill (library): Remove chillrt0.o. + * chillrt/Makefile: Remove maintenance of chillrt0.o as a + separate file. Now gets put in libchill.a. + +Tue Dec 2 10:100:20 1992 Bill Cox (bill@cygnus.com) + + * ch-parse.y, ch-actions.c: add support for num() + builtin function. + +Wed Dec 2 09:52:06 1992 Michael Tiemann (tiemann@rtl.cygnus.com) + + * ch-decl.c (fixup_unknown_type): New function. + (push_newmode,push_synmode): Call `fixup_unknown_type' when we + see a declaration that uses `unknown_type_node'. FIXME. + + * ch-grant.c (decode_constant): New function. + (decode_decl): Call `decode_constant' for CONST_DECLs. + + * ch-lex.l (char action): Use ridpointers instead of + lookup_name to get "char"'s declaration. + + * ch-parse.y: Call `build_lang_decl' instead of `build_decl' + when we need to build a TYPE_DECL. + +Tue Dec 2 09:44:05 1992 Bill Cox (bill@cygnus.com) + + * ch-typeck.c: clean up a gcc warning with a forward + declaration of build_string_type. + +Tue Dec 1 16:51:05 1992 Bill Cox (bill@cygnus.com) + + * ch-actions.c: completely remove those builtin calls + that are duplicated in c-decl.c + +Tue Dec 1 16:38:51 1992 Fred Fish (fnf@cygnus.com) + + * ch-actions.c (lang_init): Ifdef out initializations for + __builtin_abs and __builtin_fabs, since they are duplicates of + initializations in c-decl.c, and trigger spurious warnings. + +Tue Dec 1 16:35:18 1992 Bill Cox (bill@cygnus.com) + + * ch-parse.y: make size() work with a typename argument. + +Tue Dec 1 16:15:56 1992 Bill Cox (bill@cygnus.com) + + * ch-parse.y, ch-lex.l, ch-actions.c: add builtin + functions min, max, card. + +Tue Dec 1 12:35:56 1992 Bill Cox (bill@cygnus.com) + + * ch-lex.l: fix char-type + +Tue Dec 1 11:10:56 1992 Bill Cox (bill@cygnus.com) + + * ch-parse.y, ch-actions: added parsing and processing + for upper, lower, and length built-ins. + +Tue Dec 1 09:40:49 1992 Fred Fish (fnf@cygnus.com) + + * dwarf.h (LANG_CHILL): Add as GNU extension. + * dwarfout.c (output_compile_unit_die): Test language_string and + set LANG_CHILL if appropriate. + * ch-parse.y (language_string): New for chill. + * chillrt: Renamed directory chill to chillrt. + * chill: Renamed chillsh to chill. + * Makefile.in: Adjust for renamings. + * chillrt/Makefile: Adjust for directory renaming. + +Mon Nov 30 17:35:33 1992 Fred Fish (fnf@cygnus.com) + + * chillsh: New script frontend (ala g++), installed as "chill". + Can't be called "chill.sh" because make tries to cat it into the + "chill" directory. Can't be called just "chill" cause that's + already there as a directory. + * Makefile.in: Add rules to install chillsh as "chill". + * chill/libchill.c: Temporarily ifdef out stuff that wants + to conflict with i486/SVR4 runtime or wants to pull in librmt.a, + which itself causes linkage to fail. + +Mon Nov 30 16:28:19 1992 Bill Cox (bill@cygnus.com) + + * ch-lex.l: added keywords for TRUNC, ROUND, FLOAT, LFLOAT + conversion routines. + * ch-parse.y: added %tokens for TRUNC, ROUND, FLOAT, LFLOAT. + Added production for SIZE(expr). + * ch-actions.c: Add semantic routine chill_sizeof (). + +Mon Nov 30 16:20:40 1992 Per Bothner (bothner@cygnus.com) + + * ch-lex.l, ch-parse.y: Translate token PFEIL into English ARROW. + * ch-parse.y (op6): Remove handling of string repetition operator, + until we can figure out a way to parse it correctly. + * ch-parse.y (optmodename): New non-terminal. + * ch-parse.y (tuple): Merge the two variants using optmodename. + * ch-parse.y (location): Add semantic actions for + dereferencing operator ->. + +Mon Nov 30 08:01:29 1992 Bill Cox (bill@cygnus.com) + + * ch-actions.c: removed compile warning, better code for abs. + + * ch-parse.y: add productions for builtin functions succ, pred, + abs, and size. Add %tokens also. Sort %tokens alphabetically. + + * ch-lex.l: add parsing for builtin function names, such as abs, + pred, succ, etc. Put flex -a option into Makefile.in, so we can + clean up the lexer soon. + +Tue Nov 24 14:18:48 1992 Per Bothner (bothner@rtl.cygnus.com) + + * ch-typeck.c (chill_handle_case_label, chill_handle_case_default): + New functions, for code common to CASE actions and expressions. + * chill.y: Replace some code by calls to chill_handle_case_label + and chill_handle_case_default. + * ch-typeck.c (chill_expand_case_expr): Add semantics. + + * tree.c: Change doing_chill_thang from extern to common. + +Mon Nov 23 18:34:22 1992 Per Bothner (bothner@rtl.cygnus.com) + + * ch-tree.def: New CASE_EXPR type, for case expressions. + * ch-expr.c (chill_expand_expr): Hook for CASE_EXPR. + * ch-typeck.c (chill_expand_case_expr): New function. + Placeholder to implement case expressions. + * ch-typeck.c (chill_expand_result, chill_expand_return): + Handle mode-unspecified tuples and case expressions in + the context of RETURN and RESULT actions. + * chill.y (assignaction): Handle case expressions in the + context of the RHS of an assignment action. + * chill.y (caseaction): Remove spurious duplicate OF in grammar. + * chill.y: Handle labeled structure tuples. + * chill.y: New rules to parse CASE expressions. + * tree.c (build_function_types): Allow Chill functions + to return arrays and functions. + +Wed Nov 18 13:50:28 1992 Per Bothner (bothner@rtl.cygnus.com) + + * ch-typeck.c (chill_expand_tuple): New function. Expand a + tuple (constructor) given an expected (context) type. + * chill.y: Implement 'LHS := TUPLE' using expand_chill_tuple, + using the mode of the LHS and the expected type of the TUPLE. + * chill.y: Implement initialization. + * chill.y: Fix some syntax bugs (forbidlist must be surrounded + by parentheses), and remove or note ambiguities. + * chill.y: Started converting layout style to be like c-parse.in. + * chill.y: Implement IF expressions. + * chill.y: Added syntax rules for tuples. Labelled and unlabelled + array tuples should now work (in some contexts). + * ch-actions.c: Initialize doing_chill_thang to 1. + * ch-decl.c (do_decls): Set DECL_INITIAL if there is an + initializer, to make pushdecl and finish_decl work. + * c-decl.c (convert_for_assignment): If Chill, don't convert + function and arrays into pointers. (Maybe functions should + still be converted?) + * c-typeck.c (grokdeclarator): Allow functions in Chill + to return arrays and functions. + +Mon Nov 16 15:40:47 1992 Per Bothner (bothner@rtl.cygnus.com) + + * chill.y (exprlist_get_single): New function, used when + parsing tuples. + * chill.y: Re-did parsing of tuples to remove ambiguities. + This was a bitch. + +Tue Nov 10 16:30:55 1992 Per Bothner (bothner@rtl.cygnus.com) + + * ch-typeck.c (chill_expand_result); Set TREE_SIDE_EFEFCTS + flags on assignment to result. + * ch-typeck.c (build_chill_array_ref): Subtract lower + bound of domain if non-zero. Preliminary hook for range checking. + * ch-tree.h, chill.l: Combine variables range_check and + range_check_disabled into global variable range_checking. + * ch-tree.h: Better definitions of CH_CLASS_IS_VALUE + CH_CLASS_IS_DERIVED. + diff --git a/gcc/ch/chill.brochure b/gcc/ch/chill.brochure new file mode 100644 index 00000000000..44301edff92 --- /dev/null +++ b/gcc/ch/chill.brochure @@ -0,0 +1,252 @@ + GNU CHILL: A Complete CHILL Implementation + +CHILL (the CCITT High Level Language) is a strongly-typed, block +structured language designed primarily for the implementation of large +and complex embedded systems. Tens of millions of lines of CHILL code +exist, and about 15,000 programmers world-wide use CHILL. Many +central-office telephone switching systems use CHILL for their control +software. + +CHILL was designed to + + - enhance reliability and run time efficiency by means of extensive + compile time checking; + - provide sufficient flexibility and power to encompass the required + range of applications and to exploit a variety of hardware; + _ provide facilities that encourage piecewise and modular development + of large systems; + - cater to real-time implementations by providing built-in concurrency + and time supervision primitives; + - permit the generation of highly efficient object code; + - facilitate ease of use and a short learning curve. + +CHILL is specified in the "Blue Book": + CCITT High Level Language (CHILL) Recommendation Z.200 + ISO/IEC 9496, Geneva 1989 ISBN 92-61-03801-8 + +Cygnus Support has completed the first level implementation of the +GNU CHILL compiler. Our compiler now supports the core features of +the CHILL language. Our goal is a fully retargetable, complete +implementation of the Z.200 specification. The next phase of +implementation will include: + + . a minimal real-time kernel for demonstration use + . more rigorous type checking + . retargetable input/output + . interprocess communications + . fully compliant exception handling. + +The State of the Implementation + +The GNU CHILL compiler is in early beta state, performing correct +compilation and execution of correctly coded programs. Like most +CHILL compilers, the GNU compiler implements a large subset of the +language (as described below). + +Since it uses the same compiler back-ends as the GNU C and C++ +compilers, GNU CHILL is almost instantly available on all +platforms supported by GNU C, including the following: + + m680xx, i960, i80x86, AMD29K, R3000, R4000, SPARClite, + Hitachi H8 and SH families, Z8001/2 + +It has been specifically tested under SunOS on SPARCs and under +SCO Unix on 80386s. + +All of the GCC optimizations apply to CHILL as well, including +function inlining, dead code elimination, jump-to-jump elimination, +cross-jumping (tail-merging), constant propagation, common +subexpression elimination, loop-invariant code motion, strength +reduction, loop unrolling, induction variable elimination, flow +analysis (copy propagation, dead store elimination and elimination +of unreachable code), dataflow-driven instruction scheduling, and +many others. + +I/O statements are parsed. The anticipated timeframe for I/O code +generation is Q1 1994. + +What's Next + +The multi-tasking functions require a small real time kernel. +A free implementation of such a kernel is not yet available. +We plan to offer a productized P-threads interface in Q2 1994. +Other runtime functions involving strings and powersets are +working. + +GDB, the GNU Debugger, has been modified to provide simple CHILL +support. Some CHILL expressions are not yet recognized. + +For those who aren't familiar with CHILL, here's a small but +useful example program: + +-- +-- Convert binary integers to decimal-coded ASCII string +-- +vary1: MODULE + + -- include declarations so we can output the test results + <> USE_SEIZE_FILE 'chprintf.grt' <> + SEIZE chprintf; + + -- create a new name for the CHAR array mode + SYNMODE dec_string = CHAR (6) VARYING; + + int_to_dec_char: PROC (decimal_num INT IN) + RETURNS (dec_string); + + DCL neg_num BOOL := FALSE; -- save sign of parameter + DCL out_string dec_string; + + IF decimal_num < 0 THEN -- positive numbers are easier + decimal_num := -decimal_num; + neg_num := TRUE; + FI + + IF decimal_num = 0 THEN + out_string := '0'; /* handle zero */ + ELSE + out_string := ''; + DO WHILE decimal_num /= 0; -- loop until number is zero + -- concatenate a new digit in front of the output string + out_string := CHAR (ABS (decimal_num REM D'10) + H'30) + // out_string; + decimal_num := decimal_num / D'10; + OD; + IF neg_num THEN + -- prepend a hyphen for numbers < zero + out_string := '-' // out_string; -- restore sign + FI; + FI; + RESULT out_string; -- remember result + + decimal_num := 0; -- reset for next call + neg_num := FALSE; + out_string := ' '; + + END int_to_dec_char; + + /* Try some test cases */ + chprintf (int_to_dec_char (123456), 0); + chprintf ("^J", 0); + + chprintf (int_to_dec_char (-654321), 0); + chprintf ("^J", 0); + + chprintf (int_to_dec_char (0), 0); + chprintf ("^J", 0); + +END vary1; + +Completeness + +GNU CHILL currently supports the following features. This outline +generally follows the structure of the Blue Book specification: + + CCITT High Level Language (CHILL) Recommendation Z.200 + ISO/IEC 9496, Geneva 1989 ISBN 92-61-03801-8 + + + Modes (types) + no DYNAMIC modes yet + discrete modes + integer, boolean, character, real + multiple integer/real precisions (an extension) + set modes, range modes + powersets + references + (no ROW modes) + procedure modes + instance modes + event modes + buffer modes + (no input/output modes yet) + (no timing modes yet) + composite modes + strings + arrays + structures + VARYING string/array modes + (type-checking is not fully rigorous yet) + forward references + + Expressions + literals + tuples + slices, ranges + the standard operators + + Actions (statements) + assignments + if .. then .. else .. fi + cases + do action + do .. with + exits + calls + results/returns + gotos + assertions + cause exception + start/stop/continue process + + Input/Output + (not yet) + + Exception handling + fully compiled, but exceptions aren't + generated in all of the required situations + + Time Supervision + (syntax only) + + Inter-process communications + delay/delay case actions + send signal/receive case actions + send buffer/receive case actions + + Multi-module programming + Seize/grant processing + multiple modules per source file + + +Bibliography + +This list is included as an invitation. We'd appreciate hearing +of CHILL-related documents (with ISBN if possible) which aren't +described here. We're particularly interested in getting copies +of other conference Proceedings. + + CCITT High Level Language (CHILL) Recommendation Z.200 + ISO/IEC 9496, Geneva 1989 ISBN 92-61-03801-8 + (The "blue book". The formal language definition; mostly a + language-lawyer's document, but more readable than most.) + + Study Group X - Report R 34 + This is the May 1992 revision of Z.200. + + An Analytic Description of CHILL, the CCITT high-level + language, Branquart, Louis & Wodon, Springer-Verlag 1981 + ISBN 3-540-11196-4 + + CHILL User's Manual + CCITT, Geneva 1986 ISBN 92-61-02601-X + (Most readable, but doesn't cover the whole language). + + Introduction to CHILL + CCITT, Geneva 1983 ISBN 92-61-017771-1 + + CHILL CCITT High Level Language + Proceedings of the 5th CHILL Conference + North-Holland, 1991 ISBN 0 444 88904 3 + + Introduction to the CHILL programming Language + TELEBRAS, Campinas, Brazil 1990 + + CHILL: A Self-Instruction Manual + Telecommunication Institute - PITTC + Available from KVATRO A/S, N-7005 Trondheim, Norway + Phone: +47 7 52 00 90 + (Great discussion of novelty.) + +Some of these documents are available from Global Engineering +Documents, in Irvine, CA, USA. +1 714 261 1455. diff --git a/gcc/ch/chill.texi b/gcc/ch/chill.texi new file mode 100644 index 00000000000..92d689107e2 --- /dev/null +++ b/gcc/ch/chill.texi @@ -0,0 +1,1231 @@ +@\input texinfo @c -*-texinfo-*- +@setfilename chill.info +@settitle Guide to GNU Chill + + +@ifinfo +@format +START-INFO-DIR-ENTRY +* Chill:: Chill compiler +END-INFO-DIR-ENTRY +@end format +@end ifinfo + +@titlepage +@title GNU Chill +@author William Cox, Per Bothner, Wilfried Moser +@end titlepage + +@ifinfo +@node Top +@top + +@menu +* Options:: Compiler options +* Missing:: Unimplemented parts of the Chill language +* Enhancements:: GNU-specific enhancements to the Chill language +* Conversions:: Value and location conversions +* Separate compilation:: Separate compilation +* Differences:: Differences between GNUCHILL and Z.200/1988 +* Directives:: Implemented Compiler Directives +* References:: Language definition references +@end menu + +@end ifinfo + +@node Options +@chapter Compiler options + +Invoking the compiler: + +The @sc{gnu} CHILL compiler supports several new command line options, and +brings a new use to another: + +@table @code +@item -lang-chill +This option instructs gcc that the following file is a CHILL source file, +even though its extension is not the default `.ch'. + +@item -flocal-loop-counter +The CHILL compiler makes a separate reach, or scope, +for each DO FOR loop. If @code{-flocal-loop-counter} is +specified, the loop counter of value enumeration and location +enumeration is automatically declared inside that reach. +This is the default behavior, required by Z.200. + +@item -fno-local-loop-counter +When this option is specified, the above automatic declaration +is not performed, and the user must declare all loop counters +explicitly. + +@item -fignore-case +When this option is specified, the compiler ignores case. All +identifiers are converted to lower case. This enables the usage +of C runtime libraries. + +@item -fno-ignore-case +Ignoring the case of identifiers is turned off. + +@item -fruntime-checking +The CHILL compiler normally generates code to check +the validity of expressions assigned to variables or +expressions passed as parameters to procedures and processes, +if those expressions cannot be checked at compile time. +This is the default behavior, required by Z.200. +This option allows you to re-enable the default behavior +after disabling it with the @code{-fno-runtime-checking} +option. + +@item -fno-runtime-checking +The CHILL compiler normally generates code to check +the validity of expressions assigned to variables, or +expressions passed as parameters to procedures and processes. +This option allows you to disable that code generation. +This might be done to reduce the size of a program's +generated code, or to increase its speed of execution. +Compile time range-checking is still performed. + +@item -fgrant-only +@itemx -fchill-grant-only +This option causes the compiler to stop successfully +after creating the grant file specified by the source +file (see modular programming in CHILL). No code is +generated, and many categories of errors are not reported. + +@item -fold-string +Implement the semantics of Chill 1984 with respect to strings: +String indexing yields a slice of length one; CHAR is similar +to CHAR(1) (or CHARS(1)); and BOOL is similar to BIT(1) (or BOOLS(1)). + +@item -fno-old-string +Don't implement 1984 Chill string semantics. This is the default. + +@item -I@var{seize_path} +This directive adds the specified seize path to the compiler's +list of paths to search for seize files. When processing a +USE_SEIZE_FILE directive, the compiler normally searches for +the specified seize file only in the current directory. When +one or more seize paths are specified, the compiler also +searches in those directories, in the order of their +specification on the command line, for the seize file. + +@item -c +This C-related switch, which normally prevents gcc from +attempting to link, is *not* yet implemented by the @code{chill} command, +but you can use the @code{gcc} command with this flag. +@end table + +@node Missing +@chapter Implemented and missing parts of the Chill language + +The numbers in parentheses are Z.200(1988) section numbers. + +@itemize @bullet +@item The FORBID keyword in a GRANT statement is currently ignored. + +@item A CASE action or expression allows only a single expression +in a case selector list (5.3.2, 6.4). + +@item ROW modes are not implemented (3.6.3, 3.13.4). + +@item Due to the absence of ROW modes, DYNAMIC has no meaning in +connection with access and text modes. + +@item Array and structure layout (PACK, POS, NOPACK, +STEP keywords) is ignored (3.12.6). + +@item Bit-string slices are not implemented. + +@item The support for synchronization modes and concurrent execution +is slightly non-standard. + +@item Exception handling is implemented, but exceptions are not +generated in all of the required situations. + +@item Dynamic modes are not implemented (though string slices should work). + +@item Reach-bound initializations are not implemented (4.1.2). + +@end itemize + +@node Enhancements +@chapter GNU-specific enhancements to the Chill language + +@itemize @bullet +@item Grantfiles. See @xref{Separate compilation}. +@item Precisions. Multiple integer and real precisions are supported, +as well as signed and unsigned variants of the integer modes. +@item DESCR built-in. The new built-in function +DESCR ( ) returns a pointer to +STRUCT( addr PTR, length ULONG ) where can be +anything the compiler can handle but at least a location of any mode +(except synchronizing modes) and any character string or powerset value. +(A temporary location within the current stack frame may be allocated +if an expression is used.) + +CHILL does not permit the writing of procedures with parameters of +any type. Yet some interfaces---in particular those to system +calls---require +the handling of a wide range of modes, e.g. any string mode, any structure +mode, or any powerset mode. This could be handled by specifying two +parameters (PTR, INT for the length) but this is error-prone (no guarantee +the same location is used after in ADDR and LENGTH), and it will not be +possible for expressions. + +Caveats: This feature permits the programmer to obtain the address of +a literal (if the compiler takes this shortcut---see 1st example below). +If hardware features protect constant parts of the program, erronous +abuse will be detected. + + Examples: + OFFER_HANDLER( descr("dbs"), ->dbs); + + SYNMODE m_els = SET( ela, elb, elc ); + SYNMODE m_elsel = POWERSET m_els; + DCL user_buf STRUCT( a mx, b my, c mz); + DCL select POWERSET m_elsel; + + select := m_elsel[LOWER(m_els) : UPPER(m_els)]; + + GET_RECORD( relation, recno, descr(user_buf), descr(select) ); + + PUT_RECORD( relation, recno, descr(user_buf.b), descr(m_elsel[elb]) ); + +@item LENGTH built-in on left-hand-side. The LENGTH built-in may be +used on the left-hand-side of an assignment, where its argument is a VARYING +character string. +@end itemize + +@node Conversions +@chapter Value and location conversions + +Value and location conversions are highly dependent on the target machine. +They are also very loosely specified in the 1988 standard. +(The 1992 standard seems an improvement.) + +The GNU Chill compiler interprets @code{@var{mode}(@var{exp})} as follows: + +@itemize @bullet +@item +If @var{exp} is a referable location, +and the size of (the mode of) @var{exp} is the same as the size of @var{mode}, +a location conversion is used. +It is implemented exactly as: @code{(@var{refmode}(-> @var{exp}))->}, +where @var{refmode} is a synmode for @code{REF @var{mode}}. + +The programmer is responsible for making sure that alignment +restrictions on machine addresses are not violated. + +If both @var{mode} and the mode of @var{exp} are discrete modes, +alignment should not be a problem, and we get the same conversion +as a standard value conversion. + +@item +If @var{exp} is a constant, +and the size of (the mode of) @var{exp} is the same as the size of @var{mode}, +then a value conversion is performed. This conversion is done +at compile time, and it has not been implemented for all types. +Specifically, converting to or from a floating-point type is not implemented. + +@item +If both @var{mode} and the mode of @var{exp} are discrete modes, +then a value conversion is performed, as described in Z.200. + +@item +If both @var{mode} and the mode of @var{exp} are reference modes, +then a value conversion is allowed. +The same is true is one mode is a reference mode, and the other +is an integral mode of the same size. + +@end itemize + +@node Separate compilation +@chapter Separate compilation + +The GNU CHILL compiler supports modular programming. It +allows the user to control the visibility of variables +and modes, outside of a MODULE, by the use of GRANT +and SEIZE directives. Any location or mode may be made +visible to another MODULE by GRANTing it in the MODULE +where it is defined, and SEIZEing it in another MODULE +which needs to refer to it. + +When variables are GRANTed in one or more modules of a +CHILL source file, the compiler outputs a grant file, +with the original source file name as the base name, +and the extension `.grt'. All of the variables and modes +defined in the source file are written to the grant file, +together with any use_seize_file directives, and the +GRANT directives. A grant file is created for every such +source file, except if an identical grant file already +exists. This prevents unnecessary makefile activity. + +The referencing source file must: + +@enumerate +@item specify the grant file in a use_seize_file directive, and +@item SEIZE each variable or mode definition that it needs. +@end enumerate + +An attempt to SEIZE a variable or mode which is not +GRANTed in some seize file is an error. + +An attempt to refer to a variable which is defined in +some seize file, but not explicitly granted, is an +error. + +An attempt to GRANT a variable or mode which is not +defined in the current MODULE is an error. + +Note that the GNU CHILL compiler will *not* write out a +grant file if: + +@itemize @bullet +@item there are no GRANT directives in the source file, or +@item the entire grant file already exists, and is + identical to the file which the compiler has just built. +(This latter ``feature'' may be removed at some point.) +@end itemize + +Otherwise, a grant file is an automatic, unsuppressable +result of a successful CHILL compilation. + +A future release will also support using remote spec modules +in a similar (but more Blue Book-conforming) manner. + +@node Differences +@chapter Differences to Z.200/1988 + +This chapter lists the differences and extensions between GNUCHILL +and the CCITT recommendation Z.200 in its 1988 version (reffered to +as Z.200/1988). + +@itemize @bullet + +@item 2.2 Vocabulary@* +The definition of @i{} is changed to: + +@example +@i{ ::=} +@example +@i{@{ | _ @} @{ | ' and `<>' or the end-of-line, i.e. +@example +<> USE_SEIZE_FILE "foo.grt" <> +<> ALL_STATIC_OFF +@end example + +@item 3.3 Modes and Classes@* +The syntax of @i{} is changed to: + +@example +@i{ ::=} +@example + [@b{READ}] @i{} +| [@b{READ}] @i{composite-mode>} +@end example + +@i{ ::=} +@example + @i{} +| @i{} +| @i{} +| @i{} +| @i{} +| @i{} +| @i{} +| @i{} +@end example +@end example + +@item 3.4 Discrete Modes@* +The list of discrete modes is enhanced by the following modes: + +@example +BYTE 8-bit signed integer +UBYTE 8-bit unsigned integer +UINT 16-bit unsigned integer +LONG 32-bit signed integer +ULONG 32-bit unsigned integer +@end example + +@strong{Please note} that INT is implemented as 16-bit signed integer. + +@item 3.4.6 Range Modes@* +The mode BIN(n) is not implemented. Using INT(0 : 2 ** n - 1) instead of +BIN(n) makes this mode unneccessary. + +@item 3.X Real Modes@* +Note: This is an extension to Z.200/1988, however, it is defined in +Z.200/1992. + +@b{syntax:} + +@example +@i{ ::=} +@example +@i{} +@end example +@end example + +@b{semantics:} + +@example +A real mode specifies a set of numerical values which approximate a +contiguous range of real numbers. +@end example + +@item 3.X.1 Floating point modes@* + +@b{syntax:} + +@example +@i{ ::=} +@example +@i{ ::=} +@example + @b{PROC} @i{([]) [ ]} + @i{[}@b{EXCEPTIONS}@i{()] [}@b{RECURSIVE}@i{]} +| @i{} +@end example + +@i{ ::=} +@example +@i{ @{, @} *} +@end example + +@i{ ::=} +@example +@i{ [ ]} +@end example + +@i{ ::=} +@example +@b{IN} | @b{OUT} | @b{INOUT} | @b{LOC} +@end example + +@i{ ::=} +@example +@b{RETURNS} @i{( [}@b{LOC}@i{])} +@end example + +@i{ ::=} +@example +@i{ @{, @} *} +@end example +@end example + + +@item 3.10 Input-Output Modes@* +Due to the absence of row modes, DYNAMIC has no meaning in an access +or text mode definition. + + +@item 3.12.2 String Modes@* +As @i{} were defined differently in Z.200/1984, the syntax +of @i{} is changed to: + +@example +@i{ ::=} +@example + @i{ ( ) [} @b{VARYING} @i{]} +| @i{} +| @i{} +@end example + +@i{ ::=} +@example + @i{ ( )} +| @i{} +@end example + +@i{ ::=} +@example +@i{} +@end example + +@i{string type} +@example + @b{BOOLS} +| @b{BIT} +| @b{CHARS} +| @b{CHAR} +@end example + +@i{ ::=} +@example +@i{} +@end example +@end example + +@b{VARYING} is not implemented for @i{} @b{BIT} +and @b{BOOL}. + +@item 3.11.1 Duration Modes@* +The predefined mode @i{DURATION} is implemented as a NEWMODE ULONG and +holds the duration value in miliseconds. This gives a maximum duration +of + +@example +MILLISECS (UPPER (ULONG)), +SECS (4294967), +MINUTES (71582), +HOURS (1193), and +DAYS (49). +@end example + +@item 3.11.2 Absolute Time Modes@* +The predefined mode @i{TIME} is implemented as a NEWMODE ULONG and +holds the absolute time in seconds since Jan. 1st, 1970. This is +equivalent to the mode `time_t' defined on different systems. + +@item 3.12.4 Structure Modes@* +Variant fields are allowed, but the CASE-construct may define only one +tag field (one dimensional CASE). OF course, several variant fields may +be specified in one STRUCT mode. The tag field will (both at compile- +and runtime) not be interpreted in any way, however, it must be +interpreted by a debugger. As a consequence, there are no parameterized +STRUCT modes. + +@item 3.12.5 Layout description for array and structure modes@* +STEP and POS is not implemeted at all, therefore the syntax of +@i{ ::=} +@example +@b{PACK} | @b{NOPACK} +@end example + +@i{ ::=} +@example +@b{PACK} | @b{NOPACK} +@end example +@end example + +@item 3.13.4 Dynamic parameterised structure modes@* +Dynamic parameterised structure modes are not implemented. + +@item 4.1.2 Location declaration@* +The keyword STATIC is allowed, but has no effect at module level, because +all locations declared there are assumed to be `static' by default. Each +granted location will become `public'. A `static' declaration inside a +block, procedure, etc. places the variable in the data section instead of +the stack section. + +@item 4.1.4 Based decleration@* +The based declaration was taken from Z.200/1984 and has the following +syntax: + +@b{syntax:} + +@example +@i{ ::=} +@example +@i{ } @b{BASED} +@i{( )} +@end example +@end example + +@b{semantics:} + +A based declaration with @i{} specifies +as many access names as are defining occerrences in the @i{defining +occurrence list}. Names declared in a base declaration serve as an +alternative way accessing a location by dereferencing a reference +value. This reference value is contained in the location specified by +the @i{free reference location name}. This dereferencing operation is +made each time and only when an access is made via a declared @b{based} +name. + +@b{static properties:} + +A defining occurrence in a @i{based declaration} with @i{free reference +location name} defines a @b{based} name. The mode attached to a +@b{based} name is the @i{mode} specified in the @i{based declaration}. A +@b{based} name is @b{referable}. + +@item 4.2.2 Access names@* +The syntax of access names is changed to: + +@example +@i{ ::=} +@example + @i{} +| @i{} +| @i{} +| @i{} +| @i{} +@end example +@end example + +The semantics, static properties and dynamic conditions remain +unchanged except that they are enhanced by @i{base name}. + +@item 5.2.4.1 Literals General@* +The syntax of @i{} is change to: + +@example +@i{ ::=} +@example + @i{} +| @i{} +| @i{} +| @i{} +| @i{} +| @i{} +| @i{} +| @i{} +@end example +@end example + +Note: The @i{} is an extension to Z.200/1988 and +will be described later on. + +@item 5.2.4.2 Integer literals@* +The @i{} is changed to: + +@example +@i{ ::=} +@example + @i{@{ D | d @} ' @{ | _ @} +} +| @i{ @{ | _ @} *} +@end example +@end example + +@item 5.2.4.4 Character literals@* +A character literal, e.g. 'M', may serve as a charater string literal of +length 1. + +@item 5.2.4.7 Character string literals@* +The syntax of a character string literal is: + +@example +@i{ ::=} +@example + @i{'@{ | |} + @i{ @} * '} +| @i{'@{ | |} + @i{ @} * '} +@end example + +@i{ ::=} +@example +@i{''} +@end example + +@i{ ::=} +@example +@i{""} +@end example +@end example + +A character string litaral of length 1, enclosed in apostrophes +(e.g. 'M') may also serve as a charater literal. + +@item 5.2.4.9 Floating point literal@* +Note: This is an extension to Z.200/1988 ans was taken from Z.200/1992. + +@b{syntax:} + +@example +@i{ ::=} +@example + @i{} +| @i{} +@end example + +@i{ ::=} +@example + @i{ . [ ] [ ]} +| @i{[ ] . [ ]} +@end example + +@i{ ::=} +@example +@i{- } +@end example + +@i{ ::=} +@example +@i{ @{ | _ @} *} +@end example + +@i{ ::=} +@example + @i{[ E | D | e | d ] } +| @i{[ E | D | e | d ] - } +@end example +@end example + +@item 5.2.14 Start Expression@* +The START expression is not implemented. + +@item 5.3 Values and Expressions@* +The undefined value, denoted by `*', is not implemented. + +@item 5.3.8 Operand-5@* +The @i{} is defined as: + +@example +@i{ ::=} +@example +@i{()} +@end example +@end example + +@item 6.4 Case Action@* +There may be only one case selector specified. The optional range list +must not be specified. + +@item 6.5 Do Action@* +A Do-Action without control part is not implemented. Grouping of +statements can be achieved via BEGIN and END. A location enumeration is not +allowed for BIT strings, only for (varying) CHAR strings and ARRAYs. + +The expression list in a DO WITH must consist of locations only. + +@item 6.13 Start Action@* +The syntax of the START action is changed to: + +@example +@i{ ::=} +@example +@b{START} @i{ ( [, ])} +@i{[} @b{SET} @i{ ]} +@end example + +@i{ ::=} +@example +@i{} +@end example +@end example + +@item 6.16 Delay Action@* +The optional PRIORITY specification need not be a constant. + +@item 6.17 Delay Case Action@* +The optional SET branch and the, also optional, PRIORITY branch must be +seperated by `;'. + +@item 6.18 Send Action@* +The send action must define a destination instance (via the TO branch), +since undirected signals are not supported. The optional PRIORITY +specification need not be a constant. Additional to the data +transported by the signal, there will be a user defined argument. + +The syntax of the @i{} is therefore: + +@example +@i{ ::=} +@example +@b{SEND} @i{ [ ( @{, @} * ) ]} +@i{[} @b{WITH} @i{ ]} +@b{TO} @i{ [ ]} +@end example +@end example + +The default priority can be specified by the compiler directive +SEND_SIGNAL_DEFAULT_PRIORITY. If this also is omitted, the default +priority is 0. + +@item 6.20.3 CHILL value built-in calls@* +The CHILL value buit-in calls are enhanced by some calls, and other calls +will have different arguments as described in Z.200/1988. Any call not +mentioned here is the same as described in Z.200/1988. + +@b{syntax:} + +@example +@i{CHILL value built-in routine call> ::=} +@example + @i{ADDR ()} +| @i{PRED ()} +| @i{SUCC ()} +| @i{ABS ()} +| @i{LENGTH ()} +| @i{SIN ()} +| @i{COS ()} +| @i{TAN ()} +| @i{ARCSIN ()} +| @i{ARCCOS ()} +| @i{ARCTAN ()} +| @i{EXP ()} +| @i{LN ()} +| @i{LOG ()} +| @i{SQRT ()} +| @i{QUEUE_LENGTH ( | )} +| @i{GEN_INST ( | ,} + @i{)} +| @i{COPY_NUMBER ()} +| @i{GEN_PTYE ()} +| @i{PROC_TYPE ()} +| @i{GEN_CODE ( | )} +| @i{DESCR ()} +@end example + +@i{ ::=} +@example + @i{} +| @i{} +@end example + +@i{ ::=} +@example + @i{} +| @i{floating point expression>} +@end example + +@i{ ::=} +@example + @i{} +| @i{} +| @i{} +| @i{} +| @i{} +| @i{} +| @i{} +| @i{} +| @i{} +@end example +@end example + +@b{semantics:} + +@i{ADDR} is derived syntax for -> @i{}. + +@i{PRED} and @i{SUCC} delivers respectively, in case of a @i{discrete +expression}, the next lower or higher discrete value of their argument, +in case of @i{bound reference expression} these built-in calls deliver a +pointer to the previous or next element. + +@i{ABS} is defined on numeric values, i.e. integer values and floating +point values, delivering the corresponding absolute value. + +@i{LENGTH} is defined on + +@itemize @bullet + +@item string and text locations and string expressions, delivering the +length of them; + +@item event locations, delivering the @b{event length} of the mode of the +location; + +@item buffer locations, delivering the @b{buffer length} of the mode of +the location; + +@item string mode names, delivering the @b{string length} of the mode; + +@item text mode names, delivering the @b{text length} of the mode; + +@item buffer mode names, delivering the @b{buffer length} of the mode; + +@item event mode names, delivering the @b{event length} of the mode; + +@item Additionally, @i{LENGTH} also may be used on the left hand +side of an assignment to set a new length of a @i{varying character +string location}. However, to avoid undefined elements in the varying +string, the new length may only be less or equal to the current length. +Otherwise a @b{RANGEFAIL} exception will be generated. +@end itemize + +@i{SIN} delivers the sine of its argument (interpreted in radians). + +@i{COS} delivers the cosine of its argument (interpreted in radians). + +@i{TAN} delivers the tangent of its argument (interpreted in radians). + +@i{ARCSIN} delivers the sin -1 function of its argument. + +@i{ARCCOS} delivers the cos -1 function of its argument. + +@i{ARCTAN} delivers the tan -1 function of its argument. + +@i{EXP} delivers the exponential function, where x is the argument. + +@i{LN} delivers the natural logarithm of its argument. + +@i{LOG} delivers the base 10 logarithm of its argument. + +@i{SQRT} delivers the sqare root of its argument. + +@i{QUEUE_LENGTH} delivers either the number of sending delayed processes +plus the number of messages in a buffer queue (if the argument is a +@i{buffer location}), or the number of delayed processes (if the +argument specifies an @i{event location}) as @i{integer expression}. + +@i{GEN_INST} delivers an @i{instance expression} constructed from the +arguments. Both arguments must have the @i{&INT}-derived class. + +@i{COPY_NUMBER} delivers as @i{&INT}-derived class the copy number of an +@i{instance location}. + +@i{GEN_PTYPE} delivers as @i{&INT}-derived class the associated number +of the @i{process name}. + +@i{PROC_TYPE} delivers as @i{&INT}-derived class the process type of an +@i{instance expression}. + +@i{GEN_CODE} delivers as @i{&INT}-derived class the associated number of +the @i{process name} or @i{signal name}. + +@i{DESCR} delivers a @i{free reference expression} pointing to a +structure with the following layout describing the @i{location} argument. + +@example +SYNMODE __tmp_descr = STRUCT (p PTR, l ULONG); +@end example + + +@item 7.4.2 Associating an outside world object@* +The syntax of the associate built-in routine call is defined as: + +@example +@i{ ::=} +@example +@i{ASSOCIATE ( , ,} [@i{, } ] @i{)} +@end example +@end example + +The ASSOCIATE call has two parameters besides the association location: +a pathname and an optional mode string. + +The value of the first string expression must be a pathname according to +the rules of the underlying operating system. (Note that a relative pathname +implies a name relative to the working directory of the process.) + +The mode string may contain the value "VARIABLE", which requests +an external representation of records consisting of an UINT record +length followed by as many bytes of data as indicated by the length field. +Such a file with variable records is not indexable. + +A file with variable records can be written using any record mode. If the +record mode is CHARS(n) VARYING, the record length is equal to the actual +length of the value written. (Different record may have differing lengths.) +With all other record modes, all records written using the same access mode +will have the same length, but will still be prefixed with the length field. +(Note that by re-connecting with different access modes, the external +representation may ultimately contain records with differing lengths.) + +A file with variable records can only be read by using a record mode of +CHARS(n) VARYING. + + +@item 7.4.2 Accessing association attributes@* +The value of the READABLE and WRITEABLE attributes is determined using +the file status call provided by the operating system. The result will +depend on the device being accessed, or on the file mode. + +The INDEXABLE attribute has the value false for files with variable records, +and for files associated with devices not supporting random positioning +(character devices, FIFO special files, etc.). + +The variable attribute is true for files associated with the mode sting +"VARIABLE", and false otherwise. + + +@item 7.4.5 Modifying association attributes@* +The syntax of the MODIFY built-in routine call is defined as: + +@example +@i{ ::=} +@example +@i{MODIFY ( , )} +@end example +@end example + +At present, MODIFY accepts a character string containing a pathname +in addition to the association location, which will cause a renaming +of the associated file. + + +@item 7.4.9 Data transfer operations@* +READRECORD will fail (causing READFAIL) if the number of bytes from the +current position in the file to the end of the file is greater than zero +but less than the size of the record mode, and no data will be transferred. +(If the number of bytes is zero, no error occurs and OUTOFFILE will +return TRUE.) + +The number of bytes transferred by READRECORD and WRITERECORD is equal to +the size of the record mode of the access location. Note that the +internal representation of this mode may vary depending on the +record mode being packed or not. + + +@item 7.5 Text Input Output@* +Sequential text files will be represented so as to be compatible +with the standard representation of texts on the underlying operating +system, where control characters are used to delimit text records on files +as well as to control the movement of a cursor or printing head on a device. + +For indexed text files, records of a uniform length (i.e. the size of the +text record, including the length field) are written. All i/o codes cause +an i/o transfer without any carriage control characters being added to the +record, which will be expanded with spaces. + +An indexed text file is therefore not compatible with the standard +text representation of the underlying operating system. + + + +@item 7.5.3 Text transfer operations@* +The syntax of @i{} is changed to: + +@example +@i{ ::=} +@example + @i{} +| @i{} +| @i{} +@end example + +@i{ ::=} +@example + STDIN +| STDOUT +| STDERR +@end example +@end example + +NOTE: The identifiers STDIN, STDOUT, and STDERR are predefined. +Association and connection with files or devices is done according to +operating system rules. + +The effect of using READTEXT or WRITETEXT with a character string location +as a text argument (i.e. the first parameter) where the same location also +appears in the i/o list is undefined. + +The current implementation of formatting assumes run-to-completion semantics +of CHILL tasks within an image. + + + +@item 7.5.5 Conversion@* +Due to the implementation of @i{} the syntax +is changed to: + +@example +@i{ ::=} +@example +@i{ @{ ]} +@end example + +@i{ ::=} +@example +@i{B} | @i{O} | @i{H} | @i{C} | @i{F} +@end example + +@i{ ::=} +@example +@i{L} | @i{E} | @i{P} +@end example + +@i{ ::=} +@example + @i{@{ @} +} | @i{V} +| @i{} +@end example + +@i{ ::=} +@example +@i{@{ @{ + | V @} : @{ @{ @} + | V @}} +@end example +@end example + +Note: The @i{} is only valid for @i{} `C' or `F'. + + +@item 7.5.7 I/O control@* +To achieve compatibility of text files written with CHILL i/o with +the standard representation of text on the underlying operating system +the interpretation of the i/o control clause of the format +deviates from Z.200. The following table shows the i/o codes together +with the control characters written before and after the text record, +to achieve the indicated function: +@table @samp +@item / +Write next record (record, line feed) + +@item + +Write record on next page (form feed, record, line feed) + +@item - +Write record on current line (record, carriage return) + +@item ? +Write record as a prompt (carriage return, record) + +@item ! +Emit record (record). + +@item = +Force new page for the next line: The control character written before +the next record will be form feed, irrespective of the i/o control used for +transferring the record. +@end table + +When reading a text file containing control characters other than line feed, +these characters have to be reckoned with by the format used to read the +text records. + + + + +@item 11.2.2 Regionality@* +Regionality is not implemented at all, so there is no difference in the +generated code when REGION is substituted by MODULE in a GNUCHILL +compilation unit. + +@item 11.5 Signal definition statement@* +The @i{} may only occur at module level. + +@item 12.3 Case Selection@* +The syntax of @i{} is changed to: + +@example +@i{ ::=} +@example +@i{( @{, @} * )} +@end example + +@i{ ::=} +@example + @i{} +| @i{} +| @i{} +| @b{ELSE} +@end example +@end example + +@end itemize + +@node Directives +@chapter Compiler Directives + +@itemize @bullet + +@item ALL_STATIC_ON, ALL_STATIC_OFF@* +These directives control where procedure local variables are +allocated. ALL_STATIC_ON turns allocation of procedure local variables +in the data space ON, regardless of the keyword STATIC being used or not. +ALL_STATIC_OFF places procedure local variables in the stack space. +The default is ALL_STATIC_OFF. + +@item RANGE_ON, RANGE_OFF@* +Turns generation of rangecheck code ON and OFF. + +@item USE_SEIZE_FILE @* +Specify the filename (as a character string literal) where +subsequent SEIZE statements are related to. This directive +and the subsequent SEIZEs are written +to a possibly generated grant file for this module. + +@example +<> USE_SEIZE_FILE "foo.grt" <> +SEIZE bar; +@end example + +@item USE_SEIZE_FILE_RESTRICTED "filename"@* +Same as USE_SEIZE_FILE. The difference is that this directive +and subsequent SEIZEs are *not* written to a possibly generated +grant file. + +@item PROCESS_TYPE = @* +Set start value for all PROCESS delclarations. This value automatically +gets incremented after each PROCESS declaration and may be changed with +a new PROCESS_TYPE compiler directive. + +@item SIGNAL_CODE = @* +Set start value for all SIGNAL definitions. This value automatically +gets incremented after each SIGNAL definition and may be changed with a +new SIGNAL_CODE compiler directive. + +@item SEND_SIGNAL_DEFAULT_PRIORITY = @* +Set default priority for send signal action. + +@item SEND_BUFFER_DEFAULT_PRIORITY = @* +Set default priority for send buffer action. + +Note: Every in the above mentioned compiler +directives may also be specified by a SYNONYM of an integer type. + +@example +SYN first_signal_code = 10; +<> SIGNAL_CODE = first_signal_code <> +SIGNAL s1; +@end example + +@end itemize + +@node References +@chapter Language Definition References + +@itemize @bullet +@item CCITT High Level Language (CHILL) Recommendation Z.200 + ISO/IEC 9496, Geneva 1989 ISBN 92-61-03801-8 + +@item An Analytic Description of CHILL, the CCITT high-level + language, Branquart, Louis & Wodon, Springer-Verlag 1981 + ISBN 3-540-11196-4 + +@item CHILL User's Manual + CCITT, Geneva 1986 ISBN 92-61-02601-X + +@item Introduction to CHILL + CCITT, Geneva 1983 ISBN 92-61-017771-1 + +@item CHILL CCITT High Level Language + Proceedings of the 5th CHILL Conference + North-Holland, 1991 ISBN 0 444 88904 3 + +@item Introduction to the CHILL programming Language + TELEBRAS, Campinas, Brazil 1990 + +@end itemize + +Z.200 is mostly a language-lawyer's document, but more readable +than most. The User's Guide is more readable by far, but doesn't +cover the whole language. Our copies of these documents came through +Global Engineering Documents, in Irvine, CA, USA. (714)261-1455. + +@contents +@bye diff --git a/gcc/ch/gperf b/gcc/ch/gperf new file mode 100644 index 00000000000..a499a32498f --- /dev/null +++ b/gcc/ch/gperf @@ -0,0 +1,158 @@ +struct resword { + char *name; + short token; + enum rid rid; + enum toktype { RESERVED, DIRECTIVE, PREDEF } flags; +}; +extern tree ridpointers []; +%% +access, ACCESS, NORID, RESERVED +after, AFTER, NORID, RESERVED +all, ALL, NORID, RESERVED +all_static_off, ALL_STATIC_OFF, NORID, DIRECTIVE +all_static_on, ALL_STATIC_ON, NORID, DIRECTIVE +and, AND, NORID, RESERVED +andif, ANDIF, NORID, RESERVED +array, ARRAY, NORID, RESERVED +asm, ASM_KEYWORD, NORID, RESERVED +assert, ASSERT, NORID, RESERVED +at, AT, NORID, RESERVED +based, BASED, NORID, RESERVED +begin, BEGINTOKEN, NORID, RESERVED +bin, BIN, NORID, RESERVED +bit, BOOLS, RID_BOOLS, PREDEF +body, BODY, NORID, RESERVED +bools, BOOLS, RID_BOOLS, RESERVED +buffer, BUFFER, NORID, RESERVED +buffer_code, IGNORED_DIRECTIVE, NORID, DIRECTIVE +by, BY, NORID, RESERVED +call, CALL, NORID, RESERVED +case, CASE, NORID, RESERVED +cause, CAUSE, NORID, RESERVED +ccitt_os, IGNORED_DIRECTIVE, NORID, DIRECTIVE +chars, CHARS, NORID, RESERVED +context, CONTEXT, NORID, RESERVED +continue, CONTINUE, NORID, RESERVED +cycle, CYCLE, NORID, RESERVED +dcl, DCL, NORID, RESERVED +debug_lines, IGNORED_DIRECTIVE, NORID, DIRECTIVE +debug_symbols, IGNORED_DIRECTIVE, NORID, DIRECTIVE +debug_types, IGNORED_DIRECTIVE, NORID, DIRECTIVE +delay, DELAY, NORID, RESERVED +do, DO, NORID, RESERVED +down, DOWN, NORID, RESERVED +dynamic, DYNAMIC, RID_DYNAMIC, RESERVED +else, ELSE, NORID, RESERVED +elsif, ELSIF, NORID, RESERVED +empty_off, EMPTY_OFF, NORID, DIRECTIVE +empty_on, EMPTY_ON, NORID, DIRECTIVE +end, END, NORID, RESERVED +esac, ESAC, NORID, RESERVED +even, IGNORED_DIRECTIVE, NORID, DIRECTIVE +event, EVENT, NORID, RESERVED +event_code, IGNORED_DIRECTIVE, NORID, DIRECTIVE +ever, EVER, NORID, RESERVED +exceptions, EXCEPTIONS, NORID, RESERVED +exit, EXIT, NORID, RESERVED +extra_const_seg, IGNORED_DIRECTIVE, NORID, DIRECTIVE +far, IGNORED_DIRECTIVE, NORID, DIRECTIVE +fi, FI, NORID, RESERVED +for, FOR, NORID, RESERVED +forbid, FORBID, NORID, RESERVED +general, GENERAL, NORID, RESERVED +generate_all_set_names, IGNORED_DIRECTIVE, NORID, DIRECTIVE +generate_set_names, IGNORED_DIRECTIVE, NORID, DIRECTIVE +goto, GOTO, NORID, RESERVED +grant, GRANT, NORID, RESERVED +grant_file_size, IGNORED_DIRECTIVE, NORID, DIRECTIVE +if, IF, NORID, RESERVED +in, IN, RID_IN, RESERVED +init, INIT, NORID, RESERVED +inline, INLINE, RID_INLINE, RESERVED +inout, PARAMATTR, RID_INOUT, RESERVED +large, IGNORED_DIRECTIVE, NORID, DIRECTIVE +list, IGNORED_DIRECTIVE, NORID, DIRECTIVE +loc, LOC, NORID, RESERVED +make_publics_for_discrete_syns, IGNORED_DIRECTIVE, NORID, DIRECTIVE +medium, IGNORED_DIRECTIVE, NORID, DIRECTIVE +mod, MOD, NORID, RESERVED +module, MODULE, NORID, RESERVED +multiple_const_segs, IGNORED_DIRECTIVE, NORID, DIRECTIVE +multiple_data_segs, IGNORED_DIRECTIVE, NORID, DIRECTIVE +newmode, NEWMODE, NORID, RESERVED +nolist, IGNORED_DIRECTIVE, NORID, DIRECTIVE +no_overlap_check, IGNORED_DIRECTIVE, NORID, DIRECTIVE +nonref, NONREF, NORID, RESERVED +nopack, NOPACK, NORID, RESERVED +not, NOT, NORID, RESERVED +od, OD, NORID, RESERVED +of, OF, NORID, RESERVED +on, ON, NORID, RESERVED +only_for_simulation, IGNORED_DIRECTIVE, NORID, DIRECTIVE +only_for_target, IGNORED_DIRECTIVE, NORID, DIRECTIVE +optimize, IGNORED_DIRECTIVE, NORID, DIRECTIVE +optimize_runtime, IGNORED_DIRECTIVE, NORID, DIRECTIVE +optimization_window, IGNORED_DIRECTIVE, NORID, DIRECTIVE +or, OR, NORID, RESERVED +orif, ORIF, NORID, RESERVED +out, PARAMATTR, RID_OUT, RESERVED +pack, PACK, NORID, RESERVED +page, IGNORED_DIRECTIVE, NORID, DIRECTIVE +pos, POS, NORID, RESERVED +powerset, POWERSET, NORID, RESERVED +prefixed, PREFIXED, NORID, RESERVED +print_o_code, IGNORED_DIRECTIVE, NORID, DIRECTIVE +print_symbol_table, IGNORED_DIRECTIVE, NORID, DIRECTIVE +priority, PRIORITY, NORID, RESERVED +proc, PROC, NORID, RESERVED +process, PROCESS, NORID, RESERVED +process_type, PROCESS_TYPE_TOKEN, NORID, DIRECTIVE +range, RANGE, NORID, RESERVED +range_off, RANGE_OFF, NORID, DIRECTIVE +range_on, RANGE_ON, NORID, DIRECTIVE +read, READ, RID_READ, RESERVED +receive, RECEIVE, NORID, RESERVED +recursive, RECURSIVE, NORID, RESERVED +reentrant, IGNORED_DIRECTIVE, NORID, DIRECTIVE +reentrant_all, IGNORED_DIRECTIVE, NORID, DIRECTIVE +ref, REF, NORID, RESERVED +region, REGION, NORID, RESERVED +rem, REM, NORID, RESERVED +remote, REMOTE, NORID, RESERVED +result, RESULT, NORID, RESERVED +return, RETURN, NORID, RESERVED +returns, RETURNS, NORID, RESERVED +row, ROW, NORID, RESERVED +seize, SEIZE, NORID, RESERVED +send, SEND, NORID, RESERVED +send_buffer_default_priority, SEND_BUFFER_DEFAULT_PRIORITY, NORID, DIRECTIVE +send_signal_default_priority, SEND_SIGNAL_DEFAULT_PRIORITY, NORID, DIRECTIVE +set, SET, NORID, RESERVED +short_pred_succ, IGNORED_DIRECTIVE, NORID, DIRECTIVE +signal, SIGNAL, NORID, RESERVED +signal_code, SIGNAL_CODE, NORID, DIRECTIVE +signal_max_length, IGNORED_DIRECTIVE, NORID, DIRECTIVE +simple, SIMPLE, NORID, RESERVED +small, IGNORED_DIRECTIVE, NORID, DIRECTIVE +spec, SPEC, NORID, RESERVED +start, START, NORID, RESERVED +state_routine, IGNORED_DIRECTIVE, NORID, DIRECTIVE +static, STATIC, NORID, RESERVED +step, STEP, NORID, RESERVED +stop, STOP, NORID, RESERVED +struct, STRUCT, NORID, RESERVED +support_causing_address, IGNORED_DIRECTIVE, NORID, DIRECTIVE +syn, SYN, NORID, RESERVED +synmode, SYNMODE, NORID, RESERVED +text, TEXT, NORID, RESERVED +then, THEN, NORID, RESERVED +this, THIS, NORID, RESERVED +timeout, TIMEOUT, NORID, RESERVED +to, TO, NORID, RESERVED +up, UP, NORID, RESERVED +use_seize_file, USE_SEIZE_FILE, NORID, DIRECTIVE +use_seize_file_restricted, USE_SEIZE_FILE_RESTRICTED, NORID, DIRECTIVE +varying, VARYING, NORID, RESERVED +while, WHILE, NORID, RESERVED +with, WITH, NORID, RESERVED +xor, XOR, NORID, RESERVED diff --git a/gcc/ch/hash.h b/gcc/ch/hash.h new file mode 100644 index 00000000000..c3fff861ade --- /dev/null +++ b/gcc/ch/hash.h @@ -0,0 +1,1059 @@ +/* C code produced by gperf version 2.5 (GNU C++ version) */ +/* Command-line: gperf -D -E -S1 -p -j1 -i 1 -g -o -t -k* gperf.tmp */ +struct resword { + char *name; + short token; + enum rid rid; + enum toktype { RESERVED, DIRECTIVE, PREDEF } flags; +}; +extern tree ridpointers []; +/* maximum key range = 2815, duplicates = 6 */ + +#ifdef __GNUC__ +inline +#endif +static unsigned int +hash (str, len) + register char *str; + register int unsigned len; +{ + static unsigned short asso_values[] = + { + 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, + 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, + 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, + 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, + 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, + 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, + 2822, 2822, 2822, 2822, 2822, 4, 61, 80, 12, 350, + 91, 39, 3, 2, 2822, 4, 129, 155, 64, 46, + 65, 2822, 96, 13, 1, 135, 7, 2, 8, 124, + 7, 2822, 2822, 2822, 2822, 1, 2822, 94, 40, 127, + 21, 1, 81, 1, 1, 7, 2822, 3, 23, 74, + 255, 203, 70, 2822, 218, 1, 88, 124, 1, 6, + 10, 56, 40, 2822, 2822, 2822, 2822, 2822, + }; + register int hval = len; + + switch (hval) + { + default: + case 30: + hval += asso_values[str[29]]; + case 29: + hval += asso_values[str[28]]; + case 28: + hval += asso_values[str[27]]; + case 27: + hval += asso_values[str[26]]; + case 26: + hval += asso_values[str[25]]; + case 25: + hval += asso_values[str[24]]; + case 24: + hval += asso_values[str[23]]; + case 23: + hval += asso_values[str[22]]; + case 22: + hval += asso_values[str[21]]; + case 21: + hval += asso_values[str[20]]; + case 20: + hval += asso_values[str[19]]; + case 19: + hval += asso_values[str[18]]; + case 18: + hval += asso_values[str[17]]; + case 17: + hval += asso_values[str[16]]; + case 16: + hval += asso_values[str[15]]; + case 15: + hval += asso_values[str[14]]; + case 14: + hval += asso_values[str[13]]; + case 13: + hval += asso_values[str[12]]; + case 12: + hval += asso_values[str[11]]; + case 11: + hval += asso_values[str[10]]; + case 10: + hval += asso_values[str[9]]; + case 9: + hval += asso_values[str[8]]; + case 8: + hval += asso_values[str[7]]; + case 7: + hval += asso_values[str[6]]; + case 6: + hval += asso_values[str[5]]; + case 5: + hval += asso_values[str[4]]; + case 4: + hval += asso_values[str[3]]; + case 3: + hval += asso_values[str[2]]; + case 2: + hval += asso_values[str[1]]; + case 1: + hval += asso_values[str[0]]; + } + return hval; +} + +#ifdef __GNUC__ +inline +#endif +struct resword * +in_word_set (str, len) + register char *str; + register unsigned int len; +{ + enum + { + TOTAL_KEYWORDS = 300, + MIN_WORD_LENGTH = 2, + MAX_WORD_LENGTH = 30, + MIN_HASH_VALUE = 7, + MAX_HASH_VALUE = 2821, + }; + + static struct resword wordlist[] = + { + {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, + {"AT", AT, NORID, RESERVED}, + {"WITH", WITH, NORID, RESERVED}, + {"THIS", THIS, NORID, RESERVED}, + {"else", ELSE, NORID, RESERVED}, + {"while", WHILE, NORID, RESERVED}, + {"TO", TO, NORID, RESERVED}, + {"seize", SEIZE, NORID, RESERVED}, + {"DO", DO, NORID, RESERVED}, + {"OD", OD, NORID, RESERVED}, + {"BIT", BOOLS, RID_BOOLS, PREDEF}, + {"IN", IN, RID_IN, RESERVED}, + {"INIT", INIT, NORID, RESERVED}, + {"AND", AND, NORID, RESERVED}, + {"fi", FI, NORID, RESERVED}, + {"if", IF, NORID, RESERVED}, + {"set", SET, NORID, RESERVED}, + {"FI", FI, NORID, RESERVED}, + {"IF", IF, NORID, RESERVED}, + {"by", BY, NORID, RESERVED}, + {"this", THIS, NORID, RESERVED}, + {"with", WITH, NORID, RESERVED}, + {"STATIC", STATIC, NORID, RESERVED}, + {"exit", EXIT, NORID, RESERVED}, + {"ON", ON, NORID, RESERVED}, + {"NOT", NOT, NORID, RESERVED}, + {"elsif", ELSIF, NORID, RESERVED}, + {"START", START, NORID, RESERVED}, + {"list", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"POS", POS, NORID, RESERVED}, + {"DOWN", DOWN, NORID, RESERVED}, + {"STOP", STOP, NORID, RESERVED}, + {"BIN", BIN, NORID, RESERVED}, + {"GOTO", GOTO, NORID, RESERVED}, + {"bit", BOOLS, RID_BOOLS, PREDEF}, + {"OF", OF, NORID, RESERVED}, + {"all", ALL, NORID, RESERVED}, + {"OR", OR, NORID, RESERVED}, + {"ROW", ROW, NORID, RESERVED}, + {"LIST", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"XOR", XOR, NORID, RESERVED}, + {"PACK", PACK, NORID, RESERVED}, + {"based", BASED, NORID, RESERVED}, + {"step", STEP, NORID, RESERVED}, + {"page", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"asm", ASM_KEYWORD, NORID, RESERVED}, + {"dcl", DCL, NORID, RESERVED}, + {"ASM", ASM_KEYWORD, NORID, RESERVED}, + {"ANDIF", ANDIF, NORID, RESERVED}, + {"simple", SIMPLE, NORID, RESERVED}, + {"at", AT, NORID, RESERVED}, + {"OUT", PARAMATTR, RID_OUT, RESERVED}, + {"BY", BY, NORID, RESERVED}, + {"text", TEXT, NORID, RESERVED}, + {"FAR", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"up", UP, NORID, RESERVED}, + {"delay", DELAY, NORID, RESERVED}, + {"CHARS", CHARS, NORID, RESERVED}, + {"UP", UP, NORID, RESERVED}, + {"spec", SPEC, NORID, RESERVED}, + {"SYN", SYN, NORID, RESERVED}, + {"GRANT", GRANT, NORID, RESERVED}, + {"MOD", MOD, NORID, RESERVED}, + {"small", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"DCL", DCL, NORID, RESERVED}, + {"ever", EVER, NORID, RESERVED}, + {"do", DO, NORID, RESERVED}, + {"od", OD, NORID, RESERVED}, + {"case", CASE, NORID, RESERVED}, + {"esac", ESAC, NORID, RESERVED}, + {"CCITT_OS", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"FOR", FOR, NORID, RESERVED}, + {"ORIF", ORIF, NORID, RESERVED}, + {"BODY", BODY, NORID, RESERVED}, + {"INOUT", PARAMATTR, RID_INOUT, RESERVED}, + {"SIGNAL", SIGNAL, NORID, RESERVED}, + {"LOC", LOC, NORID, RESERVED}, + {"NOLIST", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"even", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"in", IN, RID_IN, RESERVED}, + {"ALL", ALL, NORID, RESERVED}, + {"NOPACK", NOPACK, NORID, RESERVED}, + {"call", CALL, NORID, RESERVED}, + {"pos", POS, NORID, RESERVED}, + {"end", END, NORID, RESERVED}, + {"send", SEND, NORID, RESERVED}, + {"of", OF, NORID, RESERVED}, + {"PROC", PROC, NORID, RESERVED}, + {"to", TO, NORID, RESERVED}, + {"rem", REM, NORID, RESERVED}, + {"pack", PACK, NORID, RESERVED}, + {"BOOLS", BOOLS, RID_BOOLS, RESERVED}, + {"mod", MOD, NORID, RESERVED}, + {"ref", REF, NORID, RESERVED}, + {"use_seize_file", USE_SEIZE_FILE, NORID, DIRECTIVE}, + {"bin", BIN, NORID, RESERVED}, + {"medium", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"begin", BEGINTOKEN, NORID, RESERVED}, + {"FORBID", FORBID, NORID, RESERVED}, + {"syn", SYN, NORID, RESERVED}, + {"body", BODY, NORID, RESERVED}, + {"ARRAY", ARRAY, NORID, RESERVED}, + {"STRUCT", STRUCT, NORID, RESERVED}, + {"read", READ, RID_READ, RESERVED}, + {"cycle", CYCLE, NORID, RESERVED}, + {"large", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"VARYING", VARYING, NORID, RESERVED}, + {"CALL", CALL, NORID, RESERVED}, + {"then", THEN, NORID, RESERVED}, + {"event", EVENT, NORID, RESERVED}, + {"cause", CAUSE, NORID, RESERVED}, + {"loc", LOC, NORID, RESERVED}, + {"access", ACCESS, NORID, RESERVED}, + {"init", INIT, NORID, RESERVED}, + {"receive", RECEIVE, NORID, RESERVED}, + {"TEXT", TEXT, NORID, RESERVED}, + {"EXIT", EXIT, NORID, RESERVED}, + {"stop", STOP, NORID, RESERVED}, + {"SET", SET, NORID, RESERVED}, + {"and", AND, NORID, RESERVED}, + {"signal", SIGNAL, NORID, RESERVED}, + {"far", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"assert", ASSERT, NORID, RESERVED}, + {"static", STATIC, NORID, RESERVED}, + {"debug_types", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"prefixed", PREFIXED, NORID, RESERVED}, + {"out", PARAMATTR, RID_OUT, RESERVED}, + {"THEN", THEN, NORID, RESERVED}, + {"or", OR, NORID, RESERVED}, + {"END", END, NORID, RESERVED}, + {"row", ROW, NORID, RESERVED}, + {"STEP", STEP, NORID, RESERVED}, + {"xor", XOR, NORID, RESERVED}, + {"SMALL", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"PRIORITY", PRIORITY, NORID, RESERVED}, + {"SEND", SEND, NORID, RESERVED}, + {"BASED", BASED, NORID, RESERVED}, + {"chars", CHARS, NORID, RESERVED}, + {"DYNAMIC", DYNAMIC, RID_DYNAMIC, RESERVED}, + {"CASE", CASE, NORID, RESERVED}, + {"ESAC", ESAC, NORID, RESERVED}, + {"module", MODULE, NORID, RESERVED}, + {"on", ON, NORID, RESERVED}, + {"result", RESULT, NORID, RESERVED}, + {"PAGE", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"andif", ANDIF, NORID, RESERVED}, + {"READ", READ, RID_READ, RESERVED}, + {"bools", BOOLS, RID_BOOLS, RESERVED}, + {"ASSERT", ASSERT, NORID, RESERVED}, + {"debug_lines", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"after", AFTER, NORID, RESERVED}, + {"ALL_STATIC_ON", ALL_STATIC_ON, NORID, DIRECTIVE}, + {"down", DOWN, NORID, RESERVED}, + {"WHILE", WHILE, NORID, RESERVED}, + {"start", START, NORID, RESERVED}, + {"optimize", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"goto", GOTO, NORID, RESERVED}, + {"for", FOR, NORID, RESERVED}, + {"SPEC", SPEC, NORID, RESERVED}, + {"orif", ORIF, NORID, RESERVED}, + {"BEGIN", BEGINTOKEN, NORID, RESERVED}, + {"REF", REF, NORID, RESERVED}, + {"OPTIMIZATION_WINDOW", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"ACCESS", ACCESS, NORID, RESERVED}, + {"AFTER", AFTER, NORID, RESERVED}, + {"not", NOT, NORID, RESERVED}, + {"buffer", BUFFER, NORID, RESERVED}, + {"inline", INLINE, RID_INLINE, RESERVED}, + {"CONTEXT", CONTEXT, NORID, RESERVED}, + {"RANGE", RANGE, NORID, RESERVED}, + {"newmode", NEWMODE, NORID, RESERVED}, + {"range", RANGE, NORID, RESERVED}, + {"forbid", FORBID, NORID, RESERVED}, + {"nolist", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"CAUSE", CAUSE, NORID, RESERVED}, + {"ELSIF", ELSIF, NORID, RESERVED}, + {"remote", REMOTE, NORID, RESERVED}, + {"timeout", TIMEOUT, NORID, RESERVED}, + {"powerset", POWERSET, NORID, RESERVED}, + {"debug_symbols", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"general", GENERAL, NORID, RESERVED}, + {"REGION", REGION, NORID, RESERVED}, + {"REM", REM, NORID, RESERVED}, + {"ALL_STATIC_OFF", ALL_STATIC_OFF, NORID, DIRECTIVE}, + {"INLINE", INLINE, RID_INLINE, RESERVED}, + {"synmode", SYNMODE, NORID, RESERVED}, + {"proc", PROC, NORID, RESERVED}, + {"LARGE", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"DELAY", DELAY, NORID, RESERVED}, + {"process", PROCESS, NORID, RESERVED}, + {"OPTIMIZE", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"varying", VARYING, NORID, RESERVED}, + {"dynamic", DYNAMIC, RID_DYNAMIC, RESERVED}, + {"ccitt_os", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"struct", STRUCT, NORID, RESERVED}, + {"grant", GRANT, NORID, RESERVED}, + {"empty_off", EMPTY_OFF, NORID, DIRECTIVE}, + {"PROCESS", PROCESS, NORID, RESERVED}, + {"RANGE_ON", RANGE_ON, NORID, DIRECTIVE}, + {"inout", PARAMATTR, RID_INOUT, RESERVED}, + {"array", ARRAY, NORID, RESERVED}, + {"region", REGION, NORID, RESERVED}, + {"TIMEOUT", TIMEOUT, NORID, RESERVED}, + {"recursive", RECURSIVE, NORID, RESERVED}, + {"event_code", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"NONREF", NONREF, NORID, RESERVED}, + {"SIMPLE", SIMPLE, NORID, RESERVED}, + {"SEIZE", SEIZE, NORID, RESERVED}, + {"RESULT", RESULT, NORID, RESERVED}, + {"multiple_data_segs", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"signal_code", SIGNAL_CODE, NORID, DIRECTIVE}, + {"RETURN", RETURN, NORID, RESERVED}, + {"CONTINUE", CONTINUE, NORID, RESERVED}, + {"SIGNAL_CODE", SIGNAL_CODE, NORID, DIRECTIVE}, + {"empty_on", EMPTY_ON, NORID, DIRECTIVE}, + {"nopack", NOPACK, NORID, RESERVED}, + {"RETURNS", RETURNS, NORID, RESERVED}, + {"CYCLE", CYCLE, NORID, RESERVED}, + {"SYNMODE", SYNMODE, NORID, RESERVED}, + {"exceptions", EXCEPTIONS, NORID, RESERVED}, + {"EVEN", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"PRINT_O_CODE", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"EVENT", EVENT, NORID, RESERVED}, + {"context", CONTEXT, NORID, RESERVED}, + {"RANGE_OFF", RANGE_OFF, NORID, DIRECTIVE}, + {"EVER", EVER, NORID, RESERVED}, + {"EMPTY_ON", EMPTY_ON, NORID, DIRECTIVE}, + {"MEDIUM", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"BUFFER", BUFFER, NORID, RESERVED}, + {"MODULE", MODULE, NORID, RESERVED}, + {"grant_file_size", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"ELSE", ELSE, NORID, RESERVED}, + {"process_type", PROCESS_TYPE_TOKEN, NORID, DIRECTIVE}, + {"priority", PRIORITY, NORID, RESERVED}, + {"buffer_code", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"return", RETURN, NORID, RESERVED}, + {"returns", RETURNS, NORID, RESERVED}, + {"all_static_off", ALL_STATIC_OFF, NORID, DIRECTIVE}, + {"POWERSET", POWERSET, NORID, RESERVED}, + {"EMPTY_OFF", EMPTY_OFF, NORID, DIRECTIVE}, + {"range_off", RANGE_OFF, NORID, DIRECTIVE}, + {"signal_max_length", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"PREFIXED", PREFIXED, NORID, RESERVED}, + {"NEWMODE", NEWMODE, NORID, RESERVED}, + {"EXCEPTIONS", EXCEPTIONS, NORID, RESERVED}, + {"REMOTE", REMOTE, NORID, RESERVED}, + {"SHORT_PRED_SUCC", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"all_static_on", ALL_STATIC_ON, NORID, DIRECTIVE}, + {"nonref", NONREF, NORID, RESERVED}, + {"SIGNAL_MAX_LENGTH", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"REENTRANT", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"range_on", RANGE_ON, NORID, DIRECTIVE}, + {"GENERAL", GENERAL, NORID, RESERVED}, + {"continue", CONTINUE, NORID, RESERVED}, + {"STATE_ROUTINE", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"EXTRA_CONST_SEG", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"use_seize_file_restricted", USE_SEIZE_FILE_RESTRICTED, NORID, DIRECTIVE}, + {"ONLY_FOR_TARGET", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"extra_const_seg", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"multiple_const_segs", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"RECURSIVE", RECURSIVE, NORID, RESERVED}, + {"DEBUG_SYMBOLS", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"DEBUG_TYPES", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"GRANT_FILE_SIZE", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"DEBUG_LINES", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"ONLY_FOR_SIMULATION", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"state_routine", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"generate_set_names", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"print_o_code", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"PROCESS_TYPE", PROCESS_TYPE_TOKEN, NORID, DIRECTIVE}, + {"short_pred_succ", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"reentrant", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"RECEIVE", RECEIVE, NORID, RESERVED}, + {"EVENT_CODE", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"optimize_runtime", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"SUPPORT_CAUSING_ADDRESS", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"print_symbol_table", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"REENTRANT_ALL", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"PRINT_SYMBOL_TABLE", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"BUFFER_CODE", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"generate_all_set_names", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"NO_OVERLAP_CHECK", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"no_overlap_check", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"reentrant_all", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"MULTIPLE_DATA_SEGS", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"OPTIMIZE_RUNTIME", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"only_for_target", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"MULTIPLE_CONST_SEGS", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"optimization_window", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"support_causing_address", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"USE_SEIZE_FILE", USE_SEIZE_FILE, NORID, DIRECTIVE}, + {"SEND_SIGNAL_DEFAULT_PRIORITY", SEND_SIGNAL_DEFAULT_PRIORITY, NORID, DIRECTIVE}, + {"make_publics_for_discrete_syns", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"only_for_simulation", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"send_signal_default_priority", SEND_SIGNAL_DEFAULT_PRIORITY, NORID, DIRECTIVE}, + {"send_buffer_default_priority", SEND_BUFFER_DEFAULT_PRIORITY, NORID, DIRECTIVE}, + {"GENERATE_SET_NAMES", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"MAKE_PUBLICS_FOR_DISCRETE_SYNS", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"SEND_BUFFER_DEFAULT_PRIORITY", SEND_BUFFER_DEFAULT_PRIORITY, NORID, DIRECTIVE}, + {"GENERATE_ALL_SET_NAMES", IGNORED_DIRECTIVE, NORID, DIRECTIVE}, + {"USE_SEIZE_FILE_RESTRICTED", USE_SEIZE_FILE_RESTRICTED, NORID, DIRECTIVE}, + }; + + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register int key = hash (str, len); + + if (key <= MAX_HASH_VALUE && key >= MIN_HASH_VALUE) + { + { + struct resword *resword; + + switch (key) + { + case 7: + resword = &wordlist[7]; break; + case 12: + resword = &wordlist[8]; break; + case 23: + resword = &wordlist[9]; break; + case 30: + resword = &wordlist[10]; break; + case 43: + resword = &wordlist[11]; break; + case 49: + resword = &wordlist[12]; break; + case 55: + resword = &wordlist[13]; break; + case 60: + resword = &wordlist[14]; + if (*str == *resword->name && !strcmp (str + 1, resword->name + 1)) return resword; + resword = &wordlist[15]; + if (*str == *resword->name && !strcmp (str + 1, resword->name + 1)) return resword; + return 0; + case 67: + resword = &wordlist[16]; break; + case 68: + resword = &wordlist[17]; break; + case 73: + resword = &wordlist[18]; break; + case 83: + resword = &wordlist[19]; break; + case 90: + resword = &wordlist[20]; + if (*str == *resword->name && !strcmp (str + 1, resword->name + 1)) return resword; + resword = &wordlist[21]; + if (*str == *resword->name && !strcmp (str + 1, resword->name + 1)) return resword; + return 0; + case 93: + resword = &wordlist[22]; break; + case 95: + resword = &wordlist[23]; + if (*str == *resword->name && !strcmp (str + 1, resword->name + 1)) return resword; + resword = &wordlist[24]; + if (*str == *resword->name && !strcmp (str + 1, resword->name + 1)) return resword; + return 0; + case 98: + resword = &wordlist[25]; break; + case 101: + resword = &wordlist[26]; break; + case 106: + resword = &wordlist[27]; break; + case 107: + resword = &wordlist[28]; break; + case 110: + resword = &wordlist[29]; break; + case 112: + resword = &wordlist[30]; break; + case 114: + resword = &wordlist[31]; break; + case 118: + resword = &wordlist[32]; break; + case 120: + resword = &wordlist[33]; break; + case 123: + resword = &wordlist[34]; break; + case 127: + resword = &wordlist[35]; break; + case 128: + resword = &wordlist[36]; break; + case 129: + resword = &wordlist[37]; break; + case 130: + resword = &wordlist[38]; break; + case 136: + resword = &wordlist[39]; break; + case 138: + resword = &wordlist[40]; break; + case 139: + resword = &wordlist[41]; break; + case 143: + resword = &wordlist[42]; break; + case 144: + resword = &wordlist[43]; break; + case 147: + resword = &wordlist[44]; break; + case 149: + resword = &wordlist[45]; break; + case 153: + resword = &wordlist[46]; break; + case 157: + resword = &wordlist[47]; break; + case 162: + resword = &wordlist[48]; break; + case 164: + resword = &wordlist[49]; break; + case 170: + resword = &wordlist[50]; break; + case 172: + resword = &wordlist[51]; break; + case 174: + resword = &wordlist[52]; break; + case 175: + resword = &wordlist[53]; break; + case 178: + resword = &wordlist[54]; break; + case 182: + resword = &wordlist[55]; break; + case 184: + resword = &wordlist[56]; break; + case 185: + resword = &wordlist[57]; break; + case 187: + resword = &wordlist[58]; break; + case 191: + resword = &wordlist[59]; break; + case 194: + resword = &wordlist[60]; break; + case 196: + resword = &wordlist[61]; break; + case 200: + resword = &wordlist[62]; break; + case 201: + resword = &wordlist[63]; break; + case 202: + resword = &wordlist[64]; break; + case 203: + resword = &wordlist[65]; break; + case 204: + resword = &wordlist[66]; break; + case 209: + resword = &wordlist[67]; break; + case 216: + resword = &wordlist[68]; break; + case 220: + resword = &wordlist[69]; break; + case 224: + resword = &wordlist[70]; break; + case 225: + resword = &wordlist[71]; break; + case 226: + resword = &wordlist[72]; + if (*str == *resword->name && !strcmp (str + 1, resword->name + 1)) return resword; + resword = &wordlist[73]; + if (*str == *resword->name && !strcmp (str + 1, resword->name + 1)) return resword; + return 0; + case 227: + resword = &wordlist[74]; + if (*str == *resword->name && !strcmp (str + 1, resword->name + 1)) return resword; + resword = &wordlist[75]; + if (*str == *resword->name && !strcmp (str + 1, resword->name + 1)) return resword; + return 0; + case 232: + resword = &wordlist[76]; break; + case 236: + resword = &wordlist[77]; break; + case 239: + resword = &wordlist[78]; break; + case 247: + resword = &wordlist[79]; break; + case 253: + resword = &wordlist[80]; break; + case 257: + resword = &wordlist[81]; break; + case 258: + resword = &wordlist[82]; break; + case 261: + resword = &wordlist[83]; break; + case 262: + resword = &wordlist[84]; break; + case 264: + resword = &wordlist[85]; break; + case 265: + resword = &wordlist[86]; break; + case 269: + resword = &wordlist[87]; break; + case 271: + resword = &wordlist[88]; break; + case 277: + resword = &wordlist[89]; break; + case 280: + resword = &wordlist[90]; break; + case 282: + resword = &wordlist[91]; break; + case 286: + resword = &wordlist[92]; break; + case 291: + resword = &wordlist[93]; break; + case 293: + resword = &wordlist[94]; break; + case 296: + resword = &wordlist[95]; break; + case 298: + resword = &wordlist[96]; break; + case 300: + resword = &wordlist[97]; break; + case 301: + resword = &wordlist[98]; break; + case 303: + resword = &wordlist[99]; break; + case 304: + resword = &wordlist[100]; break; + case 305: + resword = &wordlist[101]; break; + case 307: + resword = &wordlist[102]; break; + case 309: + resword = &wordlist[103]; break; + case 314: + resword = &wordlist[104]; break; + case 315: + resword = &wordlist[105]; break; + case 324: + resword = &wordlist[106]; break; + case 329: + resword = &wordlist[107]; break; + case 332: + resword = &wordlist[108]; break; + case 338: + resword = &wordlist[109]; break; + case 339: + resword = &wordlist[110]; break; + case 342: + resword = &wordlist[111]; break; + case 343: + resword = &wordlist[112]; break; + case 346: + resword = &wordlist[113]; break; + case 349: + resword = &wordlist[114]; break; + case 351: + resword = &wordlist[115]; break; + case 352: + resword = &wordlist[116]; break; + case 356: + resword = &wordlist[117]; break; + case 357: + resword = &wordlist[118]; break; + case 361: + resword = &wordlist[119]; break; + case 363: + resword = &wordlist[120]; break; + case 364: + resword = &wordlist[121]; break; + case 365: + resword = &wordlist[122]; break; + case 366: + resword = &wordlist[123]; break; + case 367: + resword = &wordlist[124]; break; + case 373: + resword = &wordlist[125]; break; + case 387: + resword = &wordlist[126]; break; + case 396: + resword = &wordlist[127]; break; + case 409: + resword = &wordlist[128]; break; + case 411: + resword = &wordlist[129]; break; + case 415: + resword = &wordlist[130]; break; + case 417: + resword = &wordlist[131]; break; + case 418: + resword = &wordlist[132]; break; + case 422: + resword = &wordlist[133]; break; + case 423: + resword = &wordlist[134]; break; + case 429: + resword = &wordlist[135]; break; + case 430: + resword = &wordlist[136]; break; + case 433: + resword = &wordlist[137]; break; + case 434: + resword = &wordlist[138]; break; + case 435: + resword = &wordlist[139]; break; + case 440: + resword = &wordlist[140]; break; + case 443: + resword = &wordlist[141]; break; + case 445: + resword = &wordlist[142]; break; + case 446: + resword = &wordlist[143]; break; + case 448: + resword = &wordlist[144]; break; + case 451: + resword = &wordlist[145]; + if (*str == *resword->name && !strcmp (str + 1, resword->name + 1)) return resword; + resword = &wordlist[146]; + if (*str == *resword->name && !strcmp (str + 1, resword->name + 1)) return resword; + return 0; + case 452: + resword = &wordlist[147]; break; + case 460: + resword = &wordlist[148]; break; + case 461: + resword = &wordlist[149]; break; + case 462: + resword = &wordlist[150]; break; + case 463: + resword = &wordlist[151]; break; + case 466: + resword = &wordlist[152]; break; + case 475: + resword = &wordlist[153]; break; + case 483: + resword = &wordlist[154]; break; + case 486: + resword = &wordlist[155]; break; + case 487: + resword = &wordlist[156]; break; + case 488: + resword = &wordlist[157]; break; + case 489: + resword = &wordlist[158]; break; + case 491: + resword = &wordlist[159]; break; + case 494: + resword = &wordlist[160]; break; + case 498: + resword = &wordlist[161]; break; + case 499: + resword = &wordlist[162]; break; + case 505: + resword = &wordlist[163]; break; + case 512: + resword = &wordlist[164]; break; + case 513: + resword = &wordlist[165]; break; + case 521: + resword = &wordlist[166]; break; + case 540: + resword = &wordlist[167]; break; + case 543: + resword = &wordlist[168]; break; + case 546: + resword = &wordlist[169]; break; + case 547: + resword = &wordlist[170]; break; + case 549: + resword = &wordlist[171]; break; + case 551: + resword = &wordlist[172]; break; + case 554: + resword = &wordlist[173]; break; + case 557: + resword = &wordlist[174]; break; + case 558: + resword = &wordlist[175]; break; + case 568: + resword = &wordlist[176]; break; + case 574: + resword = &wordlist[177]; break; + case 576: + resword = &wordlist[178]; break; + case 583: + resword = &wordlist[179]; break; + case 587: + resword = &wordlist[180]; break; + case 590: + resword = &wordlist[181]; break; + case 591: + resword = &wordlist[182]; break; + case 592: + resword = &wordlist[183]; break; + case 596: + resword = &wordlist[184]; break; + case 599: + resword = &wordlist[185]; break; + case 600: + resword = &wordlist[186]; break; + case 603: + resword = &wordlist[187]; break; + case 604: + resword = &wordlist[188]; break; + case 607: + resword = &wordlist[189]; break; + case 617: + resword = &wordlist[190]; break; + case 618: + resword = &wordlist[191]; break; + case 622: + resword = &wordlist[192]; break; + case 623: + resword = &wordlist[193]; break; + case 624: + resword = &wordlist[194]; break; + case 628: + resword = &wordlist[195]; break; + case 636: + resword = &wordlist[196]; break; + case 639: + resword = &wordlist[197]; break; + case 641: + resword = &wordlist[198]; break; + case 650: + resword = &wordlist[199]; break; + case 652: + resword = &wordlist[200]; break; + case 661: + resword = &wordlist[201]; break; + case 664: + resword = &wordlist[202]; break; + case 670: + resword = &wordlist[203]; break; + case 672: + resword = &wordlist[204]; break; + case 682: + resword = &wordlist[205]; break; + case 685: + resword = &wordlist[206]; break; + case 691: + resword = &wordlist[207]; break; + case 697: + resword = &wordlist[208]; break; + case 707: + resword = &wordlist[209]; break; + case 709: + resword = &wordlist[210]; break; + case 717: + resword = &wordlist[211]; break; + case 720: + resword = &wordlist[212]; break; + case 727: + resword = &wordlist[213]; break; + case 730: + resword = &wordlist[214]; break; + case 731: + resword = &wordlist[215]; break; + case 745: + resword = &wordlist[216]; break; + case 748: + resword = &wordlist[217]; break; + case 750: + resword = &wordlist[218]; break; + case 751: + resword = &wordlist[219]; break; + case 756: + resword = &wordlist[220]; break; + case 758: + resword = &wordlist[221]; break; + case 762: + resword = &wordlist[222]; break; + case 768: + resword = &wordlist[223]; break; + case 771: + resword = &wordlist[224]; break; + case 773: + resword = &wordlist[225]; break; + case 775: + resword = &wordlist[226]; break; + case 776: + resword = &wordlist[227]; break; + case 777: + resword = &wordlist[228]; break; + case 779: + resword = &wordlist[229]; break; + case 791: + resword = &wordlist[230]; break; + case 807: + resword = &wordlist[231]; break; + case 814: + resword = &wordlist[232]; break; + case 815: + resword = &wordlist[233]; break; + case 830: + resword = &wordlist[234]; break; + case 833: + resword = &wordlist[235]; break; + case 834: + resword = &wordlist[236]; break; + case 846: + resword = &wordlist[237]; break; + case 849: + resword = &wordlist[238]; break; + case 875: + resword = &wordlist[239]; break; + case 909: + resword = &wordlist[240]; break; + case 910: + resword = &wordlist[241]; break; + case 912: + resword = &wordlist[242]; break; + case 926: + resword = &wordlist[243]; break; + case 931: + resword = &wordlist[244]; break; + case 933: + resword = &wordlist[245]; break; + case 944: + resword = &wordlist[246]; break; + case 947: + resword = &wordlist[247]; break; + case 982: + resword = &wordlist[248]; break; + case 986: + resword = &wordlist[249]; break; + case 989: + resword = &wordlist[250]; break; + case 1004: + resword = &wordlist[251]; break; + case 1007: + resword = &wordlist[252]; break; + case 1018: + resword = &wordlist[253]; break; + case 1019: + resword = &wordlist[254]; break; + case 1023: + resword = &wordlist[255]; break; + case 1035: + resword = &wordlist[256]; break; + case 1036: + resword = &wordlist[257]; break; + case 1039: + resword = &wordlist[258]; break; + case 1068: + resword = &wordlist[259]; break; + case 1077: + resword = &wordlist[260]; break; + case 1082: + resword = &wordlist[261]; break; + case 1086: + resword = &wordlist[262]; break; + case 1104: + resword = &wordlist[263]; break; + case 1105: + resword = &wordlist[264]; break; + case 1109: + resword = &wordlist[265]; break; + case 1138: + resword = &wordlist[266]; break; + case 1152: + resword = &wordlist[267]; break; + case 1162: + resword = &wordlist[268]; break; + case 1165: + resword = &wordlist[269]; break; + case 1167: + resword = &wordlist[270]; break; + case 1168: + resword = &wordlist[271]; break; + case 1182: + resword = &wordlist[272]; break; + case 1194: + resword = &wordlist[273]; break; + case 1207: + resword = &wordlist[274]; break; + case 1216: + resword = &wordlist[275]; break; + case 1217: + resword = &wordlist[276]; break; + case 1227: + resword = &wordlist[277]; break; + case 1242: + resword = &wordlist[278]; break; + case 1271: + resword = &wordlist[279]; break; + case 1274: + resword = &wordlist[280]; break; + case 1283: + resword = &wordlist[281]; break; + case 1301: + resword = &wordlist[282]; break; + case 1302: + resword = &wordlist[283]; break; + case 1321: + resword = &wordlist[284]; break; + case 1324: + resword = &wordlist[285]; break; + case 1339: + resword = &wordlist[286]; break; + case 1342: + resword = &wordlist[287]; break; + case 1345: + resword = &wordlist[288]; break; + case 1372: + resword = &wordlist[289]; break; + case 1422: + resword = &wordlist[290]; break; + case 1448: + resword = &wordlist[291]; break; + case 1546: + resword = &wordlist[292]; break; + case 1606: + resword = &wordlist[293]; break; + case 1654: + resword = &wordlist[294]; break; + case 1765: + resword = &wordlist[295]; break; + case 1808: + resword = &wordlist[296]; break; + case 1875: + resword = &wordlist[297]; break; + case 1877: + resword = &wordlist[298]; break; + case 1936: + resword = &wordlist[299]; break; + case 1989: + resword = &wordlist[300]; break; + case 2153: + resword = &wordlist[301]; break; + case 2224: + resword = &wordlist[302]; break; + case 2383: + resword = &wordlist[303]; break; + case 2448: + resword = &wordlist[304]; break; + case 2491: + resword = &wordlist[305]; break; + case 2821: + resword = &wordlist[306]; break; + default: return 0; + } + if (*str == *resword->name && !strcmp (str + 1, resword->name + 1)) + return resword; + return 0; + } + } + } + return 0; +} diff --git a/gcc/ch/lang-options.h b/gcc/ch/lang-options.h new file mode 100644 index 00000000000..984892bf6de --- /dev/null +++ b/gcc/ch/lang-options.h @@ -0,0 +1,42 @@ +/* Definitions for switches for GNU CHILL. + Copyright (C) 1995, 1998 Free Software Foundation, Inc. + +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 +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +/* This is the contribution to the `lang_options' array in gcc.c for + CHILL. */ + +/* CYGNUS LOCAL - the format of this file has been changed to + allow cc1 to implement --help. nickc/--help */ + +DEFINE_LANG_NAME ("Chill") + + { "-lang-chill", "" }, + { "-flocal-loop-counter", "" }, + { "-fno-local-loop-counter", "Do not make seperate scopes for every 'for' loop"}, + { "-fgrant-only", "Stop after successfully generating a grant file" }, + { "-fchill-grant-only", "" }, + { "-fold-strings", "Implement the 1984 Chill string semantics" }, + { "-fno-old-strings", "" }, + { "-fignore-case", "convert all idenitifers to lower case" }, + { "-fno-ignore-case", "" }, + { "-fpack", "Pack structures into available space"}, + { "-fno-pack", "" }, + { "-fspecial_UC", "Make special words be in uppercase" }, + { "-fspecial_LC", "" }, + { "-fruntime-checking", "" }, + { "-fno-runtime-checking", "Disable runtime checking of parameters" }, diff --git a/gcc/ch/lex.h b/gcc/ch/lex.h new file mode 100644 index 00000000000..61c46b79a01 --- /dev/null +++ b/gcc/ch/lex.h @@ -0,0 +1,98 @@ +/* Define constants for communication with the CHILL parser. + Copyright (C) 1992, 93, 1994 Free Software Foundation, Inc. + +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 +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + + + +enum rid +{ + RID_UNUSED, /* keep this one first, please */ + RID_ALL, + RID_ASSERTFAIL, + RID_ASSOCIATION, + RID_BIN, + RID_BIT, + RID_BOOL, + RID_BOOLS, + RID_BYTE, + RID_CHAR, + RID_CHARS, + RID_DOUBLE, + RID_DURATION, + RID_DYNAMIC, + RID_ELSE, + RID_EMPTY, + RID_FALSE, + RID_FLOAT, + RID_GENERAL, + RID_IN, + RID_INLINE, + RID_INOUT, + RID_INSTANCE, + RID_INT, + RID_LOC, + RID_LONG, + RID_LONG_REAL, + RID_NULL, + RID_OUT, + RID_OVERFLOW, + RID_PTR, + RID_RANGE, + RID_RANGEFAIL, + RID_READ, + RID_REAL, + RID_RECURSIVE, + RID_SHORT, + RID_SIMPLE, + RID_TIME, + RID_TRUE, + RID_UBYTE, + RID_UINT, + RID_ULONG, + RID_UNSIGNED, + RID_USHORT, + RID_VOID, + RID_MAX /* Last element */ +}; + +#define NORID RID_UNUSED + +#define RID_FIRST_MODIFIER RID_UNSIGNED + +/* The elements of `ridpointers' are identifier nodes + for the reserved type names and storage classes. + It is indexed by a RID_... value. */ +extern tree ridpointers[(int) RID_MAX]; + +extern char *token_buffer; /* Pointer to token buffer. */ + +extern tree make_pointer_declarator PROTO((tree, tree)); +extern void reinit_parse_for_function PROTO((void)); +extern int yylex PROTO((void)); + +extern tree default_grant_file; +extern tree current_grant_file; + +extern tree current_seize_file; + +extern int chill_at_module_level; +extern tree chill_initializer_name; + +extern void finish_chill_seizes (); + +extern void prepare_paren_colon PROTO((void)); diff --git a/gcc/ch/runtime/cardps.c b/gcc/ch/runtime/cardps.c new file mode 100644 index 00000000000..261241d78c1 --- /dev/null +++ b/gcc/ch/runtime/cardps.c @@ -0,0 +1,99 @@ +/* Implement POWERSET runtime actions for CHILL. + Copyright (C) 1992,1993 Free Software Foundation, Inc. + Author: Wilfried Moser, et al + +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 +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#define __CHILL_LIB__ + +#include "config.h" +#include +#include "powerset.h" + + +/* + * function __cardpowerset + * + * parameters: + * ps powerset + * bitlength length of powerset + * + * returns: + * long number of set bits + * + * exceptions: + * none + * + * abstract: + * returns the number of set bit's in a powerset + * + */ + +/* bit_count[I] is number of '1' bits in I. */ +static +const unsigned char __four_bit_count[16] = { + 0, 1, 1, 2, + 1, 2, 2, 3, + 1, 2, 2, 3, + 2, 3, 3, 4 }; + +long +__cardpowerset (ps, bitlength) + SET_WORD *ps; + unsigned long bitlength; +{ + unsigned long count = 0; + if (bitlength <= SET_CHAR_SIZE) + { + register SET_CHAR c = *((SET_CHAR *)ps); + /* count 4 bits at a time. */ + while (c > 0) + { + count += __four_bit_count[c & 15]; + c >>= 4; + } + return count; + } + else if (bitlength <= SET_SHORT_SIZE) + { + register SET_SHORT c = *((SET_SHORT *)ps); + /* count 4 bits at a time. */ + while (c > 0) + { + count += __four_bit_count[c & 15]; + c >>= 4; + } + return count; + } + else + { + register SET_WORD *p = ps; + SET_WORD *endp = p + BITS_TO_WORDS(bitlength); + + while (p < endp) + { + register SET_WORD c = *p++; + /* count 4 bits at a time. */ + while (c > 0) + { + count += __four_bit_count[c & 15]; + c >>= 4; + } + } + return (count); + } +} diff --git a/gcc/ch/runtime/delaycase.c b/gcc/ch/runtime/delaycase.c new file mode 100644 index 00000000000..22db5343d67 --- /dev/null +++ b/gcc/ch/runtime/delaycase.c @@ -0,0 +1,220 @@ +/* Implement tasking-related runtime actions for CHILL. + Copyright (C) 1992,1993 Free Software Foundation, Inc. + Author: Wilfried Moser + +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 +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#include "rtltypes.h" +#include "rts.h" + +extern void __cause_ex1 (char *ex, char *file, int lineno); + +EXCEPTION (delayfail); +#define CAUSE_DELAYFAIL __cause_ex1 ("delayfail", filename, lineno) + +EXCEPTION (notyetimplemented); +#define CAUSE_NOTIMPLEMENTED __cause_ex1 ("notyetimplemeyed", filename, lineno) + +/* + * function __delay_event + * + * parameters: + * ev_got pointer to location where to write the event got. + * nevents number of events in list + * evptrs array of event descriptors + * priority specified priority + * insloc pointer to resulting instance location + * to timeout value + * filename filename of caller + * lineno linenumber of caller + * + * returns: + * int 0 .. success + * 1 .. timed out + * + * exceptions: + * delayfail + * + * abstract: + * implement the CHILL DELAY and DELAY CASE actions. + * + */ + +int +__delay_event (ev_got, nevents, evptrs, priority, to, insloc, filename, lineno) + void **ev_got; + int nevents; + Event_Descr *evptrs; + int priority; + void *to; + INSTANCE *insloc; + char *filename; + int lineno; +{ + int i, already_done = 0; + Event_Queue *start_list = 0; + Event_Queue **retval = 0; + Event_Queue *wrk; + int timed_out = 0; + + /* check if all specified event queues have enough space left + to perform the delay */ + for (i = 0; i < nevents; i++) + { + Event_Queue *e; + unsigned long cnt = 0; + int j, have_done = 0; + + if (evptrs[i].maxqueuelength == 0) + CAUSE_DELAYFAIL; + else if (evptrs[i].maxqueuelength == (unsigned long)-1L) + /* infinite length */ + continue; + + /* check if we already have processed this one, that means, this + event is mentioned more then once */ + for (j = 0; j < i; j++) + { + if (evptrs[i].ev == evptrs[j].ev) + { + have_done = 1; + break; + } + } + if (have_done) + continue; + + memcpy (&e, evptrs[i].ev, sizeof (Event_Queue *)); + while (e) + { + cnt++; + e = e->forward; + } + if (cnt >= evptrs[i].maxqueuelength) + CAUSE_DELAYFAIL; + } + + for (i = 0; i < nevents; i++) + { + /* queue that stuff on each event */ + Event_Queue *wrk; + Event_Queue *ev; + Event_Queue *prev_queue_entry = 0; + Event_Queue *prev_list_entry; + int j, have_done = 0; + + /* check for this event already processed */ + for (j = 0; j < i; j++) + { + if (evptrs[i].ev == evptrs[j].ev) + { + have_done = 1; + break; + } + } + if (have_done) + continue; + + memcpy (&ev, &evptrs[i].ev, sizeof (Event_Queue *)); + MALLOC (wrk, sizeof (Event_Queue)); + memset (wrk, 0, sizeof (Event_Queue)); + + wrk->priority = priority; + wrk->this = THIS; + wrk->listhead = evptrs[i].ev; + + /* search for the place to queue this entry in */ + while (ev->forward != 0 && ev->priority >= priority) + { + prev_queue_entry = ev; + ev = ev->forward; + } + + /* ready to put entry into queue */ + if (ev->forward == 0 || prev_queue_entry == 0) + { + /* beginning or end of the list */ + wrk->forward = ev->forward; + ev->forward = wrk; + } + else + { + /* this is somewhere in the middle */ + wrk->forward = prev_queue_entry->forward; + prev_queue_entry->forward = wrk; + } + + /* queue it into list */ + wrk->startlist = start_list; + if (! start_list) + { + /* we are the first in the list */ + start_list = wrk; + prev_list_entry = wrk; + wrk->startlist = start_list; + } + else + { + prev_list_entry->chain = wrk; + prev_list_entry = wrk; + } + } + + /* tell runtime system to delay that process */ + timed_out = __delay_this (wait_event_delay, to, filename, lineno); + if (timed_out) + { + /* we have to remove the entries from the queue's */ + wrk = start_list; + while (wrk) + { + Event_Queue *tmp = (Event_Queue *)wrk->listhead; + + while (tmp->forward != wrk) + tmp = tmp->forward; + tmp->forward = wrk->forward; + wrk = wrk->chain; + } + } + + wrk = start_list; + while (wrk) + { + Event_Queue *tmp; + + if (wrk->is_continued && ! already_done) + { + already_done = 1; + retval = wrk->listhead; + if (insloc && !timed_out) + { + insloc->ptype = wrk->who_continued.ptype; + insloc->pcopy = wrk->who_continued.pcopy; + } + } + tmp = wrk->chain; + FREE (wrk); + wrk = tmp; + } + if (!timed_out && ev_got) + *ev_got = (void *)retval; + return timed_out; +} + +/* force function print_event to be linked */ +extern void __print_event (); +static EntryPoint pev = __print_event; diff --git a/gcc/ch/runtime/eoln.c b/gcc/ch/runtime/eoln.c new file mode 100644 index 00000000000..60bb0f06481 --- /dev/null +++ b/gcc/ch/runtime/eoln.c @@ -0,0 +1,30 @@ +/* Implement Input/Output runtime actions for CHILL. + Copyright (C) 1992,1993 Free Software Foundation, Inc. + Author: Wilfried Moser, et al + +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 +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#include "fileio.h" + +Boolean +__eoln( Text_Mode* the_text, char* file, int line ) +{ + if( !the_text ) + CHILLEXCEPTION( file, line, EMPTY, NULL_TEXT ); + + return the_text->actual_index == the_text->access_sub->reclength - 2; +} diff --git a/gcc/ch/runtime/eqstr.c b/gcc/ch/runtime/eqstr.c new file mode 100644 index 00000000000..0b946654358 --- /dev/null +++ b/gcc/ch/runtime/eqstr.c @@ -0,0 +1,54 @@ +/* Implement string-related runtime actions for CHILL. + Copyright (C) 1992,1993 Free Software Foundation, Inc. + Author: Bill Cox + +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 +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +extern void cause_exception (char *exname, char *file, int lineno); + +/* + * function __eqstring + * + * parameters: + * S1 - pointer to left string + * LEN1 - length of left string + * S2 - pointer to right string + * LEN2 - length of right string + * + * returns: + * 1 if strings equal, 0 if not + * + * exceptions: + * none + * + * abstract: + * compares two character strings for equality + * + */ + +int +__eqstring (s1, len1, s2, len2) + char *s1; + int len1; + char *s2; + int len2; +{ + if (len1 != len2) + return 0; + + return ! memcmp (s1, s2, len1); +} diff --git a/gcc/ch/runtime/existing.c b/gcc/ch/runtime/existing.c new file mode 100644 index 00000000000..93d9eb543cd --- /dev/null +++ b/gcc/ch/runtime/existing.c @@ -0,0 +1,31 @@ +/* Implement Input/Output runtime actions for CHILL. + Copyright (C) 1992,1993 Free Software Foundation, Inc. + Author: Wilfried Moser, et al + +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 +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#include "fileio.h" + +Boolean +__existing( Association_Mode* the_assoc, char* file, int line ) +{ + if( !the_assoc ) + CHILLEXCEPTION( file, line, EMPTY, NULL_ASSOCIATION ); + if( !TEST_FLAG(the_assoc, IO_ISASSOCIATED) ) + CHILLEXCEPTION( file, line, NOTASSOCIATED, IS_NOT_ASSOCIATED ); + return TEST_FLAG(the_assoc, IO_EXISTING ) ? True : False; +} diff --git a/gcc/ch/runtime/format.c b/gcc/ch/runtime/format.c new file mode 100644 index 00000000000..b0d70af4460 --- /dev/null +++ b/gcc/ch/runtime/format.c @@ -0,0 +1,2186 @@ +/* Implement Input/Output runtime actions for CHILL. + Copyright (C) 1992,1993 Free Software Foundation, Inc. + Author: Wilfried Moser, et al + +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 +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#include +#include +#include +#include +#include +#include +#include +#if _TEXTIO_DEBUG_ +#include +#endif + +#include "bitstring.h" +#include "auxtypes.h" +#include "iomodes.h" +#include "format.h" +#include "fileio.h" +#include "ioerror.h" + +#define CH_BYTE_MIN 0xffffff80L +#define CH_BYTE_MAX 0x0000007fL +#define CH_UBYTE_MAX 0x000000ffUL +#define CH_INT_MIN 0xffff8000L +#define CH_INT_MAX 0x00007fffL +#define CH_UINT_MAX 0x0000ffffUL +#define CH_LONG_MIN 0x80000000L +#define CH_LONG_MAX 0x7fffffffL +#define CH_ULONG_MAX 0xffffffffUL + +#ifndef M_LN2 +#define M_LN2 0.69314718055994530942 +#endif +#ifndef M_LN10 +#define M_LN10 2.30258509299404568402 +#endif + +#define DMANTDIGS (1 + (int)(DBL_MANT_DIG * M_LN2 / M_LN10)) +#define FMANTDIGS (1 + (int)(FLT_MANT_DIG * M_LN2 / M_LN10)) + +/* float register length */ +#define MAXPREC 40 + +#define LET 0x0001 +#define BIN 0x0002 +#define DEC 0x0004 +#define OCT 0x0008 +#define HEX 0x0010 +#define USC 0x0020 +#define BIL 0x0040 +#define SPC 0x0080 +#define SCS 0x0100 +#define IOC 0x0200 +#define EDC 0x0400 +#define CVC 0x0800 + +#define isDEC(c) ( chartab[(c)] & DEC ) +#define isCVC(c) ( chartab[(c)] & CVC ) +#define isEDC(c) ( chartab[(c)] & EDC ) +#define isIOC(c) ( chartab[(c)] & IOC ) +#define isUSC(c) +#define isXXX(c,XXX) ( chartab[(c)] & XXX ) + +/* + * local definitions + */ + +static +short int chartab[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, SPC, SPC, SPC, SPC, SPC, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + + SPC, IOC, 0, 0, 0, 0, 0, 0, + SCS, SCS, SCS, SCS+IOC, SCS, SCS+IOC, SCS, SCS+IOC, + BIN+OCT+DEC+HEX, BIN+OCT+DEC+HEX, OCT+DEC+HEX, OCT+DEC+HEX, OCT+DEC+HEX, + OCT+DEC+HEX, OCT+DEC+HEX, OCT+DEC+HEX, + DEC+HEX, DEC+HEX, SCS, SCS, SCS+EDC, SCS+IOC, SCS+EDC, IOC, + + 0, LET+HEX+BIL, LET+HEX+BIL+CVC, LET+HEX+BIL+CVC, LET+HEX+BIL, LET+HEX, + LET+HEX+CVC, LET, + LET+BIL+CVC, LET, LET, LET, LET, LET, LET, LET+CVC, + + LET, LET, LET, LET, LET+EDC, LET, LET, LET, + LET+EDC, LET, LET, SCS, 0, SCS, 0, USC, + + 0, LET+HEX, LET+HEX, LET+HEX, LET+HEX, LET+HEX, LET+HEX, LET, + LET, LET, LET, LET, LET, LET, LET, LET, + + LET, LET, LET, LET, LET, LET, LET, LET, + LET, LET, LET, 0, 0, 0, 0, 0 +}; + +typedef enum { + FormatText, FirstPercent, RepFact, ConvClause, EditClause, ClauseEnd, + AfterWidth, FractWidth, FractWidthCont, ExpoWidth, ExpoWidthCont, + ClauseWidth, CatchPadding, LastPercent +} fcsstate_t; + +#define CONVERSIONCODES "CHOBF" +typedef enum { + DefaultConv, HexConv, OctalConv, BinaryConv, ScientConv +} convcode_t; + +static +short int base[4] = { 10, 16, 8, 2 }; + +static +short int dset[4] = { DEC, HEX, OCT, BIN }; + +#define EDITCODES "X<>T" +typedef enum { + SpaceSkip, SkipLeft, SkipRight, Tabulation +} editcode_t; + +#define IOCODES "/+-?!=" +typedef enum { + NextRecord, NextPage, CurrentLine, Prompt, Emit, EndPage +} iocode_t; + +typedef enum { + ConvAct, EditAct, IOAct +} acttype_t; + +typedef enum { + NormalEnd, EndAtParen, TextFailEnd +} formatexit_t; + +static +double ep_1[10] = { + 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9 }; +static +double ep_10[10] = { + 1e0, 1e10, 1e20, 1e30, 1e40, 1e50, 1e60, 1e70, 1e80, 1e90 }; +static +double ep_100 = 1e100; + +/* float register */ +static +unsigned char floatdig[MAXPREC]; + +/* + * global io variables + */ + +static Text_Mode* textptr = NULL; +static VarString* textrecptr; + +static int actual_index; +static int maximum_index; +static int iolist_index; + +static __tmp_IO_list* iolistptr; +static int iolistlen; +static char* iostrptr; +static int iostrlen; + + +static convcode_t convcode; +static editcode_t editcode; +static iocode_t iocode; +static unsigned long repetition; +static Boolean leftadjust; +static Boolean overflowev; +static Boolean dynamicwid; +static Boolean paddingdef; +static char paddingchar; +static Boolean fractiondef; +static unsigned long fractionwidth; +static Boolean exponentdef; +static unsigned long exponentwidth; +static unsigned long clausewidth; +static signed long textindex; + +static +__tmp_IO_enum_table_type bool_tab[] = + { { 0, "FALSE" }, + { 1, "TRUE" }, + { 0 , NULL } }; + +/* + * case insensitive compare: s1 is zero delimited, s2 has n chars + */ +static +int casncmp( const char* s1, const char* s2, int n ) +{ + int res = 0; + while( n-- ) + { + if( (res = toupper(*s1++) - toupper(*s2++)) ) + return res; + } + return *s1; +} + +/* + * skip spaces with blank equal to tab + */ +static +int skip_space( int limit ) +{ + int skipped = 0; + while( actual_index < limit && + (iostrptr[actual_index] == ' ' || iostrptr[actual_index] == '\t' ) ) + { + actual_index++; + skipped++; + } + return skipped; +} + +/* + * skip leading pad characters + */ +static +int skip_pad( int limit ) +{ + int skipped = 0; + while( actual_index < limit && iostrptr[actual_index] == paddingchar ) + { + actual_index++; + skipped++; + } +#if _TEXTIO_DEBUG_ + printf( "skipping '%c' until %d: %d\n", paddingchar, limit, skipped ); +#endif + return skipped; +} + +/* + * backup trailing pad characters + */ +static +int piks_pad( int start, int limit ) +{ + int skipped = 0; + while( start >/***=*/ limit && iostrptr[--start] == paddingchar ) + { + skipped++; + } +#if _TEXTIO_DEBUG_ + printf( "piksing '%c' from %d until %d: %d\n", + paddingchar, start, limit, skipped ); +#endif + return skipped; +} + +/* + * parse an integer + */ +static +int parse_int( int limit, int SET, int base, + unsigned long* valptr, int* signptr ) +{ + int parsed = actual_index; + Boolean digits = False; + unsigned long value = 0; + char curr; + int dig; + + if( actual_index >= limit ) + IOEXCEPTION( TEXTFAIL, NO_CHARS_FOR_INT ); + *signptr = +1; + if( iostrptr[actual_index] == '+' ) + actual_index++; + else + if( iostrptr[actual_index] == '-' ) + { *signptr = -1; + actual_index++; + } + + for( ; actual_index < limit; actual_index++ ) + { + curr = iostrptr[actual_index]; + if( curr == '_' ) continue; + if( isXXX(curr,SET) ) + { + digits = True; + dig = curr <= '9' ? curr - '0' : toupper(curr) - 'A' + 10; + if( value > (ULONG_MAX - dig)/base ) + IOEXCEPTION( TEXTFAIL, INT_VAL_OVERFLOW ); + value = value*base + dig; + continue; + } + break; + } + if( !digits ) + IOEXCEPTION( TEXTFAIL, NO_DIGITS_FOR_INT ); + + *valptr = value; +#if _TEXTIO_DEBUG_ + printf( "parsing for int until %d, base %d: %u\n", limit, base, value ); +#endif + return actual_index - parsed; +} + +static +double +make_float( int dexp, int sign ) +{ + double value = atof( floatdig ); +#if _TEXTIO_DEBUG_ + printf( " value = %25.20e, dexp = %d\n", value, dexp ); +#endif + while( dexp >= 100 ) + value *= ep_100, dexp -= 100; + if( dexp >= 10 ) + value *= ep_10[dexp/10], dexp %= 10; + if( dexp > 0 ) + value *= ep_1[dexp]; + + while( dexp <= -100 ) + value /= ep_100, dexp += 100; + if( dexp <= -10 ) + value /= ep_10[-dexp/10], dexp %= 10; + if( dexp < 0 ) + value /= ep_1[-dexp]; + + return sign ? -value : value; +} + +/* %C -> fixed point [+|-]+[.*] */ +static +int parse_fixedpoint( int limit, double* valptr ) +{ + int parsed = actual_index; + Boolean digits = False; + int sdig = 0; + double value; + char curr; + int sign = False; + int expo = 0; + + if( actual_index >= limit ) + IOEXCEPTION( TEXTFAIL, NO_CHARS_FOR_FLOAT ); + if( iostrptr[actual_index] == '+' ) + actual_index++; + else + if( iostrptr[actual_index] == '-' ) + { + sign = True; + actual_index++; + } + + floatdig[0] = '.'; + for( ; actual_index < limit; actual_index++ ) + { + curr = iostrptr[actual_index]; + if( ! isDEC(curr) ) + break; + digits = True; + if( sdig < MAXPREC - 1 ) + { + if( sdig || curr != '0' ) + { + floatdig[++sdig] = curr; + expo++; + } + } + else + if( sdig ) + expo++; + } + if( digits && curr == '.' ) + { + actual_index++; + for( ; actual_index < limit; actual_index++ ) + { + curr = iostrptr[actual_index]; + if( !isDEC(curr) ) + break; + if( sdig < MAXPREC - 1 ) + { + if( sdig || curr != '0' ) + floatdig[++sdig] = curr; + else + expo--; + } + } + } + floatdig[++sdig] = '\0'; + + if( !digits ) + IOEXCEPTION( TEXTFAIL, NO_DIGITS_FOR_FLOAT ); + + *valptr = make_float( expo, sign); + return actual_index - parsed; +} + + +typedef enum { + s_sign, s_dig, s_period, s_fraca, s_fracb, s_expo, s_exposign, + s_expoa, s_expob } +scient_t; + +/* %C -> scientific [+|-][.*]E[=|-]+ */ +static +int parse_scientific( int limit, double* valptr, double dmin, double dmax ) +{ + int parsed = actual_index; + int sdig = 0; + char curr; + double value; + int sign = False; + int expo = 0; + int expo_sign = +1; + + scient_t state = s_sign; + + if( actual_index >= limit ) + IOEXCEPTION( TEXTFAIL, NO_CHARS_FOR_FLOAT ); + + floatdig[0] = '.'; + for( ; actual_index < limit; actual_index++ ) + { + curr = iostrptr[actual_index]; + switch( state ) + { + case s_sign: + if( iostrptr[actual_index] == '+' ) + { + state = s_dig; + break; + } + if( iostrptr[actual_index] == '-' ) + { + sign = True; + state = s_dig; + break; + } + /* fall through - no break */ + case s_dig: + if( isDEC(curr) && curr > '0' ) + { + floatdig[++sdig] = curr; + state = s_period; + break; + } + IOEXCEPTION( TEXTFAIL, NO_DIGITS_FOR_FLOAT ); + case s_period: + if( curr == '.' ) + { + state = s_fraca; + break; + } + if( curr == 'E' ) + { + state = s_exposign; + break; + } + IOEXCEPTION( TEXTFAIL, NO_EXPONENT ); + case s_fraca: + if( isDEC(curr) ) + { + floatdig[++sdig] = curr; + state = s_fracb; + break; + } + IOEXCEPTION( TEXTFAIL, NO_DIGITS_FOR_FLOAT ); + case s_fracb: + if( isDEC(curr) ) + { + if( sdig < MAXPREC - 1 ) + floatdig[++sdig] = curr; + break; + } + if( curr == 'E' ) + { + state = s_exposign; + break; + } + IOEXCEPTION( TEXTFAIL, NO_EXPONENT ); + case s_exposign: + if( iostrptr[actual_index] == '+' ) + { + state = s_expoa; + break; + } + if( iostrptr[actual_index] == '-' ) + { + expo_sign = -1; + state = s_expoa; + break; + } + case s_expoa: + if( isDEC(curr) ) + { + expo = curr - '0'; + state = s_expob; + break; + } + IOEXCEPTION( TEXTFAIL, NO_EXPONENT ); + case s_expob: + expo = expo*10 + (curr - '0'); + if( expo > 1000 ) + IOEXCEPTION( TEXTFAIL, REAL_OVERFLOW ); + } + } + if( state != s_expob ) + IOEXCEPTION( TEXTFAIL, NO_EXPONENT ); + + expo *= expo_sign; + expo++; + + floatdig[++sdig] = '\0'; + + *valptr = make_float( expo, sign ); + return actual_index - parsed; +} + + +static +int parse_set( int limit, __tmp_IO_enum_table_type* tabptr, + unsigned long* valptr ) +{ + int parsed = actual_index; + char curr; + __tmp_IO_enum_table_type* etptr; + + if( actual_index >= limit ) + IOEXCEPTION( TEXTFAIL, NO_CHARS_FOR_SET ); + + curr = iostrptr[actual_index]; + if( isXXX(curr,LET+USC) ) + actual_index++; + else + IOEXCEPTION( TEXTFAIL, NO_CHARS_FOR_SET ); + + for( ; actual_index < limit; actual_index++ ) + { + if( ! isXXX(iostrptr[actual_index],LET+DEC+USC) ) + break; + } + + if( tabptr ) + while( tabptr->name ) + { + if( !casncmp( tabptr->name, &iostrptr[parsed], actual_index-parsed ) ) + { + *valptr = tabptr->value; +#if _TEXTIO_DEBUG_ + printf( "parsing set value until %d: %u\n", limit, tabptr->value ); +#endif + return actual_index - parsed; + } + tabptr++; + } + IOEXCEPTION( TEXTFAIL, SET_CONVERSION_ERROR ); +} + +static +int parse_bit( int limit, char* bitptr ) +{ + int parsed = actual_index; + int i = 0; + char curr; + + if( actual_index >= limit ) + IOEXCEPTION( TEXTFAIL, NO_CHARS_FOR_BOOLS ); + + for( ; actual_index < limit; actual_index++ ) + { + curr = iostrptr[actual_index] - '0'; + if( curr == 0 || curr == 1 ) + /* __setbitinset( i++, bitptr, limit, curr ); */ + __setbitpowerset (bitptr, limit, 0, i++, curr, __FILE__, __LINE__); + else + break; + } + return actual_index - parsed; +} + +static +char* myultoa( unsigned long ul, char* buf, int base ) +{ + char* res = buf; + unsigned long h = ul/base; + unsigned long q = 1; + + while( h >= q ) q *= base; + while( q > 0 ) + { + *buf++ = "0123456789ABCDEF"[ul/q]; + ul %= q; + q /= base; + } + *buf++ = '\0'; + return res; +} + +/* + * convert a bit string from src, bit offset up to len + */ +static +char* bitput( char* dst, char* src, int offset, int len ) +{ + char* res = dst; + int i; + for( i = offset; i < len; i++ ) + { + *dst++ = __inpowerset( i, src, len, 0 ) ? '1' : '0'; + } + return res; +} + +/* + * dround: round decimal register *digptr starting at digit mdigs, + * on carry advance begin of digit sequence and bump exponent + */ +static +char* +dround( char* digptr, int mdigs, int* deptr ) +{ + int carry; +#if _TEXTIO_DEBUG_ + printf( "Rounding from %d\n", mdigs ); +#endif + if( digptr[mdigs] >= 5 ) + { + carry = 1; + while( carry ) + { + digptr[--mdigs]++; + if( digptr[mdigs] >= 10 ) + digptr[mdigs] = 0; + else + carry = 0; + } + } + if( mdigs < 0 ) + { + digptr[--mdigs] = 1; + (*deptr)++; + return digptr - 1; + } + else + return digptr; +} + +/* + * mydtoa: convert val with a precision of mantdigs to a decimal fraction + * first digit is at **fstdiptr, decimal exponent is at *deptr + */ +static +char* +mydtoa( double val, int mantdigs, int* deptr, int* sgnptr ) +{ + double m; + int be; + int de = -1; + int fstdig = 0; + int idig; + char* digptr = floatdig+2; + + floatdig[0] = floatdig[1] = 0; + + if( val < 0 ) + *sgnptr = -1, val = fabs( val ); + else + *sgnptr = +1; + + /* split the value */ + m = frexp( val, &be ) * 10.0; + + /* 5.0 <= m < 10.0 */ + while( be > 0 ) + { + de++; be--; m /= 5.0; + if( m < 1.0 ) + m *= 10.0, de--; + } + while( be < 0 ) + { + de--; be++; m *= 5.0; + if( m >= 10.0 ) + m /= 10.0, de++; + } + + for( idig = 0; idig < mantdigs; idig++ ) + { + digptr[idig] = (int)m; + m = (m - digptr[idig])*10.0; + } + digptr[idig] = (int)m; + + *deptr = de; + return dround( digptr, mantdigs, deptr ); +} + +#define PUT(c) \ + { if( ifst <= ++iprt && iprt <= ilst ) *dst++ = c; } + +static +char* +fixput( char* dst, char* src, + int ifst, int ilst, + int sign, int fst, int lst, + int nid, int nfd ) +{ + char* dstsav = dst; + int idig; + int iprt = 0; + + if( sign < 0 ) + PUT( '-' ); + for( idig = nid; idig >= -nfd; idig-- ) + { + if (idig == -1) + PUT( '.' ); + PUT( idig > fst || lst >= idig ? '0': '0' + *src++ ); + } + return dstsav; +} + +static +char* +sciput( char* dst, char* src, char* expbeg, + int ifst, int ilst, + int sign, int de, int expwid ) +{ + char* dstsav = dst; + int iprt = 0; + int nfd = fractionwidth; + int explen = strlen( expbeg ); + + if( sign < 0 ) + PUT( '-' ); + PUT( '0' + *src++ ); + PUT( '.' ); + + while( nfd-- ) + PUT( '0' + *src++ ); + PUT( 'E' ); + PUT( de >= 0 ? '+' : '-' ); + while( expwid > explen ) + { + PUT( '0' ); + expwid--; + } + while( explen-- ) + PUT( *expbeg++ ); + return dstsav; +} + +/* + * handle dynamic field width + */ +static +get_field_width( void ) +{ + unsigned long width; + unsigned long ulongval; + long longval; + __tmp_IO_list io; + + + if( ++iolist_index > iolistlen ) + IOEXCEPTION( TEXTFAIL, IOLIST_EXHAUSTED ); + + io = *iolistptr++; + + /* must be integer, >= 0 */ + switch( io.__descr ) + { + case __IO_ByteVal: + longval = io.__t.__valbyte; + goto signed_fieldwidth; + case __IO_UByteVal: + width = io.__t.__valubyte; + goto unsigned_fieldwidth; + case __IO_IntVal: + longval = io.__t.__valint; + goto signed_fieldwidth; + case __IO_UIntVal: + width = io.__t.__valuint; + goto unsigned_fieldwidth; + case __IO_LongVal: + longval = io.__t.__vallong; + goto signed_fieldwidth; + case __IO_ULongVal: + width = io.__t.__valulong; + goto unsigned_fieldwidth; + case __IO_ByteLoc: + longval = *(signed char*)io.__t.__locint; + goto signed_fieldwidth; + case __IO_UByteLoc: + width = *(unsigned char*)io.__t.__locint; + goto unsigned_fieldwidth; + case __IO_IntLoc: + longval = *(signed short*)io.__t.__locint; + goto signed_fieldwidth; + case __IO_UIntLoc: + width = *(unsigned short*)io.__t.__locint; + goto unsigned_fieldwidth; + case __IO_LongLoc: + longval = *(signed long*) io.__t.__locint; + goto signed_fieldwidth; + case __IO_ULongLoc: + width = *(unsigned long*)io.__t.__locint; + goto unsigned_fieldwidth; + default: + IOEXCEPTION( TEXTFAIL, NON_INT_FIELD_WIDTH ); + } + +signed_fieldwidth: ; + if( longval < 0 ) + IOEXCEPTION( TEXTFAIL, NEGATIVE_FIELD_WIDTH ); + width = longval; + +unsigned_fieldwidth: ; + return width; +} + + +static +void inpconv( void ) +{ + __tmp_IO_list io; + int width; + int limit; + int skiplim; + int skipped; + int bypass; + int parsed; + Boolean fixedchars; + int fixedlen; + unsigned char curr; + double dval; + float fval; + + __tmp_IO_long lval; + int sign; + unsigned long umin; + unsigned long umax; + signed long smin; + signed long smax; + int ilen; + short unsigned slen; + __tmp_IO_enum_table_type* settabptr; + + while( repetition-- ) + { + if( ++iolist_index > iolistlen ) + IOEXCEPTION( TEXTFAIL, IOLIST_EXHAUSTED ); + + io = *iolistptr++; + + if( dynamicwid ) + width = get_field_width(); + else + width = clausewidth; + + bypass = skipped = 0; + if( width ) + { + if( actual_index + width > iostrlen ) + IOEXCEPTION( TEXTFAIL, NOT_ENOUGH_CHARS ); + + switch(io.__descr) + { + case __IO_CharLoc: + case __IO_CharRangeLoc: + fixedchars = True; + fixedlen = 1; + break; + case __IO_CharStrLoc: + fixedchars = True; + fixedlen = io.__t.__loccharstring.string_length; + break; + default: + fixedchars = False; + break; + } + + if( leftadjust ) + { + skiplim = fixedchars ? actual_index + fixedlen + : actual_index; + bypass = skipped = piks_pad( actual_index + width, skiplim ); + } + else + { + skiplim = fixedchars ? actual_index + width - fixedlen + : actual_index + width; + skipped = skip_pad( skiplim ); + } + width -= skipped; + limit = actual_index + width; + } + else + { /* free format */ + if( paddingdef || !( io.__descr == __IO_CharLoc || + io.__descr == __IO_CharRangeLoc || + io.__descr == __IO_CharStrLoc || + io.__descr == __IO_CharVaryingLoc ) ) + if( paddingchar == ' ' || paddingchar == '\t' ) + skip_space( iostrlen ); + else + skip_pad( iostrlen ); + limit = iostrlen; + } + + switch( io.__descr ) + { + case __IO_ByteLoc: + ilen = 1; + smin = CH_BYTE_MIN; + smax = CH_BYTE_MAX; + goto parse_signed_int; + case __IO_UByteLoc: + ilen = 1; + umin = 0; + umax = CH_UBYTE_MAX; + goto parse_unsigned_int; + case __IO_IntLoc: + ilen = 2; + smin = CH_INT_MIN; + smax = CH_INT_MAX; + goto parse_signed_int; + case __IO_UIntLoc: + ilen = 2; + umin = 0; + umax = CH_UINT_MAX; + goto parse_unsigned_int; + case __IO_LongLoc: + ilen = 4; + smin = CH_LONG_MIN; + smax = CH_LONG_MAX; + goto parse_signed_int; + case __IO_ULongLoc: + ilen = 4; + umin = 0; + umax = CH_ULONG_MAX; + goto parse_unsigned_int; + + case __IO_ByteRangeLoc: + ilen = 1; + smin = io.__t.__locintrange.lower.slong; + smax = io.__t.__locintrange.upper.slong; + goto parse_signed_int; + case __IO_UByteRangeLoc: + ilen = 1; + umin = io.__t.__locintrange.lower.ulong; + umax = io.__t.__locintrange.upper.ulong; + goto parse_unsigned_int; + case __IO_IntRangeLoc: + ilen = 2; + smin = io.__t.__locintrange.lower.slong; + smax = io.__t.__locintrange.upper.slong; + goto parse_signed_int; + case __IO_UIntRangeLoc: + ilen = 2; + umin = io.__t.__locintrange.lower.ulong; + umax = io.__t.__locintrange.upper.ulong; + goto parse_unsigned_int; + case __IO_LongRangeLoc: + ilen = 4; + smin = io.__t.__locintrange.lower.slong; + smax = io.__t.__locintrange.upper.slong; + goto parse_signed_int; + case __IO_ULongRangeLoc: + ilen = 4; + umin = io.__t.__locintrange.lower.ulong; + umax = io.__t.__locintrange.upper.ulong; + goto parse_unsigned_int; + + case __IO_BoolLoc: + ilen = 1; + umin = 0; + umax = 1; + settabptr = bool_tab; + goto parse_set; + case __IO_BoolRangeLoc: + ilen = 1; + umin = io.__t.__locboolrange.lower; + umax = io.__t.__locboolrange.upper; + settabptr = bool_tab; + goto parse_set; + + case __IO_SetLoc: + ilen = io.__t.__locsetrange.length; + settabptr = io.__t.__locsetrange.name_table; + umin = 0; + umax = CH_ULONG_MAX; + goto parse_set; + case __IO_SetRangeLoc: + ilen = io.__t.__locsetrange.length; + settabptr = io.__t.__locsetrange.name_table; + umin = io.__t.__locsetrange.lower; + umax = io.__t.__locsetrange.upper; + goto parse_set; + + case __IO_CharLoc: + umin = 0; + umax = 0xff; + goto parse_char; + case __IO_CharRangeLoc: + umin = io.__t.__loccharrange.lower; + umax = io.__t.__loccharrange.upper; + goto parse_char; + + case __IO_CharVaryingLoc: + if( convcode != DefaultConv ) + IOEXCEPTION( TEXTFAIL, CONVCODE_MODE_MISFIT ); + slen = io.__t.__loccharstring.string_length; + if( (parsed = limit - actual_index) < slen ) + slen = parsed; + else + parsed = slen; + memcpy( io.__t.__loccharstring.string + 2, + &iostrptr[actual_index], parsed ); + MOV2(io.__t.__loccharstring.string,&slen); + actual_index += parsed; + goto check_field_complete; + + + case __IO_CharStrLoc: + if( convcode != DefaultConv ) + IOEXCEPTION( TEXTFAIL, CONVCODE_MODE_MISFIT ); + if( actual_index + io.__t.__loccharstring.string_length > limit ) + IOEXCEPTION( TEXTFAIL, NO_CHARS_FOR_CHARS ); + memcpy( io.__t.__loccharstring.string, + &iostrptr[actual_index], + parsed = io.__t.__loccharstring.string_length ); + actual_index += parsed; + goto check_field_complete; + + case __IO_BitStrLoc: + if( convcode != DefaultConv ) + IOEXCEPTION( TEXTFAIL, CONVCODE_MODE_MISFIT ); + parsed = parse_bit( limit, io.__t.__loccharstring.string ); + if( parsed < io.__t.__loccharstring.string_length ) + IOEXCEPTION( TEXTFAIL, NO_CHARS_FOR_BOOLS ); + goto check_field_complete; + + case __IO_LongRealLoc: + case __IO_RealLoc: + switch( convcode ) + { + case ScientConv: + parse_scientific( limit, &dval, DBL_MIN, DBL_MAX ); + break; + case DefaultConv: + parse_fixedpoint( limit, &dval ); + break; + default: + IOEXCEPTION( TEXTFAIL, CONVCODE_MODE_MISFIT ); + } + if( io.__descr == __IO_LongRealLoc ) + memcpy( io.__t.__loclongreal, &dval, sizeof(double) ); + else + { + fval = (float)dval; + MOV4(io.__t.__locreal,&fval); + } + goto check_field_complete; + default: + IOEXCEPTION( TEXTFAIL, INVALID_IO_LIST ); + } + + +parse_signed_int: ; + if( convcode == ScientConv ) + IOEXCEPTION( TEXTFAIL, CONVCODE_MODE_MISFIT ); + parsed = parse_int( limit, dset[convcode], base[convcode], + &lval.ulong, &sign ); + if( sign < 0 ) + { + if( lval.ulong > (unsigned long)CH_LONG_MIN ) + IOEXCEPTION( TEXTFAIL, INTEGER_RANGE_ERROR ); + lval.slong = -lval.ulong; + } + else + { + /* not needed: lval.slong = lval.ulong; */ + /* Hack: sign extension for bin/oct/dec if no sign present */ + if( convcode != DefaultConv && lval.ulong & (1 << (ilen*8-1)) ) + { + if( ilen < 4 ) + lval.ulong |= 0xFFFFFFFF << ilen*8; + } + else + if( lval.ulong > (unsigned long)CH_LONG_MAX ) + IOEXCEPTION( TEXTFAIL, INTEGER_RANGE_ERROR ); + } + if( lval.slong < smin || smax < lval.slong ) + IOEXCEPTION( TEXTFAIL, INTEGER_RANGE_ERROR ); + goto store_int; + +parse_unsigned_int: ; + if( convcode == ScientConv ) + IOEXCEPTION( TEXTFAIL, CONVCODE_MODE_MISFIT ); + parsed = parse_int( limit, dset[convcode], base[convcode], + &lval.ulong, &sign ); + if( sign < 0 || lval.ulong < umin || umax < lval.ulong ) + IOEXCEPTION( TEXTFAIL, INTEGER_RANGE_ERROR ); + goto store_int; + +parse_set: ; + if( convcode != DefaultConv ) + IOEXCEPTION( TEXTFAIL, CONVCODE_MODE_MISFIT ); + parsed = parse_set( limit, settabptr, &lval.ulong ); + if( lval.ulong < umin || umax < lval.ulong ) + IOEXCEPTION( TEXTFAIL, SET_RANGE_ERROR ); + goto store_int; + +store_int: ; + switch( ilen ) + { + case 1: + *(unsigned char*)io.__t.__locint = lval.ulong; + break; + case 2: + slen = lval.ulong; + MOV2(io.__t.__locint,&slen); + break; + case 4: + MOV4(io.__t.__locint,&lval.ulong); + break; + default: + IOEXCEPTION( TEXTFAIL, INTERNAL_ERROR ); + } + goto check_field_complete; + +parse_char: ; + if( convcode != DefaultConv ) + IOEXCEPTION( TEXTFAIL, CONVCODE_MODE_MISFIT ); + if( actual_index >= limit ) + IOEXCEPTION( TEXTFAIL, NO_CHARS_FOR_CHARS ); + curr = iostrptr[actual_index++]; + parsed = 1; + if( curr < umin || umax < curr ) + IOEXCEPTION( TEXTFAIL, CHAR_RANGE_ERROR ); + *io.__t.__locchar = curr; + goto check_field_complete; + +check_field_complete: ; + actual_index += bypass; + if( width > parsed ) + IOEXCEPTION( TEXTFAIL, INVALID_CHAR ); + } +} + +static +void inpedit( void ) +{ + int nchars; + + if( dynamicwid ) + clausewidth = get_field_width(); + + switch( editcode ) + { + case SpaceSkip: + nchars = repetition*clausewidth; + if( actual_index + nchars > iostrlen ) + IOEXCEPTION( TEXTFAIL, NO_CHARS_FOR_EDIT ); + for( ; nchars ; nchars-- ) + if( iostrptr[actual_index++] != ' ' ) + IOEXCEPTION( TEXTFAIL, NO_SPACE_TO_SKIP ); + break; + + case SkipLeft: + nchars = repetition*clausewidth; + if( (actual_index -= nchars) < 0 ) + IOEXCEPTION( TEXTFAIL, NO_CHARS_FOR_EDIT ); + break; + + case SkipRight: + nchars = repetition*clausewidth; + if( (actual_index += nchars) > iostrlen ) + IOEXCEPTION( TEXTFAIL, NO_CHARS_FOR_EDIT ); + break; + + case Tabulation: + if( (actual_index = clausewidth) > iostrlen ) + IOEXCEPTION( TEXTFAIL, TEXT_LOC_OVERFLOW ); + break; + } +} + +static +void outconv( void ) +{ + unsigned long width; + char itembuf[33]; + unsigned long ulongval; + long longval; + __tmp_IO_list io; + __tmp_IO_enum_table_type* etptr; + char* itembeg; + unsigned long itemlen; + double doubleval; + int de; + int sign; + int mantdigs; + int nid; + int nfd; + char* expbeg; + int explen; + unsigned int expwid; + + while( repetition-- ) + { + if( ++iolist_index > iolistlen ) + IOEXCEPTION( TEXTFAIL, IOLIST_EXHAUSTED ); + + io = *iolistptr++; + width = dynamicwid ? get_field_width() : clausewidth; + + switch( convcode ) + { + case DefaultConv: + switch( io.__descr ) + { + case __IO_ByteVal: + longval = io.__t.__valbyte; + goto signed_conversion; + case __IO_UByteVal: + ulongval = io.__t.__valubyte; + goto unsigned_conversion; + case __IO_IntVal: + longval = io.__t.__valint; + goto signed_conversion; + case __IO_UIntVal: + ulongval = io.__t.__valuint; + goto unsigned_conversion; + case __IO_LongVal: + longval = io.__t.__vallong; + goto signed_conversion; + case __IO_ULongVal: + ulongval = io.__t.__valulong; + goto unsigned_conversion; + + case __IO_BoolVal: + switch( io.__t.__valbool ) + { + case 0: + itembeg = "FALSE"; + itemlen = 5; + goto move_item; + case 1: + itembeg = "TRUE"; + itemlen = 4; + goto move_item; + default: + IOEXCEPTION( TEXTFAIL, BOOL_CONVERSION_ERROR ); + } + + case __IO_CharVal: + itembeg = &io.__t.__valchar; + itemlen = 1; + goto move_item; + + case __IO_SetVal: + /* locate name string using set mode name table */ + itembeg = 0; + + if( (etptr = io.__t.__valset.name_table) ) + while( etptr->name ) + { + if( etptr->value == io.__t.__valset.value ) + { + itembeg = etptr->name; + itemlen = strlen( itembeg ); + goto move_item; + } + etptr++; + } + IOEXCEPTION( TEXTFAIL, SET_CONVERSION_ERROR ); + + case __IO_CharVaryingLoc: + { + unsigned short l; + itembeg = (char*)io.__t.__loccharstring.string; + MOV2(&l,itembeg); + itembeg += 2; + itemlen = l; + goto move_item; + } + + case __IO_CharStrLoc: + itembeg = io.__t.__loccharstring.string; + itemlen = io.__t.__loccharstring.string_length; + goto move_item; + + case __IO_BitStrLoc: + itemlen = io.__t.__loccharstring.string_length; + itembeg = io.__t.__loccharstring.string; + + if( !width ) + width = itemlen; + + /* check remaining space */ + if( actual_index + width > iostrlen ) + IOEXCEPTION( TEXTFAIL, TEXT_LOC_OVERFLOW ); + + if( itemlen == width ) + bitput( iostrptr + actual_index, itembeg, 0, itemlen ); + else + if( itemlen < width ) + if( leftadjust ) + memset( bitput( iostrptr + actual_index, itembeg, 0, itemlen ) + + itemlen, + paddingchar, width - itemlen ); + else + bitput( memset( iostrptr + actual_index, + paddingchar, width - itemlen ) + + width - itemlen, + itembeg, itemlen - width, itemlen ); + else + if( overflowev ) + memset( iostrptr + actual_index, '*', width ); + else + if( leftadjust ) + bitput( iostrptr + actual_index, itembeg, 0, width ); + else + bitput( iostrptr + actual_index, itembeg, + itemlen - width, itemlen ); + goto adjust_index; + + case __IO_RealVal: + doubleval = io.__t.__valreal; + mantdigs = FMANTDIGS; + goto fixed_point_conversion; + case __IO_LongRealVal: + doubleval = io.__t.__vallongreal; + mantdigs = DBL_DIG; + goto fixed_point_conversion; + break; + + default: + IOEXCEPTION( TEXTFAIL, INVALID_IO_LIST ); + } + + case HexConv: + case OctalConv: + case BinaryConv: + switch( io.__descr ) + { + case __IO_ByteVal: + case __IO_UByteVal: + ulongval = io.__t.__valubyte; + break; + case __IO_IntVal: + case __IO_UIntVal: + ulongval = io.__t.__valuint; + break; + case __IO_LongVal: + case __IO_ULongVal: + ulongval = io.__t.__valulong; + break; + default: + IOEXCEPTION( TEXTFAIL, CONVCODE_MODE_MISFIT ); + } + itembeg = myultoa( ulongval, itembuf, base[convcode] ); + itemlen = strlen( itembeg ); + goto move_item; + + case ScientConv: + switch( io.__descr ) + { + case __IO_RealVal: + doubleval = io.__t.__valreal; + mantdigs = FMANTDIGS; + if( !fractiondef ) + fractionwidth = FMANTDIGS - 1; + goto scientific_conversion; + case __IO_LongRealVal: + doubleval = io.__t.__vallongreal; + mantdigs = DBL_DIG; + if( !fractiondef ) + fractionwidth = DBL_DIG - 1; + goto scientific_conversion; + break; + default: + IOEXCEPTION( TEXTFAIL, CONVCODE_MODE_MISFIT ); + } + } + +fixed_point_conversion: ; + itembeg = mydtoa( doubleval, mantdigs, &de, &sign ); + if( fractiondef && de >= -fractionwidth - 1 + && -fractionwidth > de - mantdigs ) + itembeg = dround( itembeg, de + fractionwidth + 1, &de ); + + nid = de >= 0 ? de : 0; + nfd = fractiondef ? fractionwidth + : ( de + 1 - mantdigs > 0 ? 0 : mantdigs - de - 1 ); + itemlen = ( sign < 0 ? 1 : 0 ) + 2 + nid + nfd; +#if _TEXTIO_DEBUG_ +printf( "fixed item length %d\n", itemlen ); +#endif + if( !width ) + width = itemlen; +#if _TEXTIO_DEBUG_ +printf( "fixed item width %d\n", width ); +#endif + /* check remaining space */ + if( actual_index + width > iostrlen ) + IOEXCEPTION( TEXTFAIL, TEXT_LOC_OVERFLOW ); + + if( itemlen == width ) + fixput( iostrptr + actual_index, itembeg, + 1, itemlen, sign, de, de - mantdigs, nid, nfd ); + else + if( itemlen < width ) + if( leftadjust ) + memset( fixput( iostrptr + actual_index, itembeg, + 1, itemlen, sign, de, de - mantdigs, nid, nfd ) + + itemlen, + paddingchar, width - itemlen ); + else + fixput( memset( iostrptr + actual_index, + paddingchar, width - itemlen ) + + width - itemlen, + itembeg, 1, itemlen, sign, de, de - mantdigs, nid, nfd ); + else + if( overflowev ) + memset( iostrptr + actual_index, '*', width ); + else + if( leftadjust ) + fixput( iostrptr + actual_index, itembeg, + 1, width, sign, de, de - mantdigs, nid, nfd ); + else + fixput( iostrptr + actual_index, itembeg, + itemlen - width + 1, itemlen, + sign, de, de - mantdigs, nid, nfd ); + goto adjust_index; + +scientific_conversion: ; + itembeg = mydtoa( doubleval, mantdigs, &de, &sign ); + + if( fractiondef && fractionwidth < mantdigs ) + itembeg = dround( itembeg, fractionwidth + 1, &de ); + + expbeg = myultoa( abs(de), itembuf, 10 ); + explen = strlen( expbeg ); + + expwid = explen > exponentwidth ? explen : exponentwidth; + itemlen = ( sign < 0 ? 1 : 0 ) + 2 + fractionwidth + 2 + expwid; +#if _TEXTIO_DEBUG_ +printf( "floating item length %d, fraction %d, exponent %d\n", + itemlen, fractionwidth, expwid ); +#endif + if( width == 0 ) + width = itemlen; +#if _TEXTIO_DEBUG_ +printf( "floating item width %d\n", width ); +#endif + /* check remaining space */ + if( actual_index + width > iostrlen ) + IOEXCEPTION( TEXTFAIL, TEXT_LOC_OVERFLOW ); + + if( itemlen == width ) + sciput( iostrptr + actual_index, itembeg, expbeg, + 1, itemlen, sign, de, expwid ); + else + if( itemlen < width ) + if( leftadjust ) + memset( sciput( iostrptr + actual_index, itembeg, expbeg, + 1, itemlen, sign, de, expwid ) + + itemlen, + paddingchar, width - itemlen ); + else + sciput( memset( iostrptr + actual_index, + paddingchar, width - itemlen ) + + width - itemlen, + itembeg, expbeg, 1, itemlen, sign, de, expwid ); + else + if( overflowev ) + memset( iostrptr + actual_index, '*', width ); + else + if( leftadjust ) + sciput( iostrptr + actual_index, itembeg, expbeg, + 1, width, sign, de, expwid ); + else + sciput( iostrptr + actual_index, itembeg, expbeg, + itemlen - width + 1, itemlen, + sign, de, expwid ); + goto adjust_index; + +signed_conversion: ; + if( longval >= 0 ) + itembeg = myultoa( longval, itembuf, 10 ); + else + { + itembuf[0] = '-'; + myultoa( -longval, itembuf+1, 10 ); + itembeg = itembuf; + } + itemlen = strlen( itembeg ); + goto move_item; + +unsigned_conversion: ; + itembeg = myultoa( ulongval, itembuf, 10 ); + itemlen = strlen( itembeg ); + goto move_item; + +move_item: ; + if( !width ) + width = itemlen; + + /* check remaining space */ + if( actual_index + width > iostrlen ) + IOEXCEPTION( TEXTFAIL, TEXT_LOC_OVERFLOW ); + + /* move item, filling or truncating or overflow-evidencing */ + if( itemlen == width ) + memcpy( iostrptr + actual_index, itembeg, itemlen ); + else + if( itemlen < width ) + if( leftadjust ) + memset( memcpy( iostrptr + actual_index, itembeg, itemlen ) + + itemlen, + paddingchar, width - itemlen ); + else + memcpy( memset( iostrptr + actual_index, + paddingchar, width - itemlen ) + + width - itemlen, + itembeg, itemlen ); + else + if( overflowev ) + memset( iostrptr + actual_index, '*', width ); + else + if( leftadjust ) + memcpy( iostrptr + actual_index, itembeg, width ); + else + memcpy( iostrptr + actual_index, + itembeg + itemlen - width, width ); + + /* + * adjust. + */ +adjust_index: ; + actual_index += width; + if( actual_index > maximum_index ) + maximum_index = actual_index; + } +} + +static +void outedit( void ) +{ + int nchars; + + if( dynamicwid ) + clausewidth = get_field_width(); + switch( editcode ) + { + case SpaceSkip: + nchars = repetition*clausewidth; + if( actual_index + nchars > iostrlen ) + IOEXCEPTION( TEXTFAIL, TEXT_LOC_OVERFLOW ); + memset( iostrptr + actual_index, ' ', nchars ); + actual_index += nchars; + if( actual_index > maximum_index ) + maximum_index = actual_index; + break; + + case SkipLeft: + nchars = repetition*clausewidth; + if( actual_index - nchars < 0 ) + IOEXCEPTION( TEXTFAIL, TEXT_LOC_OVERFLOW ); + actual_index -= nchars; + break; + + case SkipRight: + nchars = repetition*clausewidth; + if( actual_index + nchars > iostrlen ) + IOEXCEPTION( TEXTFAIL, TEXT_LOC_OVERFLOW ); + actual_index += nchars; + if( actual_index > maximum_index ) + { + memset( iostrptr + maximum_index, ' ', actual_index - maximum_index ); + maximum_index = actual_index; + } + break; + + case Tabulation: + if( clausewidth >= iostrlen ) + IOEXCEPTION( TEXTFAIL, TEXT_LOC_OVERFLOW ); + actual_index = clausewidth; + if( actual_index > maximum_index ) + { + memset( iostrptr + maximum_index, ' ', actual_index - maximum_index ); + maximum_index = actual_index; + } + break; + } +} + + +static +void inpioctrl( void ) +{ + unsigned short hlen; + if( !textptr ) + IOEXCEPTION( TEXTFAIL, IO_CONTROL_NOT_VALID ); + if( iocode != EndPage ) + { + jmp_buf ioerror; + unsigned long info; + + if (textptr->access_sub->association) + { + if( (info = setjmp( ioerror )) ) + IOEXCEPTION( info>>16, info & 0xffff ); + while( repetition-- ) + { + __readrecord( textptr->access_sub, textindex, + (char*)textptr->text_record, + __FILE__, __LINE__ ); + actual_index = 0; + MOV2(&hlen,&textptr->text_record->len); + iostrlen = hlen; + } + } + else + IOEXCEPTION (NOTCONNECTED, IS_NOT_CONNECTED); + } +} + +/* specify pre/post in the order "/+-?!" */ +static +char* pre_char = "\0\f\0\r\0"; /* Z.200: "\n\f\0\n\0" */ +static +char* post_char = "\n\n\r\0\0"; /* Z.200: "\r\r\r\0\0" */ + +static +void outioctrl( void ) +{ + Association_Mode* assoc; + unsigned short hlen; + if( !textptr ) + IOEXCEPTION( TEXTFAIL, IO_CONTROL_NOT_VALID ); + if( (assoc = textptr->access_sub->association) ) + { + jmp_buf ioerror; + unsigned long info; + if( (info = setjmp( ioerror )) ) + IOEXCEPTION( info>>16, info & 0xffff ); + + while( repetition-- ) + { + if( iocode != EndPage ) + { + if( TEST_FLAG( assoc, IO_FIRSTLINE ) ) + { + CLR_FLAG( assoc, IO_FIRSTLINE ); + assoc->ctl_pre = '\0'; + } + else + { + if( TEST_FLAG( assoc, IO_FORCE_PAGE ) ) + { + CLR_FLAG( assoc, IO_FORCE_PAGE ); + assoc->ctl_pre = '\f'; + } + else + assoc->ctl_pre = pre_char[iocode]; + } + assoc->ctl_post = post_char[iocode]; + hlen = actual_index; + MOV2(&textptr->text_record->len,&hlen); + __writerecord( textptr->access_sub, textindex, + (char*)textptr->text_record, + textptr->text_record->len, + __FILE__, __LINE__ ); + hlen = actual_index = 0; + MOV2(&textptr->text_record->len,&hlen); + } + else if( !TEST_FLAG( textptr, IO_FIRSTLINE ) ) + SET_FLAG( textptr, IO_FORCE_PAGE ); + assoc->ctl_pre = assoc->ctl_post = '\0'; + } + } + else + IOEXCEPTION (NOTCONNECTED, IS_NOT_CONNECTED); +} + +static +void (**actionptr)( void ); +static +void (*readactions[])( void ) = { inpconv, inpedit, inpioctrl }; +static +void (*writeactions[])( void ) = { outconv, outedit, outioctrl }; + + +static +void emitstr( char* begtxt, char* endtxt ) +{ + char c; + int nchars = endtxt - begtxt; + if( actual_index + nchars > iostrlen ) + IOEXCEPTION( TEXTFAIL, TEXT_LOC_OVERFLOW ); + memcpy( iostrptr + actual_index, begtxt, nchars ); + actual_index += nchars; + if( actual_index > maximum_index ) + maximum_index = actual_index; +} + +static +void scanstr( char* begtxt, char* endtxt ) +{ + int nchars = endtxt - begtxt; + if( actual_index + nchars > iostrlen ) + IOEXCEPTION( TEXTFAIL, NO_CHARS_FOR_TEXT ); + if( strncmp( iostrptr + actual_index, begtxt, nchars ) ) + IOEXCEPTION( TEXTFAIL, FORMAT_TEXT_MISMATCH ); + actual_index += nchars; +} + +void (*ftextptr) ( char*, char* ); + +static +formatexit_t scanformcont( char* fcs, int len, + char** fcsptr, int* lenptr ) +{ + char curr; + fcsstate_t state = FormatText; + unsigned long buf; + int dig; + acttype_t action; + char* begtxt = fcs; + + while( len-- ) + { + curr = *fcs++; + switch( state ) + { + case FormatText: + if( curr == '%' ) + { + ftextptr( begtxt, fcs-1 ); + state = FirstPercent; + } + break; + +after_first_percent: ; + case FirstPercent: + if( curr == '%' ) + { + state = FormatText; + begtxt = fcs - 1; + break; + } + if( curr == ')' ) + { + *lenptr = len; + *fcsptr = fcs; + return EndAtParen; + } + if( isDEC(curr) ) + { + state = RepFact; + repetition = curr - '0'; + break; + } + + repetition = 1; + +test_for_control_codes: ; + if( isCVC(curr) ) + { + state = ConvClause; + action = ConvAct; + convcode = strchr( CONVERSIONCODES, curr ) - CONVERSIONCODES; + leftadjust = False; + overflowev = False; + dynamicwid = False; + paddingdef = False; + paddingchar = ' '; + fractiondef = False; + /* fractionwidth = 0; default depends on mode ! */ + exponentdef = False; + exponentwidth = 3; + clausewidth = 0; + break; + } + if( isEDC(curr) ) + { + state = EditClause; + action = EditAct; + editcode = strchr( EDITCODES, curr ) - EDITCODES; + dynamicwid = False; + clausewidth = editcode == Tabulation ? 0 : 1; + break; + } + if( isIOC(curr) ) + { + state = ClauseEnd; + action = IOAct; + iocode = strchr( IOCODES, curr ) - IOCODES; + break; + } + if( curr == '(' ) + { + unsigned long times = repetition; + int cntlen; + char* cntfcs; + while( times-- ) + { + if( scanformcont( fcs, len, &cntfcs, &cntlen ) != EndAtParen ) + IOEXCEPTION( TEXTFAIL, UNMATCHED_OPENING_PAREN ); + } + fcs = cntfcs; + len = cntlen; + state = FormatText; + begtxt = fcs; + break; + } + IOEXCEPTION( TEXTFAIL, BAD_FORMAT_SPEC_CHAR ); + + case RepFact: + if( isDEC(curr) ) + { + dig = curr - '0'; + if( repetition > (ULONG_MAX - dig)/10 ) + IOEXCEPTION( TEXTFAIL, REPFAC_OVERFLOW ); + repetition = repetition*10 + dig; + break; + } + goto test_for_control_codes; + + case ConvClause: + if( isDEC(curr) ) + { + state = ClauseWidth; + clausewidth = curr - '0'; + break; + } + if( curr == 'L' ) + { + if( leftadjust ) + IOEXCEPTION( TEXTFAIL, DUPLICATE_QUALIFIER ); + leftadjust = True; + break; + } + if( curr == 'E' ) + { + if( overflowev ) + IOEXCEPTION( TEXTFAIL, DUPLICATE_QUALIFIER ); + overflowev = True; + break; + } + if( curr == 'P' ) + { + if( paddingdef ) + IOEXCEPTION( TEXTFAIL, DUPLICATE_QUALIFIER ); + paddingdef = True; + state = CatchPadding; + break; + } + +test_for_variable_width: ; + if( curr == 'V' ) + { + dynamicwid = True; + state = AfterWidth; + break; + } + goto test_for_fraction_width; + + case ClauseWidth: + if( isDEC(curr) ) + { + dig = curr - '0'; + if( clausewidth > (ULONG_MAX - dig)/10 ) + IOEXCEPTION( TEXTFAIL, CLAUSE_WIDTH_OVERFLOW ); + clausewidth = clausewidth*10 + dig; + break; + } + /* fall through */ + +test_for_fraction_width: ; + case AfterWidth: + if( curr == '.' ) + { + if( convcode != DefaultConv && convcode != ScientConv ) + IOEXCEPTION( TEXTFAIL, NO_FRACTION ); + fractiondef = True; + state = FractWidth; + break; + } + goto test_for_exponent_width; + + case FractWidth: + if( isDEC( curr ) ) + { + state = FractWidthCont; + fractionwidth = curr - '0'; + break; + } + else + IOEXCEPTION( TEXTFAIL, NO_FRACTION_WIDTH ); + + case FractWidthCont: + if( isDEC( curr ) ) + { + dig = curr - '0'; + if( fractionwidth > (ULONG_MAX - dig)/10 ) + IOEXCEPTION( TEXTFAIL, FRACTION_WIDTH_OVERFLOW ); + fractionwidth = fractionwidth*10 + dig; + break; + } + +test_for_exponent_width: ; + if( curr == ':' ) + { + if( convcode != ScientConv ) + IOEXCEPTION( TEXTFAIL, NO_EXPONENT ); + exponentdef = True; + state = ExpoWidth; + break; + } + goto test_for_final_percent; + + case ExpoWidth: + if( isDEC( curr ) ) + { + state = ExpoWidthCont; + exponentwidth = curr - '0'; + break; + } + else + IOEXCEPTION( TEXTFAIL, NO_EXPONENT_WIDTH ); + + case ExpoWidthCont: + if( isDEC( curr ) ) + { + dig = curr - '0'; + if( exponentwidth > (ULONG_MAX - dig)/10 ) + IOEXCEPTION( TEXTFAIL, EXPONENT_WIDTH_OVERFLOW ); + exponentwidth = exponentwidth*10 + dig; + break; + } + /* fall through */ + +test_for_final_percent: ; + case ClauseEnd: + if( curr == '%' ) + { + state = LastPercent; + break; + } + + do_the_action: ; + actionptr[action](); + state = FormatText; + begtxt = fcs - 1; + break; + + case CatchPadding: + paddingchar = curr; + state = ConvClause; + break; + + case EditClause: + if( isDEC(curr) ) + { + state = ClauseWidth; + clausewidth = curr - '0'; + break; + } + goto test_for_variable_width; + + case LastPercent: + actionptr[action](); + if( curr == '.' ) + { + state = FormatText; + begtxt = fcs; + break; + } + goto after_first_percent; + + default: + IOEXCEPTION( TEXTFAIL, INTERNAL_ERROR ); + } + } + switch( state ) + { + case FormatText: + ftextptr( begtxt, fcs ); + break; + case FirstPercent: + case LastPercent: + case RepFact: + case FractWidth: + case ExpoWidth: + IOEXCEPTION( TEXTFAIL, BAD_FORMAT_SPEC_CHAR ); + case CatchPadding: + IOEXCEPTION( TEXTFAIL, NO_PAD_CHAR ); + default: + actionptr[action](); + } + + *lenptr = len; + *fcsptr = fcs; + return NormalEnd; +} + +static +void +__read_format (char* fmtptr, + int fmtlen, + __tmp_IO_list* ioptr, + int iolen, + void* inpptr, + int inplen ) +{ + formatexit_t res; + unsigned short l; + + iostrptr = (char*)inpptr; + iostrlen = inplen; + + /* initialisation */ + iolist_index = 0; + iolistptr = ioptr; + iolistlen = iolen; + + actionptr = readactions; + ftextptr = scanstr; + + if( (res = scanformcont( fmtptr, fmtlen, &fmtptr, &fmtlen )) == EndAtParen ) + IOEXCEPTION( TEXTFAIL, UNMATCHED_CLOSING_PAREN ); + + if( iolist_index != iolen ) + IOEXCEPTION( TEXTFAIL, EXCESS_IOLIST_ELEMENTS ); + + return; +} + +void +__readtext_f( Text_Mode* the_text_loc, + signed long the_index, + char* fmtptr, + int fmtlen, + __tmp_IO_list* ioptr, + int iolen, + char* file, + int line ) +{ + unsigned long info; + + if( (info = setjmp( __io_exception )) ) + CHILLEXCEPTION( file, line, info>>16, info & 0xffff ); + + textptr = the_text_loc; + textrecptr = textptr->text_record; + actual_index = textptr->actual_index; + textindex = the_index; + + __read_format ( fmtptr, fmtlen, ioptr, iolen, + (char*)textrecptr + 2, textptr->text_record->len ); + textptr->actual_index = actual_index; +} + +void +__readtext_s( void* string_ptr, + int string_len, + char* fmtptr, + int fmtlen, + __tmp_IO_list* ioptr, + int iolen, + char* file, + int line ) +{ + int info; + + if( (info = setjmp( __io_exception )) ) + CHILLEXCEPTION( file, line, info>>16, info & 0xffff ); + + textptr = NULL; + actual_index = 0; + + __read_format ( fmtptr, fmtlen, ioptr, iolen, string_ptr, string_len ); +} + +static +void +__write_format (char* fmtptr, + int fmtlen, + __tmp_IO_list* ioptr, + int iolen, + void* outptr, + int outlen ) +{ + formatexit_t res; + unsigned short l; + + /* initialisation */ + maximum_index = actual_index; + iolist_index = 0; + + actionptr = writeactions; + ftextptr = emitstr; + iolistptr = ioptr; + iolistlen = iolen; + iostrptr = (char *)outptr + 2; + iostrlen = outlen; + + if( (res = scanformcont( fmtptr, fmtlen, &fmtptr, &fmtlen )) == EndAtParen ) + IOEXCEPTION( TEXTFAIL, UNMATCHED_CLOSING_PAREN ); + + if( iolist_index != iolen ) + IOEXCEPTION( TEXTFAIL, EXCESS_IOLIST_ELEMENTS ); + + /* set length of output string */ +#if _TEXTIO_DEBUG_ + printf( "maximum index = %d\n", maximum_index ); +#endif + l = maximum_index; + MOV2(outptr,&l); + return; +} + +void +__writetext_f( Text_Mode* the_text_loc, + signed long the_index, + char* fmtptr, + int fmtlen, + __tmp_IO_list* ioptr, + int iolen, + char* file, + int line ) +{ + int info; + + if( (info = setjmp( __io_exception )) ) + CHILLEXCEPTION( file, line, info>>16, info & 0xffff ); + + textptr = the_text_loc; + textrecptr = the_text_loc->text_record; + textindex = the_index; + iolistptr = ioptr; + iolistlen = iolen; + + actual_index = textptr->actual_index; + __write_format ( fmtptr, fmtlen, ioptr, iolen, + textrecptr, textptr->access_sub->reclength - 2 ); + textptr->actual_index = actual_index; +} + +void +__writetext_s( void* string_ptr, + int string_len, + char* fmtptr, + int fmtlen, + __tmp_IO_list* ioptr, + int iolen, + char* file, + int line ) +{ + int info; + + if( (info = setjmp( __io_exception )) ) + CHILLEXCEPTION( file, line, info>>16, info & 0xffff ); + + textptr = NULL; + actual_index = 0; + + __write_format ( fmtptr, fmtlen, ioptr, iolen, string_ptr, string_len ); +} diff --git a/gcc/ch/runtime/gettextindex.c b/gcc/ch/runtime/gettextindex.c new file mode 100644 index 00000000000..60fa703a7d2 --- /dev/null +++ b/gcc/ch/runtime/gettextindex.c @@ -0,0 +1,30 @@ +/* Implement Input/Output runtime actions for CHILL. + Copyright (C) 1992,1993 Free Software Foundation, Inc. + Author: Wilfried Moser, et al + +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 +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#include "fileio.h" + +unsigned long +__gettextindex( Text_Mode* the_text, char* file, int line ) +{ + if( !the_text ) + CHILLEXCEPTION( file, line, EMPTY, NULL_TEXT ); + + return the_text->actual_index; +} diff --git a/gcc/ch/runtime/isassociated.c b/gcc/ch/runtime/isassociated.c new file mode 100644 index 00000000000..a3a4d499610 --- /dev/null +++ b/gcc/ch/runtime/isassociated.c @@ -0,0 +1,29 @@ +/* Implement Input/Output runtime actions for CHILL. + Copyright (C) 1992,1993 Free Software Foundation, Inc. + Author: Wilfried Moser, et al + +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 +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#include "fileio.h" + +Boolean +__isassociated( Association_Mode* the_assoc, char* file, int line ) +{ + if( !the_assoc ) + CHILLEXCEPTION( file, line, EMPTY, NULL_ASSOCIATION ); + return TEST_FLAG(the_assoc, IO_ISASSOCIATED) ? True : False; +} diff --git a/gcc/ch/runtime/neps.c b/gcc/ch/runtime/neps.c new file mode 100644 index 00000000000..220577d7642 --- /dev/null +++ b/gcc/ch/runtime/neps.c @@ -0,0 +1,52 @@ +/* Implement POWERSET runtime actions for CHILL. + Copyright (C) 1992,1993 Free Software Foundation, Inc. + Author: Wilfried Moser, et al + +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 +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#define __CHILL_LIB__ + +#include "config.h" +#include +#include "powerset.h" + +/* + * function __nepowerset + * + * parameters: + * left left powerset + * right right powerset + * bitlength length of powerset in bits + * + * returns: + * 1 if powersets are not equal, bit for bit + * + * exceptions: + * none + * + * abstract: + * compares two powersets for inequality + * + */ +int +__nepowerset (left, right, bitlength) + SET_WORD *left; + SET_WORD *right; + unsigned long bitlength; +{ + return ! __eqpowerset (left, right, bitlength); +} diff --git a/gcc/ch/runtime/notps.c b/gcc/ch/runtime/notps.c new file mode 100644 index 00000000000..dd683edea4e --- /dev/null +++ b/gcc/ch/runtime/notps.c @@ -0,0 +1,81 @@ +/* Implement POWERSET runtime actions for CHILL. + Copyright (C) 1992,1993 Free Software Foundation, Inc. + Author: Wilfried Moser, et al + +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 +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#define __CHILL_LIB__ + +#include "config.h" +#include +#include "powerset.h" + +/* + * function __notpowerset + * + * parameters: + * out output powerset + * left input powerset + * bitlength length of powerset in bits + * + * returns: + * void + * + * exceptions: + * none + * + * abstract: + * + */ + +void +__notpowerset (out, left, bitlength) + SET_WORD *out; + SET_WORD *left; + unsigned long bitlength; +{ + if (bitlength <= SET_CHAR_SIZE) + { + *((SET_CHAR *)out) = ~ (*((SET_CHAR *)left)); +#if 0 + SET_CHAR tmp; + tmp = *((SET_CHAR *)left); + tmp = ~ tmp; + *((SET_CHAR *)out) = tmp; + + MASK_UNUSED_CHAR_BITS((SET_CHAR *)out, bitlength); + *((SET_CHAR *)out) = ~ *((SET_CHAR *)left); + MASK_UNUSED_CHAR_BITS((SET_CHAR *)out, bitlength); + *((SET_CHAR *)out) = (~(0)) ^ (*((SET_CHAR *)left)); + MASK_UNUSED_CHAR_BITS((SET_CHAR *)out, bitlength); +#endif + } + else if (bitlength <= SET_SHORT_SIZE) + { + *((SET_SHORT *)out) = ~ (*((SET_SHORT *)left)); + MASK_UNUSED_SHORT_BITS((SET_SHORT *)out, bitlength); + } + else + { + unsigned long len = BITS_TO_WORDS(bitlength); + register unsigned long i; + + for (i = 0; i < len; i++) + out[i] = ~ left[i]; + MASK_UNUSED_WORD_BITS((out + len - 1), bitlength % SET_WORD_SIZE); + } +} diff --git a/gcc/ch/runtime/printbuffer.c b/gcc/ch/runtime/printbuffer.c new file mode 100644 index 00000000000..9dd9617de19 --- /dev/null +++ b/gcc/ch/runtime/printbuffer.c @@ -0,0 +1,116 @@ +/* Implement tasking-related runtime actions for CHILL. + Copyright (C) 1992,1993 Free Software Foundation, Inc. + Author: Wilfried Moser + +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 +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#include +#include "rtltypes.h" +#include "rts.h" + +typedef char *(*fetch_names) (int number); +extern fetch_names __RTS_FETCH_NAMES__; + +/* + * function print_instance + * + */ + +static char *print_instance (ins) + INSTANCE ins; +{ + static char buf[256]; + char *f; + + if (!__RTS_FETCH_NAMES__) + f = 0; + else + f = (*__RTS_FETCH_NAMES__) (ins.ptype); + if (!f) + sprintf (buf, "[%u;%u]", ins.ptype, ins.pcopy); + else + sprintf (buf, "[%s;%u]", f, ins.pcopy); + return buf; +} + +/* + * function __print_buffer + * + * parameters: + * buffer buffer location + * + * returns: + * void + * + * exceptions: + * none + * + * abstract: + * Function is used for debugging purposes only to print a + * buffer queue + */ + +void +__print_buffer (buffer, name) + Buffer_Queue **buffer; + char *name; +{ + Buffer_Queue *bq; + int bsqcnt = 0, bwqcnt = 0; + Buffer_Send_Queue *bsq; + Buffer_Wait_Queue *bwq; + + if (name) + printf ("Buffer %s:\n", name); + else + printf ("Buffer at address H'%X:\n", buffer); + + memcpy (&bq, buffer, sizeof (Buffer_Queue *)); + if (bq == 0) + { + printf ("EMPTY\n"); + return; + } + + bsq = bq->sendqueue; + if (bsq != 0) + printf ("Send Queue:\n"); + while (bsq) + { + printf (" %3d: ", ++bsqcnt); + printf ("Process %s, ", print_instance (bsq->this)); + printf ("Priority %d", bsq->priority); + if (bsq->is_delayed) + printf (", Delayed"); + printf ("\n"); + bsq = bsq->forward; + } + bwq = bq->waitqueue; + if (bwq != 0) + printf ("Wait Queue:\n"); + while (bwq) + { + printf (" %3d: ", ++bwqcnt); + printf ("Process %s, ", print_instance (bwq->this)); + if (bwq->is_sent) + printf (", Send by %s", print_instance (bwq->who_sent)); + printf ("\n"); + bwq = bwq->forward; + } + if (bsqcnt == 0 && bwqcnt == 0) + printf ("EMPTY\n"); +} diff --git a/gcc/ch/runtime/printevent.c b/gcc/ch/runtime/printevent.c new file mode 100644 index 00000000000..c491a2c781d --- /dev/null +++ b/gcc/ch/runtime/printevent.c @@ -0,0 +1,93 @@ +/* Implement tasking-related runtime actions for CHILL. + Copyright (C) 1992,1993 Free Software Foundation, Inc. + Author: Wilfried Moser + +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 +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#include +#include "rtltypes.h" +#include "rts.h" + +typedef char *(*fetch_names) (int number); +extern fetch_names __RTS_FETCH_NAMES__; + +/* + * function print_instance + * + */ + +static char *print_instance (ins) + INSTANCE ins; +{ + static char buf[256]; + char *f; + + if (!__RTS_FETCH_NAMES__) + f = 0; + else + f = (*__RTS_FETCH_NAMES__) (ins.ptype); + if (!f) + sprintf (buf, "[%u;%u]", ins.ptype, ins.pcopy); + else + sprintf (buf, "[%s;%u]", f, ins.pcopy); + return buf; +} + +/* + * function __print_event + * + * parameters: + * event event location + * + * returns: + * void + * + * exceptions: + * none + * + * abstract: + * Function is used for debugging purposes only to print an + * event queue + */ + +void +__print_event (evaddr, name) + Event_Queue **evaddr; + char *name; +{ + Event_Queue *ev; + int cnt = 0; + + if (name) + printf ("Event %s:\n", name); + else + printf ("Event at address H'%X:\n", evaddr); + + memcpy (&ev, evaddr, sizeof (Event_Queue *)); + while (ev) + { + printf (" %3d: ", ++cnt); + printf ("Process %s, ", print_instance (ev->this)); + printf ("Priority %d", ev->priority); + if (ev->is_continued) + printf (" ,Continued by %s", print_instance (ev->who_continued)); + printf ("\n"); + ev = ev->forward; + } + if (!cnt) + printf ("EMPTY\n"); +} diff --git a/gcc/ch/runtime/retmem.c b/gcc/ch/runtime/retmem.c new file mode 100644 index 00000000000..a17ef7b5822 --- /dev/null +++ b/gcc/ch/runtime/retmem.c @@ -0,0 +1,52 @@ +/* Implement runtime actions for CHILL. + Copyright (C) 1992,1993 Free Software Foundation, Inc. + Author: Wilfried Moser + +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 +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#define __CHILL_LIB__ + +#include "config.h" +#include + +/* + * function _return_memory + * + * parameter: + * ptr pointer to memory to free + * filename source file which issued the call + * linenumber line number of the call within that file + * + * returns: + * void + * + * exceptions: + * none + * + * abstract: + * free memory previously allocated by _allocate_(global_)memory + * +*/ + +void +_return_memory (ptr, filename, linenumber) + void *ptr; + char *filename; + int linenumber; +{ + free (ptr); +} diff --git a/gcc/ch/runtime/rtltypes.h b/gcc/ch/runtime/rtltypes.h new file mode 100644 index 00000000000..ed994f33ccb --- /dev/null +++ b/gcc/ch/runtime/rtltypes.h @@ -0,0 +1,61 @@ +#ifndef __rtltypes_h__ +#define __rtltypes_h__ + +#include + +/* Add prototype support. */ +#ifndef PROTO +#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__) +#define PROTO(ARGS) ARGS +#else +#define PROTO(ARGS) () +#endif +#endif + +/* argc, argv */ +typedef struct +{ + unsigned short len; + char body[0]; +} TVaryingCharType; + +#ifndef __CHILL_LIB__ +extern TVaryingCharType **chill_argv; +extern int chill_argc; +#endif + +/* definitions for exceptions */ +typedef struct +{ + char *exname; + short exnumber; +} TExceptionDefinition; + +#if 1 +typedef char *__ch_exception; +#define EX_EQ(e1, e2) (strcmp(e1, e2)==0) +#else +typedef void *__ch_exception; +#define EX_EQ(e1, e2) (e1 == e2) +#endif +#define __ch_else_except ((__ch_exception)0) + +struct __ch_handled_excepts +{ + /* List is ended by a code==0, or ex==__ch_else_except (ELSE handler). */ + __ch_exception ex; + int code; /* Positive number indicating ordinal in handler list. */ +}; + +/* definitions for exception handlers */ +typedef struct __ch_handler +{ + struct __ch_handler *prev; + struct __ch_handled_excepts *handlers; + jmp_buf jbuf; +} TExceptionHandlerStack; + +/* exceptions */ +#define EXCEPTION(x) /* nothing */ + +#endif /* __rtltypes_h__ */ diff --git a/gcc/ch/runtime/rts.c b/gcc/ch/runtime/rts.c new file mode 100644 index 00000000000..b7602e970cc --- /dev/null +++ b/gcc/ch/runtime/rts.c @@ -0,0 +1,655 @@ +/* GNU CHILL compiler regression test file + Copyright (C) 1992, 1993 Free Software Foundation, Inc. + + 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 + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#include +#include +#include +#include +#include + +#include "rts.h" + + +/* some allocation/reallocation functions */ + +static void * +xmalloc (size) + int size; +{ + void *tmp = malloc (size); + + if (!tmp) + { + fprintf (stderr, "Out of heap space.\n"); + exit (1); + } + return (tmp); +} + +static void * +xrealloc (ptr, size) + void *ptr; + int size; +{ + void *tmp = realloc (ptr, size); + + if (!tmp) + { + fprintf (stderr, "Out of heap space.\n"); + exit (1); + } + return (tmp); +} + +/* the necessary data */ +#define MAX_NUMBER 100 +typedef char UsedValues[MAX_NUMBER]; + +#define MAX_COPIES 100 + +#define MAX_PER_ITEM 20 +typedef struct TASKINGSTRUCTLIST +{ + struct TASKINGSTRUCTLIST *forward; + int num; + TaskingStruct *data[MAX_PER_ITEM]; + char copies[MAX_COPIES]; + jmp_buf where; +} TaskingStructList; + +static TaskingStructList *task_array[LAST_AND_UNUSED]; +static UsedValues used_values[LAST_AND_UNUSED]; + +static short +get_next_free_number (vals) + UsedValues vals; +{ + short i; + for (i = 1; i < MAX_NUMBER; i++) + { + if (!vals[i]) + { + vals[i] = 1; + return (i); + } + } + fprintf (stderr, "There are no more free numbers.\n"); + exit (1); +} + +/* function search for the next available copy number */ +static short +get_next_copy_number (p) + TaskingStructList *p; +{ + short i; + + for (i = 0; i < MAX_COPIES; i++) + { + if (!p->copies[i]) + { + p->copies[i] = 1; + return (i); + } + } + fprintf (stderr, "No more copies available for \"%s\".\n", + p->data[0]->name); + exit (1); +} + +/* function registers a tasking entry from a module and assign + a value to the type */ + +void +__register_tasking (t) + TaskingStruct *t; +{ + TaskingStructList *p; + + /* check first if a value was provided and if it is in range */ + if (t->value_defined && *t->value >= MAX_NUMBER) + { + fprintf (stderr, "Value %d out of range.\n", *t->value); + exit (1); + } + + /* look for item defined */ + p = task_array[t->type]; + while (p) + { + if (!strcmp (p->data[0]->name, t->name)) + /* have found it */ + break; + p = p->forward; + } + + if (!p) + { + TaskingStructList *wrk = (TaskingStructList *)&task_array[t->type]; + + /* this is a new one -- allocate space */ + p = xmalloc (sizeof (TaskingStructList)); + memset (p->copies, 0, sizeof (p->copies)); + p->forward = 0; + p->num = 1; + p->data[0] = t; + + /* queue it in */ + while (wrk->forward) + wrk = wrk->forward; + wrk->forward = p; + } + else + { + if (p->num >= MAX_PER_ITEM) + { + fprintf (stderr, "Too many registrations of \"%s\".\n", t->name); + exit (1); + } + p->data[p->num++] = t; + } +} + +/* define all the entries for the runtime system. They will be + needed by chillrt0.o */ + +typedef char *(*fetch_names) (); +typedef int (*fetch_numbers) (); + +static char tmp_for_fetch_name[100]; + +char * +__fetch_name (number) + int number; +{ + TaskingStructList *p = task_array[Process]; + + while (p) + { + if (*(p->data[0]->value) == number) + return (p->data[0]->name); + p = p->forward; + } + sprintf (tmp_for_fetch_name, "%d", number); + return (tmp_for_fetch_name); +} +fetch_names __RTS_FETCH_NAMES__ = __fetch_name; + +static int +__fetch_number (name) + char *name; +{ + TaskingStructList *p = task_array[Process]; + + while (p) + { + if (!strcmp (p->data[0]->name, name)) + return (*(p->data[0]->value)); + p = p->forward; + } + return (-1); +} +fetch_numbers __RTS_FETCH_NUMBERS__ = __fetch_number; + + +/* here we go to check all registered items */ +static void + __rts_init () +{ + int i; + TaskingStructList *p; + + for (i = Process; i <= Event; i++) + { + p = task_array[i]; + while (p) + { + TaskingStruct *t = 0; + int j; + short val; + + for (j = 0; j < p->num; j++) + { + if (p->data[j]->value_defined) + { + if (t) + { + if (*(t->value) != *(p->data[j]->value)) + { + fprintf (stderr, "Different values (%d & %d) for \"%s\".", + *(t->value), *(p->data[j]->value), t->name); + exit (1); + } + } + else + t = p->data[j]; + } + } + + if (t) + { + + val = *(t->value); + + if (used_values[t->type][val]) + { + fprintf (stderr, "Value %d for \"%s\" is already used.\n", + val, t->name); + exit (1); + } + used_values[t->type][val] = 1; + } + else + { + /* we have to create a new value */ + val = get_next_free_number (used_values[p->data[0]->type]); + } + + for (j = 0; j < p->num; j++) + { + p->data[j]->value_defined = 1; + *(p->data[j]->value) = val; + } + + p = p->forward; + } + } +} +EntryPoint __RTS_INIT__ = __rts_init; + +/* define the start process queue */ +typedef struct STARTENTRY +{ + struct STARTENTRY *forward; + INSTANCE whoami; + EntryPoint entry; + void *data; + int datalen; +} StartEntry; + +static StartEntry *start_queue = 0; +static StartEntry *current_process = 0; + +/* the jump buffer for the main loop */ +static jmp_buf jump_buffer; +static int jump_buffer_initialized = 0; + +/* look for entries in start_queue and start the process */ +static void +__rts_main_loop () +{ + StartEntry *s; + + while (1) + { + if (setjmp (jump_buffer) == 0) + { + jump_buffer_initialized = 1; + s = start_queue; + while (s) + { + current_process = s; + start_queue = s->forward; + + /* call the process */ + (*s->entry) (s->data); + s = start_queue; + } + /* when queue empty we have finished */ + return; + } + else + { + /* stop executed */ + if (current_process->data) + free (current_process->data); + free (current_process); + current_process = 0; + } + } +} +EntryPoint __RTS_MAIN_LOOP__ = __rts_main_loop; + + +void +__start_process (ptype, pcopy, arg_size, args, ins) + short ptype; + short pcopy; + int arg_size; + void *args; + INSTANCE *ins; +{ + TaskingStructList *p = task_array[Process]; + EntryPoint pc = 0; + int i; + short this_copy = pcopy; + StartEntry *s, *wrk; + + /* search for the process */ + while (p) + { + if (*(p->data[0]->value) == ptype) + break; + p = p->forward; + } + if (!p) + { + fprintf (stderr, "Cannot find a process with type %d.\n", ptype); + exit (1); + } + + /* search for the entry point */ + for (i = 0; i < p->num; i++) + { + if (p->data[i]->entry) + { + pc = p->data[i]->entry; + break; + } + } + if (!pc) + { + fprintf (stderr, "Process \"%s\" doesn't have an entry point.\n", + p->data[0]->name); + exit (1); + } + + /* check the copy */ + if (pcopy >= MAX_COPIES) + { + fprintf (stderr, "Copy number (%d) out of range.\n", pcopy); + exit (1); + } + if (pcopy == -1) + { + /* search for a copy number */ + this_copy = get_next_copy_number (p); + } + else + { + if (p->copies[pcopy]) + { + /* FIXME: should be exception 'startfail' */ + fprintf (stderr, "Copy number %d already in use for \"%s\".\n", + pcopy, p->data[0]->name); + exit (1); + } + p->copies[this_copy = pcopy] = 1; + } + + /* ready to build start_queue entry */ + s = xmalloc (sizeof (StartEntry)); + s->forward = 0; + s->whoami.pcopy = this_copy; + s->whoami.ptype = ptype; + s->entry = pc; + s->datalen = arg_size; + if (args) + { + s->data = xmalloc (arg_size); + memcpy (s->data, args, arg_size); + } + else + s->data = 0; + + /* queue that stuff in */ + wrk = (StartEntry *)&start_queue; + while (wrk->forward) + wrk = wrk->forward; + wrk->forward = s; + + /* if we have a pointer to ins -- set it */ + if (ins) + { + ins->ptype = ptype; + ins->pcopy = this_copy; + } +} + +void +__stop_process () +{ + if (!jump_buffer_initialized) + { + fprintf (stderr, "STOP called before START.\n"); + exit (1); + } + longjmp (jump_buffer, 1); +} + + +/* function returns INSTANCE of current process */ +INSTANCE +__whoami () +{ + INSTANCE whoami; + if (current_process) + whoami = current_process->whoami; + else + { + whoami.ptype = 0; + whoami.pcopy = 0; + } + return (whoami); +} + +typedef struct +{ + short *sc; + int data_len; + void *data; +} SignalDescr; + +typedef struct SIGNALQUEUE +{ + struct SIGNALQUEUE *forward; + short sc; + int data_len; + void *data; + INSTANCE to; + INSTANCE from; +} SignalQueue; + +/* define the signal queue */ +static SignalQueue *msg_queue = 0; + +/* send a signal */ +void +__send_signal (s, to, prio, with_len, with) + SignalDescr *s; + INSTANCE to; + int prio; + int with_len; + void *with; +{ + SignalQueue *wrk = (SignalQueue *)&msg_queue; + SignalQueue *p; + TaskingStructList *t = task_array[Process]; + + /* search for process is defined and running */ + while (t) + { + if (*(t->data[0]->value) == to.ptype) + break; + t = t->forward; + } + if (!t || !t->copies[to.pcopy]) + { + fprintf (stderr, "Can't find instance [%d,%d].\n", + to.ptype, to.pcopy); + exit (1); + } + + /* go to the end of the msg_queue */ + while (wrk->forward) + wrk = wrk->forward; + + p = xmalloc (sizeof (SignalQueue)); + p->sc = *(s->sc); + if (p->data_len = s->data_len) + { + p->data = xmalloc (s->data_len); + memcpy (p->data, s->data, s->data_len); + } + else + p->data = 0; + p->to = to; + p->from = __whoami (); + p->forward = 0; + wrk->forward = p; +} + +void +start_signal_timeout (i, s, j) + int i; + SignalDescr *s; + int j; +{ + __send_signal (s, __whoami (), 0, 0, 0); +} + + +/* receive a signal */ +int +__wait_signal_timed (sig_got, nsigs, sigptr, datap, + datalen, ins, else_branche, + to, filename, lineno) + short *sig_got; + int nsigs; + short *sigptr[]; + void *datap; + int datalen; + INSTANCE *ins; + int else_branche; + void *to; + char *filename; + int lineno; +{ + INSTANCE me = __whoami (); + SignalQueue *wrk, *p = msg_queue; + int i; + short sc; + + /* search for a signal to `me' */ + wrk = (SignalQueue *)&msg_queue; + + while (p) + { + if (p->to.ptype == me.ptype + && p->to.pcopy == me.pcopy) + break; + wrk = p; + p = p->forward; + } + + if (!p) + { + fprintf (stderr, "No signal for [%d,%d].\n", + me.ptype, me.pcopy); + exit (1); + } + + /* queue the message out */ + wrk->forward = p->forward; + + /* now look for signal in list */ + for (i = 0; i < nsigs; i++) + if (*(sigptr[i]) == p->sc) + break; + + if (i >= nsigs && ! else_branche) + /* signal not in list and no ELSE in code */ + __cause_exception ("signalfail", __FILE__, __LINE__); + + if (i >= nsigs) + { + /* signal not in list */ + sc = p->sc; + if (ins) + *ins = p->from; + if (p->data) + free (p->data); + free (p); + *sig_got = sc; + return (0); + } + + /* we have found a signal in the list */ + if (p->data_len) + { + if (datalen >= p->data_len + && datap) + memcpy (datap, p->data, p->data_len); + else + __cause_exception ("spacefail", __FILE__, __LINE__); + } + + sc = p->sc; + if (ins) + *ins = p->from; + if (p->data) + free (p->data); + free (p); + *sig_got = sc; + return (0); +} + +/* wait a certain amount of seconds */ +int +__sleep_till (abstime, reltime, fname, lineno) + time_t abstime; + int reltime; + char *fname; + int lineno; +{ + sleep (reltime); + return 0; +} + +/* set up an alarm */ +static int timeout_flag = 0; + +static void alarm_handler () +{ + timeout_flag = 1; +} + +int * +__define_timeout (howlong, filename, lineno) + unsigned long howlong; /* comes in millisecs */ + char *filename; + int lineno; +{ + unsigned int prev_alarm_value; + + signal (SIGALRM, alarm_handler); + prev_alarm_value = alarm ((unsigned int)(howlong / 1000)); + return &timeout_flag; +} + +/* wait till timeout expires */ +void +__wait_timeout (toid, filename, lineno) + volatile int *toid; + char *filename; + int lineno; +{ + while (! *toid) ; + *toid = 0; +} diff --git a/gcc/ch/runtime/terminate.c b/gcc/ch/runtime/terminate.c new file mode 100644 index 00000000000..ea2044eb066 --- /dev/null +++ b/gcc/ch/runtime/terminate.c @@ -0,0 +1,60 @@ +/* Implement runtime actions for CHILL. + Copyright (C) 1992,1993 Free Software Foundation, Inc. + Author: Wilfried Moser + +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 +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#define __CHILL_LIB__ + +#include "config.h" +#include +#include "rtltypes.h" + +extern void __cause_ex1 (char *exname, char *file, int lineno); + +/* define needed exceptions */ +EXCEPTION (empty) + +/* + * function __terminate + * + * parameter: + * ptr pointer to memory to free + * filename source file which issued the call + * linenumber line number of the call within that file + * + * returns: + * void + * + * exceptions: + * empty + * + * abstract: + * free memory previously allocated by __allocate. + * +*/ + +void +__terminate (ptr, filename, linenumber) + void *ptr; + char *filename; + int linenumber; +{ + if (! ptr) + __cause_ex1 ("empty", filename, linenumber); + free (ptr); +} diff --git a/gcc/ch/runtime/writerecord.c b/gcc/ch/runtime/writerecord.c new file mode 100644 index 00000000000..7e88322bd55 --- /dev/null +++ b/gcc/ch/runtime/writerecord.c @@ -0,0 +1,133 @@ +/* Implement Input/Output runtime actions for CHILL. + Copyright (C) 1992,1993 Free Software Foundation, Inc. + Author: Wilfried Moser, et al + +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 +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#include +#include +#include +#include +#include + +#include "fileio.h" + +static +void +doWrite( Access_Mode* the_access, void* buf, size_t nbyte ) +{ + size_t nwrit; + + nwrit = write( the_access->association->handle, buf, nbyte ); + + if( nwrit < nbyte ) + { + the_access->association->syserrno = errno; + RWEXCEPTION( WRITEFAIL, OS_IO_ERROR ); + } +} + + +void +__writerecord( Access_Mode* the_access, + signed long the_index, + char* the_val_addr, + unsigned long the_val_len, + char* file, + int line ) + +{ + Association_Mode* the_assoc; + unsigned long info; + char* actaddr; + unsigned short actlen; + off_t filepos; + + if( !the_access ) + CHILLEXCEPTION( file, line, EMPTY, NULL_ACCESS ); + + if( !(the_assoc = the_access->association) ) + CHILLEXCEPTION( file, line, NOTCONNECTED, IS_NOT_CONNECTED ); + + /* Usage must no be ReadOnly */ + if( the_assoc->usage == ReadOnly ) + CHILLEXCEPTION( file, line, WRITEFAIL, BAD_USAGE ); + + /* + * Positioning + */ + if( TEST_FLAG( the_access, IO_INDEXED ) ) + { + /* index expression must be within bounds of index mode */ + if( the_index < the_access->lowindex + || the_access->highindex < the_index ) + CHILLEXCEPTION( file, line, RANGEFAIL, BAD_INDEX ); + filepos = the_access->base + + (the_index - the_access->lowindex) * the_access->reclength; + + if( lseek( the_assoc->handle, filepos, SEEK_SET ) == -1L ) + CHILLEXCEPTION( file, line, WRITEFAIL, LSEEK_FAILS ); + } + + if( (info = setjmp( __rw_exception )) ) + CHILLEXCEPTION( file, line, info>>16, info & 0xffff ); + + if( TEST_FLAG( the_access, IO_TEXTIO ) ) + { + if( TEST_FLAG( the_access, IO_INDEXED ) ) + { + int nspace = the_access->reclength - the_val_len; + memset( the_val_addr + 2 + the_val_len, ' ', nspace ); + actlen = the_access->reclength - 2; + MOV2(the_val_addr,&actlen); + doWrite( the_access, the_val_addr, the_access->reclength ); + } + else + { + if( the_assoc->ctl_pre ) + write( the_assoc->handle, &the_assoc->ctl_pre, 1 ); + MOV2(&actlen,the_val_addr); + write( the_assoc->handle, the_val_addr + 2, actlen ); + if( the_assoc->ctl_post ) + write( the_assoc->handle, &the_assoc->ctl_post, 1 ); + the_assoc->ctl_pre = '\0'; + the_assoc->ctl_post = '\n'; + } + } + else + { + switch( the_access->rectype ) + { + case Fixed: + if( TEST_FLAG( the_assoc, IO_VARIABLE ) ) + { + actlen = the_access->reclength; + doWrite( the_access, &actlen, sizeof(actlen) ); + } + doWrite( the_access, the_val_addr, the_val_len ); + break; + case VaryingChars: + MOV2(&actlen,the_val_addr); + if( actlen > the_access->reclength - 2 ) + CHILLEXCEPTION( file, line, RANGEFAIL, RECORD_TOO_LONG ); + actlen = TEST_FLAG( the_access, IO_INDEXED ) + ? the_access->reclength : actlen + 2; + doWrite( the_access, the_val_addr, actlen ); + break; + } + } +} diff --git a/gcc/ch/runtime/xorps.c b/gcc/ch/runtime/xorps.c new file mode 100644 index 00000000000..ddf0012ab62 --- /dev/null +++ b/gcc/ch/runtime/xorps.c @@ -0,0 +1,76 @@ +/* Implement POWERSET runtime actions for CHILL. + Copyright (C) 1992,1993 Free Software Foundation, Inc. + Author: Wilfried Moser, et al + +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 +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#define __CHILL_LIB__ + +#include "config.h" +#include +#include "powerset.h" + +/* + * function __xorpowerset + * + * parameters: + * out return from __xorpowerset + * left left powerset + * right right powerset + * bitlength length of powerset in bits + * + * returns: + * void + * + * exceptions: + * none + * + * abstract: + * xor's 2 powersets + * + */ + +void +__xorpowerset (out, left, right, bitlength) + SET_WORD *out; + SET_WORD *left; + SET_WORD *right; + unsigned long bitlength; +{ + if (bitlength <= SET_CHAR_SIZE) + { + *((SET_CHAR *)out) = *((SET_CHAR *)left) ^ + *((SET_CHAR *)right); + MASK_UNUSED_CHAR_BITS((SET_CHAR *)out, bitlength); + } + else if (bitlength <= SET_SHORT_SIZE) + { + *((SET_SHORT *)out) = *((SET_SHORT *)left) ^ + *((SET_SHORT *)right); + MASK_UNUSED_SHORT_BITS((SET_SHORT *)out, bitlength); + } + else + { + unsigned long len = BITS_TO_WORDS(bitlength); + register unsigned long i; + + for (i = 0; i < len; i++) + out[i] = left[i] ^ right[i]; + MASK_UNUSED_WORD_BITS ((out + len - 1), + bitlength % SET_WORD_SIZE); + } +} diff --git a/gcc/ch/xtypeck.c b/gcc/ch/xtypeck.c new file mode 100644 index 00000000000..2946b231029 --- /dev/null +++ b/gcc/ch/xtypeck.c @@ -0,0 +1,264 @@ + +#if 0 +tree +build_component_ref (datum, field_name) + tree datum, field_name; +{ + return build_chill_component_ref (datum, field_name); +} + +/* Mark EXP saying that we need to be able to take the + address of it; it should not be allocated in a register. + Value is 1 if successful. */ + +int +mark_addressable (exp) + tree exp; +{ + register tree x = exp; + while (1) + switch (TREE_CODE (x)) + { + case ADDR_EXPR: + case COMPONENT_REF: + case ARRAY_REF: + case REALPART_EXPR: + case IMAGPART_EXPR: +/* start-sanitize-chill */ + case TRUTH_ANDIF_EXPR: + case TRUTH_ORIF_EXPR: + case COMPOUND_EXPR: +/* end-sanitize-chill */ + x = TREE_OPERAND (x, 0); + break; +/* start-sanitize-chill */ + + case COND_EXPR: + return mark_addressable (TREE_OPERAND (x, 1)) + & mark_addressable (TREE_OPERAND (x, 2)); +/* end-sanitize-chill */ + + case CONSTRUCTOR: + TREE_ADDRESSABLE (x) = 1; + return 1; + + case VAR_DECL: + case CONST_DECL: + case PARM_DECL: + case RESULT_DECL: + if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x) + && DECL_NONLOCAL (x)) + { + if (TREE_PUBLIC (x)) + { + error ("global register variable `%s' used in nested function", + IDENTIFIER_POINTER (DECL_NAME (x))); + return 0; + } + pedwarn ("register variable `%s' used in nested function", + IDENTIFIER_POINTER (DECL_NAME (x))); + } + else if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)) + { + if (TREE_PUBLIC (x)) + { + error ("address of global register variable `%s' requested", + IDENTIFIER_POINTER (DECL_NAME (x))); + return 0; + } + + /* If we are making this addressable due to its having + volatile components, give a different error message. Also + handle the case of an unnamed parameter by not trying + to give the name. */ + + else if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (x))) + { + error ("cannot put object with volatile field into register"); + return 0; + } + + pedwarn ("address of register variable `%s' requested", + IDENTIFIER_POINTER (DECL_NAME (x))); + } + put_var_into_stack (x); + + /* drops in */ + case FUNCTION_DECL: + TREE_ADDRESSABLE (x) = 1; +#if 0 /* poplevel deals with this now. */ + if (DECL_CONTEXT (x) == 0) + TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (x)) = 1; +#endif + + default: + return 1; + } +} + +/* Return an unsigned type the same as TYPE in other respects. */ + +tree +unsigned_type (type) + tree type; +{ + tree type1 = TYPE_MAIN_VARIANT (type); + if (type1 == signed_char_type_node || type1 == char_type_node) + return unsigned_char_type_node; + if (type1 == integer_type_node) + return unsigned_type_node; + if (type1 == short_integer_type_node) + return short_unsigned_type_node; + if (type1 == long_integer_type_node) + return long_unsigned_type_node; + if (type1 == long_long_integer_type_node) + return long_long_unsigned_type_node; + return type; +} + +/* Return a signed type the same as TYPE in other respects. */ + +tree +signed_type (type) + tree type; +{ + tree type1 = TYPE_MAIN_VARIANT (type); + if (type1 == unsigned_char_type_node || type1 == char_type_node) + return signed_char_type_node; + if (type1 == unsigned_type_node) + return integer_type_node; + if (type1 == short_unsigned_type_node) + return short_integer_type_node; + if (type1 == long_unsigned_type_node) + return long_integer_type_node; + if (type1 == long_long_unsigned_type_node) + return long_long_integer_type_node; + return type; +} + +/* Return a type the same as TYPE except unsigned or + signed according to UNSIGNEDP. */ + +tree +signed_or_unsigned_type (unsignedp, type) + int unsignedp; + tree type; +{ + if (! INTEGRAL_TYPE_P (type)) + return type; + if (TYPE_PRECISION (type) == TYPE_PRECISION (signed_char_type_node)) + return unsignedp ? unsigned_char_type_node : signed_char_type_node; + if (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)) + return unsignedp ? unsigned_type_node : integer_type_node; + if (TYPE_PRECISION (type) == TYPE_PRECISION (short_integer_type_node)) + return unsignedp ? short_unsigned_type_node : short_integer_type_node; + if (TYPE_PRECISION (type) == TYPE_PRECISION (long_integer_type_node)) + return unsignedp ? long_unsigned_type_node : long_integer_type_node; + if (TYPE_PRECISION (type) == TYPE_PRECISION (long_long_integer_type_node)) + return (unsignedp ? long_long_unsigned_type_node + : long_long_integer_type_node); + return type; +} + +extern tree intHI_type_node; +extern tree intSI_type_node; +extern tree intDI_type_node; + +extern tree unsigned_intHI_type_node; +extern tree unsigned_intSI_type_node; +extern tree unsigned_intDI_type_node; + +/* Return an integer type with BITS bits of precision, + that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */ + +tree +type_for_size (bits, unsignedp) + unsigned bits; + int unsignedp; +{ + if (bits == TYPE_PRECISION (signed_char_type_node)) + return unsignedp ? unsigned_char_type_node : signed_char_type_node; + + if (bits == TYPE_PRECISION (short_integer_type_node)) + return unsignedp ? short_unsigned_type_node : short_integer_type_node; + + if (bits == TYPE_PRECISION (integer_type_node)) + return unsignedp ? unsigned_type_node : integer_type_node; + + if (bits == TYPE_PRECISION (long_integer_type_node)) + return unsignedp ? long_unsigned_type_node : long_integer_type_node; + + if (bits == TYPE_PRECISION (long_long_integer_type_node)) + return (unsignedp ? long_long_unsigned_type_node + : long_long_integer_type_node); + + if (bits <= TYPE_PRECISION (intHI_type_node)) + return unsignedp ? unsigned_intHI_type_node : intHI_type_node; + + if (bits <= TYPE_PRECISION (intSI_type_node)) + return unsignedp ? unsigned_intSI_type_node : intSI_type_node; + + if (bits <= TYPE_PRECISION (intDI_type_node)) + return unsignedp ? unsigned_intDI_type_node : intDI_type_node; + + return 0; +} + +/* Return a data type that has machine mode MODE. + If the mode is an integer, + then UNSIGNEDP selects between signed and unsigned types. */ + +tree +type_for_mode (mode, unsignedp) + enum machine_mode mode; + int unsignedp; +{ + if (mode == TYPE_MODE (signed_char_type_node)) + return unsignedp ? unsigned_char_type_node : signed_char_type_node; + + if (mode == TYPE_MODE (short_integer_type_node)) + return unsignedp ? short_unsigned_type_node : short_integer_type_node; + + if (mode == TYPE_MODE (integer_type_node)) + return unsignedp ? unsigned_type_node : integer_type_node; + + if (mode == TYPE_MODE (long_integer_type_node)) + return unsignedp ? long_unsigned_type_node : long_integer_type_node; + + if (mode == TYPE_MODE (long_long_integer_type_node)) + return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node; + + if (mode == TYPE_MODE (intHI_type_node)) + return unsignedp ? unsigned_intHI_type_node : intHI_type_node; + + if (mode == TYPE_MODE (intSI_type_node)) + return unsignedp ? unsigned_intSI_type_node : intSI_type_node; + + if (mode == TYPE_MODE (intDI_type_node)) + return unsignedp ? unsigned_intDI_type_node : intDI_type_node; + + if (mode == TYPE_MODE (float_type_node)) + return float_type_node; + + if (mode == TYPE_MODE (double_type_node)) + return double_type_node; + + if (mode == TYPE_MODE (long_double_type_node)) + return long_double_type_node; + + if (mode == TYPE_MODE (build_pointer_type (char_type_node))) + return build_pointer_type (char_type_node); + + if (mode == TYPE_MODE (build_pointer_type (integer_type_node))) + return build_pointer_type (integer_type_node); + + return 0; +} + +tree +truthvalue_conversion (expr) + tree expr; +{ + return chill_truthvalue_conversion (expr); +} +#endif