1 /* top.c -- Implementation File (module.c template V1.0)
2 Copyright (C) 1995, 1996, 1997, 1999, 2001, 2003
3 Free Software Foundation, Inc.
4 Contributed by James Craig Burley.
6 This file is part of GNU Fortran.
8 GNU Fortran is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
13 GNU Fortran is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GNU Fortran; see the file COPYING. If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
27 The GNU Fortran Front End.
62 /* Externals defined here. */
64 bool ffe_is_do_internal_checks_ = FALSE;
65 bool ffe_is_90_ = FFETARGET_defaultIS_90;
66 bool ffe_is_automatic_ = FFETARGET_defaultIS_AUTOMATIC;
67 bool ffe_is_backslash_ = FFETARGET_defaultIS_BACKSLASH;
68 bool ffe_is_emulate_complex_ = FALSE;
69 bool ffe_is_underscoring_ = FFETARGET_defaultEXTERNAL_UNDERSCORED
70 || FFETARGET_defaultUNDERSCORED_EXTERNAL_UNDERSCORED;
71 bool ffe_is_second_underscore_ = FFETARGET_defaultUNDERSCORED_EXTERNAL_UNDERSCORED;
72 bool ffe_is_debug_kludge_ = FALSE;
73 bool ffe_is_dollar_ok_ = FFETARGET_defaultIS_DOLLAR_OK;
74 bool ffe_is_f2c_ = FFETARGET_defaultIS_F2C;
75 bool ffe_is_f2c_library_ = FFETARGET_defaultIS_F2C_LIBRARY;
76 bool ffe_is_ffedebug_ = FALSE;
77 bool ffe_is_flatten_arrays_ = FALSE;
78 bool ffe_is_free_form_ = FFETARGET_defaultIS_FREE_FORM;
79 bool ffe_is_globals_ = TRUE;
80 bool ffe_is_init_local_zero_ = FFETARGET_defaultIS_INIT_LOCAL_ZERO;
81 bool ffe_is_mainprog_; /* TRUE if current prog unit known to be
83 bool ffe_is_onetrip_ = FALSE;
84 bool ffe_is_silent_ = TRUE;
85 bool ffe_is_typeless_boz_ = FALSE;
86 bool ffe_is_pedantic_ = FFETARGET_defaultIS_PEDANTIC;
87 bool ffe_is_saveall_; /* TRUE if mainprog or SAVE (no args) seen. */
88 bool ffe_is_ugly_args_ = TRUE;
89 bool ffe_is_ugly_assign_ = FALSE; /* Try and store pointer to ASSIGN labels in INTEGER vars. */
90 bool ffe_is_ugly_assumed_ = FALSE; /* DIMENSION X([...,]1) => DIMENSION X([...,]*) */
91 bool ffe_is_ugly_comma_ = FALSE;
92 bool ffe_is_ugly_complex_ = FALSE;
93 bool ffe_is_ugly_init_ = TRUE;
94 bool ffe_is_ugly_logint_ = FALSE;
95 bool ffe_is_version_ = FALSE;
96 bool ffe_is_vxt_ = FALSE;
97 bool ffe_is_warn_globals_ = TRUE;
98 bool ffe_is_warn_implicit_ = FALSE;
99 bool ffe_is_warn_surprising_ = FALSE;
100 bool ffe_is_zeros_ = FALSE;
101 ffeCase ffe_case_intrin_ = FFETARGET_defaultCASE_INTRIN;
102 ffeCase ffe_case_match_ = FFETARGET_defaultCASE_MATCH;
103 ffeCase ffe_case_source_ = FFETARGET_defaultCASE_SOURCE;
104 ffeCase ffe_case_symbol_ = FFETARGET_defaultCASE_SYMBOL;
105 ffeIntrinsicState ffe_intrinsic_state_badu77_ = FFE_intrinsicstateENABLED;
106 ffeIntrinsicState ffe_intrinsic_state_gnu_ = FFE_intrinsicstateENABLED;
107 ffeIntrinsicState ffe_intrinsic_state_f2c_ = FFE_intrinsicstateENABLED;
108 ffeIntrinsicState ffe_intrinsic_state_f90_ = FFE_intrinsicstateENABLED;
109 ffeIntrinsicState ffe_intrinsic_state_mil_ = FFE_intrinsicstateENABLED;
110 ffeIntrinsicState ffe_intrinsic_state_unix_ = FFE_intrinsicstateENABLED;
111 ffeIntrinsicState ffe_intrinsic_state_vxt_ = FFE_intrinsicstateENABLED;
112 int ffe_fixed_line_length_ = FFETARGET_defaultFIXED_LINE_LENGTH;
113 mallocPool ffe_file_pool_ = NULL;
114 mallocPool ffe_any_unit_pool_ = NULL;
115 mallocPool ffe_program_unit_pool_ = NULL;
116 ffeCounter ffe_count_0 = 0;
117 ffeCounter ffe_count_1 = 0;
118 ffeCounter ffe_count_2 = 0;
119 ffeCounter ffe_count_3 = 0;
120 ffeCounter ffe_count_4 = 0;
121 bool ffe_in_0 = FALSE;
122 bool ffe_in_1 = FALSE;
123 bool ffe_in_2 = FALSE;
124 bool ffe_in_3 = FALSE;
125 bool ffe_in_4 = FALSE;
127 /* Simple definitions and enumerations. */
130 /* Internal typedefs. */
133 /* Private include files. */
136 /* Internal structure definitions. */
139 /* Static objects accessed by functions in this module. */
142 /* Static functions (internal). */
144 static bool ffe_is_digit_string_ (const char *s);
146 /* Internal macros. */
149 ffe_is_digit_string_ (const char *s)
153 for (p = s; ISDIGIT (*p); ++p)
156 return (p != s) && (*p == '\0');
159 /* Get ready for options handling. */
161 ffe_init_options (unsigned int argc ATTRIBUTE_UNUSED,
162 const char **argv ATTRIBUTE_UNUSED)
164 /* Set default options for Fortran. */
165 flag_move_all_movables = 1;
166 flag_reduce_all_givs = 1;
167 flag_argument_noalias = 2;
168 flag_merge_constants = 2;
170 flag_complex_divide_method = 1;
175 /* Handle command-line options. Returns 0 if unrecognized, 1 if
176 recognized and handled. */
178 ffe_handle_option (size_t scode, const char *arg, int value)
180 enum opt_code code = (enum opt_code) scode;
188 ffe_set_is_version (TRUE);
189 ffe_set_is_do_internal_checks (TRUE);
193 ffe_set_is_onetrip (value);
194 ffe_set_is_ugly_assumed (value);
198 ffe_set_is_backslash (value);
200 ffe_set_is_typeless_boz (FALSE);
204 ffe_set_is_90 (value);
208 ffe_set_is_automatic (value);
212 ffe_set_is_dollar_ok (value);
216 ffe_set_is_f2c (value);
219 case OPT_ff2c_library:
220 ffe_set_is_f2c_library (value);
223 case OPT_fflatten_arrays:
224 ffe_set_is_f2c_library (value);
228 ffe_set_is_free_form (value);
231 case OPT_ffixed_form:
232 ffe_set_is_free_form (!value);
236 ffe_set_is_pedantic (value);
240 ffe_set_is_vxt (value);
243 case OPT_fvxt_not_f90:
244 warning ("-fvxt-not-f90 no longer supported -- try -fvxt");
247 case OPT_ff90_not_vxt:
248 warning ("-ff90-not-vxt no longer supported -- try -fno-vxt -ff90");
252 ffe_set_is_ugly_args (value);
253 ffe_set_is_ugly_assign (value);
254 ffe_set_is_ugly_assumed (value);
255 ffe_set_is_ugly_comma (value);
256 ffe_set_is_ugly_complex (value);
257 ffe_set_is_ugly_init (value);
258 ffe_set_is_ugly_logint (value);
262 ffe_set_is_ugly_args (value);
265 case OPT_fugly_assign:
266 ffe_set_is_ugly_assign (value);
269 case OPT_fugly_assumed:
270 ffe_set_is_ugly_assumed (value);
273 case OPT_fugly_comma:
274 ffe_set_is_ugly_comma (value);
277 case OPT_fugly_complex:
278 ffe_set_is_ugly_complex (value);
282 ffe_set_is_ugly_init (value);
285 case OPT_fugly_logint:
286 ffe_set_is_ugly_logint (value);
290 ffe_set_is_ffedebug (value);
293 case OPT_finit_local_zero:
294 ffe_set_is_init_local_zero (value);
297 case OPT_femulate_complex:
298 ffe_set_is_emulate_complex (value);
302 ffe_set_is_backslash (value);
305 case OPT_funderscoring:
306 ffe_set_is_underscoring (value);
309 case OPT_fsecond_underscore:
310 ffe_set_is_second_underscore (value);
314 ffe_set_is_zeros (value);
317 case OPT_fdebug_kludge:
318 warning ("-fdebug-kludge is disabled, use normal debugging flags");
322 ffe_set_is_onetrip (value);
326 ffe_set_is_silent (value);
330 ffe_set_is_globals (value);
333 case OPT_ffortran_bounds_check:
334 flag_bounds_check = value;
337 case OPT_ftypeless_boz:
338 ffe_set_is_typeless_boz (value);
341 case OPT_fintrin_case_initcap:
342 ffe_set_case_intrin (FFE_caseINITCAP);
345 case OPT_fintrin_case_lower:
346 ffe_set_case_intrin (FFE_caseLOWER);
349 case OPT_fintrin_case_upper:
350 ffe_set_case_intrin (FFE_caseUPPER);
353 case OPT_fintrin_case_any:
354 ffe_set_case_intrin (FFE_caseNONE);
357 case OPT_fmatch_case_initcap:
358 ffe_set_case_match (FFE_caseINITCAP);
361 case OPT_fmatch_case_lower:
362 ffe_set_case_match (FFE_caseLOWER);
365 case OPT_fmatch_case_upper:
366 ffe_set_case_match (FFE_caseUPPER);
369 case OPT_fmatch_case_any:
370 ffe_set_case_match (FFE_caseNONE);
373 case OPT_fsource_case_lower:
374 ffe_set_case_source (FFE_caseLOWER);
377 case OPT_fsource_case_preserve:
378 ffe_set_case_match (FFE_caseNONE);
381 case OPT_fsource_case_upper:
382 ffe_set_case_source (FFE_caseUPPER);
385 case OPT_fsymbol_case_initcap:
386 ffe_set_case_symbol (FFE_caseINITCAP);
389 case OPT_fsymbol_case_lower:
390 ffe_set_case_symbol (FFE_caseLOWER);
393 case OPT_fsymbol_case_upper:
394 ffe_set_case_symbol (FFE_caseUPPER);
397 case OPT_fsymbol_case_any:
398 ffe_set_case_symbol (FFE_caseNONE);
401 case OPT_fcase_strict_upper:
402 ffe_set_case_intrin (FFE_caseUPPER);
403 ffe_set_case_match (FFE_caseUPPER);
404 ffe_set_case_source (FFE_caseNONE);
405 ffe_set_case_symbol (FFE_caseUPPER);
408 case OPT_fcase_strict_lower:
409 ffe_set_case_intrin (FFE_caseLOWER);
410 ffe_set_case_match (FFE_caseLOWER);
411 ffe_set_case_source (FFE_caseNONE);
412 ffe_set_case_symbol (FFE_caseLOWER);
415 case OPT_fcase_initcap:
416 ffe_set_case_intrin (FFE_caseINITCAP);
417 ffe_set_case_match (FFE_caseINITCAP);
418 ffe_set_case_source (FFE_caseNONE);
419 ffe_set_case_symbol (FFE_caseINITCAP);
422 case OPT_fcase_upper:
423 ffe_set_case_intrin (FFE_caseNONE);
424 ffe_set_case_match (FFE_caseNONE);
425 ffe_set_case_source (FFE_caseUPPER);
426 ffe_set_case_symbol (FFE_caseNONE);
429 case OPT_fcase_lower:
430 ffe_set_case_intrin (FFE_caseNONE);
431 ffe_set_case_match (FFE_caseNONE);
432 ffe_set_case_source (FFE_caseLOWER);
433 ffe_set_case_symbol (FFE_caseNONE);
436 case OPT_fcase_preserve:
437 ffe_set_case_intrin (FFE_caseNONE);
438 ffe_set_case_match (FFE_caseNONE);
439 ffe_set_case_source (FFE_caseNONE);
440 ffe_set_case_symbol (FFE_caseNONE);
443 case OPT_fbadu77_intrinsics_delete:
444 ffe_set_intrinsic_state_badu77 (FFE_intrinsicstateDELETED);
447 case OPT_fbadu77_intrinsics_hide:
448 ffe_set_intrinsic_state_badu77 (FFE_intrinsicstateHIDDEN);
451 case OPT_fbadu77_intrinsics_disable:
452 ffe_set_intrinsic_state_badu77 (FFE_intrinsicstateDISABLED);
455 case OPT_fbadu77_intrinsics_enable:
456 ffe_set_intrinsic_state_badu77 (FFE_intrinsicstateENABLED);
459 case OPT_fgnu_intrinsics_delete:
460 ffe_set_intrinsic_state_gnu (FFE_intrinsicstateDELETED);
463 case OPT_fgnu_intrinsics_hide:
464 ffe_set_intrinsic_state_gnu (FFE_intrinsicstateHIDDEN);
467 case OPT_fgnu_intrinsics_disable:
468 ffe_set_intrinsic_state_gnu (FFE_intrinsicstateDISABLED);
471 case OPT_fgnu_intrinsics_enable:
472 ffe_set_intrinsic_state_gnu (FFE_intrinsicstateENABLED);
475 case OPT_ff2c_intrinsics_delete:
476 ffe_set_intrinsic_state_f2c (FFE_intrinsicstateDELETED);
479 case OPT_ff2c_intrinsics_hide:
480 ffe_set_intrinsic_state_f2c (FFE_intrinsicstateHIDDEN);
483 case OPT_ff2c_intrinsics_disable:
484 ffe_set_intrinsic_state_f2c (FFE_intrinsicstateDISABLED);
487 case OPT_ff2c_intrinsics_enable:
488 ffe_set_intrinsic_state_f2c (FFE_intrinsicstateENABLED);
491 case OPT_ff90_intrinsics_delete:
492 ffe_set_intrinsic_state_f90 (FFE_intrinsicstateDELETED);
495 case OPT_ff90_intrinsics_hide:
496 ffe_set_intrinsic_state_f90 (FFE_intrinsicstateHIDDEN);
499 case OPT_ff90_intrinsics_disable:
500 ffe_set_intrinsic_state_f90 (FFE_intrinsicstateDISABLED);
503 case OPT_ff90_intrinsics_enable:
504 ffe_set_intrinsic_state_f90 (FFE_intrinsicstateENABLED);
507 case OPT_fmil_intrinsics_delete:
508 ffe_set_intrinsic_state_mil (FFE_intrinsicstateDELETED);
511 case OPT_fmil_intrinsics_hide:
512 ffe_set_intrinsic_state_mil (FFE_intrinsicstateHIDDEN);
515 case OPT_fmil_intrinsics_disable:
516 ffe_set_intrinsic_state_mil (FFE_intrinsicstateDISABLED);
519 case OPT_fmil_intrinsics_enable:
520 ffe_set_intrinsic_state_mil (FFE_intrinsicstateENABLED);
523 case OPT_funix_intrinsics_delete:
524 ffe_set_intrinsic_state_unix (FFE_intrinsicstateDELETED);
527 case OPT_funix_intrinsics_hide:
528 ffe_set_intrinsic_state_unix (FFE_intrinsicstateHIDDEN);
531 case OPT_funix_intrinsics_disable:
532 ffe_set_intrinsic_state_unix (FFE_intrinsicstateDISABLED);
535 case OPT_funix_intrinsics_enable:
536 ffe_set_intrinsic_state_unix (FFE_intrinsicstateENABLED);
539 case OPT_fvxt_intrinsics_delete:
540 ffe_set_intrinsic_state_vxt (FFE_intrinsicstateDELETED);
543 case OPT_fvxt_intrinsics_hide:
544 ffe_set_intrinsic_state_vxt (FFE_intrinsicstateHIDDEN);
547 case OPT_fvxt_intrinsics_disable:
548 ffe_set_intrinsic_state_vxt (FFE_intrinsicstateDISABLED);
551 case OPT_fvxt_intrinsics_enable:
552 ffe_set_intrinsic_state_vxt (FFE_intrinsicstateENABLED);
555 case OPT_ffixed_line_length_:
556 if (strcmp (arg, "none") == 0)
557 ffe_set_fixed_line_length (0);
558 else if (ffe_is_digit_string_ (arg))
559 ffe_set_fixed_line_length (atol (arg));
568 case OPT_fpreprocessed:
569 /* These are for cpp. */
573 ffe_set_is_warn_globals (value);
577 ffe_set_is_warn_implicit (value);
580 case OPT_Wsurprising:
581 ffe_set_is_warn_surprising (value);
586 /* We save the value of warn_uninitialized, since if they put
587 -Wuninitialized on the command line, we need to generate a
588 warning about not using it without also specifying -O. */
591 if (warn_uninitialized != 1)
592 warn_uninitialized = 2;
595 warn_uninitialized = 0;
599 ffecom_decode_include_option (arg);
606 /* Run the FFE on a source file (not an INCLUDEd file).
608 Runs the whole shebang.
610 Prepare and invoke the appropriate lexer. */
613 ffe_file (ffewhereFile wf, FILE *f)
616 ffelex_set_handler ((ffelexHandler) ffest_first);
617 ffewhere_file_set (wf, TRUE, 0);
618 if (ffe_is_free_form_)
619 ffelex_file_free (wf, f);
621 ffelex_file_fixed (wf, f);
626 /* ffe_init_0 -- Initialize the FFE per image invocation
630 Performs per-image invocation. */
661 /* ffe_init_1 -- Initialize the FFE per source file
665 Performs per-source-file invocation (not including INCLUDEd files). */
673 assert (ffe_file_pool_ == NULL);
674 ffe_file_pool_ = malloc_pool_new ("File", malloc_pool_image (), 1024);
701 /* ffe_init_2 -- Initialize the FFE per outer program unit
705 Performs per-program-unit invocation. */
713 assert (ffe_program_unit_pool_ == NULL);
714 ffe_program_unit_pool_ = malloc_pool_new ("Program unit", ffe_file_pool_, 1024);
715 ffe_is_mainprog_ = FALSE;
716 ffe_is_saveall_ = !ffe_is_automatic_;
743 /* ffe_init_3 -- Initialize the FFE per any program unit
747 Performs per-any-unit initialization; does NOT do
748 per-statement-function-definition initialization (i.e. the chain
749 of inits, from 0-3, breaks here; level 4 must be invoked independently). */
757 assert (ffe_any_unit_pool_ == NULL);
758 ffe_any_unit_pool_ = malloc_pool_new ("Any unit", ffe_program_unit_pool_, 1024);
783 /* ffe_init_4 -- Initialize the FFE per statement function definition
816 /* ffe_terminate_0 -- Terminate the FFE prior to image termination
818 ffe_terminate_0(); */
821 ffe_terminate_0 (void)
826 ffebad_terminate_0 ();
827 ffebit_terminate_0 ();
828 ffebld_terminate_0 ();
829 ffecom_terminate_0 ();
830 ffedata_terminate_0 ();
831 ffeequiv_terminate_0 ();
832 ffeexpr_terminate_0 ();
833 ffeglobal_terminate_0 ();
834 ffeimplic_terminate_0 ();
835 ffeinfo_terminate_0 ();
836 ffeintrin_terminate_0 ();
837 ffelab_terminate_0 ();
838 ffelex_terminate_0 ();
839 ffename_terminate_0 ();
840 ffesrc_terminate_0 ();
841 ffest_terminate_0 ();
842 ffestorag_terminate_0 ();
843 ffesymbol_terminate_0 ();
844 ffetarget_terminate_0 ();
845 ffetype_terminate_0 ();
846 ffewhere_terminate_0 ();
849 /* ffe_terminate_1 -- Terminate the FFE after seeing source file EOF
851 ffe_terminate_1(); */
854 ffe_terminate_1 (void)
861 ffebad_terminate_1 ();
862 ffebit_terminate_1 ();
863 ffebld_terminate_1 ();
864 ffecom_terminate_1 ();
865 ffedata_terminate_1 ();
866 ffeequiv_terminate_1 ();
867 ffeexpr_terminate_1 ();
868 ffeglobal_terminate_1 ();
869 ffeimplic_terminate_1 ();
870 ffeinfo_terminate_1 ();
871 ffeintrin_terminate_1 ();
872 ffelab_terminate_1 ();
873 ffelex_terminate_1 ();
874 ffename_terminate_1 ();
875 ffesrc_terminate_1 ();
876 ffest_terminate_1 ();
877 ffestorag_terminate_1 ();
878 ffesymbol_terminate_1 ();
879 ffetarget_terminate_1 ();
880 ffetype_terminate_1 ();
881 ffewhere_terminate_1 ();
883 assert (ffe_file_pool_ != NULL);
884 malloc_pool_kill (ffe_file_pool_);
885 ffe_file_pool_ = NULL;
888 /* ffe_terminate_2 -- Terminate the FFE after seeing outer program unit END
890 ffe_terminate_2(); */
893 ffe_terminate_2 (void)
900 ffebad_terminate_2 ();
901 ffebit_terminate_2 ();
902 ffebld_terminate_2 ();
903 ffecom_terminate_2 ();
904 ffedata_terminate_2 ();
905 ffeequiv_terminate_2 ();
906 ffeexpr_terminate_2 ();
907 ffeglobal_terminate_2 ();
908 ffeimplic_terminate_2 ();
909 ffeinfo_terminate_2 ();
910 ffeintrin_terminate_2 ();
911 ffelab_terminate_2 ();
912 ffelex_terminate_2 ();
913 ffename_terminate_2 ();
914 ffesrc_terminate_2 ();
915 ffest_terminate_2 ();
916 ffestorag_terminate_2 ();
917 ffesymbol_terminate_2 ();
918 ffetarget_terminate_2 ();
919 ffetype_terminate_2 ();
920 ffewhere_terminate_2 ();
922 assert (ffe_program_unit_pool_ != NULL);
923 malloc_pool_kill (ffe_program_unit_pool_);
924 ffe_program_unit_pool_ = NULL;
927 /* ffe_terminate_3 -- Terminate the FFE after seeing any program unit END
929 ffe_terminate_3(); */
932 ffe_terminate_3 (void)
937 ffebad_terminate_3 ();
938 ffebit_terminate_3 ();
939 ffebld_terminate_3 ();
940 ffecom_terminate_3 ();
941 ffedata_terminate_3 ();
942 ffeequiv_terminate_3 ();
943 ffeexpr_terminate_3 ();
944 ffeglobal_terminate_3 ();
945 ffeimplic_terminate_3 ();
946 ffeinfo_terminate_3 ();
947 ffeintrin_terminate_3 ();
948 ffelab_terminate_3 ();
949 ffelex_terminate_3 ();
950 ffename_terminate_3 ();
951 ffesrc_terminate_3 ();
952 ffest_terminate_3 ();
953 ffestorag_terminate_3 ();
954 ffesymbol_terminate_3 ();
955 ffetarget_terminate_3 ();
956 ffetype_terminate_3 ();
957 ffewhere_terminate_3 ();
959 assert (ffe_any_unit_pool_ != NULL);
960 malloc_pool_kill (ffe_any_unit_pool_);
961 ffe_any_unit_pool_ = NULL;
964 /* ffe_terminate_4 -- Terminate the FFE after seeing sfunc def expression
966 ffe_terminate_4(); */
969 ffe_terminate_4 (void)
973 ffebad_terminate_4 ();
974 ffebit_terminate_4 ();
975 ffebld_terminate_4 ();
976 ffecom_terminate_4 ();
977 ffedata_terminate_4 ();
978 ffeequiv_terminate_4 ();
979 ffeexpr_terminate_4 ();
980 ffeglobal_terminate_4 ();
981 ffeimplic_terminate_4 ();
982 ffeinfo_terminate_4 ();
983 ffeintrin_terminate_4 ();
984 ffelab_terminate_4 ();
985 ffelex_terminate_4 ();
986 ffename_terminate_4 ();
987 ffesrc_terminate_4 ();
988 ffest_terminate_4 ();
989 ffestorag_terminate_4 ();
990 ffesymbol_terminate_4 ();
991 ffetarget_terminate_4 ();
992 ffetype_terminate_4 ();
993 ffewhere_terminate_4 ();