home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / g77-0.5.15-src.tgz / tar.out / fsf / g77 / f / top.c < prev    next >
C/C++ Source or Header  |  1996-09-28  |  22KB  |  778 lines

  1. /* top.c -- Implementation File (module.c template V1.0)
  2.    Copyright (C) 1995 Free Software Foundation, Inc.
  3.    Contributed by James Craig Burley (burley@gnu.ai.mit.edu).
  4.  
  5. This file is part of GNU Fortran.
  6.  
  7. GNU Fortran is free software; you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License as published by
  9. the Free Software Foundation; either version 2, or (at your option)
  10. any later version.
  11.  
  12. GNU Fortran is distributed in the hope that it will be useful,
  13. but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. GNU General Public License for more details.
  16.  
  17. You should have received a copy of the GNU General Public License
  18. along with GNU Fortran; see the file COPYING.  If not, write to
  19. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  20.  
  21.    Related Modules:
  22.       None.
  23.  
  24.    Description:
  25.       The GNU Fortran Front End.
  26.  
  27.    Modifications:
  28. */
  29.  
  30. /* Include files. */
  31.  
  32. #include <ctype.h>
  33. #include "proj.h"
  34. #include "top.h"
  35. #include "bad.h"
  36. #include "bit.h"
  37. #include "bld.h"
  38. #include "com.h"
  39. #include "data.h"
  40. #include "equiv.h"
  41. #include "expr.h"
  42. #include "global.h"
  43. #include "implic.h"
  44. #include "info.h"
  45. #include "intrin.h"
  46. #include "lab.h"
  47. #include "lex.h"
  48. #include "malloc.h"
  49. #include "name.h"
  50. #include "src.h"
  51. #include "st.h"
  52. #include "storag.h"
  53. #include "symbol.h"
  54. #include "target.h"
  55. #include "where.h"
  56. #if FFECOM_targetCURRENT == FFECOM_targetGCC
  57. #include "flags.h"
  58. #endif
  59.  
  60. /* Externals defined here. */
  61.  
  62. int flag_traditional;        /* Shouldn't need this (C front end only)! */
  63. bool ffe_is_90_ = FFETARGET_defaultIS_90;
  64. bool ffe_is_automatic_ = FFETARGET_defaultIS_AUTOMATIC;
  65. bool ffe_is_backslash_ = FFETARGET_defaultIS_BACKSLASH;
  66. bool ffe_is_dollar_ok_ = FFETARGET_defaultIS_DOLLAR_OK;
  67. bool ffe_is_f2c_ = FFETARGET_defaultIS_F2C;
  68. bool ffe_is_f2c_library_ = FFETARGET_defaultIS_F2C_LIBRARY;
  69. bool ffe_is_ffedebug_ = FALSE;
  70. bool ffe_is_free_form_ = FFETARGET_defaultIS_FREE_FORM;
  71. bool ffe_is_init_local_zero_ = FFETARGET_defaultIS_INIT_LOCAL_ZERO;
  72. bool ffe_is_mainprog_;        /* TRUE if current prog unit known to be
  73.                    main. */
  74. bool ffe_is_pedantic_ = FFETARGET_defaultIS_PEDANTIC;
  75. bool ffe_is_saveall_;        /* TRUE if mainprog or SAVE (no args) seen. */
  76. bool ffe_is_ugly_ = FFETARGET_defaultIS_UGLY;
  77. bool ffe_is_ugly_args_ = FFETARGET_defaultIS_UGLY_ARGS;
  78. bool ffe_is_ugly_init_ = FFETARGET_defaultIS_UGLY_INIT;
  79. bool ffe_is_version_ = FALSE;
  80. bool ffe_is_vxt_not_90_ = FFETARGET_defaultIS_VXT_NOT_90;
  81. bool ffe_is_warn_implicit_ = FALSE;
  82. ffeCase ffe_case_intrin_ = FFETARGET_defaultCASE_INTRIN;
  83. ffeCase ffe_case_match_ = FFETARGET_defaultCASE_MATCH;
  84. ffeCase ffe_case_source_ = FFETARGET_defaultCASE_SOURCE;
  85. ffeCase ffe_case_symbol_ = FFETARGET_defaultCASE_SYMBOL;
  86. ffeIntrinsicState ffe_intrinsic_state_dcp_ = FFETARGET_defaultSTATE_DCP;
  87. ffeIntrinsicState ffe_intrinsic_state_f2c_ = FFETARGET_defaultSTATE_F2C;
  88. ffeIntrinsicState ffe_intrinsic_state_f90_ = FFETARGET_defaultSTATE_F90;
  89. ffeIntrinsicState ffe_intrinsic_state_mil_ = FFETARGET_defaultSTATE_MIL;
  90. ffeIntrinsicState ffe_intrinsic_state_vxt_ = FFETARGET_defaultSTATE_VXT;
  91. int ffe_fixed_line_length_ = FFETARGET_defaultFIXED_LINE_LENGTH;
  92. mallocPool ffe_file_pool_ = NULL;
  93. mallocPool ffe_any_unit_pool_ = NULL;
  94. mallocPool ffe_program_unit_pool_ = NULL;
  95. ffeCounter ffe_count_0 = 0;
  96. ffeCounter ffe_count_1 = 0;
  97. ffeCounter ffe_count_2 = 0;
  98. ffeCounter ffe_count_3 = 0;
  99. ffeCounter ffe_count_4 = 0;
  100. bool ffe_in_0 = FALSE;
  101. bool ffe_in_1 = FALSE;
  102. bool ffe_in_2 = FALSE;
  103. bool ffe_in_3 = FALSE;
  104. bool ffe_in_4 = FALSE;
  105.  
  106. /* Simple definitions and enumerations. */
  107.  
  108.  
  109. /* Internal typedefs. */
  110.  
  111.  
  112. /* Private include files. */
  113.  
  114.  
  115. /* Internal structure definitions. */
  116.  
  117.  
  118. /* Static objects accessed by functions in this module. */
  119.  
  120.  
  121. /* Static functions (internal). */
  122.  
  123. static bool ffe_is_digit_string_ (char *s);
  124.  
  125. /* Internal macros. */
  126.  
  127. static bool
  128. ffe_is_digit_string_ (char *s)
  129. {
  130.   char *p;
  131.  
  132.   for (p = s; isdigit (*p); ++p)
  133.     ;
  134.  
  135.   return (p != s) && (*p == '\0');
  136. }
  137.  
  138. /* Handle command-line options.     Returns 0 if unrecognized, 1 if
  139.    recognized and handled.  */
  140.  
  141. int
  142. ffe_decode_option (char *opt)
  143. {
  144.   if (opt[0] != '-')
  145.     return 0;
  146.   if (opt[1] == 'f')
  147.     {
  148.       if (strcmp (&opt[2], "version") == 0)
  149.     ffe_set_is_version (TRUE);
  150.       else if (strcmp (&opt[2], "f90") == 0)
  151.     ffe_set_is_90 (TRUE);
  152.       else if (strcmp (&opt[2], "no-f90") == 0)
  153.     ffe_set_is_90 (FALSE);
  154.       else if (strcmp (&opt[2], "automatic") == 0)
  155.     ffe_set_is_automatic (TRUE);
  156.       else if (strcmp (&opt[2], "no-automatic") == 0)
  157.     ffe_set_is_automatic (FALSE);
  158.       else if (strcmp (&opt[2], "dollar-ok") == 0)
  159.     ffe_set_is_dollar_ok (TRUE);
  160.       else if (strcmp (&opt[2], "no-dollar-ok") == 0)
  161.     ffe_set_is_dollar_ok (FALSE);
  162.       else if (strcmp (&opt[2], "f2c") == 0)
  163.     ffe_set_is_f2c (TRUE);
  164.       else if (strcmp (&opt[2], "no-f2c") == 0)
  165.     ffe_set_is_f2c (FALSE);
  166.       else if (strcmp (&opt[2], "f2c-library") == 0)
  167.     ffe_set_is_f2c_library (TRUE);
  168.       else if (strcmp (&opt[2], "no-f2c-library") == 0)
  169.     ffe_set_is_f2c_library (FALSE);
  170.       else if (strcmp (&opt[2], "free-form") == 0)
  171.     ffe_set_is_free_form (TRUE);
  172.       else if (strcmp (&opt[2], "no-free-form") == 0)
  173.     ffe_set_is_free_form (FALSE);
  174.       else if (strcmp (&opt[2], "fixed-form") == 0)
  175.     ffe_set_is_free_form (FALSE);
  176.       else if (strcmp (&opt[2], "no-fixed-form") == 0)
  177.     ffe_set_is_free_form (TRUE);
  178.       else if (strcmp (&opt[2], "pedantic") == 0)
  179.     ffe_set_is_pedantic (TRUE);
  180.       else if (strcmp (&opt[2], "no-pedantic") == 0)
  181.     ffe_set_is_pedantic (FALSE);
  182.       else if (strcmp (&opt[2], "vxt-not-f90") == 0)
  183.     ffe_set_is_vxt_not_90 (TRUE);
  184.       else if (strcmp (&opt[2], "f90-not-vxt") == 0)
  185.     ffe_set_is_vxt_not_90 (FALSE);
  186.       else if (strcmp (&opt[2], "ugly") == 0)
  187.     {
  188.       ffe_set_is_ugly (TRUE);
  189.       ffe_set_is_ugly_args (TRUE);
  190.       ffe_set_is_ugly_init (TRUE);
  191.     }
  192.       else if (strcmp (&opt[2], "no-ugly") == 0)
  193.     {
  194.       ffe_set_is_ugly (FALSE);
  195.       ffe_set_is_ugly_args (FALSE);
  196.       ffe_set_is_ugly_init (FALSE);
  197.     }
  198.       else if (strcmp (&opt[2], "ugly-args") == 0)
  199.     ffe_set_is_ugly_args (TRUE);
  200.       else if (strcmp (&opt[2], "no-ugly-args") == 0)
  201.     ffe_set_is_ugly_args (FALSE);
  202.       else if (strcmp (&opt[2], "ugly-init") == 0)
  203.     ffe_set_is_ugly_init (TRUE);
  204.       else if (strcmp (&opt[2], "no-ugly-init") == 0)
  205.     ffe_set_is_ugly_init (FALSE);
  206.       else if (strcmp (&opt[2], "debug") == 0)
  207.     ffe_set_is_ffedebug (TRUE);
  208.       else if (strcmp (&opt[2], "no-debug") == 0)
  209.     ffe_set_is_ffedebug (FALSE);
  210.       else if (strcmp (&opt[2], "init-local-zero") == 0)
  211.     ffe_set_is_init_local_zero (TRUE);
  212.       else if (strcmp (&opt[2], "no-init-local-zero") == 0)
  213.     ffe_set_is_init_local_zero (FALSE);
  214.       else if (strcmp (&opt[2], "backslash") == 0)
  215.     ffe_set_is_backslash (TRUE);
  216.       else if (strcmp (&opt[2], "no-backslash") == 0)
  217.     ffe_set_is_backslash (FALSE);
  218.       else if (strcmp (&opt[2], "intrin-case-initcap") == 0)
  219.     ffe_set_case_intrin (FFE_caseINITCAP);
  220.       else if (strcmp (&opt[2], "intrin-case-upper") == 0)
  221.     ffe_set_case_intrin (FFE_caseUPPER);
  222.       else if (strcmp (&opt[2], "intrin-case-lower") == 0)
  223.     ffe_set_case_intrin (FFE_caseLOWER);
  224.       else if (strcmp (&opt[2], "intrin-case-any") == 0)
  225.     ffe_set_case_intrin (FFE_caseNONE);
  226.       else if (strcmp (&opt[2], "match-case-initcap") == 0)
  227.     ffe_set_case_match (FFE_caseINITCAP);
  228.       else if (strcmp (&opt[2], "match-case-upper") == 0)
  229.     ffe_set_case_match (FFE_caseUPPER);
  230.       else if (strcmp (&opt[2], "match-case-lower") == 0)
  231.     ffe_set_case_match (FFE_caseLOWER);
  232.       else if (strcmp (&opt[2], "match-case-any") == 0)
  233.     ffe_set_case_match (FFE_caseNONE);
  234.       else if (strcmp (&opt[2], "source-case-upper") == 0)
  235.     ffe_set_case_source (FFE_caseUPPER);
  236.       else if (strcmp (&opt[2], "source-case-lower") == 0)
  237.     ffe_set_case_source (FFE_caseLOWER);
  238.       else if (strcmp (&opt[2], "source-case-preserve") == 0)
  239.     ffe_set_case_source (FFE_caseNONE);
  240.       else if (strcmp (&opt[2], "symbol-case-initcap") == 0)
  241.     ffe_set_case_symbol (FFE_caseINITCAP);
  242.       else if (strcmp (&opt[2], "symbol-case-upper") == 0)
  243.     ffe_set_case_symbol (FFE_caseUPPER);
  244.       else if (strcmp (&opt[2], "symbol-case-lower") == 0)
  245.     ffe_set_case_symbol (FFE_caseLOWER);
  246.       else if (strcmp (&opt[2], "symbol-case-any") == 0)
  247.     ffe_set_case_symbol (FFE_caseNONE);
  248.       else if (strcmp (&opt[2], "case-strict-upper") == 0)
  249.     {
  250.       ffe_set_case_intrin (FFE_caseUPPER);
  251.       ffe_set_case_match (FFE_caseUPPER);
  252.       ffe_set_case_source (FFE_caseNONE);
  253.       ffe_set_case_symbol (FFE_caseUPPER);
  254.     }
  255.       else if (strcmp (&opt[2], "case-strict-lower") == 0)
  256.     {
  257.       ffe_set_case_intrin (FFE_caseLOWER);
  258.       ffe_set_case_match (FFE_caseLOWER);
  259.       ffe_set_case_source (FFE_caseNONE);
  260.       ffe_set_case_symbol (FFE_caseLOWER);
  261.     }
  262.       else if (strcmp (&opt[2], "case-initcap") == 0)
  263.     {
  264.       ffe_set_case_intrin (FFE_caseINITCAP);
  265.       ffe_set_case_match (FFE_caseINITCAP);
  266.       ffe_set_case_source (FFE_caseNONE);
  267.       ffe_set_case_symbol (FFE_caseINITCAP);
  268.     }
  269.       else if (strcmp (&opt[2], "case-upper") == 0)
  270.     {
  271.       ffe_set_case_intrin (FFE_caseNONE);
  272.       ffe_set_case_match (FFE_caseNONE);
  273.       ffe_set_case_source (FFE_caseUPPER);
  274.       ffe_set_case_symbol (FFE_caseNONE);
  275.     }
  276.       else if (strcmp (&opt[2], "case-lower") == 0)
  277.     {
  278.       ffe_set_case_intrin (FFE_caseNONE);
  279.       ffe_set_case_match (FFE_caseNONE);
  280.       ffe_set_case_source (FFE_caseLOWER);
  281.       ffe_set_case_symbol (FFE_caseNONE);
  282.     }
  283.       else if (strcmp (&opt[2], "case-preserve") == 0)
  284.     {
  285.       ffe_set_case_intrin (FFE_caseNONE);
  286.       ffe_set_case_match (FFE_caseNONE);
  287.       ffe_set_case_source (FFE_caseNONE);
  288.       ffe_set_case_symbol (FFE_caseNONE);
  289.     }
  290.       else if (strcmp (&opt[2], "dcp-intrinsics-delete") == 0)
  291.     ffe_set_intrinsic_state_dcp (FFE_intrinsicstateDELETED);
  292.       else if (strcmp (&opt[2], "dcp-intrinsics-hide") == 0)
  293.     ffe_set_intrinsic_state_dcp (FFE_intrinsicstateHIDDEN);
  294.       else if (strcmp (&opt[2], "dcp-intrinsics-disable") == 0)
  295.     ffe_set_intrinsic_state_dcp (FFE_intrinsicstateDISABLED);
  296.       else if (strcmp (&opt[2], "dcp-intrinsics-enable") == 0)
  297.     ffe_set_intrinsic_state_dcp (FFE_intrinsicstateENABLED);
  298.       else if (strcmp (&opt[2], "f2c-intrinsics-delete") == 0)
  299.     ffe_set_intrinsic_state_f2c (FFE_intrinsicstateDELETED);
  300.       else if (strcmp (&opt[2], "f2c-intrinsics-hide") == 0)
  301.     ffe_set_intrinsic_state_f2c (FFE_intrinsicstateHIDDEN);
  302.       else if (strcmp (&opt[2], "f2c-intrinsics-disable") == 0)
  303.     ffe_set_intrinsic_state_f2c (FFE_intrinsicstateDISABLED);
  304.       else if (strcmp (&opt[2], "f2c-intrinsics-enable") == 0)
  305.     ffe_set_intrinsic_state_f2c (FFE_intrinsicstateENABLED);
  306.       else if (strcmp (&opt[2], "f90-intrinsics-delete") == 0)
  307.     ffe_set_intrinsic_state_f90 (FFE_intrinsicstateDELETED);
  308.       else if (strcmp (&opt[2], "f90-intrinsics-hide") == 0)
  309.     ffe_set_intrinsic_state_f90 (FFE_intrinsicstateHIDDEN);
  310.       else if (strcmp (&opt[2], "f90-intrinsics-disable") == 0)
  311.     ffe_set_intrinsic_state_f90 (FFE_intrinsicstateDISABLED);
  312.       else if (strcmp (&opt[2], "f90-intrinsics-enable") == 0)
  313.     ffe_set_intrinsic_state_f90 (FFE_intrinsicstateENABLED);
  314.       else if (strcmp (&opt[2], "mil-intrinsics-delete") == 0)
  315.     ffe_set_intrinsic_state_mil (FFE_intrinsicstateDELETED);
  316.       else if (strcmp (&opt[2], "mil-intrinsics-hide") == 0)
  317.     ffe_set_intrinsic_state_mil (FFE_intrinsicstateHIDDEN);
  318.       else if (strcmp (&opt[2], "mil-intrinsics-disable") == 0)
  319.     ffe_set_intrinsic_state_mil (FFE_intrinsicstateDISABLED);
  320.       else if (strcmp (&opt[2], "mil-intrinsics-enable") == 0)
  321.     ffe_set_intrinsic_state_mil (FFE_intrinsicstateENABLED);
  322.       else if (strcmp (&opt[2], "vxt-intrinsics-delete") == 0)
  323.     ffe_set_intrinsic_state_vxt (FFE_intrinsicstateDELETED);
  324.       else if (strcmp (&opt[2], "vxt-intrinsics-hide") == 0)
  325.     ffe_set_intrinsic_state_vxt (FFE_intrinsicstateHIDDEN);
  326.       else if (strcmp (&opt[2], "vxt-intrinsics-disable") == 0)
  327.     ffe_set_intrinsic_state_vxt (FFE_intrinsicstateDISABLED);
  328.       else if (strcmp (&opt[2], "vxt-intrinsics-enable") == 0)
  329.     ffe_set_intrinsic_state_vxt (FFE_intrinsicstateENABLED);
  330.       else if (strncmp (&opt[2], "fixed-line-length-",
  331.             strlen ("fixed-line-length-")) == 0)
  332.     {
  333.       char *len = &opt[2] + strlen ("fixed-line-length-");
  334.  
  335.       if (strcmp (len, "none") == 0)
  336.         ffe_set_fixed_line_length (0);
  337.       else if (ffe_is_digit_string_ (len))
  338.         ffe_set_fixed_line_length (atol (len));
  339.       else
  340.         return 0;
  341.     }
  342.       else
  343.     return 0;
  344.     }
  345.   else if (opt[1] == 'W')
  346.     {
  347.       if (!strcmp (&opt[2], "comment"))
  348.     ; /* cpp handles this one.  */
  349.       else if (!strcmp (&opt[2], "no-comment"))
  350.     ; /* cpp handles this one.  */
  351.       else if (!strcmp (&opt[2], "comments"))
  352.     ; /* cpp handles this one.  */
  353.       else if (!strcmp (&opt[2], "no-comments"))
  354.     ; /* cpp handles this one.  */
  355.       else if (!strcmp (&opt[2], "trigraphs"))
  356.     ; /* cpp handles this one.  */
  357.       else if (!strcmp (&opt[2], "no-trigraphs"))
  358.     ; /* cpp handles this one.  */
  359.       else if (!strcmp (&opt[2], "import"))
  360.     ; /* cpp handles this one.  */
  361.       else if (!strcmp (&opt[2], "no-import"))
  362.     ; /* cpp handles this one.  */
  363.       else if (!strcmp (&opt[2], "implicit"))
  364.     ffe_set_is_warn_implicit(TRUE);
  365.       else if (!strcmp (&opt[2], "no-implicit"))
  366.     ffe_set_is_warn_implicit(FALSE);
  367.       else if (!strcmp (&opt[2], "all"))
  368.     {
  369.       extra_warnings = 1;
  370.       /* We save the value of warn_uninitialized, since if they put
  371.          -Wuninitialized on the command line, we need to generate a
  372.          warning about not using it without also specifying -O.  */
  373.       if (warn_uninitialized != 1)
  374.         warn_uninitialized = 2;
  375.       warn_unused = 1;
  376.     }
  377.       else
  378.     return 0;
  379.     }
  380.   else if (opt[1] == 'I')
  381.     return ffecom_decode_include_option (&opt[2]);
  382.   else
  383.     return 0;
  384.  
  385.   return 1;
  386. }
  387.  
  388. /* Run the FFE on a source file (not an INCLUDEd file).
  389.  
  390.    Runs the whole shebang.
  391.  
  392.    Prepare and invoke the appropriate lexer.  */
  393.  
  394. void
  395. ffe_file (ffewhereFile wf, FILE *f)
  396. {
  397.   ffe_init_1 ();
  398.   ffelex_set_handler ((ffelexHandler) ffest_first);
  399.   ffewhere_file_begin (NULL, wf);
  400.   if (ffe_is_free_form_)
  401.     ffelex_file_free (wf, f);
  402.   else
  403.     ffelex_file_fixed (wf, f);
  404.   ffewhere_file_end (wf, NULL);
  405.   ffest_eof ();
  406.   ffe_terminate_1 ();
  407. }
  408.  
  409. /* ffe_init_0 -- Initialize the FFE per image invocation
  410.  
  411.    ffe_init_0();
  412.  
  413.    Performs per-image invocation.  */
  414.  
  415. void
  416. ffe_init_0 ()
  417. {
  418.   ++ffe_count_0;
  419.   ffe_in_0 = TRUE;
  420.  
  421.   ffebad_init_0 ();
  422.   ffebit_init_0 ();
  423.   ffebld_init_0 ();
  424.   ffecom_init_0 ();
  425.   ffedata_init_0 ();
  426.   ffeequiv_init_0 ();
  427.   ffeexpr_init_0 ();
  428.   ffeglobal_init_0 ();
  429.   ffeimplic_init_0 ();
  430.   ffeinfo_init_0 ();
  431.   ffeintrin_init_0 ();
  432.   ffelab_init_0 ();
  433.   ffelex_init_0 ();
  434.   ffename_init_0 ();
  435.   ffesrc_init_0 ();
  436.   ffest_init_0 ();
  437.   ffestorag_init_0 ();
  438.   ffesymbol_init_0 ();
  439.   ffetarget_init_0 ();
  440.   ffetype_init_0 ();
  441.   ffewhere_init_0 ();
  442. }
  443.  
  444. /* ffe_init_1 -- Initialize the FFE per source file
  445.  
  446.    ffe_init_1();
  447.  
  448.    Performs per-source-file invocation (not including INCLUDEd files).    */
  449.  
  450. void
  451. ffe_init_1 ()
  452. {
  453.   ++ffe_count_1;
  454.   ffe_in_1 = TRUE;
  455.  
  456.   assert (ffe_file_pool_ == NULL);
  457.   ffe_file_pool_ = malloc_pool_new ("File", malloc_pool_image (), 1024);
  458.  
  459.   ffebad_init_1 ();
  460.   ffebit_init_1 ();
  461.   ffebld_init_1 ();
  462.   ffecom_init_1 ();
  463.   ffedata_init_1 ();
  464.   ffeequiv_init_1 ();
  465.   ffeexpr_init_1 ();
  466.   ffeglobal_init_1 ();
  467.   ffeimplic_init_1 ();
  468.   ffeinfo_init_1 ();
  469.   ffeintrin_init_1 ();
  470.   ffelab_init_1 ();
  471.   ffelex_init_1 ();
  472.   ffename_init_1 ();
  473.   ffesrc_init_1 ();
  474.   ffest_init_1 ();
  475.   ffestorag_init_1 ();
  476.   ffesymbol_init_1 ();
  477.   ffetarget_init_1 ();
  478.   ffetype_init_1 ();
  479.   ffewhere_init_1 ();
  480.  
  481.   ffe_init_2 ();
  482. }
  483.  
  484. /* ffe_init_2 -- Initialize the FFE per outer program unit
  485.  
  486.    ffe_init_2();
  487.  
  488.    Performs per-program-unit invocation.  */
  489.  
  490. void
  491. ffe_init_2 ()
  492. {
  493.   ++ffe_count_2;
  494.   ffe_in_2 = TRUE;
  495.  
  496.   assert (ffe_program_unit_pool_ == NULL);
  497.   ffe_program_unit_pool_ = malloc_pool_new ("Program unit", ffe_file_pool_, 1024);
  498.   ffe_is_mainprog_ = FALSE;
  499.   ffe_is_saveall_ = !ffe_is_automatic_;
  500.  
  501.   ffebad_init_2 ();
  502.   ffebit_init_2 ();
  503.   ffebld_init_2 ();
  504.   ffecom_init_2 ();
  505.   ffedata_init_2 ();
  506.   ffeequiv_init_2 ();
  507.   ffeexpr_init_2 ();
  508.   ffeglobal_init_2 ();
  509.   ffeimplic_init_2 ();
  510.   ffeinfo_init_2 ();
  511.   ffeintrin_init_2 ();
  512.   ffelab_init_2 ();
  513.   ffelex_init_2 ();
  514.   ffename_init_2 ();
  515.   ffesrc_init_2 ();
  516.   ffest_init_2 ();
  517.   ffestorag_init_2 ();
  518.   ffesymbol_init_2 ();
  519.   ffetarget_init_2 ();
  520.   ffetype_init_2 ();
  521.   ffewhere_init_2 ();
  522.  
  523.   ffe_init_3 ();
  524. }
  525.  
  526. /* ffe_init_3 -- Initialize the FFE per any program unit
  527.  
  528.    ffe_init_3();
  529.  
  530.    Performs per-any-unit initialization; does NOT do
  531.    per-statement-function-definition initialization (i.e. the chain
  532.    of inits, from 0-3, breaks here; level 4 must be invoked independently).  */
  533.  
  534. void
  535. ffe_init_3 ()
  536. {
  537.   ++ffe_count_3;
  538.   ffe_in_3 = TRUE;
  539.  
  540.   assert (ffe_any_unit_pool_ == NULL);
  541.   ffe_any_unit_pool_ = malloc_pool_new ("Any unit", ffe_program_unit_pool_, 1024);
  542.  
  543.   ffebad_init_3 ();
  544.   ffebit_init_3 ();
  545.   ffebld_init_3 ();
  546.   ffecom_init_3 ();
  547.   ffedata_init_3 ();
  548.   ffeequiv_init_3 ();
  549.   ffeexpr_init_3 ();
  550.   ffeglobal_init_3 ();
  551.   ffeimplic_init_3 ();
  552.   ffeinfo_init_3 ();
  553.   ffeintrin_init_3 ();
  554.   ffelab_init_3 ();
  555.   ffelex_init_3 ();
  556.   ffename_init_3 ();
  557.   ffesrc_init_3 ();
  558.   ffest_init_3 ();
  559.   ffestorag_init_3 ();
  560.   ffesymbol_init_3 ();
  561.   ffetarget_init_3 ();
  562.   ffetype_init_3 ();
  563.   ffewhere_init_3 ();
  564. }
  565.  
  566. /* ffe_init_4 -- Initialize the FFE per statement function definition
  567.  
  568.    ffe_init_4();  */
  569.  
  570. void
  571. ffe_init_4 ()
  572. {
  573.   ++ffe_count_4;
  574.   ffe_in_4 = TRUE;
  575.  
  576.   ffebad_init_4 ();
  577.   ffebit_init_4 ();
  578.   ffebld_init_4 ();
  579.   ffecom_init_4 ();
  580.   ffedata_init_4 ();
  581.   ffeequiv_init_4 ();
  582.   ffeexpr_init_4 ();
  583.   ffeglobal_init_4 ();
  584.   ffeimplic_init_4 ();
  585.   ffeinfo_init_4 ();
  586.   ffeintrin_init_4 ();
  587.   ffelab_init_4 ();
  588.   ffelex_init_4 ();
  589.   ffename_init_4 ();
  590.   ffesrc_init_4 ();
  591.   ffest_init_4 ();
  592.   ffestorag_init_4 ();
  593.   ffesymbol_init_4 ();
  594.   ffetarget_init_4 ();
  595.   ffetype_init_4 ();
  596.   ffewhere_init_4 ();
  597. }
  598.  
  599. /* ffe_terminate_0 -- Terminate the FFE prior to image termination
  600.  
  601.    ffe_terminate_0();  */
  602.  
  603. void
  604. ffe_terminate_0 ()
  605. {
  606.   ffe_count_1 = 0;
  607.   ffe_in_0 = FALSE;
  608.  
  609.   ffebad_terminate_0 ();
  610.   ffebit_terminate_0 ();
  611.   ffebld_terminate_0 ();
  612.   ffecom_terminate_0 ();
  613.   ffedata_terminate_0 ();
  614.   ffeequiv_terminate_0 ();
  615.   ffeexpr_terminate_0 ();
  616.   ffeglobal_terminate_0 ();
  617.   ffeimplic_terminate_0 ();
  618.   ffeinfo_terminate_0 ();
  619.   ffeintrin_terminate_0 ();
  620.   ffelab_terminate_0 ();
  621.   ffelex_terminate_0 ();
  622.   ffename_terminate_0 ();
  623.   ffesrc_terminate_0 ();
  624.   ffest_terminate_0 ();
  625.   ffestorag_terminate_0 ();
  626.   ffesymbol_terminate_0 ();
  627.   ffetarget_terminate_0 ();
  628.   ffetype_terminate_0 ();
  629.   ffewhere_terminate_0 ();
  630. }
  631.  
  632. /* ffe_terminate_1 -- Terminate the FFE after seeing source file EOF
  633.  
  634.    ffe_terminate_1();  */
  635.  
  636. void
  637. ffe_terminate_1 ()
  638. {
  639.   ffe_count_2 = 0;
  640.   ffe_in_1 = FALSE;
  641.  
  642.   ffe_terminate_2 ();
  643.  
  644.   ffebad_terminate_1 ();
  645.   ffebit_terminate_1 ();
  646.   ffebld_terminate_1 ();
  647.   ffecom_terminate_1 ();
  648.   ffedata_terminate_1 ();
  649.   ffeequiv_terminate_1 ();
  650.   ffeexpr_terminate_1 ();
  651.   ffeglobal_terminate_1 ();
  652.   ffeimplic_terminate_1 ();
  653.   ffeinfo_terminate_1 ();
  654.   ffeintrin_terminate_1 ();
  655.   ffelab_terminate_1 ();
  656.   ffelex_terminate_1 ();
  657.   ffename_terminate_1 ();
  658.   ffesrc_terminate_1 ();
  659.   ffest_terminate_1 ();
  660.   ffestorag_terminate_1 ();
  661.   ffesymbol_terminate_1 ();
  662.   ffetarget_terminate_1 ();
  663.   ffetype_terminate_1 ();
  664.   ffewhere_terminate_1 ();
  665.  
  666.   assert (ffe_file_pool_ != NULL);
  667.   malloc_pool_kill (ffe_file_pool_);
  668.   ffe_file_pool_ = NULL;
  669. }
  670.  
  671. /* ffe_terminate_2 -- Terminate the FFE after seeing outer program unit END
  672.  
  673.    ffe_terminate_2();  */
  674.  
  675. void
  676. ffe_terminate_2 ()
  677. {
  678.   ffe_count_3 = 0;
  679.   ffe_in_2 = FALSE;
  680.  
  681.   ffe_terminate_3 ();
  682.  
  683.   ffebad_terminate_2 ();
  684.   ffebit_terminate_2 ();
  685.   ffebld_terminate_2 ();
  686.   ffecom_terminate_2 ();
  687.   ffedata_terminate_2 ();
  688.   ffeequiv_terminate_2 ();
  689.   ffeexpr_terminate_2 ();
  690.   ffeglobal_terminate_2 ();
  691.   ffeimplic_terminate_2 ();
  692.   ffeinfo_terminate_2 ();
  693.   ffeintrin_terminate_2 ();
  694.   ffelab_terminate_2 ();
  695.   ffelex_terminate_2 ();
  696.   ffename_terminate_2 ();
  697.   ffesrc_terminate_2 ();
  698.   ffest_terminate_2 ();
  699.   ffestorag_terminate_2 ();
  700.   ffesymbol_terminate_2 ();
  701.   ffetarget_terminate_2 ();
  702.   ffetype_terminate_2 ();
  703.   ffewhere_terminate_2 ();
  704.  
  705.   assert (ffe_program_unit_pool_ != NULL);
  706.   malloc_pool_kill (ffe_program_unit_pool_);
  707.   ffe_program_unit_pool_ = NULL;
  708. }
  709.  
  710. /* ffe_terminate_3 -- Terminate the FFE after seeing any program unit END
  711.  
  712.    ffe_terminate_3();  */
  713.  
  714. void
  715. ffe_terminate_3 ()
  716. {
  717.   ffe_count_4 = 0;
  718.   ffe_in_3 = FALSE;
  719.  
  720.   ffebad_terminate_3 ();
  721.   ffebit_terminate_3 ();
  722.   ffebld_terminate_3 ();
  723.   ffecom_terminate_3 ();
  724.   ffedata_terminate_3 ();
  725.   ffeequiv_terminate_3 ();
  726.   ffeexpr_terminate_3 ();
  727.   ffeglobal_terminate_3 ();
  728.   ffeimplic_terminate_3 ();
  729.   ffeinfo_terminate_3 ();
  730.   ffeintrin_terminate_3 ();
  731.   ffelab_terminate_3 ();
  732.   ffelex_terminate_3 ();
  733.   ffename_terminate_3 ();
  734.   ffesrc_terminate_3 ();
  735.   ffest_terminate_3 ();
  736.   ffestorag_terminate_3 ();
  737.   ffesymbol_terminate_3 ();
  738.   ffetarget_terminate_3 ();
  739.   ffetype_terminate_3 ();
  740.   ffewhere_terminate_3 ();
  741.  
  742.   assert (ffe_any_unit_pool_ != NULL);
  743.   malloc_pool_kill (ffe_any_unit_pool_);
  744.   ffe_any_unit_pool_ = NULL;
  745. }
  746.  
  747. /* ffe_terminate_4 -- Terminate the FFE after seeing sfunc def expression
  748.  
  749.    ffe_terminate_4();  */
  750.  
  751. void
  752. ffe_terminate_4 ()
  753. {
  754.   ffe_in_4 = FALSE;
  755.  
  756.   ffebad_terminate_4 ();
  757.   ffebit_terminate_4 ();
  758.   ffebld_terminate_4 ();
  759.   ffecom_terminate_4 ();
  760.   ffedata_terminate_4 ();
  761.   ffeequiv_terminate_4 ();
  762.   ffeexpr_terminate_4 ();
  763.   ffeglobal_terminate_4 ();
  764.   ffeimplic_terminate_4 ();
  765.   ffeinfo_terminate_4 ();
  766.   ffeintrin_terminate_4 ();
  767.   ffelab_terminate_4 ();
  768.   ffelex_terminate_4 ();
  769.   ffename_terminate_4 ();
  770.   ffesrc_terminate_4 ();
  771.   ffest_terminate_4 ();
  772.   ffestorag_terminate_4 ();
  773.   ffesymbol_terminate_4 ();
  774.   ffetarget_terminate_4 ();
  775.   ffetype_terminate_4 ();
  776.   ffewhere_terminate_4 ();
  777. }
  778.