]> oss.titaniummirror.com Git - msp430-gcc.git/blobdiff - gcc/f/stc.c
Imported gcc-4.4.3
[msp430-gcc.git] / gcc / f / stc.c
diff --git a/gcc/f/stc.c b/gcc/f/stc.c
deleted file mode 100644 (file)
index 1f17766..0000000
+++ /dev/null
@@ -1,13890 +0,0 @@
-/* stc.c -- Implementation File (module.c template V1.0)
-   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
-   Contributed by James Craig Burley.
-
-This file is part of GNU Fortran.
-
-GNU Fortran 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 Fortran 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 Fortran; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA.
-
-   Related Modules:
-      st.c
-
-   Description:
-      Verifies the proper semantics for statements, checking expressions already
-      semantically analyzed individually, collectively, checking label defs and
-      refs, and so on. Uses ffebad to indicate errors in semantics.
-
-      In many cases, both a token and a keyword (ffestrFirst, ffestrSecond,
-      or ffestrOther) is provided.  ONLY USE THE TOKEN as a pointer to the
-      source-code location for an error message or similar; use the keyword
-      as the semantic matching for the token, since the token's text might
-      not match the keyword's code.  For example, INTENT(IN OUT) A in free
-      source form passes to ffestc_R519_start the token "IN" but the keyword
-      FFESTR_otherINOUT, and the latter is correct.
-
-      Generally, either a single ffestc function handles an entire statement,
-      in which case its name is ffestc_xyz_, or more than one function is
-      needed, in which case its names are ffestc_xyz_start_,
-      ffestc_xyz_item_ or ffestc_xyz_item_abc_, and ffestc_xyz_finish_.
-      The caller must call _start_ before calling any _item_ functions, and
-      must call _finish_ afterwards.  If it is clearly a syntactic matter as
-      to restrictions on the number and variety of _item_ calls, then the caller
-      should report any errors and ffestc_ should presume it has been taken
-      care of and handle any semantic problems with grace and no error messages.
-      If the permitted number and variety of _item_ calls has some basis in
-      semantics, then the caller should not generate any messages and ffestc
-      should do all the checking.
-
-      A few ffestc functions have names rather than grammar numbers, like
-      ffestc_elsewhere and ffestc_end. These are cases where the actual
-      statement depends on its context rather than just its form; ELSE WHERE
-      may be the obvious (WHERE...ELSE WHERE...END WHERE) or something a little
-      more subtle (WHERE: IF THEN...ELSE WHERE...END IF WHERE).         The actual
-      ffestc functions do exist and do work, but may or may not be invoked
-      by ffestb depending on whether some form of resolution is possible.
-      For example, ffestc_R1103 end-program-stmt is reachable directly when
-      END PROGRAM [name] is specified, or via ffestc_end when END is specified
-      and the context is a main program.  So ffestc_xyz_ should make a quick
-      determination of the context and pick the appropriate ffestc_Nxyz_
-      function to invoke, without a lot of ceremony.
-
-   Modifications:
-*/
-
-/* Include files. */
-
-#include "proj.h"
-#include "stc.h"
-#include "bad.h"
-#include "bld.h"
-#include "data.h"
-#include "expr.h"
-#include "global.h"
-#include "implic.h"
-#include "lex.h"
-#include "malloc.h"
-#include "src.h"
-#include "sta.h"
-#include "std.h"
-#include "stp.h"
-#include "str.h"
-#include "stt.h"
-#include "stw.h"
-
-/* Externals defined here. */
-
-ffeexprContext ffestc_iolist_context_ = FFEEXPR_contextIOLIST;
-/* Valid only from READ/WRITE start to finish. */
-
-/* Simple definitions and enumerations. */
-
-typedef enum
-  {
-    FFESTC_orderOK_,           /* Statement ok in this context, process. */
-    FFESTC_orderBAD_,          /* Statement not ok in this context, don't
-                                  process. */
-    FFESTC_orderBADOK_,                /* Don't process but push block if
-                                  applicable. */
-    FFESTC
-  } ffestcOrder_;
-
-typedef enum
-  {
-    FFESTC_stateletSIMPLE_,    /* Expecting simple/start. */
-    FFESTC_stateletATTRIB_,    /* Expecting attrib/item/itemstart. */
-    FFESTC_stateletITEM_,      /* Expecting item/itemstart/finish. */
-    FFESTC_stateletITEMVALS_,  /* Expecting itemvalue/itemendvals. */
-    FFESTC_
-  } ffestcStatelet_;
-
-/* Internal typedefs. */
-
-
-/* Private include files. */
-
-
-/* Internal structure definitions. */
-
-union ffestc_local_u_
-  {
-    struct
-      {
-       ffebld initlist;        /* For list of one sym in INTEGER I/3/ case. */
-       ffetargetCharacterSize stmt_size;
-       ffetargetCharacterSize size;
-       ffeinfoBasictype basic_type;
-       ffeinfoKindtype stmt_kind_type;
-       ffeinfoKindtype kind_type;
-       bool per_var_kind_ok;
-       char is_R426;           /* 1=R426, 2=R501. */
-      }
-    decl;
-    struct
-      {
-       ffebld objlist;         /* For list of target objects. */
-       ffebldListBottom list_bottom;   /* For building lists. */
-      }
-    data;
-    struct
-      {
-       ffebldListBottom list_bottom;   /* For building lists. */
-       int entry_num;
-      }
-    dummy;
-    struct
-      {
-       ffesymbol symbol;       /* NML symbol. */
-      }
-    namelist;
-    struct
-      {
-       ffelexToken t;          /* First token in list. */
-       ffeequiv eq;            /* Current equivalence being built up. */
-       ffebld list;            /* List of expressions in equivalence. */
-       ffebldListBottom bottom;
-       bool ok;                /* TRUE while current list still being
-                                  processed. */
-       bool save;              /* TRUE if any var in list is SAVEd. */
-      }
-    equiv;
-    struct
-      {
-       ffesymbol symbol;       /* BCB/NCB symbol. */
-      }
-    common;
-    struct
-      {
-       ffesymbol symbol;       /* SFN symbol. */
-      }
-    sfunc;
-#if FFESTR_VXT
-    struct
-      {
-       char list_state;        /* 0=>no field names allowed, 1=>error
-                                  reported already, 2=>field names req'd,
-                                  3=>have a field name. */
-      }
-    V003;
-#endif
-  };                           /* Merge with the one in ffestc later. */
-
-/* Static objects accessed by functions in this module. */
-
-static bool ffestc_ok_;                /* _start_ fn's send this to _xyz_ fn's. */
-static bool ffestc_parent_ok_; /* Parent sym for baby sym fn's ok. */
-static char ffestc_namelist_;  /* 0=>not namelist, 1=>namelist, 2=>error. */
-static union ffestc_local_u_ ffestc_local_;
-static ffestcStatelet_ ffestc_statelet_ = FFESTC_stateletSIMPLE_;
-static ffestwShriek ffestc_shriek_after1_ = NULL;
-static unsigned long ffestc_blocknum_ = 0;     /* Next block# to assign. */
-static int ffestc_entry_num_;
-static int ffestc_sfdummy_argno_;
-static int ffestc_saved_entry_num_;
-static ffelab ffestc_label_;
-
-/* Static functions (internal). */
-
-static void ffestc_R544_equiv_ (ffebld expr, ffelexToken t);
-static void ffestc_establish_declinfo_ (ffebld kind, ffelexToken kindt,
-                                       ffebld len, ffelexToken lent);
-static void ffestc_establish_declstmt_ (ffestpType type, ffelexToken typet,
-                                       ffebld kind, ffelexToken kindt,
-                                       ffebld len, ffelexToken lent);
-static void ffestc_establish_impletter_ (ffelexToken first, ffelexToken last);
-static ffeinfoKindtype ffestc_kindtype_kind_ (ffeinfoBasictype bt,
-                                             ffetargetCharacterSize val);
-static ffeinfoKindtype ffestc_kindtype_star_ (ffeinfoBasictype bt,
-                                             ffetargetCharacterSize val);
-static void ffestc_labeldef_any_ (void);
-static bool ffestc_labeldef_begin_ (void);
-static void ffestc_labeldef_branch_begin_ (void);
-static void ffestc_labeldef_branch_end_ (void);
-static void ffestc_labeldef_endif_ (void);
-static void ffestc_labeldef_format_ (void);
-static void ffestc_labeldef_invalid_ (void);
-static void ffestc_labeldef_notloop_ (void);
-static void ffestc_labeldef_notloop_begin_ (void);
-static void ffestc_labeldef_useless_ (void);
-static bool ffestc_labelref_is_assignable_ (ffelexToken label_token,
-                                           ffelab *label);
-static bool ffestc_labelref_is_branch_ (ffelexToken label_token,
-                                       ffelab *label);
-static bool ffestc_labelref_is_format_ (ffelexToken label_token,
-                                       ffelab *label);
-static bool ffestc_labelref_is_loopend_ (ffelexToken label_token,
-                                        ffelab *label);
-#if FFESTR_F90
-static ffestcOrder_ ffestc_order_access_ (void);
-#endif
-static ffestcOrder_ ffestc_order_actiondo_ (void);
-static ffestcOrder_ ffestc_order_actionif_ (void);
-static ffestcOrder_ ffestc_order_actionwhere_ (void);
-static void ffestc_order_any_ (void);
-static void ffestc_order_bad_ (void);
-static ffestcOrder_ ffestc_order_blockdata_ (void);
-static ffestcOrder_ ffestc_order_blockspec_ (void);
-#if FFESTR_F90
-static ffestcOrder_ ffestc_order_component_ (void);
-#endif
-#if FFESTR_F90
-static ffestcOrder_ ffestc_order_contains_ (void);
-#endif
-static ffestcOrder_ ffestc_order_data_ (void);
-static ffestcOrder_ ffestc_order_data77_ (void);
-#if FFESTR_F90
-static ffestcOrder_ ffestc_order_derivedtype_ (void);
-#endif
-static ffestcOrder_ ffestc_order_do_ (void);
-static ffestcOrder_ ffestc_order_entry_ (void);
-static ffestcOrder_ ffestc_order_exec_ (void);
-static ffestcOrder_ ffestc_order_format_ (void);
-static ffestcOrder_ ffestc_order_function_ (void);
-static ffestcOrder_ ffestc_order_iface_ (void);
-static ffestcOrder_ ffestc_order_ifthen_ (void);
-static ffestcOrder_ ffestc_order_implicit_ (void);
-static ffestcOrder_ ffestc_order_implicitnone_ (void);
-#if FFESTR_F90
-static ffestcOrder_ ffestc_order_interface_ (void);
-#endif
-#if FFESTR_F90
-static ffestcOrder_ ffestc_order_map_ (void);
-#endif
-#if FFESTR_F90
-static ffestcOrder_ ffestc_order_module_ (void);
-#endif
-static ffestcOrder_ ffestc_order_parameter_ (void);
-static ffestcOrder_ ffestc_order_program_ (void);
-static ffestcOrder_ ffestc_order_progspec_ (void);
-#if FFESTR_F90
-static ffestcOrder_ ffestc_order_record_ (void);
-#endif
-static ffestcOrder_ ffestc_order_selectcase_ (void);
-static ffestcOrder_ ffestc_order_sfunc_ (void);
-#if FFESTR_F90
-static ffestcOrder_ ffestc_order_spec_ (void);
-#endif
-#if FFESTR_VXT
-static ffestcOrder_ ffestc_order_structure_ (void);
-#endif
-static ffestcOrder_ ffestc_order_subroutine_ (void);
-#if FFESTR_F90
-static ffestcOrder_ ffestc_order_type_ (void);
-#endif
-static ffestcOrder_ ffestc_order_typedecl_ (void);
-#if FFESTR_VXT
-static ffestcOrder_ ffestc_order_union_ (void);
-#endif
-static ffestcOrder_ ffestc_order_unit_ (void);
-#if FFESTR_F90
-static ffestcOrder_ ffestc_order_use_ (void);
-#endif
-#if FFESTR_VXT
-static ffestcOrder_ ffestc_order_vxtstructure_ (void);
-#endif
-#if FFESTR_F90
-static ffestcOrder_ ffestc_order_where_ (void);
-#endif
-static void ffestc_promote_dummy_ (ffelexToken t);
-static void ffestc_promote_execdummy_ (ffelexToken t);
-static void ffestc_promote_sfdummy_ (ffelexToken t);
-static void ffestc_shriek_begin_program_ (void);
-#if FFESTR_F90
-static void ffestc_shriek_begin_uses_ (void);
-#endif
-static void ffestc_shriek_blockdata_ (bool ok);
-static void ffestc_shriek_do_ (bool ok);
-static void ffestc_shriek_end_program_ (bool ok);
-#if FFESTR_F90
-static void ffestc_shriek_end_uses_ (bool ok);
-#endif
-static void ffestc_shriek_function_ (bool ok);
-static void ffestc_shriek_if_ (bool ok);
-static void ffestc_shriek_ifthen_ (bool ok);
-#if FFESTR_F90
-static void ffestc_shriek_interface_ (bool ok);
-#endif
-#if FFESTR_F90
-static void ffestc_shriek_map_ (bool ok);
-#endif
-#if FFESTR_F90
-static void ffestc_shriek_module_ (bool ok);
-#endif
-static void ffestc_shriek_select_ (bool ok);
-#if FFESTR_VXT
-static void ffestc_shriek_structure_ (bool ok);
-#endif
-static void ffestc_shriek_subroutine_ (bool ok);
-#if FFESTR_F90
-static void ffestc_shriek_type_ (bool ok);
-#endif
-#if FFESTR_VXT
-static void ffestc_shriek_union_ (bool ok);
-#endif
-#if FFESTR_F90
-static void ffestc_shriek_where_ (bool ok);
-#endif
-#if FFESTR_F90
-static void ffestc_shriek_wherethen_ (bool ok);
-#endif
-static int ffestc_subr_binsrch_ (const char *const *list, int size,
-                                ffestpFile *spec, const char *whine);
-static ffestvFormat ffestc_subr_format_ (ffestpFile *spec);
-static bool ffestc_subr_is_branch_ (ffestpFile *spec);
-static bool ffestc_subr_is_format_ (ffestpFile *spec);
-static bool ffestc_subr_is_present_ (const char *name, ffestpFile *spec);
-static int ffestc_subr_speccmp_ (const char *string, ffestpFile *spec,
-                                const char **target, int *length);
-static ffestvUnit ffestc_subr_unit_ (ffestpFile *spec);
-static void ffestc_try_shriek_do_ (void);
-
-/* Internal macros. */
-
-#define ffestc_check_simple_() \
-      assert(ffestc_statelet_ == FFESTC_stateletSIMPLE_)
-#define ffestc_check_start_() \
-      assert(ffestc_statelet_ == FFESTC_stateletSIMPLE_); \
-      ffestc_statelet_ = FFESTC_stateletATTRIB_
-#define ffestc_check_attrib_() \
-      assert(ffestc_statelet_ == FFESTC_stateletATTRIB_)
-#define ffestc_check_item_() \
-      assert(ffestc_statelet_ == FFESTC_stateletATTRIB_         \
-           || ffestc_statelet_ == FFESTC_stateletITEM_); \
-      ffestc_statelet_ = FFESTC_stateletITEM_
-#define ffestc_check_item_startvals_() \
-      assert(ffestc_statelet_ == FFESTC_stateletATTRIB_         \
-           || ffestc_statelet_ == FFESTC_stateletITEM_); \
-      ffestc_statelet_ = FFESTC_stateletITEMVALS_
-#define ffestc_check_item_value_() \
-      assert(ffestc_statelet_ == FFESTC_stateletITEMVALS_)
-#define ffestc_check_item_endvals_() \
-      assert(ffestc_statelet_ == FFESTC_stateletITEMVALS_); \
-      ffestc_statelet_ = FFESTC_stateletITEM_
-#define ffestc_check_finish_() \
-      assert(ffestc_statelet_ == FFESTC_stateletATTRIB_         \
-           || ffestc_statelet_ == FFESTC_stateletITEM_); \
-      ffestc_statelet_ = FFESTC_stateletSIMPLE_
-#define ffestc_order_action_() ffestc_order_exec_()
-#if FFESTR_F90
-#define ffestc_order_interfacespec_() ffestc_order_derivedtype_()
-#endif
-#define ffestc_shriek_if_lost_ ffestc_shriek_if_
-#if FFESTR_F90
-#define ffestc_shriek_where_lost_ ffestc_shriek_where_
-#endif
-\f
-/* ffestc_establish_declinfo_ -- Determine specific type/params info for entity
-
-   ffestc_establish_declinfo_(kind,kind_token,len,len_token);
-
-   Must be called after _declstmt_ called to establish base type.  */
-
-static void
-ffestc_establish_declinfo_ (ffebld kind, ffelexToken kindt, ffebld len,
-                           ffelexToken lent)
-{
-  ffeinfoBasictype bt = ffestc_local_.decl.basic_type;
-  ffeinfoKindtype kt;
-  ffetargetCharacterSize val;
-
-  if (kindt == NULL)
-    kt = ffestc_local_.decl.stmt_kind_type;
-  else if (!ffestc_local_.decl.per_var_kind_ok)
-    {
-      ffebad_start (FFEBAD_KINDTYPE);
-      ffebad_here (0, ffelex_token_where_line (kindt),
-                  ffelex_token_where_column (kindt));
-      ffebad_here (1, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      ffebad_finish ();
-      kt = ffestc_local_.decl.stmt_kind_type;
-    }
-  else
-    {
-      if (kind == NULL)
-       {
-         assert (ffelex_token_type (kindt) == FFELEX_typeNUMBER);
-         val = atol (ffelex_token_text (kindt));
-         kt = ffestc_kindtype_star_ (bt, val);
-       }
-      else if (ffebld_op (kind) == FFEBLD_opANY)
-       kt = ffestc_local_.decl.stmt_kind_type;
-      else
-       {
-         assert (ffebld_op (kind) == FFEBLD_opCONTER);
-         assert (ffeinfo_basictype (ffebld_info (kind))
-                 == FFEINFO_basictypeINTEGER);
-         assert (ffeinfo_kindtype (ffebld_info (kind))
-                 == FFEINFO_kindtypeINTEGERDEFAULT);
-         val = ffebld_constant_integerdefault (ffebld_conter (kind));
-         kt = ffestc_kindtype_kind_ (bt, val);
-       }
-
-      if (kt == FFEINFO_kindtypeNONE)
-       {                       /* Not valid kind type. */
-         ffebad_start (FFEBAD_KINDTYPE);
-         ffebad_here (0, ffelex_token_where_line (kindt),
-                      ffelex_token_where_column (kindt));
-         ffebad_here (1, ffelex_token_where_line (ffesta_tokens[0]),
-                      ffelex_token_where_column (ffesta_tokens[0]));
-         ffebad_finish ();
-         kt = ffestc_local_.decl.stmt_kind_type;
-       }
-    }
-
-  ffestc_local_.decl.kind_type = kt;
-
-  /* Now check length specification for CHARACTER data type. */
-
-  if (((len == NULL) && (lent == NULL))
-      || (bt != FFEINFO_basictypeCHARACTER))
-    val = ffestc_local_.decl.stmt_size;
-  else
-    {
-      if (len == NULL)
-       {
-         assert (ffelex_token_type (lent) == FFELEX_typeNUMBER);
-         val = atol (ffelex_token_text (lent));
-       }
-      else if (ffebld_op (len) == FFEBLD_opSTAR)
-       val = FFETARGET_charactersizeNONE;
-      else if (ffebld_op (len) == FFEBLD_opANY)
-       val = FFETARGET_charactersizeNONE;
-      else
-       {
-         assert (ffebld_op (len) == FFEBLD_opCONTER);
-         assert (ffeinfo_basictype (ffebld_info (len))
-                 == FFEINFO_basictypeINTEGER);
-         assert (ffeinfo_kindtype (ffebld_info (len))
-                 == FFEINFO_kindtypeINTEGERDEFAULT);
-         val = ffebld_constant_integerdefault (ffebld_conter (len));
-       }
-    }
-
-  if ((val == 0) && !(0 && ffe_is_90 ()))
-    {
-      val = 1;
-      ffebad_start (FFEBAD_ZERO_SIZE);
-      ffebad_here (0, ffelex_token_where_line (lent), ffelex_token_where_column (lent));
-      ffebad_finish ();
-    }
-  ffestc_local_.decl.size = val;
-}
-
-/* ffestc_establish_declstmt_ -- Establish host-specific type/params info
-
-   ffestc_establish_declstmt_(type,type_token,kind,kind_token,len,
-        len_token);  */
-
-static void
-ffestc_establish_declstmt_ (ffestpType type, ffelexToken typet, ffebld kind,
-                           ffelexToken kindt, ffebld len, ffelexToken lent)
-{
-  ffeinfoBasictype bt;
-  ffeinfoKindtype ktd;         /* Default kindtype. */
-  ffeinfoKindtype kt;
-  ffetargetCharacterSize val;
-  bool per_var_kind_ok = TRUE;
-
-  /* Determine basictype and default kindtype. */
-
-  switch (type)
-    {
-    case FFESTP_typeINTEGER:
-      bt = FFEINFO_basictypeINTEGER;
-      ktd = FFEINFO_kindtypeINTEGERDEFAULT;
-      break;
-
-    case FFESTP_typeBYTE:
-      bt = FFEINFO_basictypeINTEGER;
-      ktd = FFEINFO_kindtypeINTEGER2;
-      break;
-
-    case FFESTP_typeWORD:
-      bt = FFEINFO_basictypeINTEGER;
-      ktd = FFEINFO_kindtypeINTEGER3;
-      break;
-
-    case FFESTP_typeREAL:
-      bt = FFEINFO_basictypeREAL;
-      ktd = FFEINFO_kindtypeREALDEFAULT;
-      break;
-
-    case FFESTP_typeCOMPLEX:
-      bt = FFEINFO_basictypeCOMPLEX;
-      ktd = FFEINFO_kindtypeREALDEFAULT;
-      break;
-
-    case FFESTP_typeLOGICAL:
-      bt = FFEINFO_basictypeLOGICAL;
-      ktd = FFEINFO_kindtypeLOGICALDEFAULT;
-      break;
-
-    case FFESTP_typeCHARACTER:
-      bt = FFEINFO_basictypeCHARACTER;
-      ktd = FFEINFO_kindtypeCHARACTERDEFAULT;
-      break;
-
-    case FFESTP_typeDBLPRCSN:
-      bt = FFEINFO_basictypeREAL;
-      ktd = FFEINFO_kindtypeREALDOUBLE;
-      per_var_kind_ok = FALSE;
-      break;
-
-    case FFESTP_typeDBLCMPLX:
-      bt = FFEINFO_basictypeCOMPLEX;
-#if FFETARGET_okCOMPLEX2
-      ktd = FFEINFO_kindtypeREALDOUBLE;
-#else
-      ktd = FFEINFO_kindtypeREALDEFAULT;
-      ffebad_start (FFEBAD_BAD_DBLCMPLX);
-      ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      ffebad_finish ();
-#endif
-      per_var_kind_ok = FALSE;
-      break;
-
-    default:
-      assert ("Unexpected type (F90 TYPE?)!" == NULL);
-      bt = FFEINFO_basictypeNONE;
-      ktd = FFEINFO_kindtypeNONE;
-      break;
-    }
-
-  if (kindt == NULL)
-    kt = ktd;
-  else
-    {                          /* Not necessarily default kind type. */
-      if (kind == NULL)
-       {                       /* Shouldn't happen for CHARACTER. */
-         assert (ffelex_token_type (kindt) == FFELEX_typeNUMBER);
-         val = atol (ffelex_token_text (kindt));
-         kt = ffestc_kindtype_star_ (bt, val);
-       }
-      else if (ffebld_op (kind) == FFEBLD_opANY)
-       kt = ktd;
-      else
-       {
-         assert (ffebld_op (kind) == FFEBLD_opCONTER);
-         assert (ffeinfo_basictype (ffebld_info (kind))
-                 == FFEINFO_basictypeINTEGER);
-         assert (ffeinfo_kindtype (ffebld_info (kind))
-                 == FFEINFO_kindtypeINTEGERDEFAULT);
-         val = ffebld_constant_integerdefault (ffebld_conter (kind));
-         kt = ffestc_kindtype_kind_ (bt, val);
-       }
-
-      if (kt == FFEINFO_kindtypeNONE)
-       {                       /* Not valid kind type. */
-         ffebad_start (FFEBAD_KINDTYPE);
-         ffebad_here (0, ffelex_token_where_line (kindt),
-                      ffelex_token_where_column (kindt));
-         ffebad_here (1, ffelex_token_where_line (typet),
-                      ffelex_token_where_column (typet));
-         ffebad_finish ();
-         kt = ktd;
-       }
-    }
-
-  ffestc_local_.decl.basic_type = bt;
-  ffestc_local_.decl.stmt_kind_type = kt;
-  ffestc_local_.decl.per_var_kind_ok = per_var_kind_ok;
-
-  /* Now check length specification for CHARACTER data type. */
-
-  if (((len == NULL) && (lent == NULL))
-      || (type != FFESTP_typeCHARACTER))
-    val = (type == FFESTP_typeCHARACTER) ? 1 : FFETARGET_charactersizeNONE;
-  else
-    {
-      if (len == NULL)
-       {
-         assert (ffelex_token_type (lent) == FFELEX_typeNUMBER);
-         val = atol (ffelex_token_text (lent));
-       }
-      else if (ffebld_op (len) == FFEBLD_opSTAR)
-       val = FFETARGET_charactersizeNONE;
-      else if (ffebld_op (len) == FFEBLD_opANY)
-       val = FFETARGET_charactersizeNONE;
-      else
-       {
-         assert (ffebld_op (len) == FFEBLD_opCONTER);
-         assert (ffeinfo_basictype (ffebld_info (len))
-                 == FFEINFO_basictypeINTEGER);
-         assert (ffeinfo_kindtype (ffebld_info (len))
-                 == FFEINFO_kindtypeINTEGERDEFAULT);
-         val = ffebld_constant_integerdefault (ffebld_conter (len));
-       }
-    }
-
-  if ((val == 0) && !(0 && ffe_is_90 ()))
-    {
-      val = 1;
-      ffebad_start (FFEBAD_ZERO_SIZE);
-      ffebad_here (0, ffelex_token_where_line (lent), ffelex_token_where_column (lent));
-      ffebad_finish ();
-    }
-  ffestc_local_.decl.stmt_size = val;
-}
-
-/* ffestc_establish_impletter_ -- Establish type/params for IMPLICIT letter(s)
-
-   ffestc_establish_impletter_(first_letter_token,last_letter_token);  */
-
-static void
-ffestc_establish_impletter_ (ffelexToken first, ffelexToken last)
-{
-  bool ok = FALSE;             /* Stays FALSE if first letter > last. */
-  char c;
-
-  if (last == NULL)
-    ok = ffeimplic_establish_initial (c = *(ffelex_token_text (first)),
-                                     ffestc_local_.decl.basic_type,
-                                     ffestc_local_.decl.kind_type,
-                                     ffestc_local_.decl.size);
-  else
-    {
-      for (c = *(ffelex_token_text (first));
-          c <= *(ffelex_token_text (last));
-          c++)
-       {
-         ok = ffeimplic_establish_initial (c,
-                                           ffestc_local_.decl.basic_type,
-                                           ffestc_local_.decl.kind_type,
-                                           ffestc_local_.decl.size);
-         if (!ok)
-           break;
-       }
-    }
-
-  if (!ok)
-    {
-      char cs[2];
-
-      cs[0] = c;
-      cs[1] = '\0';
-
-      ffebad_start (FFEBAD_BAD_IMPLICIT);
-      ffebad_here (0, ffelex_token_where_line (first), ffelex_token_where_column (first));
-      ffebad_string (cs);
-      ffebad_finish ();
-    }
-}
-
-/* ffestc_init_3 -- Initialize ffestc for new program unit
-
-   ffestc_init_3();  */
-
-void
-ffestc_init_3 ()
-{
-  ffestv_save_state_ = FFESTV_savestateNONE;
-  ffestc_entry_num_ = 0;
-  ffestv_num_label_defines_ = 0;
-}
-
-/* ffestc_init_4 -- Initialize ffestc for new scoping unit
-
-   ffestc_init_4();
-
-   For SUBROUTINEs/FUNCTIONs within INTERFACE/END INTERFACE, derived-TYPE-
-   defs, and statement function defs.  */
-
-void
-ffestc_init_4 ()
-{
-  ffestc_saved_entry_num_ = ffestc_entry_num_;
-  ffestc_entry_num_ = 0;
-}
-
-/* ffestc_kindtype_kind_ -- Determine kindtype from basictype and KIND= value
-
-   ffeinfoKindtype kt;
-   ffeinfoBasictype bt;
-   ffetargetCharacterSize val;
-   kt = ffestc_kindtype_kind_(bt,val);
-   if (kt == FFEINFO_kindtypeNONE)
-       // unsupported/invalid KIND= value for type  */
-
-static ffeinfoKindtype
-ffestc_kindtype_kind_ (ffeinfoBasictype bt, ffetargetCharacterSize val)
-{
-  ffetype type;
-  ffetype base_type;
-  ffeinfoKindtype kt;
-
-  base_type = ffeinfo_type (bt, 1);    /* ~~ */
-  assert (base_type != NULL);
-
-  type = ffetype_lookup_kind (base_type, (int) val);
-  if (type == NULL)
-    return FFEINFO_kindtypeNONE;
-
-  for (kt = 1; kt < FFEINFO_kindtype; ++kt)
-    if (ffeinfo_type (bt, kt) == type)
-      return kt;
-
-  return FFEINFO_kindtypeNONE;
-}
-
-/* ffestc_kindtype_star_ -- Determine kindtype from basictype and * value
-
-   ffeinfoKindtype kt;
-   ffeinfoBasictype bt;
-   ffetargetCharacterSize val;
-   kt = ffestc_kindtype_star_(bt,val);
-   if (kt == FFEINFO_kindtypeNONE)
-       // unsupported/invalid * value for type */
-
-static ffeinfoKindtype
-ffestc_kindtype_star_ (ffeinfoBasictype bt, ffetargetCharacterSize val)
-{
-  ffetype type;
-  ffetype base_type;
-  ffeinfoKindtype kt;
-
-  base_type = ffeinfo_type (bt, 1);    /* ~~ */
-  assert (base_type != NULL);
-
-  type = ffetype_lookup_star (base_type, (int) val);
-  if (type == NULL)
-    return FFEINFO_kindtypeNONE;
-
-  for (kt = 1; kt < FFEINFO_kindtype; ++kt)
-    if (ffeinfo_type (bt, kt) == type)
-      return kt;
-
-  return FFEINFO_kindtypeNONE;
-}
-
-/* Define label as usable for anything without complaint.  */
-
-static void
-ffestc_labeldef_any_ ()
-{
-  if ((ffesta_label_token == NULL)
-      || !ffestc_labeldef_begin_ ())
-    return;
-
-  ffelab_set_type (ffestc_label_, FFELAB_typeANY);
-  ffestd_labeldef_any (ffestc_label_);
-
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_labeldef_begin_ -- Define label as unknown, initially
-
-   ffestc_labeldef_begin_();  */
-
-static bool
-ffestc_labeldef_begin_ ()
-{
-  ffelabValue label_value;
-  ffelab label;
-
-  label_value = (ffelabValue) atol (ffelex_token_text (ffesta_label_token));
-  if ((label_value == 0) || (label_value > FFELAB_valueMAX))
-    {
-      ffebad_start (FFEBAD_LABEL_NUMBER_INVALID);
-      ffebad_here (0, ffelex_token_where_line (ffesta_label_token),
-                  ffelex_token_where_column (ffesta_label_token));
-      ffebad_finish ();
-    }
-
-  label = ffelab_find (label_value);
-  if (label == NULL)
-    {
-      label = ffestc_label_ = ffelab_new (label_value);
-      ffestv_num_label_defines_++;
-      ffelab_set_definition_line (label,
-         ffewhere_line_use (ffelex_token_where_line (ffesta_label_token)));
-      ffelab_set_definition_column (label,
-      ffewhere_column_use (ffelex_token_where_column (ffesta_label_token)));
-
-      return TRUE;
-    }
-
-  if (ffewhere_line_is_unknown (ffelab_definition_line (label)))
-    {
-      ffestv_num_label_defines_++;
-      ffestc_label_ = label;
-      ffelab_set_definition_line (label,
-         ffewhere_line_use (ffelex_token_where_line (ffesta_label_token)));
-      ffelab_set_definition_column (label,
-      ffewhere_column_use (ffelex_token_where_column (ffesta_label_token)));
-
-      return TRUE;
-    }
-
-  ffebad_start (FFEBAD_LABEL_ALREADY_DEFINED);
-  ffebad_here (0, ffelex_token_where_line (ffesta_label_token),
-              ffelex_token_where_column (ffesta_label_token));
-  ffebad_here (1, ffelab_definition_line (label),
-              ffelab_definition_column (label));
-  ffebad_string (ffelex_token_text (ffesta_label_token));
-  ffebad_finish ();
-
-  ffelex_token_kill (ffesta_label_token);
-  ffesta_label_token = NULL;
-  return FALSE;
-}
-
-/* ffestc_labeldef_branch_begin_ -- Define label as a branch target one
-
-   ffestc_labeldef_branch_begin_();  */
-
-static void
-ffestc_labeldef_branch_begin_ ()
-{
-  if ((ffesta_label_token == NULL)
-      || (ffestc_shriek_after1_ != NULL)
-      || !ffestc_labeldef_begin_ ())
-    return;
-
-  switch (ffelab_type (ffestc_label_))
-    {
-    case FFELAB_typeUNKNOWN:
-    case FFELAB_typeASSIGNABLE:
-      ffelab_set_type (ffestc_label_, FFELAB_typeNOTLOOP);
-      ffelab_set_blocknum (ffestc_label_,
-                          ffestw_blocknum (ffestw_stack_top ()));
-      ffestd_labeldef_branch (ffestc_label_);
-      break;
-
-    case FFELAB_typeNOTLOOP:
-      if (ffelab_blocknum (ffestc_label_)
-         < ffestw_blocknum (ffestw_stack_top ()))
-       {
-         ffebad_start (FFEBAD_LABEL_BLOCK);
-         ffebad_here (0, ffelex_token_where_line (ffesta_label_token),
-                      ffelex_token_where_column (ffesta_label_token));
-         ffebad_here (1, ffelab_firstref_line (ffestc_label_),
-                      ffelab_firstref_column (ffestc_label_));
-         ffebad_finish ();
-       }
-      ffelab_set_blocknum (ffestc_label_,
-                          ffestw_blocknum (ffestw_stack_top ()));
-      ffestd_labeldef_branch (ffestc_label_);
-      break;
-
-    case FFELAB_typeLOOPEND:
-      if ((ffestw_state (ffestw_stack_top ()) != FFESTV_stateDO)
-         || (ffestw_label (ffestw_stack_top ()) != ffestc_label_))
-       {                       /* Unterminated block. */
-         ffelab_set_type (ffestc_label_, FFELAB_typeANY);
-         ffestd_labeldef_any (ffestc_label_);
-
-         ffebad_start (FFEBAD_LABEL_DO_BLOCK_END);
-         ffebad_here (0, ffelab_doref_line (ffestc_label_),
-                      ffelab_doref_column (ffestc_label_));
-         ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-         ffebad_here (2, ffelex_token_where_line (ffesta_label_token),
-                      ffelex_token_where_column (ffesta_label_token));
-         ffebad_finish ();
-         break;
-       }
-      ffestd_labeldef_branch (ffestc_label_);
-      /* Leave something around for _branch_end_() to handle. */
-      return;
-
-    case FFELAB_typeFORMAT:
-      ffelab_set_type (ffestc_label_, FFELAB_typeANY);
-      ffestd_labeldef_any (ffestc_label_);
-
-      ffebad_start (FFEBAD_LABEL_USE_DEF);
-      ffebad_here (0, ffelex_token_where_line (ffesta_label_token),
-                  ffelex_token_where_column (ffesta_label_token));
-      ffebad_here (1, ffelab_firstref_line (ffestc_label_),
-                  ffelab_firstref_column (ffestc_label_));
-      ffebad_finish ();
-      break;
-
-    default:
-      assert ("bad label" == NULL);
-      /* Fall through.  */
-    case FFELAB_typeANY:
-      break;
-    }
-
-  ffestc_try_shriek_do_ ();
-
-  ffelex_token_kill (ffesta_label_token);
-  ffesta_label_token = NULL;
-}
-
-/* Define possible end of labeled-DO-loop.  Call only after calling
-   ffestc_labeldef_branch_begin_, or when other branch_* functions
-   recognize that a label might also be serving as a branch end (in
-   which case they must issue a diagnostic).  */
-
-static void
-ffestc_labeldef_branch_end_ ()
-{
-  if (ffesta_label_token == NULL)
-    return;
-
-  assert (ffestc_label_ != NULL);
-  assert ((ffelab_type (ffestc_label_) == FFELAB_typeLOOPEND)
-         || (ffelab_type (ffestc_label_) == FFELAB_typeANY));
-
-  while ((ffestw_state (ffestw_stack_top ()) == FFESTV_stateDO)
-        && (ffestw_label (ffestw_stack_top ()) == ffestc_label_))
-    ffestc_shriek_do_ (TRUE);
-
-  ffestc_try_shriek_do_ ();
-
-  ffelex_token_kill (ffesta_label_token);
-  ffesta_label_token = NULL;
-}
-
-/* ffestc_labeldef_endif_ -- Define label as an END IF one
-
-   ffestc_labeldef_endif_();  */
-
-static void
-ffestc_labeldef_endif_ ()
-{
-  if ((ffesta_label_token == NULL)
-      || (ffestc_shriek_after1_ != NULL)
-      || !ffestc_labeldef_begin_ ())
-    return;
-
-  switch (ffelab_type (ffestc_label_))
-    {
-    case FFELAB_typeUNKNOWN:
-    case FFELAB_typeASSIGNABLE:
-      ffelab_set_type (ffestc_label_, FFELAB_typeENDIF);
-      ffelab_set_blocknum (ffestc_label_,
-                  ffestw_blocknum (ffestw_previous (ffestw_stack_top ())));
-      ffestd_labeldef_endif (ffestc_label_);
-      break;
-
-    case FFELAB_typeNOTLOOP:
-      if (ffelab_blocknum (ffestc_label_)
-         < ffestw_blocknum (ffestw_previous (ffestw_stack_top ())))
-       {
-         ffebad_start (FFEBAD_LABEL_BLOCK);
-         ffebad_here (0, ffelex_token_where_line (ffesta_label_token),
-                      ffelex_token_where_column (ffesta_label_token));
-         ffebad_here (1, ffelab_firstref_line (ffestc_label_),
-                      ffelab_firstref_column (ffestc_label_));
-         ffebad_finish ();
-       }
-      ffelab_set_blocknum (ffestc_label_,
-                  ffestw_blocknum (ffestw_previous (ffestw_stack_top ())));
-      ffestd_labeldef_endif (ffestc_label_);
-      break;
-
-    case FFELAB_typeLOOPEND:
-      if ((ffestw_state (ffestw_stack_top ()) != FFESTV_stateDO)
-         || (ffestw_label (ffestw_stack_top ()) != ffestc_label_))
-       {                       /* Unterminated block. */
-         ffelab_set_type (ffestc_label_, FFELAB_typeANY);
-         ffestd_labeldef_any (ffestc_label_);
-
-         ffebad_start (FFEBAD_LABEL_DO_BLOCK_END);
-         ffebad_here (0, ffelab_doref_line (ffestc_label_),
-                      ffelab_doref_column (ffestc_label_));
-         ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-         ffebad_here (2, ffelex_token_where_line (ffesta_label_token),
-                      ffelex_token_where_column (ffesta_label_token));
-         ffebad_finish ();
-         break;
-       }
-      ffestd_labeldef_endif (ffestc_label_);
-      ffebad_start (FFEBAD_LABEL_USE_DEF);
-      ffebad_here (0, ffelex_token_where_line (ffesta_label_token),
-                  ffelex_token_where_column (ffesta_label_token));
-      ffebad_here (1, ffelab_doref_line (ffestc_label_),
-                  ffelab_doref_column (ffestc_label_));
-      ffebad_finish ();
-      ffestc_labeldef_branch_end_ ();
-      return;
-
-    case FFELAB_typeFORMAT:
-      ffelab_set_type (ffestc_label_, FFELAB_typeANY);
-      ffestd_labeldef_any (ffestc_label_);
-
-      ffebad_start (FFEBAD_LABEL_USE_DEF);
-      ffebad_here (0, ffelex_token_where_line (ffesta_label_token),
-                  ffelex_token_where_column (ffesta_label_token));
-      ffebad_here (1, ffelab_firstref_line (ffestc_label_),
-                  ffelab_firstref_column (ffestc_label_));
-      ffebad_finish ();
-      break;
-
-    default:
-      assert ("bad label" == NULL);
-      /* Fall through.  */
-    case FFELAB_typeANY:
-      break;
-    }
-
-  ffestc_try_shriek_do_ ();
-
-  ffelex_token_kill (ffesta_label_token);
-  ffesta_label_token = NULL;
-}
-
-/* ffestc_labeldef_format_ -- Define label as a FORMAT one
-
-   ffestc_labeldef_format_();  */
-
-static void
-ffestc_labeldef_format_ ()
-{
-  if ((ffesta_label_token == NULL)
-      || (ffestc_shriek_after1_ != NULL))
-    {
-      ffebad_start (FFEBAD_FORMAT_NO_LABEL_DEF);
-      ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      ffebad_finish ();
-      return;
-    }
-
-  if (!ffestc_labeldef_begin_ ())
-    return;
-
-  switch (ffelab_type (ffestc_label_))
-    {
-    case FFELAB_typeUNKNOWN:
-    case FFELAB_typeASSIGNABLE:
-      ffelab_set_type (ffestc_label_, FFELAB_typeFORMAT);
-      ffestd_labeldef_format (ffestc_label_);
-      break;
-
-    case FFELAB_typeFORMAT:
-      ffestd_labeldef_format (ffestc_label_);
-      break;
-
-    case FFELAB_typeLOOPEND:
-      if ((ffestw_state (ffestw_stack_top ()) != FFESTV_stateDO)
-         || (ffestw_label (ffestw_stack_top ()) != ffestc_label_))
-       {                       /* Unterminated block. */
-         ffelab_set_type (ffestc_label_, FFELAB_typeANY);
-         ffestd_labeldef_any (ffestc_label_);
-
-         ffebad_start (FFEBAD_LABEL_DO_BLOCK_END);
-         ffebad_here (0, ffelab_doref_line (ffestc_label_),
-                      ffelab_doref_column (ffestc_label_));
-         ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-         ffebad_here (2, ffelex_token_where_line (ffesta_label_token),
-                      ffelex_token_where_column (ffesta_label_token));
-         ffebad_finish ();
-         break;
-       }
-      ffestd_labeldef_format (ffestc_label_);
-      ffebad_start (FFEBAD_LABEL_USE_DEF);
-      ffebad_here (0, ffelex_token_where_line (ffesta_label_token),
-                  ffelex_token_where_column (ffesta_label_token));
-      ffebad_here (1, ffelab_doref_line (ffestc_label_),
-                  ffelab_doref_column (ffestc_label_));
-      ffebad_finish ();
-      ffestc_labeldef_branch_end_ ();
-      return;
-
-    case FFELAB_typeNOTLOOP:
-      ffelab_set_type (ffestc_label_, FFELAB_typeANY);
-      ffestd_labeldef_any (ffestc_label_);
-
-      ffebad_start (FFEBAD_LABEL_USE_DEF);
-      ffebad_here (0, ffelex_token_where_line (ffesta_label_token),
-                  ffelex_token_where_column (ffesta_label_token));
-      ffebad_here (1, ffelab_firstref_line (ffestc_label_),
-                  ffelab_firstref_column (ffestc_label_));
-      ffebad_finish ();
-      break;
-
-    default:
-      assert ("bad label" == NULL);
-      /* Fall through.  */
-    case FFELAB_typeANY:
-      break;
-    }
-
-  ffestc_try_shriek_do_ ();
-
-  ffelex_token_kill (ffesta_label_token);
-  ffesta_label_token = NULL;
-}
-
-/* ffestc_labeldef_invalid_ -- Label definition invalid, complain if present
-
-   ffestc_labeldef_invalid_(); */
-
-static void
-ffestc_labeldef_invalid_ ()
-{
-  if ((ffesta_label_token == NULL)
-      || (ffestc_shriek_after1_ != NULL)
-      || !ffestc_labeldef_begin_ ())
-    return;
-
-  ffebad_start (FFEBAD_INVALID_LABEL_DEF);
-  ffebad_here (0, ffelex_token_where_line (ffesta_label_token),
-              ffelex_token_where_column (ffesta_label_token));
-  ffebad_finish ();
-
-  ffelab_set_type (ffestc_label_, FFELAB_typeANY);
-  ffestd_labeldef_any (ffestc_label_);
-
-  ffestc_try_shriek_do_ ();
-
-  ffelex_token_kill (ffesta_label_token);
-  ffesta_label_token = NULL;
-}
-
-/* Define label as a non-loop-ending one on a statement that can't
-   be in the "then" part of a logical IF, such as a block-IF statement.  */
-
-static void
-ffestc_labeldef_notloop_ ()
-{
-  if (ffesta_label_token == NULL)
-    return;
-
-  assert (ffestc_shriek_after1_ == NULL);
-
-  if (!ffestc_labeldef_begin_ ())
-    return;
-
-  switch (ffelab_type (ffestc_label_))
-    {
-    case FFELAB_typeUNKNOWN:
-    case FFELAB_typeASSIGNABLE:
-      ffelab_set_type (ffestc_label_, FFELAB_typeNOTLOOP);
-      ffelab_set_blocknum (ffestc_label_,
-                          ffestw_blocknum (ffestw_stack_top ()));
-      ffestd_labeldef_notloop (ffestc_label_);
-      break;
-
-    case FFELAB_typeNOTLOOP:
-      if (ffelab_blocknum (ffestc_label_)
-         < ffestw_blocknum (ffestw_stack_top ()))
-       {
-         ffebad_start (FFEBAD_LABEL_BLOCK);
-         ffebad_here (0, ffelex_token_where_line (ffesta_label_token),
-                      ffelex_token_where_column (ffesta_label_token));
-         ffebad_here (1, ffelab_firstref_line (ffestc_label_),
-                      ffelab_firstref_column (ffestc_label_));
-         ffebad_finish ();
-       }
-      ffelab_set_blocknum (ffestc_label_,
-                          ffestw_blocknum (ffestw_stack_top ()));
-      ffestd_labeldef_notloop (ffestc_label_);
-      break;
-
-    case FFELAB_typeLOOPEND:
-      if ((ffestw_state (ffestw_stack_top ()) != FFESTV_stateDO)
-         || (ffestw_label (ffestw_stack_top ()) != ffestc_label_))
-       {                       /* Unterminated block. */
-         ffelab_set_type (ffestc_label_, FFELAB_typeANY);
-         ffestd_labeldef_any (ffestc_label_);
-
-         ffebad_start (FFEBAD_LABEL_DO_BLOCK_END);
-         ffebad_here (0, ffelab_doref_line (ffestc_label_),
-                      ffelab_doref_column (ffestc_label_));
-         ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-         ffebad_here (2, ffelex_token_where_line (ffesta_label_token),
-                      ffelex_token_where_column (ffesta_label_token));
-         ffebad_finish ();
-         break;
-       }
-      ffestd_labeldef_notloop (ffestc_label_);
-      ffebad_start (FFEBAD_LABEL_USE_DEF);
-      ffebad_here (0, ffelex_token_where_line (ffesta_label_token),
-                  ffelex_token_where_column (ffesta_label_token));
-      ffebad_here (1, ffelab_doref_line (ffestc_label_),
-                  ffelab_doref_column (ffestc_label_));
-      ffebad_finish ();
-      ffestc_labeldef_branch_end_ ();
-      return;
-
-    case FFELAB_typeFORMAT:
-      ffelab_set_type (ffestc_label_, FFELAB_typeANY);
-      ffestd_labeldef_any (ffestc_label_);
-
-      ffebad_start (FFEBAD_LABEL_USE_DEF);
-      ffebad_here (0, ffelex_token_where_line (ffesta_label_token),
-                  ffelex_token_where_column (ffesta_label_token));
-      ffebad_here (1, ffelab_firstref_line (ffestc_label_),
-                  ffelab_firstref_column (ffestc_label_));
-      ffebad_finish ();
-      break;
-
-    default:
-      assert ("bad label" == NULL);
-      /* Fall through.  */
-    case FFELAB_typeANY:
-      break;
-    }
-
-  ffestc_try_shriek_do_ ();
-
-  ffelex_token_kill (ffesta_label_token);
-  ffesta_label_token = NULL;
-}
-
-/* Define label as a non-loop-ending one.  Use this when it is
-   possible that the pending label is inhibited because we're in
-   the midst of a logical-IF, and thus _branch_end_ is going to
-   be called after the current statement to resolve a potential
-   loop-ending label.  */
-
-static void
-ffestc_labeldef_notloop_begin_ ()
-{
-  if ((ffesta_label_token == NULL)
-      || (ffestc_shriek_after1_ != NULL)
-      || !ffestc_labeldef_begin_ ())
-    return;
-
-  switch (ffelab_type (ffestc_label_))
-    {
-    case FFELAB_typeUNKNOWN:
-    case FFELAB_typeASSIGNABLE:
-      ffelab_set_type (ffestc_label_, FFELAB_typeNOTLOOP);
-      ffelab_set_blocknum (ffestc_label_,
-                          ffestw_blocknum (ffestw_stack_top ()));
-      ffestd_labeldef_notloop (ffestc_label_);
-      break;
-
-    case FFELAB_typeNOTLOOP:
-      if (ffelab_blocknum (ffestc_label_)
-         < ffestw_blocknum (ffestw_stack_top ()))
-       {
-         ffebad_start (FFEBAD_LABEL_BLOCK);
-         ffebad_here (0, ffelex_token_where_line (ffesta_label_token),
-                      ffelex_token_where_column (ffesta_label_token));
-         ffebad_here (1, ffelab_firstref_line (ffestc_label_),
-                      ffelab_firstref_column (ffestc_label_));
-         ffebad_finish ();
-       }
-      ffelab_set_blocknum (ffestc_label_,
-                          ffestw_blocknum (ffestw_stack_top ()));
-      ffestd_labeldef_notloop (ffestc_label_);
-      break;
-
-    case FFELAB_typeLOOPEND:
-      if ((ffestw_state (ffestw_stack_top ()) != FFESTV_stateDO)
-         || (ffestw_label (ffestw_stack_top ()) != ffestc_label_))
-       {                       /* Unterminated block. */
-         ffelab_set_type (ffestc_label_, FFELAB_typeANY);
-         ffestd_labeldef_any (ffestc_label_);
-
-         ffebad_start (FFEBAD_LABEL_DO_BLOCK_END);
-         ffebad_here (0, ffelab_doref_line (ffestc_label_),
-                      ffelab_doref_column (ffestc_label_));
-         ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-         ffebad_here (2, ffelex_token_where_line (ffesta_label_token),
-                      ffelex_token_where_column (ffesta_label_token));
-         ffebad_finish ();
-         break;
-       }
-      ffestd_labeldef_branch (ffestc_label_);
-      ffebad_start (FFEBAD_LABEL_USE_DEF);
-      ffebad_here (0, ffelex_token_where_line (ffesta_label_token),
-                  ffelex_token_where_column (ffesta_label_token));
-      ffebad_here (1, ffelab_doref_line (ffestc_label_),
-                  ffelab_doref_column (ffestc_label_));
-      ffebad_finish ();
-      return;
-
-    case FFELAB_typeFORMAT:
-      ffelab_set_type (ffestc_label_, FFELAB_typeANY);
-      ffestd_labeldef_any (ffestc_label_);
-
-      ffebad_start (FFEBAD_LABEL_USE_DEF);
-      ffebad_here (0, ffelex_token_where_line (ffesta_label_token),
-                  ffelex_token_where_column (ffesta_label_token));
-      ffebad_here (1, ffelab_firstref_line (ffestc_label_),
-                  ffelab_firstref_column (ffestc_label_));
-      ffebad_finish ();
-      break;
-
-    default:
-      assert ("bad label" == NULL);
-      /* Fall through.  */
-    case FFELAB_typeANY:
-      break;
-    }
-
-  ffestc_try_shriek_do_ ();
-
-  ffelex_token_kill (ffesta_label_token);
-  ffesta_label_token = NULL;
-}
-
-/* ffestc_labeldef_useless_ -- Define label as a useless one
-
-   ffestc_labeldef_useless_(); */
-
-static void
-ffestc_labeldef_useless_ ()
-{
-  if ((ffesta_label_token == NULL)
-      || (ffestc_shriek_after1_ != NULL)
-      || !ffestc_labeldef_begin_ ())
-    return;
-
-  switch (ffelab_type (ffestc_label_))
-    {
-    case FFELAB_typeUNKNOWN:
-      ffelab_set_type (ffestc_label_, FFELAB_typeUSELESS);
-      ffestd_labeldef_useless (ffestc_label_);
-      break;
-
-    case FFELAB_typeLOOPEND:
-      ffelab_set_type (ffestc_label_, FFELAB_typeANY);
-      ffestd_labeldef_any (ffestc_label_);
-
-      if ((ffestw_state (ffestw_stack_top ()) != FFESTV_stateDO)
-         || (ffestw_label (ffestw_stack_top ()) != ffestc_label_))
-       {                       /* Unterminated block. */
-         ffebad_start (FFEBAD_LABEL_DO_BLOCK_END);
-         ffebad_here (0, ffelab_doref_line (ffestc_label_),
-                      ffelab_doref_column (ffestc_label_));
-         ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-         ffebad_here (2, ffelex_token_where_line (ffesta_label_token),
-                      ffelex_token_where_column (ffesta_label_token));
-         ffebad_finish ();
-         break;
-       }
-      ffebad_start (FFEBAD_LABEL_USE_DEF);
-      ffebad_here (0, ffelex_token_where_line (ffesta_label_token),
-                  ffelex_token_where_column (ffesta_label_token));
-      ffebad_here (1, ffelab_doref_line (ffestc_label_),
-                  ffelab_doref_column (ffestc_label_));
-      ffebad_finish ();
-      ffestc_labeldef_branch_end_ ();
-      return;
-
-    case FFELAB_typeASSIGNABLE:
-    case FFELAB_typeFORMAT:
-    case FFELAB_typeNOTLOOP:
-      ffelab_set_type (ffestc_label_, FFELAB_typeANY);
-      ffestd_labeldef_any (ffestc_label_);
-
-      ffebad_start (FFEBAD_LABEL_USE_DEF);
-      ffebad_here (0, ffelex_token_where_line (ffesta_label_token),
-                  ffelex_token_where_column (ffesta_label_token));
-      ffebad_here (1, ffelab_firstref_line (ffestc_label_),
-                  ffelab_firstref_column (ffestc_label_));
-      ffebad_finish ();
-      break;
-
-    default:
-      assert ("bad label" == NULL);
-      /* Fall through.  */
-    case FFELAB_typeANY:
-      break;
-    }
-
-  ffestc_try_shriek_do_ ();
-
-  ffelex_token_kill (ffesta_label_token);
-  ffesta_label_token = NULL;
-}
-
-/* ffestc_labelref_is_assignable_ -- Reference to label in ASSIGN stmt
-
-   if (ffestc_labelref_is_assignable_(label_token,&label))
-       // label ref is ok, label is filled in with ffelab object  */
-
-static bool
-ffestc_labelref_is_assignable_ (ffelexToken label_token, ffelab *x_label)
-{
-  ffelab label;
-  ffelabValue label_value;
-
-  label_value = (ffelabValue) atol (ffelex_token_text (label_token));
-  if ((label_value == 0) || (label_value > FFELAB_valueMAX))
-    {
-      ffebad_start (FFEBAD_LABEL_NUMBER_INVALID);
-      ffebad_here (0, ffelex_token_where_line (label_token),
-                  ffelex_token_where_column (label_token));
-      ffebad_finish ();
-      return FALSE;
-    }
-
-  label = ffelab_find (label_value);
-  if (label == NULL)
-    {
-      label = ffelab_new (label_value);
-      ffelab_set_firstref_line (label,
-                ffewhere_line_use (ffelex_token_where_line (label_token)));
-      ffelab_set_firstref_column (label,
-            ffewhere_column_use (ffelex_token_where_column (label_token)));
-    }
-
-  switch (ffelab_type (label))
-    {
-    case FFELAB_typeUNKNOWN:
-      ffelab_set_type (label, FFELAB_typeASSIGNABLE);
-      break;
-
-    case FFELAB_typeASSIGNABLE:
-    case FFELAB_typeLOOPEND:
-    case FFELAB_typeFORMAT:
-    case FFELAB_typeNOTLOOP:
-    case FFELAB_typeENDIF:
-      break;
-
-    case FFELAB_typeUSELESS:
-      ffelab_set_type (label, FFELAB_typeANY);
-      ffestd_labeldef_any (label);
-
-      ffebad_start (FFEBAD_LABEL_USE_DEF);
-      ffebad_here (0, ffelab_firstref_line (label), ffelab_firstref_column (label));
-      ffebad_here (1, ffelex_token_where_line (label_token),
-                  ffelex_token_where_column (label_token));
-      ffebad_finish ();
-
-      ffestc_try_shriek_do_ ();
-
-      return FALSE;
-
-    default:
-      assert ("bad label" == NULL);
-      /* Fall through.  */
-    case FFELAB_typeANY:
-      break;
-    }
-
-  *x_label = label;
-  return TRUE;
-}
-
-/* ffestc_labelref_is_branch_ -- Reference to label in branch stmt
-
-   if (ffestc_labelref_is_branch_(label_token,&label))
-       // label ref is ok, label is filled in with ffelab object  */
-
-static bool
-ffestc_labelref_is_branch_ (ffelexToken label_token, ffelab *x_label)
-{
-  ffelab label;
-  ffelabValue label_value;
-  ffestw block;
-  unsigned long blocknum;
-
-  label_value = (ffelabValue) atol (ffelex_token_text (label_token));
-  if ((label_value == 0) || (label_value > FFELAB_valueMAX))
-    {
-      ffebad_start (FFEBAD_LABEL_NUMBER_INVALID);
-      ffebad_here (0, ffelex_token_where_line (label_token),
-                  ffelex_token_where_column (label_token));
-      ffebad_finish ();
-      return FALSE;
-    }
-
-  label = ffelab_find (label_value);
-  if (label == NULL)
-    {
-      label = ffelab_new (label_value);
-      ffelab_set_firstref_line (label,
-                ffewhere_line_use (ffelex_token_where_line (label_token)));
-      ffelab_set_firstref_column (label,
-            ffewhere_column_use (ffelex_token_where_column (label_token)));
-    }
-
-  switch (ffelab_type (label))
-    {
-    case FFELAB_typeUNKNOWN:
-    case FFELAB_typeASSIGNABLE:
-      ffelab_set_type (label, FFELAB_typeNOTLOOP);
-      ffelab_set_blocknum (label, ffestw_blocknum (ffestw_stack_top ()));
-      break;
-
-    case FFELAB_typeLOOPEND:
-      if (ffelab_blocknum (label) != 0)
-       break;                  /* Already taken care of. */
-      for (block = ffestw_top_do (ffestw_stack_top ());
-          (block != NULL) && (ffestw_label (block) != label);
-          block = ffestw_top_do (ffestw_previous (block)))
-       ;                       /* Find most recent DO <label> ancestor. */
-      if (block == NULL)
-       {                       /* Reference to within a (dead) block. */
-         ffebad_start (FFEBAD_LABEL_BLOCK);
-         ffebad_here (0, ffelab_definition_line (label),
-                      ffelab_definition_column (label));
-         ffebad_here (1, ffelex_token_where_line (label_token),
-                      ffelex_token_where_column (label_token));
-         ffebad_finish ();
-         break;
-       }
-      ffelab_set_blocknum (label, ffestw_blocknum (block));
-      ffelab_set_firstref_line (label,
-                ffewhere_line_use (ffelex_token_where_line (label_token)));
-      ffelab_set_firstref_column (label,
-            ffewhere_column_use (ffelex_token_where_column (label_token)));
-      break;
-
-    case FFELAB_typeNOTLOOP:
-    case FFELAB_typeENDIF:
-      if (ffelab_blocknum (label) == ffestw_blocknum (ffestw_stack_top ()))
-       break;
-      blocknum = ffelab_blocknum (label);
-      for (block = ffestw_stack_top ();
-          ffestw_blocknum (block) > blocknum;
-          block = ffestw_previous (block))
-       ;                       /* Find most recent common ancestor. */
-      if (ffelab_blocknum (label) == ffestw_blocknum (block))
-       break;                  /* Check again. */
-      if (!ffewhere_line_is_unknown (ffelab_definition_line (label)))
-       {                       /* Reference to within a (dead) block. */
-         ffebad_start (FFEBAD_LABEL_BLOCK);
-         ffebad_here (0, ffelab_definition_line (label),
-                      ffelab_definition_column (label));
-         ffebad_here (1, ffelex_token_where_line (label_token),
-                      ffelex_token_where_column (label_token));
-         ffebad_finish ();
-         break;
-       }
-      ffelab_set_blocknum (label, ffestw_blocknum (block));
-      break;
-
-    case FFELAB_typeFORMAT:
-      if (ffewhere_line_is_unknown (ffelab_definition_line (label)))
-       {
-         ffelab_set_type (label, FFELAB_typeANY);
-         ffestd_labeldef_any (label);
-
-         ffebad_start (FFEBAD_LABEL_USE_USE);
-         ffebad_here (0, ffelab_firstref_line (label), ffelab_firstref_column (label));
-         ffebad_here (1, ffelex_token_where_line (label_token),
-                      ffelex_token_where_column (label_token));
-         ffebad_finish ();
-
-         ffestc_try_shriek_do_ ();
-
-         return FALSE;
-       }
-      /* Fall through. */
-    case FFELAB_typeUSELESS:
-      ffelab_set_type (label, FFELAB_typeANY);
-      ffestd_labeldef_any (label);
-
-      ffebad_start (FFEBAD_LABEL_USE_DEF);
-      ffebad_here (0, ffelab_definition_line (label), ffelab_definition_column (label));
-      ffebad_here (1, ffelex_token_where_line (label_token),
-                  ffelex_token_where_column (label_token));
-      ffebad_finish ();
-
-      ffestc_try_shriek_do_ ();
-
-      return FALSE;
-
-    default:
-      assert ("bad label" == NULL);
-      /* Fall through.  */
-    case FFELAB_typeANY:
-      break;
-    }
-
-  *x_label = label;
-  return TRUE;
-}
-
-/* ffestc_labelref_is_format_ -- Reference to label in [FMT=] specification
-
-   if (ffestc_labelref_is_format_(label_token,&label))
-       // label ref is ok, label is filled in with ffelab object  */
-
-static bool
-ffestc_labelref_is_format_ (ffelexToken label_token, ffelab *x_label)
-{
-  ffelab label;
-  ffelabValue label_value;
-
-  label_value = (ffelabValue) atol (ffelex_token_text (label_token));
-  if ((label_value == 0) || (label_value > FFELAB_valueMAX))
-    {
-      ffebad_start (FFEBAD_LABEL_NUMBER_INVALID);
-      ffebad_here (0, ffelex_token_where_line (label_token),
-                  ffelex_token_where_column (label_token));
-      ffebad_finish ();
-      return FALSE;
-    }
-
-  label = ffelab_find (label_value);
-  if (label == NULL)
-    {
-      label = ffelab_new (label_value);
-      ffelab_set_firstref_line (label,
-                ffewhere_line_use (ffelex_token_where_line (label_token)));
-      ffelab_set_firstref_column (label,
-            ffewhere_column_use (ffelex_token_where_column (label_token)));
-    }
-
-  switch (ffelab_type (label))
-    {
-    case FFELAB_typeUNKNOWN:
-    case FFELAB_typeASSIGNABLE:
-      ffelab_set_type (label, FFELAB_typeFORMAT);
-      break;
-
-    case FFELAB_typeFORMAT:
-      break;
-
-    case FFELAB_typeLOOPEND:
-    case FFELAB_typeNOTLOOP:
-      if (ffewhere_line_is_unknown (ffelab_definition_line (label)))
-       {
-         ffelab_set_type (label, FFELAB_typeANY);
-         ffestd_labeldef_any (label);
-
-         ffebad_start (FFEBAD_LABEL_USE_USE);
-         ffebad_here (0, ffelab_firstref_line (label), ffelab_firstref_column (label));
-         ffebad_here (1, ffelex_token_where_line (label_token),
-                      ffelex_token_where_column (label_token));
-         ffebad_finish ();
-
-         ffestc_try_shriek_do_ ();
-
-         return FALSE;
-       }
-      /* Fall through. */
-    case FFELAB_typeUSELESS:
-    case FFELAB_typeENDIF:
-      ffelab_set_type (label, FFELAB_typeANY);
-      ffestd_labeldef_any (label);
-
-      ffebad_start (FFEBAD_LABEL_USE_DEF);
-      ffebad_here (0, ffelab_definition_line (label), ffelab_definition_column (label));
-      ffebad_here (1, ffelex_token_where_line (label_token),
-                  ffelex_token_where_column (label_token));
-      ffebad_finish ();
-
-      ffestc_try_shriek_do_ ();
-
-      return FALSE;
-
-    default:
-      assert ("bad label" == NULL);
-      /* Fall through.  */
-    case FFELAB_typeANY:
-      break;
-    }
-
-  ffestc_try_shriek_do_ ();
-
-  *x_label = label;
-  return TRUE;
-}
-
-/* ffestc_labelref_is_loopend_ -- Reference to label in DO stmt
-
-   if (ffestc_labelref_is_loopend_(label_token,&label))
-       // label ref is ok, label is filled in with ffelab object  */
-
-static bool
-ffestc_labelref_is_loopend_ (ffelexToken label_token, ffelab *x_label)
-{
-  ffelab label;
-  ffelabValue label_value;
-
-  label_value = (ffelabValue) atol (ffelex_token_text (label_token));
-  if ((label_value == 0) || (label_value > FFELAB_valueMAX))
-    {
-      ffebad_start (FFEBAD_LABEL_NUMBER_INVALID);
-      ffebad_here (0, ffelex_token_where_line (label_token),
-                  ffelex_token_where_column (label_token));
-      ffebad_finish ();
-      return FALSE;
-    }
-
-  label = ffelab_find (label_value);
-  if (label == NULL)
-    {
-      label = ffelab_new (label_value);
-      ffelab_set_doref_line (label,
-                ffewhere_line_use (ffelex_token_where_line (label_token)));
-      ffelab_set_doref_column (label,
-            ffewhere_column_use (ffelex_token_where_column (label_token)));
-    }
-
-  switch (ffelab_type (label))
-    {
-    case FFELAB_typeASSIGNABLE:
-      ffelab_set_doref_line (label,
-                ffewhere_line_use (ffelex_token_where_line (label_token)));
-      ffelab_set_doref_column (label,
-            ffewhere_column_use (ffelex_token_where_column (label_token)));
-      ffewhere_line_kill (ffelab_firstref_line (label));
-      ffelab_set_firstref_line (label, ffewhere_line_unknown ());
-      ffewhere_column_kill (ffelab_firstref_column (label));
-      ffelab_set_firstref_column (label, ffewhere_column_unknown ());
-      /* Fall through. */
-    case FFELAB_typeUNKNOWN:
-      ffelab_set_type (label, FFELAB_typeLOOPEND);
-      ffelab_set_blocknum (label, 0);
-      break;
-
-    case FFELAB_typeLOOPEND:
-      if (!ffewhere_line_is_unknown (ffelab_definition_line (label)))
-       {                       /* Def must follow all refs. */
-         ffelab_set_type (label, FFELAB_typeANY);
-         ffestd_labeldef_any (label);
-
-         ffebad_start (FFEBAD_LABEL_DEF_DO);
-         ffebad_here (0, ffelab_definition_line (label),
-                      ffelab_definition_column (label));
-         ffebad_here (1, ffelex_token_where_line (label_token),
-                      ffelex_token_where_column (label_token));
-         ffebad_finish ();
-
-         ffestc_try_shriek_do_ ();
-
-         return FALSE;
-       }
-      if (ffelab_blocknum (label) != 0)
-       {                       /* Had a branch ref earlier, can't go inside
-                                  this new block! */
-         ffelab_set_type (label, FFELAB_typeANY);
-         ffestd_labeldef_any (label);
-
-         ffebad_start (FFEBAD_LABEL_USE_USE);
-         ffebad_here (0, ffelab_firstref_line (label),
-                      ffelab_firstref_column (label));
-         ffebad_here (1, ffelex_token_where_line (label_token),
-                      ffelex_token_where_column (label_token));
-         ffebad_finish ();
-
-         ffestc_try_shriek_do_ ();
-
-         return FALSE;
-       }
-      if ((ffestw_state (ffestw_stack_top ()) != FFESTV_stateDO)
-         || (ffestw_label (ffestw_stack_top ()) != label))
-       {                       /* Top of stack interrupts flow between two
-                                  DOs specifying label. */
-         ffelab_set_type (label, FFELAB_typeANY);
-         ffestd_labeldef_any (label);
-
-         ffebad_start (FFEBAD_LABEL_DO_BLOCK_DO);
-         ffebad_here (0, ffelab_doref_line (label),
-                      ffelab_doref_column (label));
-         ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-         ffebad_here (2, ffelex_token_where_line (label_token),
-                      ffelex_token_where_column (label_token));
-         ffebad_finish ();
-
-         ffestc_try_shriek_do_ ();
-
-         return FALSE;
-       }
-      break;
-
-    case FFELAB_typeNOTLOOP:
-    case FFELAB_typeFORMAT:
-      if (ffewhere_line_is_unknown (ffelab_definition_line (label)))
-       {
-         ffelab_set_type (label, FFELAB_typeANY);
-         ffestd_labeldef_any (label);
-
-         ffebad_start (FFEBAD_LABEL_USE_USE);
-         ffebad_here (0, ffelab_firstref_line (label), ffelab_firstref_column (label));
-         ffebad_here (1, ffelex_token_where_line (label_token),
-                      ffelex_token_where_column (label_token));
-         ffebad_finish ();
-
-         ffestc_try_shriek_do_ ();
-
-         return FALSE;
-       }
-      /* Fall through. */
-    case FFELAB_typeUSELESS:
-    case FFELAB_typeENDIF:
-      ffelab_set_type (label, FFELAB_typeANY);
-      ffestd_labeldef_any (label);
-
-      ffebad_start (FFEBAD_LABEL_USE_DEF);
-      ffebad_here (0, ffelab_definition_line (label), ffelab_definition_column (label));
-      ffebad_here (1, ffelex_token_where_line (label_token),
-                  ffelex_token_where_column (label_token));
-      ffebad_finish ();
-
-      ffestc_try_shriek_do_ ();
-
-      return FALSE;
-
-    default:
-      assert ("bad label" == NULL);
-      /* Fall through.  */
-    case FFELAB_typeANY:
-      break;
-    }
-
-  *x_label = label;
-  return TRUE;
-}
-
-/* ffestc_order_access_ -- Check ordering on <access> statement
-
-   if (ffestc_order_access_() != FFESTC_orderOK_)
-       return; */
-
-#if FFESTR_F90
-static ffestcOrder_
-ffestc_order_access_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateMODULE0:
-    case FFESTV_stateMODULE1:
-    case FFESTV_stateMODULE2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateMODULE3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateMODULE3:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-#endif
-/* ffestc_order_actiondo_ -- Check ordering on <actiondo> statement
-
-   if (ffestc_order_actiondo_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_actiondo_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateDO:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateIFTHEN:
-    case FFESTV_stateSELECT1:
-      if (ffestw_top_do (ffestw_stack_top ()) == NULL)
-       break;
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateIF:
-      if (ffestw_top_do (ffestw_stack_top ()) == NULL)
-       break;
-      ffestc_shriek_after1_ = ffestc_shriek_if_;
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    default:
-      break;
-    }
-  ffestc_order_bad_ ();
-  return FFESTC_orderBAD_;
-}
-
-/* ffestc_order_actionif_ -- Check ordering on <actionif> statement
-
-   if (ffestc_order_actionif_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_actionif_ ()
-{
-  bool update;
-
-recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_statePROGRAM0:
-    case FFESTV_statePROGRAM1:
-    case FFESTV_statePROGRAM2:
-    case FFESTV_statePROGRAM3:
-      ffestw_set_state (ffestw_stack_top (), FFESTV_statePROGRAM4);
-      update = TRUE;
-      break;
-
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateSUBROUTINE1:
-    case FFESTV_stateSUBROUTINE2:
-    case FFESTV_stateSUBROUTINE3:
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSUBROUTINE4);
-      update = TRUE;
-      break;
-
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateFUNCTION2:
-    case FFESTV_stateFUNCTION3:
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateFUNCTION4);
-      update = TRUE;
-      break;
-
-    case FFESTV_statePROGRAM4:
-    case FFESTV_stateSUBROUTINE4:
-    case FFESTV_stateFUNCTION4:
-      update = FALSE;
-      break;
-
-    case FFESTV_stateIFTHEN:
-    case FFESTV_stateDO:
-    case FFESTV_stateSELECT1:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateIF:
-      ffestc_shriek_after1_ = ffestc_shriek_if_;
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-
-  switch (ffestw_state (ffestw_previous (ffestw_stack_top ())))
-    {
-    case FFESTV_stateINTERFACE0:
-      ffestc_order_bad_ ();
-      if (update)
-       ffestw_update (NULL);
-      return FFESTC_orderBAD_;
-
-    default:
-      if (update)
-       ffestw_update (NULL);
-      return FFESTC_orderOK_;
-    }
-}
-
-/* ffestc_order_actionwhere_ -- Check ordering on <actionwhere> statement
-
-   if (ffestc_order_actionwhere_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_actionwhere_ ()
-{
-  bool update;
-
-recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_statePROGRAM0:
-    case FFESTV_statePROGRAM1:
-    case FFESTV_statePROGRAM2:
-    case FFESTV_statePROGRAM3:
-      ffestw_set_state (ffestw_stack_top (), FFESTV_statePROGRAM4);
-      update = TRUE;
-      break;
-
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateSUBROUTINE1:
-    case FFESTV_stateSUBROUTINE2:
-    case FFESTV_stateSUBROUTINE3:
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSUBROUTINE4);
-      update = TRUE;
-      break;
-
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateFUNCTION2:
-    case FFESTV_stateFUNCTION3:
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateFUNCTION4);
-      update = TRUE;
-      break;
-
-    case FFESTV_statePROGRAM4:
-    case FFESTV_stateSUBROUTINE4:
-    case FFESTV_stateFUNCTION4:
-      update = FALSE;
-      break;
-
-    case FFESTV_stateWHERETHEN:
-    case FFESTV_stateIFTHEN:
-    case FFESTV_stateDO:
-    case FFESTV_stateSELECT1:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateWHERE:
-#if FFESTR_F90
-      ffestc_shriek_after1_ = ffestc_shriek_where_;
-#endif
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateIF:
-      ffestc_shriek_after1_ = ffestc_shriek_if_;
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-
-  switch (ffestw_state (ffestw_previous (ffestw_stack_top ())))
-    {
-    case FFESTV_stateINTERFACE0:
-      ffestc_order_bad_ ();
-      if (update)
-       ffestw_update (NULL);
-      return FFESTC_orderBAD_;
-
-    default:
-      if (update)
-       ffestw_update (NULL);
-      return FFESTC_orderOK_;
-    }
-}
-
-/* Check ordering on "any" statement.  Like _actionwhere_, but
-   doesn't produce any diagnostics.  */
-
-static void
-ffestc_order_any_ ()
-{
-  bool update;
-
-recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_statePROGRAM0:
-    case FFESTV_statePROGRAM1:
-    case FFESTV_statePROGRAM2:
-    case FFESTV_statePROGRAM3:
-      ffestw_set_state (ffestw_stack_top (), FFESTV_statePROGRAM4);
-      update = TRUE;
-      break;
-
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateSUBROUTINE1:
-    case FFESTV_stateSUBROUTINE2:
-    case FFESTV_stateSUBROUTINE3:
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSUBROUTINE4);
-      update = TRUE;
-      break;
-
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateFUNCTION2:
-    case FFESTV_stateFUNCTION3:
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateFUNCTION4);
-      update = TRUE;
-      break;
-
-    case FFESTV_statePROGRAM4:
-    case FFESTV_stateSUBROUTINE4:
-    case FFESTV_stateFUNCTION4:
-      update = FALSE;
-      break;
-
-    case FFESTV_stateWHERETHEN:
-    case FFESTV_stateIFTHEN:
-    case FFESTV_stateDO:
-    case FFESTV_stateSELECT1:
-      return;
-
-    case FFESTV_stateWHERE:
-#if FFESTR_F90
-      ffestc_shriek_after1_ = ffestc_shriek_where_;
-#endif
-      return;
-
-    case FFESTV_stateIF:
-      ffestc_shriek_after1_ = ffestc_shriek_if_;
-      return;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    default:
-      return;
-    }
-
-  switch (ffestw_state (ffestw_previous (ffestw_stack_top ())))
-    {
-    case FFESTV_stateINTERFACE0:
-      if (update)
-       ffestw_update (NULL);
-      return;
-
-    default:
-      if (update)
-       ffestw_update (NULL);
-      return;
-    }
-}
-
-/* ffestc_order_bad_ -- Whine about statement ordering violation
-
-   ffestc_order_bad_();
-
-   Uses current ffesta_tokens[0] and, if available, info on where current
-   state started to produce generic message.  Someday we should do
-   fancier things than this, but this just gets things creaking along for
-   now.         */
-
-static void
-ffestc_order_bad_ ()
-{
-  if (ffewhere_line_is_unknown (ffestw_line (ffestw_stack_top ())))
-    {
-      ffebad_start (FFEBAD_ORDER_1);
-      ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      ffebad_finish ();
-    }
-  else
-    {
-      ffebad_start (FFEBAD_ORDER_2);
-      ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-      ffebad_finish ();
-    }
-  ffestc_labeldef_useless_ (); /* Any label definition is useless. */
-}
-
-/* ffestc_order_blockdata_ -- Check ordering on <blockdata> statement
-
-   if (ffestc_order_blockdata_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_blockdata_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateBLOCKDATA0:
-    case FFESTV_stateBLOCKDATA1:
-    case FFESTV_stateBLOCKDATA2:
-    case FFESTV_stateBLOCKDATA3:
-    case FFESTV_stateBLOCKDATA4:
-    case FFESTV_stateBLOCKDATA5:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-/* ffestc_order_blockspec_ -- Check ordering on <blockspec> statement
-
-   if (ffestc_order_blockspec_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_blockspec_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_statePROGRAM0:
-    case FFESTV_statePROGRAM1:
-    case FFESTV_statePROGRAM2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_statePROGRAM3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateSUBROUTINE1:
-    case FFESTV_stateSUBROUTINE2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSUBROUTINE3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateFUNCTION2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateFUNCTION3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateMODULE0:
-    case FFESTV_stateMODULE1:
-    case FFESTV_stateMODULE2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateMODULE3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateBLOCKDATA0:
-    case FFESTV_stateBLOCKDATA1:
-    case FFESTV_stateBLOCKDATA2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateBLOCKDATA3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_statePROGRAM3:
-    case FFESTV_stateSUBROUTINE3:
-    case FFESTV_stateFUNCTION3:
-    case FFESTV_stateMODULE3:
-    case FFESTV_stateBLOCKDATA3:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-/* ffestc_order_component_ -- Check ordering on <component-decl> statement
-
-   if (ffestc_order_component_() != FFESTC_orderOK_)
-       return; */
-
-#if FFESTR_F90
-static ffestcOrder_
-ffestc_order_component_ ()
-{
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateTYPE:
-    case FFESTV_stateSTRUCTURE:
-    case FFESTV_stateMAP:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-      ffestc_shriek_where_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-#endif
-/* ffestc_order_contains_ -- Check ordering on CONTAINS statement
-
-   if (ffestc_order_contains_() != FFESTC_orderOK_)
-       return; */
-
-#if FFESTR_F90
-static ffestcOrder_
-ffestc_order_contains_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_statePROGRAM0:
-    case FFESTV_statePROGRAM1:
-    case FFESTV_statePROGRAM2:
-    case FFESTV_statePROGRAM3:
-    case FFESTV_statePROGRAM4:
-      ffestw_set_state (ffestw_stack_top (), FFESTV_statePROGRAM5);
-      break;
-
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateSUBROUTINE1:
-    case FFESTV_stateSUBROUTINE2:
-    case FFESTV_stateSUBROUTINE3:
-    case FFESTV_stateSUBROUTINE4:
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSUBROUTINE5);
-      break;
-
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateFUNCTION2:
-    case FFESTV_stateFUNCTION3:
-    case FFESTV_stateFUNCTION4:
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateFUNCTION5);
-      break;
-
-    case FFESTV_stateMODULE0:
-    case FFESTV_stateMODULE1:
-    case FFESTV_stateMODULE2:
-    case FFESTV_stateMODULE3:
-    case FFESTV_stateMODULE4:
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateMODULE5);
-      break;
-
-    case FFESTV_stateUSE:
-      ffestc_shriek_end_uses_ (TRUE);
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-      ffestc_shriek_where_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-
-  switch (ffestw_state (ffestw_previous (ffestw_stack_top ())))
-    {
-    case FFESTV_stateNIL:
-      ffestw_update (NULL);
-      return FFESTC_orderOK_;
-
-    default:
-      ffestc_order_bad_ ();
-      ffestw_update (NULL);
-      return FFESTC_orderBAD_;
-    }
-}
-
-#endif
-/* ffestc_order_data_ -- Check ordering on DATA statement
-
-   if (ffestc_order_data_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_data_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_statePROGRAM0:
-    case FFESTV_statePROGRAM1:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_statePROGRAM2);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateSUBROUTINE1:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSUBROUTINE2);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateFUNCTION1:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateFUNCTION2);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateBLOCKDATA0:
-    case FFESTV_stateBLOCKDATA1:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateBLOCKDATA2);
-      return FFESTC_orderOK_;
-
-    case FFESTV_statePROGRAM2:
-    case FFESTV_stateSUBROUTINE2:
-    case FFESTV_stateFUNCTION2:
-    case FFESTV_stateBLOCKDATA2:
-    case FFESTV_statePROGRAM3:
-    case FFESTV_stateSUBROUTINE3:
-    case FFESTV_stateFUNCTION3:
-    case FFESTV_stateBLOCKDATA3:
-    case FFESTV_statePROGRAM4:
-    case FFESTV_stateSUBROUTINE4:
-    case FFESTV_stateFUNCTION4:
-    case FFESTV_stateBLOCKDATA4:
-    case FFESTV_stateWHERETHEN:
-    case FFESTV_stateIFTHEN:
-    case FFESTV_stateDO:
-    case FFESTV_stateSELECT0:
-    case FFESTV_stateSELECT1:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-/* ffestc_order_data77_ -- Check ordering on pedantic-F77 DATA statement
-
-   if (ffestc_order_data77_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_data77_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_statePROGRAM0:
-    case FFESTV_statePROGRAM1:
-    case FFESTV_statePROGRAM2:
-    case FFESTV_statePROGRAM3:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_statePROGRAM4);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateSUBROUTINE1:
-    case FFESTV_stateSUBROUTINE2:
-    case FFESTV_stateSUBROUTINE3:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSUBROUTINE4);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateFUNCTION2:
-    case FFESTV_stateFUNCTION3:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateFUNCTION4);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateBLOCKDATA0:
-    case FFESTV_stateBLOCKDATA1:
-    case FFESTV_stateBLOCKDATA2:
-    case FFESTV_stateBLOCKDATA3:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateBLOCKDATA4);
-      return FFESTC_orderOK_;
-
-    case FFESTV_statePROGRAM4:
-    case FFESTV_stateSUBROUTINE4:
-    case FFESTV_stateFUNCTION4:
-    case FFESTV_stateBLOCKDATA4:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateWHERETHEN:
-    case FFESTV_stateIFTHEN:
-    case FFESTV_stateDO:
-    case FFESTV_stateSELECT0:
-    case FFESTV_stateSELECT1:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-/* ffestc_order_derivedtype_ -- Check ordering on derived TYPE statement
-
-   if (ffestc_order_derivedtype_() != FFESTC_orderOK_)
-       return; */
-
-#if FFESTR_F90
-static ffestcOrder_
-ffestc_order_derivedtype_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_statePROGRAM0:
-    case FFESTV_statePROGRAM1:
-    case FFESTV_statePROGRAM2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_statePROGRAM3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateSUBROUTINE1:
-    case FFESTV_stateSUBROUTINE2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSUBROUTINE3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateFUNCTION2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateFUNCTION3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateMODULE0:
-    case FFESTV_stateMODULE1:
-    case FFESTV_stateMODULE2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateMODULE3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_statePROGRAM3:
-    case FFESTV_stateSUBROUTINE3:
-    case FFESTV_stateFUNCTION3:
-    case FFESTV_stateMODULE3:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-      ffestc_shriek_end_uses_ (TRUE);
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-      ffestc_shriek_where_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-#endif
-/* ffestc_order_do_ -- Check ordering on <do> statement
-
-   if (ffestc_order_do_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_do_ ()
-{
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateDO:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-/* ffestc_order_entry_ -- Check ordering on ENTRY statement
-
-   if (ffestc_order_entry_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_entry_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateSUBROUTINE0:
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSUBROUTINE1);
-      break;
-
-    case FFESTV_stateFUNCTION0:
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateFUNCTION1);
-      break;
-
-    case FFESTV_stateSUBROUTINE1:
-    case FFESTV_stateSUBROUTINE2:
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateFUNCTION2:
-    case FFESTV_stateSUBROUTINE3:
-    case FFESTV_stateFUNCTION3:
-    case FFESTV_stateSUBROUTINE4:
-    case FFESTV_stateFUNCTION4:
-      break;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-
-  switch (ffestw_state (ffestw_previous (ffestw_stack_top ())))
-    {
-    case FFESTV_stateNIL:
-    case FFESTV_stateMODULE5:
-      ffestw_update (NULL);
-      return FFESTC_orderOK_;
-
-    default:
-      ffestc_order_bad_ ();
-      ffestw_update (NULL);
-      return FFESTC_orderBAD_;
-    }
-}
-
-/* ffestc_order_exec_ -- Check ordering on <exec> statement
-
-   if (ffestc_order_exec_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_exec_ ()
-{
-  bool update;
-
-recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_statePROGRAM0:
-    case FFESTV_statePROGRAM1:
-    case FFESTV_statePROGRAM2:
-    case FFESTV_statePROGRAM3:
-      ffestw_set_state (ffestw_stack_top (), FFESTV_statePROGRAM4);
-      update = TRUE;
-      break;
-
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateSUBROUTINE1:
-    case FFESTV_stateSUBROUTINE2:
-    case FFESTV_stateSUBROUTINE3:
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSUBROUTINE4);
-      update = TRUE;
-      break;
-
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateFUNCTION2:
-    case FFESTV_stateFUNCTION3:
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateFUNCTION4);
-      update = TRUE;
-      break;
-
-    case FFESTV_statePROGRAM4:
-    case FFESTV_stateSUBROUTINE4:
-    case FFESTV_stateFUNCTION4:
-      update = FALSE;
-      break;
-
-    case FFESTV_stateIFTHEN:
-    case FFESTV_stateDO:
-    case FFESTV_stateSELECT1:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-
-  switch (ffestw_state (ffestw_previous (ffestw_stack_top ())))
-    {
-    case FFESTV_stateINTERFACE0:
-      ffestc_order_bad_ ();
-      if (update)
-       ffestw_update (NULL);
-      return FFESTC_orderBAD_;
-
-    default:
-      if (update)
-       ffestw_update (NULL);
-      return FFESTC_orderOK_;
-    }
-}
-
-/* ffestc_order_format_ -- Check ordering on FORMAT statement
-
-   if (ffestc_order_format_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_format_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_statePROGRAM0:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_statePROGRAM1);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateSUBROUTINE0:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSUBROUTINE1);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateFUNCTION0:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateFUNCTION1);
-      return FFESTC_orderOK_;
-
-    case FFESTV_statePROGRAM1:
-    case FFESTV_statePROGRAM2:
-    case FFESTV_stateSUBROUTINE1:
-    case FFESTV_stateSUBROUTINE2:
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateFUNCTION2:
-    case FFESTV_statePROGRAM3:
-    case FFESTV_stateSUBROUTINE3:
-    case FFESTV_stateFUNCTION3:
-    case FFESTV_statePROGRAM4:
-    case FFESTV_stateSUBROUTINE4:
-    case FFESTV_stateFUNCTION4:
-    case FFESTV_stateWHERETHEN:
-    case FFESTV_stateIFTHEN:
-    case FFESTV_stateDO:
-    case FFESTV_stateSELECT0:
-    case FFESTV_stateSELECT1:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-/* ffestc_order_function_ -- Check ordering on <function> statement
-
-   if (ffestc_order_function_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_function_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateFUNCTION2:
-    case FFESTV_stateFUNCTION3:
-    case FFESTV_stateFUNCTION4:
-    case FFESTV_stateFUNCTION5:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-/* ffestc_order_iface_ -- Check ordering on <iface> statement
-
-   if (ffestc_order_iface_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_iface_ ()
-{
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-    case FFESTV_statePROGRAM5:
-    case FFESTV_stateSUBROUTINE5:
-    case FFESTV_stateFUNCTION5:
-    case FFESTV_stateMODULE5:
-    case FFESTV_stateINTERFACE0:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-/* ffestc_order_ifthen_ -- Check ordering on <ifthen> statement
-
-   if (ffestc_order_ifthen_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_ifthen_ ()
-{
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateIFTHEN:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-/* ffestc_order_implicit_ -- Check ordering on IMPLICIT statement
-
-   if (ffestc_order_implicit_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_implicit_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_statePROGRAM0:
-    case FFESTV_statePROGRAM1:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_statePROGRAM2);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateSUBROUTINE1:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSUBROUTINE2);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateFUNCTION1:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateFUNCTION2);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateMODULE0:
-    case FFESTV_stateMODULE1:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateMODULE2);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateBLOCKDATA0:
-    case FFESTV_stateBLOCKDATA1:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateBLOCKDATA2);
-      return FFESTC_orderOK_;
-
-    case FFESTV_statePROGRAM2:
-    case FFESTV_stateSUBROUTINE2:
-    case FFESTV_stateFUNCTION2:
-    case FFESTV_stateMODULE2:
-    case FFESTV_stateBLOCKDATA2:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-/* ffestc_order_implicitnone_ -- Check ordering on IMPLICIT NONE statement
-
-   if (ffestc_order_implicitnone_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_implicitnone_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_statePROGRAM0:
-    case FFESTV_statePROGRAM1:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_statePROGRAM3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateSUBROUTINE1:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSUBROUTINE3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateFUNCTION1:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateFUNCTION3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateMODULE0:
-    case FFESTV_stateMODULE1:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateMODULE3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateBLOCKDATA0:
-    case FFESTV_stateBLOCKDATA1:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateBLOCKDATA3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-/* ffestc_order_interface_ -- Check ordering on <interface> statement
-
-   if (ffestc_order_interface_() != FFESTC_orderOK_)
-       return; */
-
-#if FFESTR_F90
-static ffestcOrder_
-ffestc_order_interface_ ()
-{
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateINTERFACE0:
-    case FFESTV_stateINTERFACE1:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-      ffestc_shriek_where_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-#endif
-/* ffestc_order_map_ -- Check ordering on <map> statement
-
-   if (ffestc_order_map_() != FFESTC_orderOK_)
-       return; */
-
-#if FFESTR_VXT
-static ffestcOrder_
-ffestc_order_map_ ()
-{
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateMAP:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-      ffestc_shriek_where_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-#endif
-/* ffestc_order_module_ -- Check ordering on <module> statement
-
-   if (ffestc_order_module_() != FFESTC_orderOK_)
-       return; */
-
-#if FFESTR_F90
-static ffestcOrder_
-ffestc_order_module_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateMODULE0:
-    case FFESTV_stateMODULE1:
-    case FFESTV_stateMODULE2:
-    case FFESTV_stateMODULE3:
-    case FFESTV_stateMODULE4:
-    case FFESTV_stateMODULE5:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-      ffestc_shriek_end_uses_ (TRUE);
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-      ffestc_shriek_where_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-#endif
-/* ffestc_order_parameter_ -- Check ordering on <parameter> statement
-
-   if (ffestc_order_parameter_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_parameter_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_statePROGRAM0:
-    case FFESTV_statePROGRAM1:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_statePROGRAM2);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateSUBROUTINE1:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSUBROUTINE2);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateFUNCTION1:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateFUNCTION2);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateMODULE0:
-    case FFESTV_stateMODULE1:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateMODULE2);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateBLOCKDATA0:
-    case FFESTV_stateBLOCKDATA1:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateBLOCKDATA2);
-      return FFESTC_orderOK_;
-
-    case FFESTV_statePROGRAM2:
-    case FFESTV_stateSUBROUTINE2:
-    case FFESTV_stateFUNCTION2:
-    case FFESTV_stateMODULE2:
-    case FFESTV_stateBLOCKDATA2:
-    case FFESTV_statePROGRAM3:
-    case FFESTV_stateSUBROUTINE3:
-    case FFESTV_stateFUNCTION3:
-    case FFESTV_stateMODULE3:
-    case FFESTV_stateBLOCKDATA3:
-    case FFESTV_stateTYPE:     /* GNU extension here! */
-    case FFESTV_stateSTRUCTURE:
-    case FFESTV_stateUNION:
-    case FFESTV_stateMAP:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-/* ffestc_order_program_ -- Check ordering on <program> statement
-
-   if (ffestc_order_program_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_program_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_statePROGRAM0:
-    case FFESTV_statePROGRAM1:
-    case FFESTV_statePROGRAM2:
-    case FFESTV_statePROGRAM3:
-    case FFESTV_statePROGRAM4:
-    case FFESTV_statePROGRAM5:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-/* ffestc_order_progspec_ -- Check ordering on <progspec> statement
-
-   if (ffestc_order_progspec_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_progspec_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_statePROGRAM0:
-    case FFESTV_statePROGRAM1:
-    case FFESTV_statePROGRAM2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_statePROGRAM3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateSUBROUTINE1:
-    case FFESTV_stateSUBROUTINE2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSUBROUTINE3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateFUNCTION2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateFUNCTION3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateMODULE0:
-    case FFESTV_stateMODULE1:
-    case FFESTV_stateMODULE2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateMODULE3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_statePROGRAM3:
-    case FFESTV_stateSUBROUTINE3:
-    case FFESTV_stateFUNCTION3:
-    case FFESTV_stateMODULE3:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateBLOCKDATA0:
-    case FFESTV_stateBLOCKDATA1:
-    case FFESTV_stateBLOCKDATA2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateBLOCKDATA2);
-      if (ffe_is_pedantic ())
-       {
-         ffebad_start (FFEBAD_BLOCKDATA_STMT);
-         ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                      ffelex_token_where_column (ffesta_tokens[0]));
-         ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-         ffebad_finish ();
-       }
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-/* ffestc_order_record_ -- Check ordering on RECORD statement
-
-   if (ffestc_order_record_() != FFESTC_orderOK_)
-       return; */
-
-#if FFESTR_VXT
-static ffestcOrder_
-ffestc_order_record_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_statePROGRAM0:
-    case FFESTV_statePROGRAM1:
-    case FFESTV_statePROGRAM2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_statePROGRAM3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateSUBROUTINE1:
-    case FFESTV_stateSUBROUTINE2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSUBROUTINE3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateFUNCTION2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateFUNCTION3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateMODULE0:
-    case FFESTV_stateMODULE1:
-    case FFESTV_stateMODULE2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateMODULE3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateBLOCKDATA0:
-    case FFESTV_stateBLOCKDATA1:
-    case FFESTV_stateBLOCKDATA2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateBLOCKDATA3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_statePROGRAM3:
-    case FFESTV_stateSUBROUTINE3:
-    case FFESTV_stateFUNCTION3:
-    case FFESTV_stateMODULE3:
-    case FFESTV_stateBLOCKDATA3:
-    case FFESTV_stateSTRUCTURE:
-    case FFESTV_stateMAP:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-#endif
-/* ffestc_order_selectcase_ -- Check ordering on <selectcase> statement
-
-   if (ffestc_order_selectcase_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_selectcase_ ()
-{
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateSELECT0:
-    case FFESTV_stateSELECT1:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-/* ffestc_order_sfunc_ -- Check ordering on statement-function definition
-
-   if (ffestc_order_sfunc_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_sfunc_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_statePROGRAM0:
-    case FFESTV_statePROGRAM1:
-    case FFESTV_statePROGRAM2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_statePROGRAM3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateSUBROUTINE1:
-    case FFESTV_stateSUBROUTINE2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSUBROUTINE3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateFUNCTION2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateFUNCTION3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_statePROGRAM3:
-    case FFESTV_stateSUBROUTINE3:
-    case FFESTV_stateFUNCTION3:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-/* ffestc_order_spec_ -- Check ordering on <spec> statement
-
-   if (ffestc_order_spec_() != FFESTC_orderOK_)
-       return; */
-
-#if FFESTR_F90
-static ffestcOrder_
-ffestc_order_spec_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateSUBROUTINE1:
-    case FFESTV_stateSUBROUTINE2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSUBROUTINE3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateFUNCTION2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateFUNCTION3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateMODULE0:
-    case FFESTV_stateMODULE1:
-    case FFESTV_stateMODULE2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateMODULE3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateSUBROUTINE3:
-    case FFESTV_stateFUNCTION3:
-    case FFESTV_stateMODULE3:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-#endif
-/* ffestc_order_structure_ -- Check ordering on <structure> statement
-
-   if (ffestc_order_structure_() != FFESTC_orderOK_)
-       return; */
-
-#if FFESTR_VXT
-static ffestcOrder_
-ffestc_order_structure_ ()
-{
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateSTRUCTURE:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-#endif
-/* ffestc_order_subroutine_ -- Check ordering on <subroutine> statement
-
-   if (ffestc_order_subroutine_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_subroutine_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateSUBROUTINE1:
-    case FFESTV_stateSUBROUTINE2:
-    case FFESTV_stateSUBROUTINE3:
-    case FFESTV_stateSUBROUTINE4:
-    case FFESTV_stateSUBROUTINE5:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-/* ffestc_order_type_ -- Check ordering on <type> statement
-
-   if (ffestc_order_type_() != FFESTC_orderOK_)
-       return; */
-
-#if FFESTR_F90
-static ffestcOrder_
-ffestc_order_type_ ()
-{
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateTYPE:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-      ffestc_shriek_where_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-#endif
-/* ffestc_order_typedecl_ -- Check ordering on <typedecl> statement
-
-   if (ffestc_order_typedecl_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_typedecl_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_statePROGRAM0:
-    case FFESTV_statePROGRAM1:
-    case FFESTV_statePROGRAM2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_statePROGRAM3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateSUBROUTINE1:
-    case FFESTV_stateSUBROUTINE2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSUBROUTINE3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateFUNCTION2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateFUNCTION3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateMODULE0:
-    case FFESTV_stateMODULE1:
-    case FFESTV_stateMODULE2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateMODULE3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateBLOCKDATA0:
-    case FFESTV_stateBLOCKDATA1:
-    case FFESTV_stateBLOCKDATA2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateBLOCKDATA3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_statePROGRAM3:
-    case FFESTV_stateSUBROUTINE3:
-    case FFESTV_stateFUNCTION3:
-    case FFESTV_stateMODULE3:
-    case FFESTV_stateBLOCKDATA3:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-/* ffestc_order_union_ -- Check ordering on <union> statement
-
-   if (ffestc_order_union_() != FFESTC_orderOK_)
-       return; */
-
-#if FFESTR_VXT
-static ffestcOrder_
-ffestc_order_union_ ()
-{
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateUNION:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-#endif
-/* ffestc_order_unit_ -- Check ordering on <unit> statement
-
-   if (ffestc_order_unit_() != FFESTC_orderOK_)
-       return; */
-
-static ffestcOrder_
-ffestc_order_unit_ ()
-{
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-/* ffestc_order_use_ -- Check ordering on USE statement
-
-   if (ffestc_order_use_() != FFESTC_orderOK_)
-       return; */
-
-#if FFESTR_F90
-static ffestcOrder_
-ffestc_order_use_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_statePROGRAM0:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_statePROGRAM1);
-      ffestc_shriek_begin_uses_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateSUBROUTINE0:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSUBROUTINE1);
-      ffestc_shriek_begin_uses_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateFUNCTION0:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateFUNCTION1);
-      ffestc_shriek_begin_uses_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateMODULE0:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateMODULE1);
-      ffestc_shriek_begin_uses_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateUSE:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-      ffestc_shriek_where_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-#endif
-/* ffestc_order_vxtstructure_ -- Check ordering on STRUCTURE statement
-
-   if (ffestc_order_vxtstructure_() != FFESTC_orderOK_)
-       return; */
-
-#if FFESTR_VXT
-static ffestcOrder_
-ffestc_order_vxtstructure_ ()
-{
-  recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_statePROGRAM0:
-    case FFESTV_statePROGRAM1:
-    case FFESTV_statePROGRAM2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_statePROGRAM3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateSUBROUTINE1:
-    case FFESTV_stateSUBROUTINE2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSUBROUTINE3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateFUNCTION2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateFUNCTION3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateMODULE0:
-    case FFESTV_stateMODULE1:
-    case FFESTV_stateMODULE2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateMODULE3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateBLOCKDATA0:
-    case FFESTV_stateBLOCKDATA1:
-    case FFESTV_stateBLOCKDATA2:
-      ffestw_update (NULL);
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateBLOCKDATA3);
-      return FFESTC_orderOK_;
-
-    case FFESTV_statePROGRAM3:
-    case FFESTV_stateSUBROUTINE3:
-    case FFESTV_stateFUNCTION3:
-    case FFESTV_stateMODULE3:
-    case FFESTV_stateBLOCKDATA3:
-    case FFESTV_stateSTRUCTURE:
-    case FFESTV_stateMAP:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-#if FFESTR_F90
-      ffestc_shriek_where_ (FALSE);
-#endif
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-#endif
-/* ffestc_order_where_ -- Check ordering on <where> statement
-
-   if (ffestc_order_where_() != FFESTC_orderOK_)
-       return; */
-
-#if FFESTR_F90
-static ffestcOrder_
-ffestc_order_where_ ()
-{
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateWHERETHEN:
-      return FFESTC_orderOK_;
-
-    case FFESTV_stateWHERE:
-      ffestc_order_bad_ ();
-      ffestc_shriek_where_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    case FFESTV_stateIF:
-      ffestc_order_bad_ ();
-      ffestc_shriek_if_ (FALSE);
-      return FFESTC_orderBAD_;
-
-    default:
-      ffestc_order_bad_ ();
-      return FFESTC_orderBAD_;
-    }
-}
-
-#endif
-/* Invoked for each token in dummy arg list of FUNCTION, SUBROUTINE, and
-   ENTRY (prior to the first executable statement).  */
-
-static void
-ffestc_promote_dummy_ (ffelexToken t)
-{
-  ffesymbol s;
-  ffesymbolAttrs sa;
-  ffesymbolAttrs na;
-  ffebld e;
-  bool sfref_ok;
-
-  assert (t != NULL);
-
-  if (ffelex_token_type (t) == FFELEX_typeASTERISK)
-    {
-      ffebld_append_item (&ffestc_local_.dummy.list_bottom,
-                         ffebld_new_star ());
-      return;                  /* Don't bother with alternate returns! */
-    }
-
-  s = ffesymbol_declare_local (t, FALSE);
-  sa = ffesymbol_attrs (s);
-
-  /* Figure out what kind of object we've got based on previous declarations
-     of or references to the object. */
-
-  sfref_ok = FALSE;
-
-  if (sa & FFESYMBOL_attrsANY)
-    na = sa;
-  else if (sa & FFESYMBOL_attrsDUMMY)
-    {
-      if (ffestc_entry_num_ == ffesymbol_maxentrynum (s))
-       {                       /* Seen this one twice in this list! */
-         na = FFESYMBOL_attrsetNONE;
-       }
-      else
-       na = sa;
-      sfref_ok = TRUE;         /* Ok for sym to be ref'd in sfuncdef
-                                  previously, since already declared as a
-                                  dummy arg. */
-    }
-  else if (!(sa & ~(FFESYMBOL_attrsADJUSTABLE
-                   | FFESYMBOL_attrsADJUSTS
-                   | FFESYMBOL_attrsANY
-                   | FFESYMBOL_attrsANYLEN
-                   | FFESYMBOL_attrsANYSIZE
-                   | FFESYMBOL_attrsARRAY
-                   | FFESYMBOL_attrsDUMMY
-                   | FFESYMBOL_attrsEXTERNAL
-                   | FFESYMBOL_attrsSFARG
-                   | FFESYMBOL_attrsTYPE)))
-    na = sa | FFESYMBOL_attrsDUMMY;
-  else
-    na = FFESYMBOL_attrsetNONE;
-
-  if (!ffesymbol_is_specable (s)
-      && (!sfref_ok
-         || (ffesymbol_where (s) != FFEINFO_whereDUMMY)))
-    na = FFESYMBOL_attrsetNONE;        /* Can't dcl sym ref'd in sfuncdef. */
-
-  /* Now see what we've got for a new object: NONE means a new error cropped
-     up; ANY means an old error to be ignored; otherwise, everything's ok,
-     update the object (symbol) and continue on. */
-
-  if (na == FFESYMBOL_attrsetNONE)
-    ffesymbol_error (s, t);
-  else if (!(na & FFESYMBOL_attrsANY))
-    {
-      ffesymbol_set_attrs (s, na);
-      if (ffesymbol_state (s) == FFESYMBOL_stateNONE)
-       ffesymbol_set_state (s, FFESYMBOL_stateSEEN);
-      ffesymbol_set_maxentrynum (s, ffestc_entry_num_);
-      ffesymbol_set_numentries (s, ffesymbol_numentries (s) + 1);
-      e = ffebld_new_symter (s, FFEINTRIN_genNONE, FFEINTRIN_specNONE,
-                            FFEINTRIN_impNONE);
-      ffebld_set_info (e,
-                      ffeinfo_new (FFEINFO_basictypeNONE,
-                                   FFEINFO_kindtypeNONE,
-                                   0,
-                                   FFEINFO_kindNONE,
-                                   FFEINFO_whereNONE,
-                                   FFETARGET_charactersizeNONE));
-      ffebld_append_item (&ffestc_local_.dummy.list_bottom, e);
-      ffesymbol_signal_unreported (s);
-    }
-}
-
-/* ffestc_promote_execdummy_ -- Declare token as dummy variable in exec context
-
-   ffestc_promote_execdummy_(t);
-
-   Invoked for each token in dummy arg list of ENTRY when the statement
-   follows the first executable statement.  */
-
-static void
-ffestc_promote_execdummy_ (ffelexToken t)
-{
-  ffesymbol s;
-  ffesymbolAttrs sa;
-  ffesymbolAttrs na;
-  ffesymbolState ss;
-  ffesymbolState ns;
-  ffeinfoKind kind;
-  ffeinfoWhere where;
-  ffebld e;
-
-  assert (t != NULL);
-
-  if (ffelex_token_type (t) == FFELEX_typeASTERISK)
-    {
-      ffebld_append_item (&ffestc_local_.dummy.list_bottom,
-                         ffebld_new_star ());
-      return;                  /* Don't bother with alternate returns! */
-    }
-
-  s = ffesymbol_declare_local (t, FALSE);
-  na = sa = ffesymbol_attrs (s);
-  ss = ffesymbol_state (s);
-  kind = ffesymbol_kind (s);
-  where = ffesymbol_where (s);
-
-  if (ffestc_entry_num_ == ffesymbol_maxentrynum (s))
-    {                          /* Seen this one twice in this list! */
-      na = FFESYMBOL_attrsetNONE;
-    }
-
-  /* Figure out what kind of object we've got based on previous declarations
-     of or references to the object. */
-
-  ns = FFESYMBOL_stateUNDERSTOOD;      /* Assume we know it all know. */
-
-  switch (kind)
-    {
-    case FFEINFO_kindENTITY:
-    case FFEINFO_kindFUNCTION:
-    case FFEINFO_kindSUBROUTINE:
-      break;                   /* These are fine, as far as we know. */
-
-    case FFEINFO_kindNONE:
-      if (sa & FFESYMBOL_attrsDUMMY)
-       ns = FFESYMBOL_stateUNCERTAIN;  /* Learned nothing new. */
-      else if (sa & FFESYMBOL_attrsANYLEN)
-       {
-         kind = FFEINFO_kindENTITY;
-         where = FFEINFO_whereDUMMY;
-       }
-      else if (sa & FFESYMBOL_attrsACTUALARG)
-       na = FFESYMBOL_attrsetNONE;
-      else
-       {
-         na = sa | FFESYMBOL_attrsDUMMY;
-         ns = FFESYMBOL_stateUNCERTAIN;
-       }
-      break;
-
-    default:
-      na = FFESYMBOL_attrsetNONE;      /* Error. */
-      break;
-    }
-
-  switch (where)
-    {
-    case FFEINFO_whereDUMMY:
-      break;                   /* This is fine. */
-
-    case FFEINFO_whereNONE:
-      where = FFEINFO_whereDUMMY;
-      break;
-
-    default:
-      na = FFESYMBOL_attrsetNONE;      /* Error. */
-      break;
-    }
-
-  /* Now see what we've got for a new object: NONE means a new error cropped
-     up; ANY means an old error to be ignored; otherwise, everything's ok,
-     update the object (symbol) and continue on. */
-
-  if (na == FFESYMBOL_attrsetNONE)
-    ffesymbol_error (s, t);
-  else if (!(na & FFESYMBOL_attrsANY))
-    {
-      ffesymbol_set_attrs (s, na);
-      ffesymbol_set_state (s, ns);
-      ffesymbol_set_maxentrynum (s, ffestc_entry_num_);
-      ffesymbol_set_numentries (s, ffesymbol_numentries (s) + 1);
-      if ((ns == FFESYMBOL_stateUNDERSTOOD)
-         && (kind != FFEINFO_kindSUBROUTINE)
-         && !ffeimplic_establish_symbol (s))
-       {
-         ffesymbol_error (s, t);
-         return;
-       }
-      ffesymbol_set_info (s,
-                         ffeinfo_new (ffesymbol_basictype (s),
-                                      ffesymbol_kindtype (s),
-                                      ffesymbol_rank (s),
-                                      kind,
-                                      where,
-                                      ffesymbol_size (s)));
-      e = ffebld_new_symter (s, FFEINTRIN_genNONE, FFEINTRIN_specNONE,
-                            FFEINTRIN_impNONE);
-      ffebld_set_info (e, ffeinfo_use (ffesymbol_info (s)));
-      ffebld_append_item (&ffestc_local_.dummy.list_bottom, e);
-      s = ffecom_sym_learned (s);
-      ffesymbol_signal_unreported (s);
-    }
-}
-
-/* ffestc_promote_sfdummy_ -- Declare token as stmt-func dummy variable
-
-   ffestc_promote_sfdummy_(t);
-
-   Invoked for each token in dummy arg list of statement function.
-
-   22-Oct-91  JCB  1.1
-      Reject arg if CHARACTER*(*).  */
-
-static void
-ffestc_promote_sfdummy_ (ffelexToken t)
-{
-  ffesymbol s;
-  ffesymbol sp;                        /* Parent symbol. */
-  ffesymbolAttrs sa;
-  ffesymbolAttrs na;
-  ffebld e;
-
-  assert (t != NULL);
-
-  s = ffesymbol_declare_sfdummy (t);   /* Sets maxentrynum to 0 for new obj;
-                                          also sets sfa_dummy_parent to
-                                          parent symbol. */
-  if (ffesymbol_state (s) != FFESYMBOL_stateNONE)
-    {
-      ffesymbol_error (s, t);  /* Dummy already in list. */
-      return;
-    }
-
-  sp = ffesymbol_sfdummyparent (s);    /* Now flag dummy's parent as used
-                                          for dummy. */
-  sa = ffesymbol_attrs (sp);
-
-  /* Figure out what kind of object we've got based on previous declarations
-     of or references to the object. */
-
-  if (!ffesymbol_is_specable (sp)
-      && ((ffesymbol_kind (sp) != FFEINFO_kindENTITY)
-         || ((ffesymbol_where (sp) != FFEINFO_whereLOCAL)
-             && (ffesymbol_where (sp) != FFEINFO_whereCOMMON)
-             && (ffesymbol_where (sp) != FFEINFO_whereDUMMY)
-             && (ffesymbol_where (sp) != FFEINFO_whereNONE))))
-    na = FFESYMBOL_attrsetNONE;        /* Can't be PARAMETER etc., must be a var. */
-  else if (sa & FFESYMBOL_attrsANY)
-    na = sa;
-  else if (!(sa & ~(FFESYMBOL_attrsADJUSTS
-                   | FFESYMBOL_attrsCOMMON
-                   | FFESYMBOL_attrsDUMMY
-                   | FFESYMBOL_attrsEQUIV
-                   | FFESYMBOL_attrsINIT
-                   | FFESYMBOL_attrsNAMELIST
-                   | FFESYMBOL_attrsRESULT
-                   | FFESYMBOL_attrsSAVE
-                   | FFESYMBOL_attrsSFARG
-                   | FFESYMBOL_attrsTYPE)))
-    na = sa | FFESYMBOL_attrsSFARG;
-  else
-    na = FFESYMBOL_attrsetNONE;
-
-  /* Now see what we've got for a new object: NONE means a new error cropped
-     up; ANY means an old error to be ignored; otherwise, everything's ok,
-     update the object (symbol) and continue on. */
-
-  if (na == FFESYMBOL_attrsetNONE)
-    {
-      ffesymbol_error (sp, t);
-      ffesymbol_set_info (s, ffeinfo_new_any ());
-    }
-  else if (!(na & FFESYMBOL_attrsANY))
-    {
-      ffesymbol_set_state (sp, FFESYMBOL_stateSEEN);
-      ffesymbol_set_attrs (sp, na);
-      if (!ffeimplic_establish_symbol (sp)
-         || ((ffesymbol_basictype (sp) == FFEINFO_basictypeCHARACTER)
-             && (ffesymbol_size (sp) == FFETARGET_charactersizeNONE)))
-       ffesymbol_error (sp, t);
-      else
-       ffesymbol_set_info (s,
-                           ffeinfo_new (ffesymbol_basictype (sp),
-                                        ffesymbol_kindtype (sp),
-                                        0,
-                                        FFEINFO_kindENTITY,
-                                        FFEINFO_whereDUMMY,
-                                        ffesymbol_size (sp)));
-
-      ffesymbol_signal_unreported (sp);
-    }
-
-  ffesymbol_set_state (s, FFESYMBOL_stateUNDERSTOOD);
-  ffesymbol_set_maxentrynum (s, ffestc_sfdummy_argno_++);
-  ffesymbol_signal_unreported (s);
-  e = ffebld_new_symter (s, FFEINTRIN_genNONE, FFEINTRIN_specNONE,
-                        FFEINTRIN_impNONE);
-  ffebld_set_info (e, ffeinfo_use (ffesymbol_info (s)));
-  ffebld_append_item (&ffestc_local_.dummy.list_bottom, e);
-}
-
-/* ffestc_shriek_begin_program_ -- Implicit PROGRAM statement
-
-   ffestc_shriek_begin_program_();
-
-   Invoked only when a PROGRAM statement is NOT present at the beginning
-   of a main program unit.  */
-
-static void
-ffestc_shriek_begin_program_ ()
-{
-  ffestw b;
-  ffesymbol s;
-
-  ffestc_blocknum_ = 0;
-  b = ffestw_update (ffestw_push (NULL));
-  ffestw_set_top_do (b, NULL);
-  ffestw_set_state (b, FFESTV_statePROGRAM0);
-  ffestw_set_blocknum (b, ffestc_blocknum_++);
-  ffestw_set_shriek (b, ffestc_shriek_end_program_);
-  ffestw_set_name (b, NULL);
-
-  s = ffesymbol_declare_programunit (NULL,
-                                ffelex_token_where_line (ffesta_tokens[0]),
-                             ffelex_token_where_column (ffesta_tokens[0]));
-
-  /* Special case: this is one symbol that won't go through
-     ffestu_exec_transition_ when the first statement in a main program is
-     executable, because the transition happens in ffest before ffestc is
-     reached and triggers the implicit generation of a main program.  So we
-     do the exec transition for the implicit main program right here, just
-     for cleanliness' sake (at the very least). */
-
-  ffesymbol_set_info (s,
-                     ffeinfo_new (FFEINFO_basictypeNONE,
-                                  FFEINFO_kindtypeNONE,
-                                  0,
-                                  FFEINFO_kindPROGRAM,
-                                  FFEINFO_whereLOCAL,
-                                  FFETARGET_charactersizeNONE));
-  ffesymbol_set_state (s, FFESYMBOL_stateUNDERSTOOD);
-
-  ffesymbol_signal_unreported (s);
-
-  ffestd_R1102 (s, NULL);
-}
-
-/* ffestc_shriek_begin_uses_ -- Start a bunch of USE statements
-
-   ffestc_shriek_begin_uses_();
-
-   Invoked before handling the first USE statement in a block of one or
-   more USE statements.         _end_uses_(bool ok) is invoked before handling
-   the first statement after the block (there are no BEGIN USE and END USE
-   statements, but the semantics of USE statements effectively requires
-   handling them as a single block rather than one statement at a time).  */
-
-#if FFESTR_F90
-static void
-ffestc_shriek_begin_uses_ ()
-{
-  ffestw b;
-
-  b = ffestw_update (ffestw_push (NULL));
-  ffestw_set_top_do (b, NULL);
-  ffestw_set_state (b, FFESTV_stateUSE);
-  ffestw_set_blocknum (b, 0);
-  ffestw_set_shriek (b, ffestc_shriek_end_uses_);
-
-  ffestd_begin_uses ();
-}
-
-#endif
-/* ffestc_shriek_blockdata_ -- End a BLOCK DATA
-
-   ffestc_shriek_blockdata_(TRUE);  */
-
-static void
-ffestc_shriek_blockdata_ (bool ok)
-{
-  if (!ffesta_seen_first_exec)
-    {
-      ffesta_seen_first_exec = TRUE;
-      ffestd_exec_begin ();
-    }
-
-  ffestd_R1112 (ok);
-
-  ffestd_exec_end ();
-
-  if (ffestw_name (ffestw_stack_top ()) != NULL)
-    ffelex_token_kill (ffestw_name (ffestw_stack_top ()));
-  ffestw_kill (ffestw_pop ());
-
-  ffe_terminate_2 ();
-  ffe_init_2 ();
-}
-
-/* ffestc_shriek_do_ -- End of statement following DO-term-stmt etc
-
-   ffestc_shriek_do_(TRUE);
-
-   Also invoked by _labeldef_branch_end_ (or, in cases
-   of errors, other _labeldef_ functions) when the label definition is
-   for a DO-target (LOOPEND) label, once per matching/outstanding DO
-   block on the stack. These cases invoke this function with ok==TRUE, so
-   only forced stack popping (via ffestc_eof()) invokes it with ok==FALSE.  */
-
-static void
-ffestc_shriek_do_ (bool ok)
-{
-  ffelab l;
-
-  if (((l = ffestw_label (ffestw_stack_top ())) != NULL)
-      && (ffewhere_line_is_unknown (ffelab_definition_line (l))))
-    {                          /* DO target is label that is still
-                                  undefined. */
-      assert ((ffelab_type (l) == FFELAB_typeLOOPEND)
-             || (ffelab_type (l) == FFELAB_typeANY));
-      if (ffelab_type (l) != FFELAB_typeANY)
-       {
-         ffelab_set_definition_line (l,
-                                     ffewhere_line_use (ffelab_doref_line (l)));
-         ffelab_set_definition_column (l,
-                                       ffewhere_column_use (ffelab_doref_column (l)));
-         ffestv_num_label_defines_++;
-       }
-      ffestd_labeldef_branch (l);
-    }
-
-  ffestd_do (ok);
-
-  if (ffestw_name (ffestw_stack_top ()) != NULL)
-    ffelex_token_kill (ffestw_name (ffestw_stack_top ()));
-  if (ffestw_do_iter_var_t (ffestw_stack_top ()) != NULL)
-    ffelex_token_kill (ffestw_do_iter_var_t (ffestw_stack_top ()));
-  if (ffestw_do_iter_var (ffestw_stack_top ()) != NULL)
-    ffesymbol_set_is_doiter (ffestw_do_iter_var (ffestw_stack_top ()), FALSE);
-  ffestw_kill (ffestw_pop ());
-}
-
-/* ffestc_shriek_end_program_ -- End a PROGRAM
-
-   ffestc_shriek_end_program_();  */
-
-static void
-ffestc_shriek_end_program_ (bool ok)
-{
-  if (!ffesta_seen_first_exec)
-    {
-      ffesta_seen_first_exec = TRUE;
-      ffestd_exec_begin ();
-    }
-
-  ffestd_R1103 (ok);
-
-  ffestd_exec_end ();
-
-  if (ffestw_name (ffestw_stack_top ()) != NULL)
-    ffelex_token_kill (ffestw_name (ffestw_stack_top ()));
-  ffestw_kill (ffestw_pop ());
-
-  ffe_terminate_2 ();
-  ffe_init_2 ();
-}
-
-/* ffestc_shriek_end_uses_ -- End a bunch of USE statements
-
-   ffestc_shriek_end_uses_(TRUE);
-
-   ok==TRUE means simply not popping due to ffestc_eof()
-   being called, because there is no formal END USES statement in Fortran.  */
-
-#if FFESTR_F90
-static void
-ffestc_shriek_end_uses_ (bool ok)
-{
-  ffestd_end_uses (ok);
-
-  ffestw_kill (ffestw_pop ());
-}
-
-#endif
-/* ffestc_shriek_function_ -- End a FUNCTION
-
-   ffestc_shriek_function_(TRUE);  */
-
-static void
-ffestc_shriek_function_ (bool ok)
-{
-  if (!ffesta_seen_first_exec)
-    {
-      ffesta_seen_first_exec = TRUE;
-      ffestd_exec_begin ();
-    }
-
-  ffestd_R1221 (ok);
-
-  ffestd_exec_end ();
-
-  ffelex_token_kill (ffestw_name (ffestw_stack_top ()));
-  ffestw_kill (ffestw_pop ());
-  ffesta_is_entry_valid = FALSE;
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffe_terminate_2 ();
-      ffe_init_2 ();
-      break;
-
-    default:
-      ffe_terminate_3 ();
-      ffe_init_3 ();
-      break;
-
-    case FFESTV_stateINTERFACE0:
-      ffe_terminate_4 ();
-      ffe_init_4 ();
-      break;
-    }
-}
-
-/* ffestc_shriek_if_ -- End of statement following logical IF
-
-   ffestc_shriek_if_(TRUE);
-
-   Applies ONLY to logical IF, not to IF-THEN. For example, does not
-   ffelex_token_kill the construct name for an IF-THEN block (the name
-   field is invalid for logical IF).  ok==TRUE iff statement following
-   logical IF (substatement) is valid; else, statement is invalid or
-   stack forcibly popped due to ffestc_eof().  */
-
-static void
-ffestc_shriek_if_ (bool ok)
-{
-  ffestd_end_R807 (ok);
-
-  ffestw_kill (ffestw_pop ());
-  ffestc_shriek_after1_ = NULL;
-
-  ffestc_try_shriek_do_ ();
-}
-
-/* ffestc_shriek_ifthen_ -- End an IF-THEN
-
-   ffestc_shriek_ifthen_(TRUE);         */
-
-static void
-ffestc_shriek_ifthen_ (bool ok)
-{
-  ffestd_R806 (ok);
-
-  if (ffestw_name (ffestw_stack_top ()) != NULL)
-    ffelex_token_kill (ffestw_name (ffestw_stack_top ()));
-  ffestw_kill (ffestw_pop ());
-
-  ffestc_try_shriek_do_ ();
-}
-
-/* ffestc_shriek_interface_ -- End an INTERFACE
-
-   ffestc_shriek_interface_(TRUE);  */
-
-#if FFESTR_F90
-static void
-ffestc_shriek_interface_ (bool ok)
-{
-  ffestd_R1203 (ok);
-
-  ffestw_kill (ffestw_pop ());
-
-  ffestc_try_shriek_do_ ();
-}
-
-#endif
-/* ffestc_shriek_map_ -- End a MAP
-
-   ffestc_shriek_map_(TRUE);  */
-
-#if FFESTR_VXT
-static void
-ffestc_shriek_map_ (bool ok)
-{
-  ffestd_V013 (ok);
-
-  ffestw_kill (ffestw_pop ());
-
-  ffestc_try_shriek_do_ ();
-}
-
-#endif
-/* ffestc_shriek_module_ -- End a MODULE
-
-   ffestc_shriek_module_(TRUE);         */
-
-#if FFESTR_F90
-static void
-ffestc_shriek_module_ (bool ok)
-{
-  if (!ffesta_seen_first_exec)
-    {
-      ffesta_seen_first_exec = TRUE;
-      ffestd_exec_begin ();
-    }
-
-  ffestd_R1106 (ok);
-
-  ffestd_exec_end ();
-
-  ffelex_token_kill (ffestw_name (ffestw_stack_top ()));
-  ffestw_kill (ffestw_pop ());
-
-  ffe_terminate_2 ();
-  ffe_init_2 ();
-}
-
-#endif
-/* ffestc_shriek_select_ -- End a SELECT
-
-   ffestc_shriek_select_(TRUE);         */
-
-static void
-ffestc_shriek_select_ (bool ok)
-{
-  ffestwSelect s;
-  ffestwCase c;
-
-  ffestd_R811 (ok);
-
-  if (ffestw_name (ffestw_stack_top ()) != NULL)
-    ffelex_token_kill (ffestw_name (ffestw_stack_top ()));
-  s = ffestw_select (ffestw_stack_top ());
-  ffelex_token_kill (s->t);
-  for (c = s->first_rel; c != (ffestwCase) &s->first_rel; c = c->next_rel)
-    ffelex_token_kill (c->t);
-  malloc_pool_kill (s->pool);
-
-  ffestw_kill (ffestw_pop ());
-
-  ffestc_try_shriek_do_ ();
-}
-
-/* ffestc_shriek_structure_ -- End a STRUCTURE
-
-   ffestc_shriek_structure_(TRUE);  */
-
-#if FFESTR_VXT
-static void
-ffestc_shriek_structure_ (bool ok)
-{
-  ffestd_V004 (ok);
-
-  ffestw_kill (ffestw_pop ());
-
-  ffestc_try_shriek_do_ ();
-}
-
-#endif
-/* ffestc_shriek_subroutine_ -- End a SUBROUTINE
-
-   ffestc_shriek_subroutine_(TRUE);  */
-
-static void
-ffestc_shriek_subroutine_ (bool ok)
-{
-  if (!ffesta_seen_first_exec)
-    {
-      ffesta_seen_first_exec = TRUE;
-      ffestd_exec_begin ();
-    }
-
-  ffestd_R1225 (ok);
-
-  ffestd_exec_end ();
-
-  ffelex_token_kill (ffestw_name (ffestw_stack_top ()));
-  ffestw_kill (ffestw_pop ());
-  ffesta_is_entry_valid = FALSE;
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffe_terminate_2 ();
-      ffe_init_2 ();
-      break;
-
-    default:
-      ffe_terminate_3 ();
-      ffe_init_3 ();
-      break;
-
-    case FFESTV_stateINTERFACE0:
-      ffe_terminate_4 ();
-      ffe_init_4 ();
-      break;
-    }
-}
-
-/* ffestc_shriek_type_ -- End a TYPE
-
-   ffestc_shriek_type_(TRUE);  */
-
-#if FFESTR_F90
-static void
-ffestc_shriek_type_ (bool ok)
-{
-  ffestd_R425 (ok);
-
-  ffe_terminate_4 ();
-
-  ffelex_token_kill (ffestw_name (ffestw_stack_top ()));
-  ffestw_kill (ffestw_pop ());
-
-  ffestc_try_shriek_do_ ();
-}
-
-#endif
-/* ffestc_shriek_union_ -- End a UNION
-
-   ffestc_shriek_union_(TRUE); */
-
-#if FFESTR_VXT
-static void
-ffestc_shriek_union_ (bool ok)
-{
-  ffestd_V010 (ok);
-
-  ffestw_kill (ffestw_pop ());
-
-  ffestc_try_shriek_do_ ();
-}
-
-#endif
-/* ffestc_shriek_where_ -- Implicit END WHERE statement
-
-   ffestc_shriek_where_(TRUE);
-
-   Implement the end of the current WHERE "block".  ok==TRUE iff statement
-   following WHERE (substatement) is valid; else, statement is invalid
-   or stack forcibly popped due to ffestc_eof().  */
-
-#if FFESTR_F90
-static void
-ffestc_shriek_where_ (bool ok)
-{
-  ffestd_R745 (ok);
-
-  ffestw_kill (ffestw_pop ());
-  ffestc_shriek_after1_ = NULL;
-  if (ffestw_state (ffestw_stack_top ()) == FFESTV_stateIF)
-    ffestc_shriek_if_ (TRUE);  /* "IF (x) WHERE (y) stmt" is only valid
-                                  case. */
-
-  ffestc_try_shriek_do_ ();
-}
-
-#endif
-/* ffestc_shriek_wherethen_ -- End a WHERE(-THEN)
-
-   ffestc_shriek_wherethen_(TRUE);  */
-
-#if FFESTR_F90
-static void
-ffestc_shriek_wherethen_ (bool ok)
-{
-  ffestd_end_R740 (ok);
-
-  ffestw_kill (ffestw_pop ());
-
-  ffestc_try_shriek_do_ ();
-}
-
-#endif
-/* ffestc_subr_binsrch_ -- Binary search of char const in list of strings
-
-   i = ffestc_subr_binsrch_(search_list,search_list_size,&spec,"etc");
-
-   search_list contains search_list_size char *'s, spec is checked to see
-   if it is a char constant and, if so, is binary-searched against the list.
-   0 is returned if not found, else the "classic" index (beginning with 1)
-   is returned.         Before returning 0 where the search was performed but
-   fruitless, if "etc" is a non-NULL char *, an error message is displayed
-   using "etc" as the pick-one-of-these string.         */
-
-static int
-ffestc_subr_binsrch_ (const char *const *list, int size, ffestpFile *spec,
-                     const char *whine)
-{
-  int lowest_tested;
-  int highest_tested;
-  int halfway;
-  int offset;
-  int c;
-  const char *str;
-  int len;
-
-  if (size == 0)
-    return 0;                  /* Nobody should pass size == 0, but for
-                                  elegance.... */
-
-  lowest_tested = -1;
-  highest_tested = size;
-  halfway = size >> 1;
-
-  list += halfway;
-
-  c = ffestc_subr_speccmp_ (*list, spec, &str, &len);
-  if (c == 2)
-    return 0;
-  c = -c;                      /* Sigh.  */
-
-next:                          /* :::::::::::::::::::: */
-  switch (c)
-    {
-    case -1:
-      offset = (halfway - lowest_tested) >> 1;
-      if (offset == 0)
-       goto nope;              /* :::::::::::::::::::: */
-      highest_tested = halfway;
-      list -= offset;
-      halfway -= offset;
-      c = ffesrc_strcmp_1ns2i (ffe_case_match (), str, len, *list);
-      goto next;               /* :::::::::::::::::::: */
-
-    case 0:
-      return halfway + 1;
-
-    case 1:
-      offset = (highest_tested - halfway) >> 1;
-      if (offset == 0)
-       goto nope;              /* :::::::::::::::::::: */
-      lowest_tested = halfway;
-      list += offset;
-      halfway += offset;
-      c = ffesrc_strcmp_1ns2i (ffe_case_match (), str, len, *list);
-      goto next;               /* :::::::::::::::::::: */
-
-    default:
-      assert ("unexpected return from ffesrc_strcmp_1ns2i" == NULL);
-      break;
-    }
-
-nope:                          /* :::::::::::::::::::: */
-  ffebad_start (FFEBAD_SPEC_VALUE);
-  ffebad_here (0, ffelex_token_where_line (spec->value),
-              ffelex_token_where_column (spec->value));
-  ffebad_string (whine);
-  ffebad_finish ();
-  return 0;
-}
-
-/* ffestc_subr_format_ -- Return summary of format specifier
-
-   ffestc_subr_format_(&specifier);  */
-
-static ffestvFormat
-ffestc_subr_format_ (ffestpFile *spec)
-{
-  if (!spec->kw_or_val_present)
-    return FFESTV_formatNONE;
-  assert (spec->value_present);
-  if (spec->value_is_label)
-    return FFESTV_formatLABEL; /* Ok if not a label. */
-
-  assert (spec->value != NULL);
-  if (ffebld_op (spec->u.expr) == FFEBLD_opSTAR)
-    return FFESTV_formatASTERISK;
-
-  if (ffeinfo_kind (ffebld_info (spec->u.expr)) == FFEINFO_kindNAMELIST)
-    return FFESTV_formatNAMELIST;
-
-  if (ffeinfo_rank (ffebld_info (spec->u.expr)) != 0)
-    return FFESTV_formatCHAREXPR;      /* F77 C5. */
-
-  switch (ffeinfo_basictype (ffebld_info (spec->u.expr)))
-    {
-    case FFEINFO_basictypeINTEGER:
-      return FFESTV_formatINTEXPR;
-
-    case FFEINFO_basictypeCHARACTER:
-      return FFESTV_formatCHAREXPR;
-
-    case FFEINFO_basictypeANY:
-      return FFESTV_formatASTERISK;
-
-    default:
-      assert ("bad basictype" == NULL);
-      return FFESTV_formatINTEXPR;
-    }
-}
-
-/* ffestc_subr_is_branch_ -- Handle specifier as branch target label
-
-   ffestc_subr_is_branch_(&specifier); */
-
-static bool
-ffestc_subr_is_branch_ (ffestpFile *spec)
-{
-  if (!spec->kw_or_val_present)
-    return TRUE;
-  assert (spec->value_present);
-  assert (spec->value_is_label);
-  spec->value_is_label++;      /* For checking purposes only; 1=>2. */
-  return ffestc_labelref_is_branch_ (spec->value, &spec->u.label);
-}
-
-/* ffestc_subr_is_format_ -- Handle specifier as format target label
-
-   ffestc_subr_is_format_(&specifier); */
-
-static bool
-ffestc_subr_is_format_ (ffestpFile *spec)
-{
-  if (!spec->kw_or_val_present)
-    return TRUE;
-  assert (spec->value_present);
-  if (!spec->value_is_label)
-    return TRUE;               /* Ok if not a label. */
-
-  spec->value_is_label++;      /* For checking purposes only; 1=>2. */
-  return ffestc_labelref_is_format_ (spec->value, &spec->u.label);
-}
-
-/* ffestc_subr_is_present_ -- Ensure specifier is present, else error
-
-   ffestc_subr_is_present_("SPECIFIER",&specifier);  */
-
-static bool
-ffestc_subr_is_present_ (const char *name, ffestpFile *spec)
-{
-  if (spec->kw_or_val_present)
-    {
-      assert (spec->value_present);
-      return TRUE;
-    }
-
-  ffebad_start (FFEBAD_MISSING_SPECIFIER);
-  ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-              ffelex_token_where_column (ffesta_tokens[0]));
-  ffebad_string (name);
-  ffebad_finish ();
-  return FALSE;
-}
-
-/* ffestc_subr_speccmp_ -- Compare string to constant expression, if present
-
-   if (ffestc_subr_speccmp_("Constant",&specifier,NULL,NULL) == 0)
-       // specifier value is present and is a char constant "CONSTANT"
-
-   Like strcmp, except the return values are defined as: -1 returned in place
-   of strcmp's generic negative value, 1 in place of it's generic positive
-   value, and 2 when there is no character constant string to compare. Also,
-   a case-insensitive comparison is performed, where string is assumed to
-   already be in InitialCaps form.
-
-   If a non-NULL pointer is provided as the char **target, then *target is
-   written with NULL if 2 is returned, a pointer to the constant string
-   value of the specifier otherwise.  Similarly, length is written with
-   0 if 2 is returned, the length of the constant string value otherwise.  */
-
-static int
-ffestc_subr_speccmp_ (const char *string, ffestpFile *spec, const char **target,
-                     int *length)
-{
-  ffebldConstant c;
-  int i;
-
-  if (!spec->kw_or_val_present || !spec->value_present
-      || (spec->u.expr == NULL)
-      || (ffebld_op (spec->u.expr) != FFEBLD_opCONTER))
-    {
-      if (target != NULL)
-       *target = NULL;
-      if (length != NULL)
-       *length = 0;
-      return 2;
-    }
-
-  if (ffebld_constant_type (c = ffebld_conter (spec->u.expr))
-      != FFEBLD_constCHARACTERDEFAULT)
-    {
-      if (target != NULL)
-       *target = NULL;
-      if (length != NULL)
-       *length = 0;
-      return 2;
-    }
-
-  if (target != NULL)
-    *target = ffebld_constant_characterdefault (c).text;
-  if (length != NULL)
-    *length = ffebld_constant_characterdefault (c).length;
-
-  i = ffesrc_strcmp_1ns2i (ffe_case_match (),
-                          ffebld_constant_characterdefault (c).text,
-                          ffebld_constant_characterdefault (c).length,
-                          string);
-  if (i == 0)
-    return 0;
-  if (i > 0)
-    return -1;                 /* Yes indeed, we reverse the strings to
-                                  _strcmpin_.   */
-  return 1;
-}
-
-/* ffestc_subr_unit_ -- Return summary of unit specifier
-
-   ffestc_subr_unit_(&specifier);  */
-
-static ffestvUnit
-ffestc_subr_unit_ (ffestpFile *spec)
-{
-  if (!spec->kw_or_val_present)
-    return FFESTV_unitNONE;
-  assert (spec->value_present);
-  assert (spec->value != NULL);
-
-  if (ffebld_op (spec->u.expr) == FFEBLD_opSTAR)
-    return FFESTV_unitASTERISK;
-
-  switch (ffeinfo_basictype (ffebld_info (spec->u.expr)))
-    {
-    case FFEINFO_basictypeINTEGER:
-      return FFESTV_unitINTEXPR;
-
-    case FFEINFO_basictypeCHARACTER:
-      return FFESTV_unitCHAREXPR;
-
-    case FFEINFO_basictypeANY:
-      return FFESTV_unitASTERISK;
-
-    default:
-      assert ("bad basictype" == NULL);
-      return FFESTV_unitINTEXPR;
-    }
-}
-
-/* Call this function whenever it's possible that one or more top
-   stack items are label-targeting DO blocks that have had their
-   labels defined, but at a time when they weren't at the top of the
-   stack.  This prevents uninformative diagnostics for programs
-   like "DO 10", "IF (...) THEN", "10 ELSE", "END IF", "END".  */
-
-static void
-ffestc_try_shriek_do_ ()
-{
-  ffelab lab;
-  ffelabType ty;
-
-  while ((ffestw_state (ffestw_stack_top ()) == FFESTV_stateDO)
-        && ((lab = (ffestw_label (ffestw_stack_top ()))) != NULL)
-        && (((ty = (ffelab_type (lab)))
-             == FFELAB_typeANY)
-            || (ty == FFELAB_typeUSELESS)
-            || (ty == FFELAB_typeFORMAT)
-            || (ty == FFELAB_typeNOTLOOP)
-            || (ty == FFELAB_typeENDIF)))
-    ffestc_shriek_do_ (FALSE);
-}
-
-/* ffestc_decl_start -- R426 or R501
-
-   ffestc_decl_start(...);
-
-   Verify that R426 component-def-stmt or R501 type-declaration-stmt are
-   valid here, figure out which one, and implement.  */
-
-void
-ffestc_decl_start (ffestpType type, ffelexToken typet, ffebld kind,
-                  ffelexToken kindt, ffebld len, ffelexToken lent)
-{
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-    case FFESTV_statePROGRAM0:
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateMODULE0:
-    case FFESTV_stateBLOCKDATA0:
-    case FFESTV_statePROGRAM1:
-    case FFESTV_stateSUBROUTINE1:
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateMODULE1:
-    case FFESTV_stateBLOCKDATA1:
-    case FFESTV_statePROGRAM2:
-    case FFESTV_stateSUBROUTINE2:
-    case FFESTV_stateFUNCTION2:
-    case FFESTV_stateMODULE2:
-    case FFESTV_stateBLOCKDATA2:
-    case FFESTV_statePROGRAM3:
-    case FFESTV_stateSUBROUTINE3:
-    case FFESTV_stateFUNCTION3:
-    case FFESTV_stateMODULE3:
-    case FFESTV_stateBLOCKDATA3:
-    case FFESTV_stateUSE:
-      ffestc_local_.decl.is_R426 = 2;
-      break;
-
-    case FFESTV_stateTYPE:
-    case FFESTV_stateSTRUCTURE:
-    case FFESTV_stateMAP:
-      ffestc_local_.decl.is_R426 = 1;
-      break;
-
-    default:
-      ffestc_order_bad_ ();
-      ffestc_labeldef_useless_ ();
-      ffestc_local_.decl.is_R426 = 0;
-      return;
-    }
-
-  switch (ffestc_local_.decl.is_R426)
-    {
-#if FFESTR_F90
-    case 1:
-      ffestc_R426_start (type, typet, kind, kindt, len, lent);
-      break;
-#endif
-
-    case 2:
-      ffestc_R501_start (type, typet, kind, kindt, len, lent);
-      break;
-
-    default:
-      ffestc_labeldef_useless_ ();
-      break;
-    }
-}
-
-/* ffestc_decl_attrib -- R426 or R501 type attribute
-
-   ffestc_decl_attrib(...);
-
-   Verify that R426 component-def-stmt or R501 type-declaration-stmt attribute
-   is valid here and implement.         */
-
-void
-ffestc_decl_attrib (ffestpAttrib attrib UNUSED,
-                   ffelexToken attribt UNUSED,
-                   ffestrOther intent_kw UNUSED,
-                   ffesttDimList dims UNUSED)
-{
-#if FFESTR_F90
-  switch (ffestc_local_.decl.is_R426)
-    {
-    case 1:
-      ffestc_R426_attrib (attrib, attribt, intent_kw, dims);
-      break;
-
-    case 2:
-      ffestc_R501_attrib (attrib, attribt, intent_kw, dims);
-      break;
-
-    default:
-      break;
-    }
-#else
-  ffebad_start (FFEBAD_F90);
-  ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-              ffelex_token_where_column (ffesta_tokens[0]));
-  ffebad_finish ();
-  return;
-#endif
-}
-
-/* ffestc_decl_item -- R426 or R501
-
-   ffestc_decl_item(...);
-
-   Establish type for a particular object.  */
-
-void
-ffestc_decl_item (ffelexToken name, ffebld kind, ffelexToken kindt,
-             ffesttDimList dims, ffebld len, ffelexToken lent, ffebld init,
-                 ffelexToken initt, bool clist)
-{
-  switch (ffestc_local_.decl.is_R426)
-    {
-#if FFESTR_F90
-    case 1:
-      ffestc_R426_item (name, kind, kindt, dims, len, lent, init, initt,
-                       clist);
-      break;
-#endif
-
-    case 2:
-      ffestc_R501_item (name, kind, kindt, dims, len, lent, init, initt,
-                       clist);
-      break;
-
-    default:
-      break;
-    }
-}
-
-/* ffestc_decl_itemstartvals -- R426 or R501 start list of values
-
-   ffestc_decl_itemstartvals();
-
-   Gonna specify values for the object now.  */
-
-void
-ffestc_decl_itemstartvals ()
-{
-  switch (ffestc_local_.decl.is_R426)
-    {
-#if FFESTR_F90
-    case 1:
-      ffestc_R426_itemstartvals ();
-      break;
-#endif
-
-    case 2:
-      ffestc_R501_itemstartvals ();
-      break;
-
-    default:
-      break;
-    }
-}
-
-/* ffestc_decl_itemvalue -- R426 or R501 source value
-
-   ffestc_decl_itemvalue(repeat,repeat_token,value,value_token);
-
-   Make sure repeat and value are valid for the object being initialized.  */
-
-void
-ffestc_decl_itemvalue (ffebld repeat, ffelexToken repeat_token,
-                      ffebld value, ffelexToken value_token)
-{
-  switch (ffestc_local_.decl.is_R426)
-    {
-#if FFESTR_F90
-    case 1:
-      ffestc_R426_itemvalue (repeat, repeat_token, value, value_token);
-      break;
-#endif
-
-    case 2:
-      ffestc_R501_itemvalue (repeat, repeat_token, value, value_token);
-      break;
-
-    default:
-      break;
-    }
-}
-
-/* ffestc_decl_itemendvals -- R426 or R501 end list of values
-
-   ffelexToken t;  // the SLASH token that ends the list.
-   ffestc_decl_itemendvals(t);
-
-   No more values, might specify more objects now.  */
-
-void
-ffestc_decl_itemendvals (ffelexToken t)
-{
-  switch (ffestc_local_.decl.is_R426)
-    {
-#if FFESTR_F90
-    case 1:
-      ffestc_R426_itemendvals (t);
-      break;
-#endif
-
-    case 2:
-      ffestc_R501_itemendvals (t);
-      break;
-
-    default:
-      break;
-    }
-}
-
-/* ffestc_decl_finish -- R426 or R501
-
-   ffestc_decl_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_decl_finish ()
-{
-  switch (ffestc_local_.decl.is_R426)
-    {
-#if FFESTR_F90
-    case 1:
-      ffestc_R426_finish ();
-      break;
-#endif
-
-    case 2:
-      ffestc_R501_finish ();
-      break;
-
-    default:
-      break;
-    }
-}
-
-/* ffestc_elsewhere -- Generic ELSE WHERE statement
-
-   ffestc_end();
-
-   Decide whether ELSEWHERE or ELSE w/if-construct-name=="WHERE" is meant.  */
-
-void
-ffestc_elsewhere (ffelexToken where)
-{
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateIFTHEN:
-      ffestc_R805 (where);
-      break;
-
-    default:
-#if FFESTR_F90
-      ffestc_R744 ();
-#endif
-      break;
-    }
-}
-
-/* ffestc_end -- Generic END statement
-
-   ffestc_end();
-
-   Make sure a generic END is valid in the current context, and implement
-   it. */
-
-void
-ffestc_end ()
-{
-  ffestw b;
-
-  b = ffestw_stack_top ();
-
-recurse:
-
-  switch (ffestw_state (b))
-    {
-    case FFESTV_stateBLOCKDATA0:
-    case FFESTV_stateBLOCKDATA1:
-    case FFESTV_stateBLOCKDATA2:
-    case FFESTV_stateBLOCKDATA3:
-    case FFESTV_stateBLOCKDATA4:
-    case FFESTV_stateBLOCKDATA5:
-      ffestc_R1112 (NULL);
-      break;
-
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateFUNCTION2:
-    case FFESTV_stateFUNCTION3:
-    case FFESTV_stateFUNCTION4:
-    case FFESTV_stateFUNCTION5:
-      if ((ffestw_state (ffestw_previous (b)) != FFESTV_stateNIL)
-         && (ffestw_state (ffestw_previous (b)) != FFESTV_stateINTERFACE0))
-       {
-         ffebad_start (FFEBAD_END_WO);
-         ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                      ffelex_token_where_column (ffesta_tokens[0]));
-         ffebad_here (1, ffestw_line (ffestw_previous (b)), ffestw_col (ffestw_previous (b)));
-         ffebad_string ("FUNCTION");
-         ffebad_finish ();
-       }
-      ffestc_R1221 (NULL);
-      break;
-
-    case FFESTV_stateMODULE0:
-    case FFESTV_stateMODULE1:
-    case FFESTV_stateMODULE2:
-    case FFESTV_stateMODULE3:
-    case FFESTV_stateMODULE4:
-    case FFESTV_stateMODULE5:
-#if FFESTR_F90
-      ffestc_R1106 (NULL);
-#endif
-      break;
-
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateSUBROUTINE1:
-    case FFESTV_stateSUBROUTINE2:
-    case FFESTV_stateSUBROUTINE3:
-    case FFESTV_stateSUBROUTINE4:
-    case FFESTV_stateSUBROUTINE5:
-      if ((ffestw_state (ffestw_previous (b)) != FFESTV_stateNIL)
-         && (ffestw_state (ffestw_previous (b)) != FFESTV_stateINTERFACE0))
-       {
-         ffebad_start (FFEBAD_END_WO);
-         ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                      ffelex_token_where_column (ffesta_tokens[0]));
-         ffebad_here (1, ffestw_line (ffestw_previous (b)), ffestw_col (ffestw_previous (b)));
-         ffebad_string ("SUBROUTINE");
-         ffebad_finish ();
-       }
-      ffestc_R1225 (NULL);
-      break;
-
-    case FFESTV_stateUSE:
-      b = ffestw_previous (ffestw_stack_top ());
-      goto recurse;            /* :::::::::::::::::::: */
-
-    default:
-      ffestc_R1103 (NULL);
-      break;
-    }
-}
-
-/* ffestc_eof -- Generic EOF
-
-   ffestc_eof();
-
-   Make sure we're at state NIL, or issue an error message and use each
-   block's shriek function to clean up to state NIL.  */
-
-void
-ffestc_eof ()
-{
-  if (ffestw_state (ffestw_stack_top ()) != FFESTV_stateNIL)
-    {
-      ffebad_start (FFEBAD_EOF_BEFORE_BLOCK_END);
-      ffebad_here (0, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-      ffebad_finish ();
-      do
-       (*ffestw_shriek (ffestw_stack_top ()))(FALSE);
-      while (ffestw_state (ffestw_stack_top ()) != FFESTV_stateNIL);
-    }
-}
-
-/* ffestc_exec_transition -- Check if ok and move stmt state to executable
-
-   if (ffestc_exec_transition())
-       // Transition successful (kind of like a CONTINUE stmt was seen).
-
-   If the current statement state is a non-nested specification state in
-   which, say, a CONTINUE statement would be valid, then enter the state
-   we'd be in after seeing CONTINUE (without, of course, generating any
-   CONTINUE code), call ffestd_exec_begin, and return TRUE.  Otherwise
-   return FALSE.
-
-   This function cannot be invoked once the first executable statement
-   is seen.  This function may choose to always return TRUE by shrieking
-   away any interceding state stack entries to reach the base level of
-   specification state, but right now it doesn't, and it is (or should
-   be) purely an issue of how one wishes errors to be handled (for example,
-   an unrecognized statement in the middle of a STRUCTURE construct: after
-   the error message, should subsequent statements still be interpreted as
-   being within the construct, or should the construct be terminated upon
-   seeing the unrecognized statement?  we do the former at the moment).  */
-
-bool
-ffestc_exec_transition ()
-{
-  bool update;
-
-recurse:
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-      ffestc_shriek_begin_program_ ();
-      goto recurse;            /* :::::::::::::::::::: */
-
-    case FFESTV_statePROGRAM0:
-    case FFESTV_stateSUBROUTINE0:
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateBLOCKDATA0:
-      ffestw_state (ffestw_stack_top ()) += 4; /* To state UNIT4. */
-      update = TRUE;
-      break;
-
-    case FFESTV_statePROGRAM1:
-    case FFESTV_stateSUBROUTINE1:
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateBLOCKDATA1:
-      ffestw_state (ffestw_stack_top ()) += 3; /* To state UNIT4. */
-      update = TRUE;
-      break;
-
-    case FFESTV_statePROGRAM2:
-    case FFESTV_stateSUBROUTINE2:
-    case FFESTV_stateFUNCTION2:
-    case FFESTV_stateBLOCKDATA2:
-      ffestw_state (ffestw_stack_top ()) += 2; /* To state UNIT4. */
-      update = TRUE;
-      break;
-
-    case FFESTV_statePROGRAM3:
-    case FFESTV_stateSUBROUTINE3:
-    case FFESTV_stateFUNCTION3:
-    case FFESTV_stateBLOCKDATA3:
-      ffestw_state (ffestw_stack_top ()) += 1; /* To state UNIT4. */
-      update = TRUE;
-      break;
-
-    case FFESTV_stateUSE:
-#if FFESTR_F90
-      ffestc_shriek_end_uses_ (TRUE);
-#endif
-      goto recurse;            /* :::::::::::::::::::: */
-
-    default:
-      return FALSE;
-    }
-
-  if (update)
-    ffestw_update (NULL);      /* Update state line/col info. */
-
-  ffesta_seen_first_exec = TRUE;
-  ffestd_exec_begin ();
-
-  return TRUE;
-}
-
-/* ffestc_ffebad_here_doiter -- Calls ffebad_here with ptr to DO iter var
-
-   ffesymbol s;
-   // call ffebad_start first, of course.
-   ffestc_ffebad_here_doiter(0,s);
-   // call ffebad_finish afterwards, naturally.
-
-   Searches the stack of blocks backwards for a DO loop that has s
-   as its iteration variable, then calls ffebad_here with pointers to
-   that particular reference to the variable.  Crashes if the DO loop
-   can't be found.  */
-
-void
-ffestc_ffebad_here_doiter (ffebadIndex i, ffesymbol s)
-{
-  ffestw block;
-
-  for (block = ffestw_top_do (ffestw_stack_top ());
-       (block != NULL) && (ffestw_blocknum (block) != 0);
-       block = ffestw_top_do (ffestw_previous (block)))
-    {
-      if (ffestw_do_iter_var (block) == s)
-       {
-         ffebad_here (i, ffelex_token_where_line (ffestw_do_iter_var_t (block)),
-                 ffelex_token_where_column (ffestw_do_iter_var_t (block)));
-         return;
-       }
-    }
-  assert ("no do block found" == NULL);
-}
-
-/* ffestc_is_decl_not_R1219 -- Context information for FFESTB
-
-   if (ffestc_is_decl_not_R1219()) ...
-
-   When a statement with the form "type[RECURSIVE]FUNCTIONname(name-list)"
-   is seen, call this function.         It returns TRUE if the statement's context
-   is such that it is a declaration of an object named
-   "[RECURSIVE]FUNCTIONname" with an array-decl spec of "name-list", FALSE
-   if the statement's context is such that it begins the definition of a
-   function named "name" havin the dummy argument list "name-list" (this
-   is the R1219 function-stmt case).  */
-
-bool
-ffestc_is_decl_not_R1219 ()
-{
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateNIL:
-    case FFESTV_statePROGRAM5:
-    case FFESTV_stateSUBROUTINE5:
-    case FFESTV_stateFUNCTION5:
-    case FFESTV_stateMODULE5:
-    case FFESTV_stateINTERFACE0:
-      return FALSE;
-
-    default:
-      return TRUE;
-    }
-}
-
-/* ffestc_is_entry_in_subr -- Context information for FFESTB
-
-   if (ffestc_is_entry_in_subr()) ...
-
-   When a statement with the form "ENTRY name(name-list)"
-   is seen, call this function.         It returns TRUE if the statement's context
-   is such that it may have "*", meaning alternate return, in place of
-   names in the name list (i.e. if the ENTRY is in a subroutine context).
-   It also returns TRUE if the ENTRY is not in a function context (invalid
-   but prevents extra complaints about "*", if present).  It returns FALSE
-   if the ENTRY is in a function context.  */
-
-bool
-ffestc_is_entry_in_subr ()
-{
-  ffestvState s;
-
-  s = ffestw_state (ffestw_stack_top ());
-
-recurse:
-
-  switch (s)
-    {
-    case FFESTV_stateFUNCTION0:
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateFUNCTION2:
-    case FFESTV_stateFUNCTION3:
-    case FFESTV_stateFUNCTION4:
-      return FALSE;
-
-    case FFESTV_stateUSE:
-      s = ffestw_state (ffestw_previous (ffestw_stack_top ()));
-      goto recurse;            /* :::::::::::::::::::: */
-
-    default:
-      return TRUE;
-    }
-}
-
-/* ffestc_is_let_not_V027 -- Context information for FFESTB
-
-   if (ffestc_is_let_not_V027()) ...
-
-   When a statement with the form "PARAMETERname=expr"
-   is seen, call this function.         It returns TRUE if the statement's context
-   is such that it is an assignment to an object named "PARAMETERname", FALSE
-   if the statement's context is such that it is a V-extension PARAMETER
-   statement that is like a PARAMETER(name=expr) statement except that the
-   type of name is determined by the type of expr, not the implicit or
-   explicit typing of name.  */
-
-bool
-ffestc_is_let_not_V027 ()
-{
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_statePROGRAM4:
-    case FFESTV_stateSUBROUTINE4:
-    case FFESTV_stateFUNCTION4:
-    case FFESTV_stateWHERETHEN:
-    case FFESTV_stateIFTHEN:
-    case FFESTV_stateDO:
-    case FFESTV_stateSELECT0:
-    case FFESTV_stateSELECT1:
-    case FFESTV_stateWHERE:
-    case FFESTV_stateIF:
-      return TRUE;
-
-    default:
-      return FALSE;
-    }
-}
-
-/* ffestc_module -- MODULE or MODULE PROCEDURE statement
-
-   ffestc_module(module_name_token,procedure_name_token);
-
-   Decide which is intended, and implement it by calling _R1105_ or
-   _R1205_.  */
-
-#if FFESTR_F90
-void
-ffestc_module (ffelexToken module, ffelexToken procedure)
-{
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateINTERFACE0:
-    case FFESTV_stateINTERFACE1:
-      ffestc_R1205_start ();
-      ffestc_R1205_item (procedure);
-      ffestc_R1205_finish ();
-      break;
-
-    default:
-      ffestc_R1105 (module);
-      break;
-    }
-}
-
-#endif
-/* ffestc_private -- Generic PRIVATE statement
-
-   ffestc_end();
-
-   This is either a PRIVATE within R422 derived-type statement or an
-   R521 PRIVATE statement.  Figure it out based on context and implement
-   it, or produce an error.  */
-
-#if FFESTR_F90
-void
-ffestc_private ()
-{
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateTYPE:
-      ffestc_R423A ();
-      break;
-
-    default:
-      ffestc_R521B ();
-      break;
-    }
-}
-
-#endif
-/* ffestc_terminate_4 -- Terminate ffestc after scoping unit
-
-   ffestc_terminate_4();
-
-   For SUBROUTINEs/FUNCTIONs within INTERFACE/END INTERFACE, derived-TYPE-
-   defs, and statement function defs.  */
-
-void
-ffestc_terminate_4 ()
-{
-  ffestc_entry_num_ = ffestc_saved_entry_num_;
-}
-
-/* ffestc_R423A -- PRIVATE statement (in R422 derived-type statement)
-
-   ffestc_R423A();  */
-
-#if FFESTR_F90
-void
-ffestc_R423A ()
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_type_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  if (ffestw_substate (ffestw_stack_top ()) != 0)
-    {
-      ffebad_start (FFEBAD_DERIVTYP_ACCESS_FIRST);
-      ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-      ffebad_finish ();
-      return;
-    }
-
-  if (ffestw_state (ffestw_previous (ffestw_stack_top ())) != FFESTV_stateMODULE3)
-    {
-      ffebad_start (FFEBAD_DERIVTYP_ACCESS);
-      ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      ffebad_finish ();
-      return;
-    }
-
-  ffestw_set_substate (ffestw_stack_top (), 1);        /* Seen
-                                                  private-sequence-stmt. */
-
-  ffestd_R423A ();
-}
-
-/* ffestc_R423B -- SEQUENCE statement (in R422 derived-type-stmt)
-
-   ffestc_R423B();  */
-
-void
-ffestc_R423B ()
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_type_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  if (ffestw_substate (ffestw_stack_top ()) != 0)
-    {
-      ffebad_start (FFEBAD_DERIVTYP_ACCESS_FIRST);
-      ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-      ffebad_finish ();
-      return;
-    }
-
-  ffestw_set_substate (ffestw_stack_top (), 1);        /* Seen
-                                                  private-sequence-stmt. */
-
-  ffestd_R423B ();
-}
-
-/* ffestc_R424 -- derived-TYPE-def statement
-
-   ffestc_R424(access_token,access_kw,name_token);
-
-   Handle a derived-type definition.  */
-
-void
-ffestc_R424 (ffelexToken access, ffestrOther access_kw, ffelexToken name)
-{
-  ffestw b;
-
-  assert (name != NULL);
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_derivedtype_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  if ((access != NULL)
-      && (ffestw_state (ffestw_stack_top ()) != FFESTV_stateMODULE3))
-    {
-      ffebad_start (FFEBAD_DERIVTYP_ACCESS);
-      ffebad_here (0, ffelex_token_where_line (access),
-                  ffelex_token_where_column (access));
-      ffebad_finish ();
-      access = NULL;
-    }
-
-  b = ffestw_update (ffestw_push (NULL));
-  ffestw_set_top_do (b, NULL);
-  ffestw_set_state (b, FFESTV_stateTYPE);
-  ffestw_set_blocknum (b, 0);
-  ffestw_set_shriek (b, ffestc_shriek_type_);
-  ffestw_set_name (b, ffelex_token_use (name));
-  ffestw_set_substate (b, 0);  /* Awaiting private-sequence-stmt and one
-                                  component-def-stmt. */
-
-  ffestd_R424 (access, access_kw, name);
-
-  ffe_init_4 ();
-}
-
-/* ffestc_R425 -- END TYPE statement
-
-   ffestc_R425(name_token);
-
-   Make sure ffestc_kind_ identifies a TYPE definition.         If not
-   NULL, make sure name_token gives the correct name.  Implement the end
-   of the type definition.  */
-
-void
-ffestc_R425 (ffelexToken name)
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_type_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  if (ffestw_substate (ffestw_stack_top ()) != 2)
-    {
-      ffebad_start (FFEBAD_DERIVTYP_NO_COMPONENTS);
-      ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-      ffebad_finish ();
-    }
-
-  if ((name != NULL)
-    && (ffelex_token_strcmp (name, ffestw_name (ffestw_stack_top ())) != 0))
-    {
-      ffebad_start (FFEBAD_TYPE_WRONG_NAME);
-      ffebad_here (0, ffelex_token_where_line (name),
-                  ffelex_token_where_column (name));
-      ffebad_here (1, ffelex_token_where_line (ffestw_name (ffestw_stack_top ())),
-            ffelex_token_where_column (ffestw_name (ffestw_stack_top ())));
-      ffebad_finish ();
-    }
-
-  ffestc_shriek_type_ (TRUE);
-}
-
-/* ffestc_R426_start -- component-declaration-stmt
-
-   ffestc_R426_start(...);
-
-   Verify that R426 component-declaration-stmt is
-   valid here and implement.  */
-
-void
-ffestc_R426_start (ffestpType type, ffelexToken typet, ffebld kind,
-                  ffelexToken kindt, ffebld len, ffelexToken lent)
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_component_ () != FFESTC_orderOK_)
-    {
-      ffestc_local_.decl.is_R426 = 0;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateSTRUCTURE:
-    case FFESTV_stateMAP:
-      ffestw_set_substate (ffestw_stack_top (), 1);    /* Seen at least one
-                                                          member. */
-      break;
-
-    case FFESTV_stateTYPE:
-      ffestw_set_substate (ffestw_stack_top (), 2);
-      break;
-
-    default:
-      assert ("Component parent state invalid" == NULL);
-      break;
-    }
-}
-
-/* ffestc_R426_attrib -- type attribute
-
-   ffestc_R426_attrib(...);
-
-   Verify that R426 component-declaration-stmt attribute
-   is valid here and implement.         */
-
-void
-ffestc_R426_attrib (ffestpAttrib attrib, ffelexToken attribt,
-                   ffestrOther intent_kw, ffesttDimList dims)
-{
-  ffestc_check_attrib_ ();
-}
-
-/* ffestc_R426_item -- declared object
-
-   ffestc_R426_item(...);
-
-   Establish type for a particular object.  */
-
-void
-ffestc_R426_item (ffelexToken name, ffebld kind, ffelexToken kindt,
-             ffesttDimList dims, ffebld len, ffelexToken lent, ffebld init,
-                 ffelexToken initt, bool clist)
-{
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  assert (ffelex_token_type (name) == FFELEX_typeNAME);        /* Not NAMES. */
-  assert (kind == NULL);       /* No way an expression should get here. */
-
-  if ((dims != NULL) || (init != NULL) || clist)
-    ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-}
-
-/* ffestc_R426_itemstartvals -- Start list of values
-
-   ffestc_R426_itemstartvals();
-
-   Gonna specify values for the object now.  */
-
-void
-ffestc_R426_itemstartvals ()
-{
-  ffestc_check_item_startvals_ ();
-}
-
-/* ffestc_R426_itemvalue -- Source value
-
-   ffestc_R426_itemvalue(repeat,repeat_token,value,value_token);
-
-   Make sure repeat and value are valid for the object being initialized.  */
-
-void
-ffestc_R426_itemvalue (ffebld repeat, ffelexToken repeat_token,
-                      ffebld value, ffelexToken value_token)
-{
-  ffestc_check_item_value_ ();
-}
-
-/* ffestc_R426_itemendvals -- End list of values
-
-   ffelexToken t;  // the SLASH token that ends the list.
-   ffestc_R426_itemendvals(t);
-
-   No more values, might specify more objects now.  */
-
-void
-ffestc_R426_itemendvals (ffelexToken t)
-{
-  ffestc_check_item_endvals_ ();
-}
-
-/* ffestc_R426_finish -- Done
-
-   ffestc_R426_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R426_finish ()
-{
-  ffestc_check_finish_ ();
-}
-
-#endif
-/* ffestc_R501_start -- type-declaration-stmt
-
-   ffestc_R501_start(...);
-
-   Verify that R501 type-declaration-stmt is
-   valid here and implement.  */
-
-void
-ffestc_R501_start (ffestpType type, ffelexToken typet, ffebld kind,
-                  ffelexToken kindt, ffebld len, ffelexToken lent)
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_typedecl_ () != FFESTC_orderOK_)
-    {
-      ffestc_local_.decl.is_R426 = 0;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  ffestc_establish_declstmt_ (type, typet, kind, kindt, len, lent);
-}
-
-/* ffestc_R501_attrib -- type attribute
-
-   ffestc_R501_attrib(...);
-
-   Verify that R501 type-declaration-stmt attribute
-   is valid here and implement.         */
-
-void
-ffestc_R501_attrib (ffestpAttrib attrib, ffelexToken attribt,
-                   ffestrOther intent_kw UNUSED,
-                   ffesttDimList dims UNUSED)
-{
-  ffestc_check_attrib_ ();
-
-  switch (attrib)
-    {
-#if FFESTR_F90
-    case FFESTP_attribALLOCATABLE:
-      break;
-#endif
-
-    case FFESTP_attribDIMENSION:
-      ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-      break;
-
-    case FFESTP_attribEXTERNAL:
-      break;
-
-#if FFESTR_F90
-    case FFESTP_attribINTENT:
-      break;
-#endif
-
-    case FFESTP_attribINTRINSIC:
-      break;
-
-#if FFESTR_F90
-    case FFESTP_attribOPTIONAL:
-      break;
-#endif
-
-    case FFESTP_attribPARAMETER:
-      break;
-
-#if FFESTR_F90
-    case FFESTP_attribPOINTER:
-      break;
-#endif
-
-#if FFESTR_F90
-    case FFESTP_attribPRIVATE:
-      break;
-
-    case FFESTP_attribPUBLIC:
-      break;
-#endif
-
-    case FFESTP_attribSAVE:
-      switch (ffestv_save_state_)
-       {
-       case FFESTV_savestateNONE:
-         ffestv_save_state_ = FFESTV_savestateSPECIFIC;
-         ffestv_save_line_
-           = ffewhere_line_use (ffelex_token_where_line (attribt));
-         ffestv_save_col_
-           = ffewhere_column_use (ffelex_token_where_column (attribt));
-         break;
-
-       case FFESTV_savestateSPECIFIC:
-       case FFESTV_savestateANY:
-         break;
-
-       case FFESTV_savestateALL:
-         if (ffe_is_pedantic ())
-           {
-             ffebad_start (FFEBAD_CONFLICTING_SAVES);
-             ffebad_here (0, ffestv_save_line_, ffestv_save_col_);
-             ffebad_here (1, ffelex_token_where_line (attribt),
-                          ffelex_token_where_column (attribt));
-             ffebad_finish ();
-           }
-         ffestv_save_state_ = FFESTV_savestateANY;
-         break;
-
-       default:
-         assert ("unexpected save state" == NULL);
-         break;
-       }
-      break;
-
-#if FFESTR_F90
-    case FFESTP_attribTARGET:
-      break;
-#endif
-
-    default:
-      assert ("unexpected attribute" == NULL);
-      break;
-    }
-}
-
-/* ffestc_R501_item -- declared object
-
-   ffestc_R501_item(...);
-
-   Establish type for a particular object.  */
-
-void
-ffestc_R501_item (ffelexToken name, ffebld kind, ffelexToken kindt,
-                 ffesttDimList dims, ffebld len, ffelexToken lent,
-                 ffebld init, ffelexToken initt, bool clist)
-{
-  ffesymbol s;
-  ffesymbol sfn;               /* FUNCTION symbol. */
-  ffebld array_size;
-  ffebld extents;
-  ffesymbolAttrs sa;
-  ffesymbolAttrs na;
-  ffestpDimtype nd;
-  bool is_init = (init != NULL) || clist;
-  bool is_assumed;
-  bool is_ugly_assumed;
-  ffeinfoRank rank;
-
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  assert (ffelex_token_type (name) == FFELEX_typeNAME);        /* Not NAMES. */
-  assert (kind == NULL);       /* No way an expression should get here. */
-
-  ffestc_establish_declinfo_ (kind, kindt, len, lent);
-
-  is_assumed = (ffestc_local_.decl.basic_type == FFEINFO_basictypeCHARACTER)
-    && (ffestc_local_.decl.size == FFETARGET_charactersizeNONE);
-
-  if ((dims != NULL) || is_init)
-    ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-
-  s = ffesymbol_declare_local (name, TRUE);
-  sa = ffesymbol_attrs (s);
-
-  /* First figure out what kind of object this is based solely on the current
-     object situation (type params, dimension list, and initialization). */
-
-  na = FFESYMBOL_attrsTYPE;
-
-  if (is_assumed)
-    na |= FFESYMBOL_attrsANYLEN;
-
-  is_ugly_assumed = (ffe_is_ugly_assumed ()
-                    && ((sa & FFESYMBOL_attrsDUMMY)
-                        || (ffesymbol_where (s) == FFEINFO_whereDUMMY)));
-
-  nd = ffestt_dimlist_type (dims, is_ugly_assumed);
-  switch (nd)
-    {
-    case FFESTP_dimtypeNONE:
-      break;
-
-    case FFESTP_dimtypeKNOWN:
-      na |= FFESYMBOL_attrsARRAY;
-      break;
-
-    case FFESTP_dimtypeADJUSTABLE:
-      na |= FFESYMBOL_attrsARRAY | FFESYMBOL_attrsADJUSTABLE;
-      break;
-
-    case FFESTP_dimtypeASSUMED:
-      na |= FFESYMBOL_attrsARRAY | FFESYMBOL_attrsANYSIZE;
-      break;
-
-    case FFESTP_dimtypeADJUSTABLEASSUMED:
-      na |= FFESYMBOL_attrsARRAY | FFESYMBOL_attrsADJUSTABLE
-       | FFESYMBOL_attrsANYSIZE;
-      break;
-
-    default:
-      assert ("unexpected dimtype" == NULL);
-      na = FFESYMBOL_attrsetNONE;
-      break;
-    }
-
-  if (!ffesta_is_entry_valid
-      && (((na & (FFESYMBOL_attrsANYLEN | FFESYMBOL_attrsARRAY))
-          == (FFESYMBOL_attrsANYLEN | FFESYMBOL_attrsARRAY))))
-    na = FFESYMBOL_attrsetNONE;
-
-  if (is_init)
-    {
-      if (na == FFESYMBOL_attrsetNONE)
-       ;
-      else if (na & (FFESYMBOL_attrsANYLEN
-                    | FFESYMBOL_attrsADJUSTABLE
-                    | FFESYMBOL_attrsANYSIZE))
-       na = FFESYMBOL_attrsetNONE;
-      else
-       na |= FFESYMBOL_attrsINIT;
-    }
-
-  /* Now figure out what kind of object we've got based on previous
-     declarations of or references to the object. */
-
-  if (na == FFESYMBOL_attrsetNONE)
-    ;
-  else if (!ffesymbol_is_specable (s)
-          && (((ffesymbol_where (s) != FFEINFO_whereCONSTANT)
-               && (ffesymbol_where (s) != FFEINFO_whereINTRINSIC))
-              || (na & (FFESYMBOL_attrsARRAY | FFESYMBOL_attrsINIT))))
-    na = FFESYMBOL_attrsetNONE;        /* Can't dcl sym ref'd in sfuncdef, and can't
-                                  dimension/init UNDERSTOODs. */
-  else if (sa & FFESYMBOL_attrsANY)
-    na = sa;
-  else if ((sa & na)
-          || ((sa & (FFESYMBOL_attrsSFARG
-                     | FFESYMBOL_attrsADJUSTS))
-              && (na & (FFESYMBOL_attrsARRAY
-                        | FFESYMBOL_attrsANYLEN)))
-          || ((sa & FFESYMBOL_attrsRESULT)
-              && (na & (FFESYMBOL_attrsARRAY
-                        | FFESYMBOL_attrsINIT)))
-          || ((sa & (FFESYMBOL_attrsSFUNC
-                     | FFESYMBOL_attrsEXTERNAL
-                     | FFESYMBOL_attrsINTRINSIC
-                     | FFESYMBOL_attrsINIT))
-              && (na & (FFESYMBOL_attrsARRAY
-                        | FFESYMBOL_attrsANYLEN
-                        | FFESYMBOL_attrsINIT)))
-          || ((sa & FFESYMBOL_attrsARRAY)
-              && !ffesta_is_entry_valid
-              && (na & FFESYMBOL_attrsANYLEN))
-          || ((sa & (FFESYMBOL_attrsADJUSTABLE
-                     | FFESYMBOL_attrsANYLEN
-                     | FFESYMBOL_attrsANYSIZE
-                     | FFESYMBOL_attrsDUMMY))
-              && (na & FFESYMBOL_attrsINIT))
-          || ((sa & (FFESYMBOL_attrsSAVE
-                     | FFESYMBOL_attrsNAMELIST
-                     | FFESYMBOL_attrsCOMMON
-                     | FFESYMBOL_attrsEQUIV))
-              && (na & (FFESYMBOL_attrsADJUSTABLE
-                        | FFESYMBOL_attrsANYLEN
-                        | FFESYMBOL_attrsANYSIZE))))
-    na = FFESYMBOL_attrsetNONE;
-  else if ((ffesymbol_kind (s) == FFEINFO_kindENTITY)
-          && (ffesymbol_where (s) == FFEINFO_whereCONSTANT)
-          && (na & FFESYMBOL_attrsANYLEN))
-    {                          /* If CHARACTER*(*) FOO after PARAMETER FOO. */
-      na |= FFESYMBOL_attrsTYPE;
-      ffestc_local_.decl.size = ffebld_size (ffesymbol_init (s));
-    }
-  else
-    na |= sa;
-
-  /* Now see what we've got for a new object: NONE means a new error cropped
-     up; ANY means an old error to be ignored; otherwise, everything's ok,
-     update the object (symbol) and continue on. */
-
-  if (na == FFESYMBOL_attrsetNONE)
-    {
-      ffesymbol_error (s, name);
-      ffestc_parent_ok_ = FALSE;
-    }
-  else if (na & FFESYMBOL_attrsANY)
-    ffestc_parent_ok_ = FALSE;
-  else
-    {
-      ffesymbol_set_attrs (s, na);
-      if (ffesymbol_state (s) == FFESYMBOL_stateNONE)
-       ffesymbol_set_state (s, FFESYMBOL_stateSEEN);
-      rank = ffesymbol_rank (s);
-      if (dims != NULL)
-       {
-         ffesymbol_set_dims (s, ffestt_dimlist_as_expr (dims, &rank,
-                                                        &array_size,
-                                                        &extents,
-                                                        is_ugly_assumed));
-         ffesymbol_set_arraysize (s, array_size);
-         ffesymbol_set_extents (s, extents);
-         if (!(0 && ffe_is_90 ())
-             && (ffebld_op (array_size) == FFEBLD_opCONTER)
-             && (ffebld_constant_integerdefault (ffebld_conter (array_size))
-                 == 0))
-           {
-             ffebad_start (FFEBAD_ZERO_ARRAY);
-             ffebad_here (0, ffelex_token_where_line (name),
-                          ffelex_token_where_column (name));
-             ffebad_finish ();
-           }
-       }
-      if (init != NULL)
-       {
-         ffesymbol_set_init (s,
-                             ffeexpr_convert (init, initt, name,
-                                              ffestc_local_.decl.basic_type,
-                                              ffestc_local_.decl.kind_type,
-                                              rank,
-                                              ffestc_local_.decl.size,
-                                              FFEEXPR_contextDATA));
-         ffecom_notify_init_symbol (s);
-         ffesymbol_update_init (s);
-#if FFEGLOBAL_ENABLED
-         if (ffesymbol_common (s) != NULL)
-           ffeglobal_init_common (ffesymbol_common (s), initt);
-#endif
-       }
-      else if (clist)
-       {
-         ffebld symter;
-
-         symter = ffebld_new_symter (s, FFEINTRIN_genNONE,
-                                     FFEINTRIN_specNONE,
-                                     FFEINTRIN_impNONE);
-
-         ffebld_set_info (symter,
-                          ffeinfo_new (ffestc_local_.decl.basic_type,
-                                       ffestc_local_.decl.kind_type,
-                                       rank,
-                                       FFEINFO_kindNONE,
-                                       FFEINFO_whereNONE,
-                                       ffestc_local_.decl.size));
-         ffestc_local_.decl.initlist = ffebld_new_item (symter, NULL);
-       }
-      if (ffesymbol_basictype (s) == FFEINFO_basictypeNONE)
-       {
-         ffesymbol_set_info (s,
-                             ffeinfo_new (ffestc_local_.decl.basic_type,
-                                          ffestc_local_.decl.kind_type,
-                                          rank,
-                                          ffesymbol_kind (s),
-                                          ffesymbol_where (s),
-                                          ffestc_local_.decl.size));
-         if ((na & FFESYMBOL_attrsRESULT)
-             && ((sfn = ffesymbol_funcresult (s)) != NULL))
-           {
-             ffesymbol_set_info (sfn,
-                                 ffeinfo_new (ffestc_local_.decl.basic_type,
-                                              ffestc_local_.decl.kind_type,
-                                              rank,
-                                              ffesymbol_kind (sfn),
-                                              ffesymbol_where (sfn),
-                                              ffestc_local_.decl.size));
-             ffesymbol_signal_unreported (sfn);
-           }
-       }
-      else if ((ffestc_local_.decl.basic_type != ffesymbol_basictype (s))
-              || (ffestc_local_.decl.kind_type != ffesymbol_kindtype (s))
-              || ((ffestc_local_.decl.basic_type
-                   == FFEINFO_basictypeCHARACTER)
-                  && (ffestc_local_.decl.size != ffesymbol_size (s))))
-       {                       /* Explicit type disagrees with established
-                                  implicit type. */
-         ffesymbol_error (s, name);
-       }
-
-      if ((na & FFESYMBOL_attrsADJUSTS)
-         && ((ffestc_local_.decl.basic_type != FFEINFO_basictypeINTEGER)
-             || (ffestc_local_.decl.kind_type != FFEINFO_kindtypeINTEGER1)))
-       ffesymbol_error (s, name);
-
-      ffesymbol_signal_unreported (s);
-      ffestc_parent_ok_ = TRUE;
-    }
-}
-
-/* ffestc_R501_itemstartvals -- Start list of values
-
-   ffestc_R501_itemstartvals();
-
-   Gonna specify values for the object now.  */
-
-void
-ffestc_R501_itemstartvals ()
-{
-  ffestc_check_item_startvals_ ();
-
-  if (ffestc_parent_ok_)
-    ffedata_begin (ffestc_local_.decl.initlist);
-}
-
-/* ffestc_R501_itemvalue -- Source value
-
-   ffestc_R501_itemvalue(repeat,repeat_token,value,value_token);
-
-   Make sure repeat and value are valid for the object being initialized.  */
-
-void
-ffestc_R501_itemvalue (ffebld repeat, ffelexToken repeat_token,
-                      ffebld value, ffelexToken value_token)
-{
-  ffetargetIntegerDefault rpt;
-
-  ffestc_check_item_value_ ();
-
-  if (!ffestc_parent_ok_)
-    return;
-
-  if (repeat == NULL)
-    rpt = 1;
-  else if (ffebld_op (repeat) == FFEBLD_opCONTER)
-    rpt = ffebld_constant_integerdefault (ffebld_conter (repeat));
-  else
-    {
-      ffestc_parent_ok_ = FALSE;
-      ffedata_end (TRUE, NULL);
-      return;
-    }
-
-  if (!(ffestc_parent_ok_ = ffedata_value (rpt, value,
-                     (repeat_token == NULL) ? value_token : repeat_token)))
-    ffedata_end (TRUE, NULL);
-}
-
-/* ffestc_R501_itemendvals -- End list of values
-
-   ffelexToken t;  // the SLASH token that ends the list.
-   ffestc_R501_itemendvals(t);
-
-   No more values, might specify more objects now.  */
-
-void
-ffestc_R501_itemendvals (ffelexToken t)
-{
-  ffestc_check_item_endvals_ ();
-
-  if (ffestc_parent_ok_)
-    ffestc_parent_ok_ = ffedata_end (FALSE, t);
-
-  if (ffestc_parent_ok_)
-    ffesymbol_signal_unreported (ffebld_symter (ffebld_head
-                                            (ffestc_local_.decl.initlist)));
-}
-
-/* ffestc_R501_finish -- Done
-
-   ffestc_R501_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R501_finish ()
-{
-  ffestc_check_finish_ ();
-}
-
-/* ffestc_R519_start -- INTENT statement list begin
-
-   ffestc_R519_start();
-
-   Verify that INTENT is valid here, and begin accepting items in the list.  */
-
-#if FFESTR_F90
-void
-ffestc_R519_start (ffelexToken intent, ffestrOther intent_kw)
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_spec_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  ffestd_R519_start (intent_kw);
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R519_item -- INTENT statement for name
-
-   ffestc_R519_item(name_token);
-
-   Make sure name_token identifies a valid object to be INTENTed.  */
-
-void
-ffestc_R519_item (ffelexToken name)
-{
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R519_item (name);
-}
-
-/* ffestc_R519_finish -- INTENT statement list complete
-
-   ffestc_R519_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R519_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R519_finish ();
-}
-
-/* ffestc_R520_start -- OPTIONAL statement list begin
-
-   ffestc_R520_start();
-
-   Verify that OPTIONAL is valid here, and begin accepting items in the list.  */
-
-void
-ffestc_R520_start ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_spec_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  ffestd_R520_start ();
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R520_item -- OPTIONAL statement for name
-
-   ffestc_R520_item(name_token);
-
-   Make sure name_token identifies a valid object to be OPTIONALed.  */
-
-void
-ffestc_R520_item (ffelexToken name)
-{
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R520_item (name);
-}
-
-/* ffestc_R520_finish -- OPTIONAL statement list complete
-
-   ffestc_R520_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R520_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R520_finish ();
-}
-
-/* ffestc_R521A -- PUBLIC statement
-
-   ffestc_R521A();
-
-   Verify that PUBLIC is valid here.  */
-
-void
-ffestc_R521A ()
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_access_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  switch (ffestv_access_state_)
-    {
-    case FFESTV_accessstateNONE:
-      ffestv_access_state_ = FFESTV_accessstatePUBLIC;
-      ffestv_access_line_
-       = ffewhere_line_use (ffelex_token_where_line (ffesta_tokens[0]));
-      ffestv_access_col_
-       = ffewhere_column_use (ffelex_token_where_column (ffesta_tokens[0]));
-      break;
-
-    case FFESTV_accessstateANY:
-      break;
-
-    case FFESTV_accessstatePUBLIC:
-    case FFESTV_accessstatePRIVATE:
-      ffebad_start (FFEBAD_CONFLICTING_ACCESSES);
-      ffebad_here (0, ffestv_access_line_, ffestv_access_col_);
-      ffebad_here (1, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      ffebad_finish ();
-      ffestv_access_state_ = FFESTV_accessstateANY;
-      break;
-
-    default:
-      assert ("unexpected access state" == NULL);
-      break;
-    }
-
-  ffestd_R521A ();
-}
-
-/* ffestc_R521Astart -- PUBLIC statement list begin
-
-   ffestc_R521Astart();
-
-   Verify that PUBLIC is valid here, and begin accepting items in the list.  */
-
-void
-ffestc_R521Astart ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_access_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  ffestd_R521Astart ();
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R521Aitem -- PUBLIC statement for name
-
-   ffestc_R521Aitem(name_token);
-
-   Make sure name_token identifies a valid object to be PUBLICed.  */
-
-void
-ffestc_R521Aitem (ffelexToken name)
-{
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R521Aitem (name);
-}
-
-/* ffestc_R521Afinish -- PUBLIC statement list complete
-
-   ffestc_R521Afinish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R521Afinish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R521Afinish ();
-}
-
-/* ffestc_R521B -- PRIVATE statement
-
-   ffestc_R521B();
-
-   Verify that PRIVATE is valid here (outside a derived-type statement).  */
-
-void
-ffestc_R521B ()
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_access_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  switch (ffestv_access_state_)
-    {
-    case FFESTV_accessstateNONE:
-      ffestv_access_state_ = FFESTV_accessstatePRIVATE;
-      ffestv_access_line_
-       = ffewhere_line_use (ffelex_token_where_line (ffesta_tokens[0]));
-      ffestv_access_col_
-       = ffewhere_column_use (ffelex_token_where_column (ffesta_tokens[0]));
-      break;
-
-    case FFESTV_accessstateANY:
-      break;
-
-    case FFESTV_accessstatePUBLIC:
-    case FFESTV_accessstatePRIVATE:
-      ffebad_start (FFEBAD_CONFLICTING_ACCESSES);
-      ffebad_here (0, ffestv_access_line_, ffestv_access_col_);
-      ffebad_here (1, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      ffebad_finish ();
-      ffestv_access_state_ = FFESTV_accessstateANY;
-      break;
-
-    default:
-      assert ("unexpected access state" == NULL);
-      break;
-    }
-
-  ffestd_R521B ();
-}
-
-/* ffestc_R521Bstart -- PRIVATE statement list begin
-
-   ffestc_R521Bstart();
-
-   Verify that PRIVATE is valid here, and begin accepting items in the list.  */
-
-void
-ffestc_R521Bstart ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_access_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  ffestd_R521Bstart ();
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R521Bitem -- PRIVATE statement for name
-
-   ffestc_R521Bitem(name_token);
-
-   Make sure name_token identifies a valid object to be PRIVATEed.  */
-
-void
-ffestc_R521Bitem (ffelexToken name)
-{
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R521Bitem (name);
-}
-
-/* ffestc_R521Bfinish -- PRIVATE statement list complete
-
-   ffestc_R521Bfinish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R521Bfinish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R521Bfinish ();
-}
-
-#endif
-/* ffestc_R522 -- SAVE statement with no list
-
-   ffestc_R522();
-
-   Verify that SAVE is valid here, and flag everything as SAVEd.  */
-
-void
-ffestc_R522 ()
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_blockspec_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  switch (ffestv_save_state_)
-    {
-    case FFESTV_savestateNONE:
-      ffestv_save_state_ = FFESTV_savestateALL;
-      ffestv_save_line_
-       = ffewhere_line_use (ffelex_token_where_line (ffesta_tokens[0]));
-      ffestv_save_col_
-       = ffewhere_column_use (ffelex_token_where_column (ffesta_tokens[0]));
-      break;
-
-    case FFESTV_savestateANY:
-      break;
-
-    case FFESTV_savestateSPECIFIC:
-    case FFESTV_savestateALL:
-      if (ffe_is_pedantic ())
-       {
-         ffebad_start (FFEBAD_CONFLICTING_SAVES);
-         ffebad_here (0, ffestv_save_line_, ffestv_save_col_);
-         ffebad_here (1, ffelex_token_where_line (ffesta_tokens[0]),
-                      ffelex_token_where_column (ffesta_tokens[0]));
-         ffebad_finish ();
-       }
-      ffestv_save_state_ = FFESTV_savestateALL;
-      break;
-
-    default:
-      assert ("unexpected save state" == NULL);
-      break;
-    }
-
-  ffe_set_is_saveall (TRUE);
-
-  ffestd_R522 ();
-}
-
-/* ffestc_R522start -- SAVE statement list begin
-
-   ffestc_R522start();
-
-   Verify that SAVE is valid here, and begin accepting items in the list.  */
-
-void
-ffestc_R522start ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_blockspec_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  switch (ffestv_save_state_)
-    {
-    case FFESTV_savestateNONE:
-      ffestv_save_state_ = FFESTV_savestateSPECIFIC;
-      ffestv_save_line_
-       = ffewhere_line_use (ffelex_token_where_line (ffesta_tokens[0]));
-      ffestv_save_col_
-       = ffewhere_column_use (ffelex_token_where_column (ffesta_tokens[0]));
-      break;
-
-    case FFESTV_savestateSPECIFIC:
-    case FFESTV_savestateANY:
-      break;
-
-    case FFESTV_savestateALL:
-      if (ffe_is_pedantic ())
-       {
-         ffebad_start (FFEBAD_CONFLICTING_SAVES);
-         ffebad_here (0, ffestv_save_line_, ffestv_save_col_);
-         ffebad_here (1, ffelex_token_where_line (ffesta_tokens[0]),
-                      ffelex_token_where_column (ffesta_tokens[0]));
-         ffebad_finish ();
-       }
-      ffestv_save_state_ = FFESTV_savestateANY;
-      break;
-
-    default:
-      assert ("unexpected save state" == NULL);
-      break;
-    }
-
-  ffestd_R522start ();
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R522item_object -- SAVE statement for object-name
-
-   ffestc_R522item_object(name_token);
-
-   Make sure name_token identifies a valid object to be SAVEd. */
-
-void
-ffestc_R522item_object (ffelexToken name)
-{
-  ffesymbol s;
-  ffesymbolAttrs sa;
-  ffesymbolAttrs na;
-
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  s = ffesymbol_declare_local (name, FALSE);
-  sa = ffesymbol_attrs (s);
-
-  /* Figure out what kind of object we've got based on previous declarations
-     of or references to the object. */
-
-  if (!ffesymbol_is_specable (s)
-      && ((ffesymbol_kind (s) != FFEINFO_kindENTITY)
-         || (ffesymbol_where (s) != FFEINFO_whereLOCAL)))
-    na = FFESYMBOL_attrsetNONE;        /* Can't dcl sym ref'd in sfuncdef. */
-  else if (sa & FFESYMBOL_attrsANY)
-    na = sa;
-  else if (!(sa & ~(FFESYMBOL_attrsARRAY
-                   | FFESYMBOL_attrsEQUIV
-                   | FFESYMBOL_attrsINIT
-                   | FFESYMBOL_attrsNAMELIST
-                   | FFESYMBOL_attrsSFARG
-                   | FFESYMBOL_attrsTYPE)))
-    na = sa | FFESYMBOL_attrsSAVE;
-  else
-    na = FFESYMBOL_attrsetNONE;
-
-  /* Now see what we've got for a new object: NONE means a new error cropped
-     up; ANY means an old error to be ignored; otherwise, everything's ok,
-     update the object (symbol) and continue on. */
-
-  if (na == FFESYMBOL_attrsetNONE)
-    ffesymbol_error (s, name);
-  else if (!(na & FFESYMBOL_attrsANY))
-    {
-      ffesymbol_set_attrs (s, na);
-      if (ffesymbol_state (s) == FFESYMBOL_stateNONE)
-       ffesymbol_set_state (s, FFESYMBOL_stateSEEN);
-      ffesymbol_update_save (s);
-      ffesymbol_signal_unreported (s);
-    }
-
-  ffestd_R522item_object (name);
-}
-
-/* ffestc_R522item_cblock -- SAVE statement for common-block-name
-
-   ffestc_R522item_cblock(name_token);
-
-   Make sure name_token identifies a valid common block to be SAVEd.  */
-
-void
-ffestc_R522item_cblock (ffelexToken name)
-{
-  ffesymbol s;
-  ffesymbolAttrs sa;
-  ffesymbolAttrs na;
-
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  s = ffesymbol_declare_cblock (name, ffelex_token_where_line (ffesta_tokens[0]),
-                             ffelex_token_where_column (ffesta_tokens[0]));
-  sa = ffesymbol_attrs (s);
-
-  /* Figure out what kind of object we've got based on previous declarations
-     of or references to the object. */
-
-  if (!ffesymbol_is_specable (s))
-    na = FFESYMBOL_attrsetNONE;
-  else if (sa & FFESYMBOL_attrsANY)
-    na = sa;                   /* Already have an error here, say nothing. */
-  else if (!(sa & ~(FFESYMBOL_attrsCBLOCK)))
-    na = sa | FFESYMBOL_attrsSAVECBLOCK;
-  else
-    na = FFESYMBOL_attrsetNONE;
-
-  /* Now see what we've got for a new object: NONE means a new error cropped
-     up; ANY means an old error to be ignored; otherwise, everything's ok,
-     update the object (symbol) and continue on. */
-
-  if (na == FFESYMBOL_attrsetNONE)
-    ffesymbol_error (s, (name == NULL) ? ffesta_tokens[0] : name);
-  else if (!(na & FFESYMBOL_attrsANY))
-    {
-      ffesymbol_set_attrs (s, na);
-      ffesymbol_set_state (s, FFESYMBOL_stateSEEN);
-      ffesymbol_update_save (s);
-      ffesymbol_signal_unreported (s);
-    }
-
-  ffestd_R522item_cblock (name);
-}
-
-/* ffestc_R522finish -- SAVE statement list complete
-
-   ffestc_R522finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R522finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R522finish ();
-}
-
-/* ffestc_R524_start -- DIMENSION statement list begin
-
-   ffestc_R524_start(bool virtual);
-
-   Verify that DIMENSION is valid here, and begin accepting items in the
-   list.  */
-
-void
-ffestc_R524_start (bool virtual)
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_blockspec_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  ffestd_R524_start (virtual);
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R524_item -- DIMENSION statement for object-name
-
-   ffestc_R524_item(name_token,dim_list);
-
-   Make sure name_token identifies a valid object to be DIMENSIONd.  */
-
-void
-ffestc_R524_item (ffelexToken name, ffesttDimList dims)
-{
-  ffesymbol s;
-  ffebld array_size;
-  ffebld extents;
-  ffesymbolAttrs sa;
-  ffesymbolAttrs na;
-  ffestpDimtype nd;
-  ffeinfoRank rank;
-  bool is_ugly_assumed;
-
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  assert (dims != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-
-  s = ffesymbol_declare_local (name, FALSE);
-  sa = ffesymbol_attrs (s);
-
-  /* First figure out what kind of object this is based solely on the current
-     object situation (dimension list). */
-
-  is_ugly_assumed = (ffe_is_ugly_assumed ()
-                    && ((sa & FFESYMBOL_attrsDUMMY)
-                        || (ffesymbol_where (s) == FFEINFO_whereDUMMY)));
-
-  nd = ffestt_dimlist_type (dims, is_ugly_assumed);
-  switch (nd)
-    {
-    case FFESTP_dimtypeKNOWN:
-      na = FFESYMBOL_attrsARRAY;
-      break;
-
-    case FFESTP_dimtypeADJUSTABLE:
-      na = FFESYMBOL_attrsARRAY | FFESYMBOL_attrsADJUSTABLE;
-      break;
-
-    case FFESTP_dimtypeASSUMED:
-      na = FFESYMBOL_attrsARRAY | FFESYMBOL_attrsANYSIZE;
-      break;
-
-    case FFESTP_dimtypeADJUSTABLEASSUMED:
-      na = FFESYMBOL_attrsARRAY | FFESYMBOL_attrsADJUSTABLE
-       | FFESYMBOL_attrsANYSIZE;
-      break;
-
-    default:
-      assert ("Unexpected dims type" == NULL);
-      na = FFESYMBOL_attrsetNONE;
-      break;
-    }
-
-  /* Now figure out what kind of object we've got based on previous
-     declarations of or references to the object. */
-
-  if (!ffesymbol_is_specable (s))
-    na = FFESYMBOL_attrsetNONE;        /* Can't dcl sym ref'd in sfuncdef. */
-  else if (sa & FFESYMBOL_attrsANY)
-    na = FFESYMBOL_attrsANY;
-  else if (!ffesta_is_entry_valid
-          && (sa & FFESYMBOL_attrsANYLEN))
-    na = FFESYMBOL_attrsetNONE;
-  else if ((sa & FFESYMBOL_attrsARRAY)
-          || ((sa & (FFESYMBOL_attrsCOMMON
-                     | FFESYMBOL_attrsEQUIV
-                     | FFESYMBOL_attrsNAMELIST
-                     | FFESYMBOL_attrsSAVE))
-              && (na & (FFESYMBOL_attrsADJUSTABLE
-                        | FFESYMBOL_attrsANYSIZE))))
-    na = FFESYMBOL_attrsetNONE;
-  else if (!(sa & ~(FFESYMBOL_attrsADJUSTABLE
-                   | FFESYMBOL_attrsANYLEN
-                   | FFESYMBOL_attrsANYSIZE
-                   | FFESYMBOL_attrsCOMMON
-                   | FFESYMBOL_attrsDUMMY
-                   | FFESYMBOL_attrsEQUIV
-                   | FFESYMBOL_attrsNAMELIST
-                   | FFESYMBOL_attrsSAVE
-                   | FFESYMBOL_attrsTYPE)))
-    na |= sa;
-  else
-    na = FFESYMBOL_attrsetNONE;
-
-  /* Now see what we've got for a new object: NONE means a new error cropped
-     up; ANY means an old error to be ignored; otherwise, everything's ok,
-     update the object (symbol) and continue on. */
-
-  if (na == FFESYMBOL_attrsetNONE)
-    ffesymbol_error (s, name);
-  else if (!(na & FFESYMBOL_attrsANY))
-    {
-      ffesymbol_set_attrs (s, na);
-      ffesymbol_set_state (s, FFESYMBOL_stateSEEN);
-      ffesymbol_set_dims (s, ffestt_dimlist_as_expr (dims, &rank,
-                                                    &array_size,
-                                                    &extents,
-                                                    is_ugly_assumed));
-      ffesymbol_set_arraysize (s, array_size);
-      ffesymbol_set_extents (s, extents);
-      if (!(0 && ffe_is_90 ())
-         && (ffebld_op (array_size) == FFEBLD_opCONTER)
-         && (ffebld_constant_integerdefault (ffebld_conter (array_size))
-             == 0))
-       {
-         ffebad_start (FFEBAD_ZERO_ARRAY);
-         ffebad_here (0, ffelex_token_where_line (name),
-                      ffelex_token_where_column (name));
-         ffebad_finish ();
-       }
-      ffesymbol_set_info (s,
-                         ffeinfo_new (ffesymbol_basictype (s),
-                                      ffesymbol_kindtype (s),
-                                      rank,
-                                      ffesymbol_kind (s),
-                                      ffesymbol_where (s),
-                                      ffesymbol_size (s)));
-    }
-
-  ffesymbol_signal_unreported (s);
-
-  ffestd_R524_item (name, dims);
-}
-
-/* ffestc_R524_finish -- DIMENSION statement list complete
-
-   ffestc_R524_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R524_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R524_finish ();
-}
-
-/* ffestc_R525_start -- ALLOCATABLE statement list begin
-
-   ffestc_R525_start();
-
-   Verify that ALLOCATABLE is valid here, and begin accepting items in the
-   list.  */
-
-#if FFESTR_F90
-void
-ffestc_R525_start ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_progspec_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  ffestd_R525_start ();
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R525_item -- ALLOCATABLE statement for object-name
-
-   ffestc_R525_item(name_token,dim_list);
-
-   Make sure name_token identifies a valid object to be ALLOCATABLEd.  */
-
-void
-ffestc_R525_item (ffelexToken name, ffesttDimList dims)
-{
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-
-  ffestd_R525_item (name, dims);
-}
-
-/* ffestc_R525_finish -- ALLOCATABLE statement list complete
-
-   ffestc_R525_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R525_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R525_finish ();
-}
-
-/* ffestc_R526_start -- POINTER statement list begin
-
-   ffestc_R526_start();
-
-   Verify that POINTER is valid here, and begin accepting items in the
-   list.  */
-
-void
-ffestc_R526_start ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_progspec_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  ffestd_R526_start ();
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R526_item -- POINTER statement for object-name
-
-   ffestc_R526_item(name_token,dim_list);
-
-   Make sure name_token identifies a valid object to be POINTERd.  */
-
-void
-ffestc_R526_item (ffelexToken name, ffesttDimList dims)
-{
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-
-  ffestd_R526_item (name, dims);
-}
-
-/* ffestc_R526_finish -- POINTER statement list complete
-
-   ffestc_R526_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R526_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R526_finish ();
-}
-
-/* ffestc_R527_start -- TARGET statement list begin
-
-   ffestc_R527_start();
-
-   Verify that TARGET is valid here, and begin accepting items in the
-   list.  */
-
-void
-ffestc_R527_start ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_progspec_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  ffestd_R527_start ();
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R527_item -- TARGET statement for object-name
-
-   ffestc_R527_item(name_token,dim_list);
-
-   Make sure name_token identifies a valid object to be TARGETd.  */
-
-void
-ffestc_R527_item (ffelexToken name, ffesttDimList dims)
-{
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-
-  ffestd_R527_item (name, dims);
-}
-
-/* ffestc_R527_finish -- TARGET statement list complete
-
-   ffestc_R527_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R527_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R527_finish ();
-}
-
-#endif
-/* ffestc_R528_start -- DATA statement list begin
-
-   ffestc_R528_start();
-
-   Verify that DATA is valid here, and begin accepting items in the list.  */
-
-void
-ffestc_R528_start ()
-{
-  ffestcOrder_ order;
-
-  ffestc_check_start_ ();
-  if (ffe_is_pedantic_not_90 ())
-    order = ffestc_order_data77_ ();
-  else
-    order = ffestc_order_data_ ();
-  if (order != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-
-#if 1
-  ffestc_local_.data.objlist = NULL;
-#else
-  ffestd_R528_start_ ();
-#endif
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R528_item_object -- DATA statement target object
-
-   ffestc_R528_item_object(object,object_token);
-
-   Make sure object is valid to be DATAd.  */
-
-void
-ffestc_R528_item_object (ffebld expr, ffelexToken expr_token UNUSED)
-{
-  ffestc_check_item_ ();
-  if (!ffestc_ok_)
-    return;
-
-#if 1
-  if (ffestc_local_.data.objlist == NULL)
-    ffebld_init_list (&ffestc_local_.data.objlist,
-                     &ffestc_local_.data.list_bottom);
-
-  ffebld_append_item (&ffestc_local_.data.list_bottom, expr);
-#else
-  ffestd_R528_item_object_ (expr, expr_token);
-#endif
-}
-
-/* ffestc_R528_item_startvals -- DATA statement start list of values
-
-   ffestc_R528_item_startvals();
-
-   No more objects, gonna specify values for the list of objects now.  */
-
-void
-ffestc_R528_item_startvals ()
-{
-  ffestc_check_item_startvals_ ();
-  if (!ffestc_ok_)
-    return;
-
-#if 1
-  assert (ffestc_local_.data.objlist != NULL);
-  ffebld_end_list (&ffestc_local_.data.list_bottom);
-  ffedata_begin (ffestc_local_.data.objlist);
-#else
-  ffestd_R528_item_startvals_ ();
-#endif
-}
-
-/* ffestc_R528_item_value -- DATA statement source value
-
-   ffestc_R528_item_value(repeat,repeat_token,value,value_token);
-
-   Make sure repeat and value are valid for the objects being initialized.  */
-
-void
-ffestc_R528_item_value (ffebld repeat, ffelexToken repeat_token,
-                       ffebld value, ffelexToken value_token)
-{
-  ffetargetIntegerDefault rpt;
-
-  ffestc_check_item_value_ ();
-  if (!ffestc_ok_)
-    return;
-
-#if 1
-  if (repeat == NULL)
-    rpt = 1;
-  else if (ffebld_op (repeat) == FFEBLD_opCONTER)
-    rpt = ffebld_constant_integerdefault (ffebld_conter (repeat));
-  else
-    {
-      ffestc_ok_ = FALSE;
-      ffedata_end (TRUE, NULL);
-      return;
-    }
-
-  if (!(ffestc_ok_ = ffedata_value (rpt, value,
-                                   (repeat_token == NULL)
-                                   ? value_token
-                                   : repeat_token)))
-    ffedata_end (TRUE, NULL);
-
-#else
-  ffestd_R528_item_value_ (repeat, value);
-#endif
-}
-
-/* ffestc_R528_item_endvals -- DATA statement start list of values
-
-   ffelexToken t;  // the SLASH token that ends the list.
-   ffestc_R528_item_endvals(t);
-
-   No more values, might specify more objects now.  */
-
-void
-ffestc_R528_item_endvals (ffelexToken t)
-{
-  ffestc_check_item_endvals_ ();
-  if (!ffestc_ok_)
-    return;
-
-#if 1
-  ffedata_end (!ffestc_ok_, t);
-  ffestc_local_.data.objlist = NULL;
-#else
-  ffestd_R528_item_endvals_ (t);
-#endif
-}
-
-/* ffestc_R528_finish -- DATA statement list complete
-
-   ffestc_R528_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R528_finish ()
-{
-  ffestc_check_finish_ ();
-
-#if 1
-#else
-  ffestd_R528_finish_ ();
-#endif
-}
-
-/* ffestc_R537_start -- PARAMETER statement list begin
-
-   ffestc_R537_start();
-
-   Verify that PARAMETER is valid here, and begin accepting items in the
-   list.  */
-
-void
-ffestc_R537_start ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_parameter_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-
-  ffestd_R537_start ();
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R537_item -- PARAMETER statement assignment
-
-   ffestc_R537_item(dest,dest_token,source,source_token);
-
-   Make sure the source is a valid source for the destination; make the
-   assignment. */
-
-void
-ffestc_R537_item (ffebld dest, ffelexToken dest_token, ffebld source,
-                 ffelexToken source_token)
-{
-  ffesymbol s;
-
-  ffestc_check_item_ ();
-  if (!ffestc_ok_)
-    return;
-
-  if ((ffebld_op (dest) == FFEBLD_opANY)
-      || (ffebld_op (source) == FFEBLD_opANY))
-    {
-      if (ffebld_op (dest) == FFEBLD_opSYMTER)
-       {
-         s = ffebld_symter (dest);
-         ffesymbol_set_init (s, ffebld_new_any ());
-         ffebld_set_info (ffesymbol_init (s), ffeinfo_new_any ());
-         ffesymbol_signal_unreported (s);
-       }
-      ffestd_R537_item (dest, source);
-      return;
-    }
-
-  assert (ffebld_op (dest) == FFEBLD_opSYMTER);
-  assert (ffebld_op (source) == FFEBLD_opCONTER);
-
-  s = ffebld_symter (dest);
-  if ((ffesymbol_basictype (s) == FFEINFO_basictypeCHARACTER)
-      && (ffesymbol_size (s) == FFETARGET_charactersizeNONE))
-    {                          /* Destination has explicit/implicit
-                                  CHARACTER*(*) type; set length. */
-      ffesymbol_set_info (s,
-                         ffeinfo_new (ffesymbol_basictype (s),
-                                      ffesymbol_kindtype (s),
-                                      0,
-                                      ffesymbol_kind (s),
-                                      ffesymbol_where (s),
-                                      ffebld_size (source)));
-      ffebld_set_info (dest, ffeinfo_use (ffesymbol_info (s)));
-    }
-
-  source = ffeexpr_convert_expr (source, source_token, dest, dest_token,
-                                FFEEXPR_contextDATA);
-
-  ffesymbol_set_init (s, source);
-
-  ffesymbol_signal_unreported (s);
-
-  ffestd_R537_item (dest, source);
-}
-
-/* ffestc_R537_finish -- PARAMETER statement list complete
-
-   ffestc_R537_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R537_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R537_finish ();
-}
-
-/* ffestc_R539 -- IMPLICIT NONE statement
-
-   ffestc_R539();
-
-   Verify that the IMPLICIT NONE statement is ok here and implement.  */
-
-void
-ffestc_R539 ()
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_implicitnone_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  ffeimplic_none ();
-
-  ffestd_R539 ();
-}
-
-/* ffestc_R539start -- IMPLICIT statement
-
-   ffestc_R539start();
-
-   Verify that the IMPLICIT statement is ok here and implement.         */
-
-void
-ffestc_R539start ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_implicit_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  ffestd_R539start ();
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R539item -- IMPLICIT statement specification (R540)
-
-   ffestc_R539item(...);
-
-   Verify that the type and letter list are all ok and implement.  */
-
-void
-ffestc_R539item (ffestpType type, ffebld kind, ffelexToken kindt,
-                ffebld len, ffelexToken lent, ffesttImpList letters)
-{
-  ffestc_check_item_ ();
-  if (!ffestc_ok_)
-    return;
-
-  if ((type == FFESTP_typeCHARACTER) && (len != NULL)
-      && (ffebld_op (len) == FFEBLD_opSTAR))
-    {                          /* Complain and pretend they're CHARACTER
-                                  [*1]. */
-      ffebad_start (FFEBAD_IMPLICIT_ADJLEN);
-      ffebad_here (0, ffelex_token_where_line (lent),
-                  ffelex_token_where_column (lent));
-      ffebad_finish ();
-      len = NULL;
-      lent = NULL;
-    }
-  ffestc_establish_declstmt_ (type, ffesta_tokens[0], kind, kindt, len, lent);
-  ffestc_establish_declinfo_ (NULL, NULL, NULL, NULL);
-
-  ffestt_implist_drive (letters, ffestc_establish_impletter_);
-
-  ffestd_R539item (type, kind, kindt, len, lent, letters);
-}
-
-/* ffestc_R539finish -- IMPLICIT statement
-
-   ffestc_R539finish();
-
-   Finish up any local activities.  */
-
-void
-ffestc_R539finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R539finish ();
-}
-
-/* ffestc_R542_start -- NAMELIST statement list begin
-
-   ffestc_R542_start();
-
-   Verify that NAMELIST is valid here, and begin accepting items in the
-   list.  */
-
-void
-ffestc_R542_start ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_progspec_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  if (ffe_is_f2c_library ()
-      && (ffe_case_source () == FFE_caseNONE))
-    {
-      ffebad_start (FFEBAD_NAMELIST_CASE);
-      ffesta_ffebad_here_current_stmt (0);
-      ffebad_finish ();
-    }
-
-  ffestd_R542_start ();
-
-  ffestc_local_.namelist.symbol = NULL;
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R542_item_nlist -- NAMELIST statement for group-name
-
-   ffestc_R542_item_nlist(groupname_token);
-
-   Make sure name_token identifies a valid object to be NAMELISTd.  */
-
-void
-ffestc_R542_item_nlist (ffelexToken name)
-{
-  ffesymbol s;
-
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  if (ffestc_local_.namelist.symbol != NULL)
-    ffesymbol_signal_unreported (ffestc_local_.namelist.symbol);
-
-  s = ffesymbol_declare_local (name, FALSE);
-
-  if ((ffesymbol_state (s) == FFESYMBOL_stateNONE)
-      || ((ffesymbol_state (s) == FFESYMBOL_stateUNDERSTOOD)
-         && (ffesymbol_kind (s) == FFEINFO_kindNAMELIST)))
-    {
-      ffestc_parent_ok_ = TRUE;
-      if (ffesymbol_state (s) == FFESYMBOL_stateNONE)
-       {
-         ffebld_init_list (ffesymbol_ptr_to_namelist (s),
-                           ffesymbol_ptr_to_listbottom (s));
-         ffesymbol_set_state (s, FFESYMBOL_stateUNDERSTOOD);
-         ffesymbol_set_info (s,
-                             ffeinfo_new (FFEINFO_basictypeNONE,
-                                          FFEINFO_kindtypeNONE,
-                                          0,
-                                          FFEINFO_kindNAMELIST,
-                                          FFEINFO_whereLOCAL,
-                                          FFETARGET_charactersizeNONE));
-       }
-    }
-  else
-    {
-      if (ffesymbol_kind (s) != FFEINFO_kindANY)
-       ffesymbol_error (s, name);
-      ffestc_parent_ok_ = FALSE;
-    }
-
-  ffestc_local_.namelist.symbol = s;
-
-  ffestd_R542_item_nlist (name);
-}
-
-/* ffestc_R542_item_nitem -- NAMELIST statement for variable-name
-
-   ffestc_R542_item_nitem(name_token);
-
-   Make sure name_token identifies a valid object to be NAMELISTd.  */
-
-void
-ffestc_R542_item_nitem (ffelexToken name)
-{
-  ffesymbol s;
-  ffesymbolAttrs sa;
-  ffesymbolAttrs na;
-  ffebld e;
-
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  s = ffesymbol_declare_local (name, FALSE);
-  sa = ffesymbol_attrs (s);
-
-  /* Figure out what kind of object we've got based on previous declarations
-     of or references to the object. */
-
-  if (!ffesymbol_is_specable (s)
-      && ((ffesymbol_kind (s) != FFEINFO_kindENTITY)
-         || ((ffesymbol_where (s) != FFEINFO_whereLOCAL)
-             && (ffesymbol_where (s) != FFEINFO_whereCOMMON))))
-    na = FFESYMBOL_attrsetNONE;
-  else if (sa & FFESYMBOL_attrsANY)
-    na = FFESYMBOL_attrsANY;
-  else if (!(sa & ~(FFESYMBOL_attrsADJUSTS
-                   | FFESYMBOL_attrsARRAY
-                   | FFESYMBOL_attrsCOMMON
-                   | FFESYMBOL_attrsEQUIV
-                   | FFESYMBOL_attrsINIT
-                   | FFESYMBOL_attrsNAMELIST
-                   | FFESYMBOL_attrsSAVE
-                   | FFESYMBOL_attrsSFARG
-                   | FFESYMBOL_attrsTYPE)))
-    na = sa | FFESYMBOL_attrsNAMELIST;
-  else
-    na = FFESYMBOL_attrsetNONE;
-
-  /* Now see what we've got for a new object: NONE means a new error cropped
-     up; ANY means an old error to be ignored; otherwise, everything's ok,
-     update the object (symbol) and continue on. */
-
-  if (na == FFESYMBOL_attrsetNONE)
-    ffesymbol_error (s, name);
-  else if (!(na & FFESYMBOL_attrsANY))
-    {
-      ffesymbol_set_attrs (s, na);
-      if (ffesymbol_state (s) == FFESYMBOL_stateNONE)
-       ffesymbol_set_state (s, FFESYMBOL_stateSEEN);
-      ffesymbol_set_namelisted (s, TRUE);
-      ffesymbol_signal_unreported (s);
-#if 0                          /* No need to establish type yet! */
-      if (!ffeimplic_establish_symbol (s))
-       ffesymbol_error (s, name);
-#endif
-    }
-
-  if (ffestc_parent_ok_)
-    {
-      e = ffebld_new_symter (s, FFEINTRIN_genNONE, FFEINTRIN_specNONE,
-                            FFEINTRIN_impNONE);
-      ffebld_set_info (e,
-                      ffeinfo_new (FFEINFO_basictypeNONE,
-                                   FFEINFO_kindtypeNONE, 0,
-                                   FFEINFO_kindNONE,
-                                   FFEINFO_whereNONE,
-                                   FFETARGET_charactersizeNONE));
-      ffebld_append_item
-       (ffesymbol_ptr_to_listbottom (ffestc_local_.namelist.symbol), e);
-    }
-
-  ffestd_R542_item_nitem (name);
-}
-
-/* ffestc_R542_finish -- NAMELIST statement list complete
-
-   ffestc_R542_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R542_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffesymbol_signal_unreported (ffestc_local_.namelist.symbol);
-
-  ffestd_R542_finish ();
-}
-
-/* ffestc_R544_start -- EQUIVALENCE statement list begin
-
-   ffestc_R544_start();
-
-   Verify that EQUIVALENCE is valid here, and begin accepting items in the
-   list.  */
-
-void
-ffestc_R544_start ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_blockspec_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R544_item -- EQUIVALENCE statement assignment
-
-   ffestc_R544_item(exprlist);
-
-   Make sure the equivalence is valid, then implement it.  */
-
-void
-ffestc_R544_item (ffesttExprList exprlist)
-{
-  ffestc_check_item_ ();
-  if (!ffestc_ok_)
-    return;
-
-  /* First we go through the list and come up with one ffeequiv object that
-     will describe all items in the list.  When an ffeequiv object is first
-     found, it is used (else we create one as a "local equiv" for the time
-     being).  If subsequent ffeequiv objects are found, they are merged with
-     the first so we end up with one.  However, if more than one COMMON
-     variable is involved, then an error condition occurs. */
-
-  ffestc_local_.equiv.ok = TRUE;
-  ffestc_local_.equiv.t = NULL;        /* No token yet. */
-  ffestc_local_.equiv.eq = NULL;/* No equiv yet. */
-  ffestc_local_.equiv.save = FALSE;    /* No SAVEd variables yet. */
-
-  ffebld_init_list (&ffestc_local_.equiv.list, &ffestc_local_.equiv.bottom);
-  ffestt_exprlist_drive (exprlist, ffestc_R544_equiv_);        /* Get one equiv. */
-  ffebld_end_list (&ffestc_local_.equiv.bottom);
-
-  if (!ffestc_local_.equiv.ok)
-    return;                    /* Something went wrong, stop bothering with
-                                  this stuff. */
-
-  if (ffestc_local_.equiv.eq == NULL)
-    ffestc_local_.equiv.eq = ffeequiv_new ();  /* Make local equivalence. */
-
-  /* Append this list of equivalences to list of such lists for this
-     equivalence. */
-
-  ffeequiv_add (ffestc_local_.equiv.eq, ffestc_local_.equiv.list,
-               ffestc_local_.equiv.t);
-  if (ffestc_local_.equiv.save)
-    ffeequiv_update_save (ffestc_local_.equiv.eq);
-}
-
-/* ffestc_R544_equiv_ -- EQUIVALENCE statement handler for item in list
-
-   ffebld expr;
-   ffelexToken t;
-   ffestc_R544_equiv_(expr,t);
-
-   Record information, if any, on symbol in expr; if symbol has equivalence
-   object already, merge with outstanding object if present or make it
-   the outstanding object.  */
-
-static void
-ffestc_R544_equiv_ (ffebld expr, ffelexToken t)
-{
-  ffesymbol s;
-
-  if (!ffestc_local_.equiv.ok)
-    return;
-
-  if (ffestc_local_.equiv.t == NULL)
-    ffestc_local_.equiv.t = t;
-
-  switch (ffebld_op (expr))
-    {
-    case FFEBLD_opANY:
-      return;                  /* Don't put this on the list. */
-
-    case FFEBLD_opSYMTER:
-    case FFEBLD_opARRAYREF:
-    case FFEBLD_opSUBSTR:
-      break;                   /* All of these are ok. */
-
-    default:
-      assert ("ffestc_R544_equiv_ bad op" == NULL);
-      return;
-    }
-
-  ffebld_append_item (&ffestc_local_.equiv.bottom, expr);
-
-  s = ffeequiv_symbol (expr);
-
-  /* See if symbol has an equivalence object already. */
-
-  if (ffesymbol_equiv (s) != NULL)
-    {
-      if (ffestc_local_.equiv.eq == NULL)
-       ffestc_local_.equiv.eq = ffesymbol_equiv (s);   /* New equiv obj. */
-      else if (ffestc_local_.equiv.eq != ffesymbol_equiv (s))
-       {
-         ffestc_local_.equiv.eq = ffeequiv_merge (ffesymbol_equiv (s),
-                                                  ffestc_local_.equiv.eq,
-                                                  t);
-         if (ffestc_local_.equiv.eq == NULL)
-           ffestc_local_.equiv.ok = FALSE;     /* Couldn't merge. */
-       }
-    }
-
-  if (ffesymbol_is_save (s))
-    ffestc_local_.equiv.save = TRUE;
-}
-
-/* ffestc_R544_finish -- EQUIVALENCE statement list complete
-
-   ffestc_R544_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R544_finish ()
-{
-  ffestc_check_finish_ ();
-}
-
-/* ffestc_R547_start -- COMMON statement list begin
-
-   ffestc_R547_start();
-
-   Verify that COMMON is valid here, and begin accepting items in the list.  */
-
-void
-ffestc_R547_start ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_blockspec_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  ffestc_local_.common.symbol = NULL;  /* Blank common is the default. */
-  ffestc_parent_ok_ = TRUE;
-
-  ffestd_R547_start ();
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R547_item_object -- COMMON statement for object-name
-
-   ffestc_R547_item_object(name_token,dim_list);
-
-   Make sure name_token identifies a valid object to be COMMONd.  */
-
-void
-ffestc_R547_item_object (ffelexToken name, ffesttDimList dims)
-{
-  ffesymbol s;
-  ffebld array_size;
-  ffebld extents;
-  ffesymbolAttrs sa;
-  ffesymbolAttrs na;
-  ffestpDimtype nd;
-  ffebld e;
-  ffeinfoRank rank;
-  bool is_ugly_assumed;
-
-  if (ffestc_parent_ok_ && (ffestc_local_.common.symbol == NULL))
-    ffestc_R547_item_cblock (NULL);    /* As if "COMMON [//] ...". */
-
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  if (dims != NULL)
-    ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-
-  s = ffesymbol_declare_local (name, FALSE);
-  sa = ffesymbol_attrs (s);
-
-  /* First figure out what kind of object this is based solely on the current
-     object situation (dimension list). */
-
-  is_ugly_assumed = (ffe_is_ugly_assumed ()
-                    && ((sa & FFESYMBOL_attrsDUMMY)
-                        || (ffesymbol_where (s) == FFEINFO_whereDUMMY)));
-
-  nd = ffestt_dimlist_type (dims, is_ugly_assumed);
-  switch (nd)
-    {
-    case FFESTP_dimtypeNONE:
-      na = FFESYMBOL_attrsCOMMON;
-      break;
-
-    case FFESTP_dimtypeKNOWN:
-      na = FFESYMBOL_attrsCOMMON | FFESYMBOL_attrsARRAY;
-      break;
-
-    default:
-      na = FFESYMBOL_attrsetNONE;
-      break;
-    }
-
-  /* Figure out what kind of object we've got based on previous declarations
-     of or references to the object. */
-
-  if (na == FFESYMBOL_attrsetNONE)
-    ;
-  else if (!ffesymbol_is_specable (s))
-    na = FFESYMBOL_attrsetNONE;        /* Can't dcl sym ref'd in sfuncdef. */
-  else if (sa & FFESYMBOL_attrsANY)
-    na = FFESYMBOL_attrsANY;
-  else if ((sa & (FFESYMBOL_attrsADJUSTS
-                 | FFESYMBOL_attrsARRAY
-                 | FFESYMBOL_attrsINIT
-                 | FFESYMBOL_attrsSFARG))
-          && (na & FFESYMBOL_attrsARRAY))
-    na = FFESYMBOL_attrsetNONE;
-  else if (!(sa & ~(FFESYMBOL_attrsADJUSTS
-                   | FFESYMBOL_attrsARRAY
-                   | FFESYMBOL_attrsEQUIV
-                   | FFESYMBOL_attrsINIT
-                   | FFESYMBOL_attrsNAMELIST
-                   | FFESYMBOL_attrsSFARG
-                   | FFESYMBOL_attrsTYPE)))
-    na |= sa;
-  else
-    na = FFESYMBOL_attrsetNONE;
-
-  /* Now see what we've got for a new object: NONE means a new error cropped
-     up; ANY means an old error to be ignored; otherwise, everything's ok,
-     update the object (symbol) and continue on. */
-
-  if (na == FFESYMBOL_attrsetNONE)
-    ffesymbol_error (s, name);
-  else if ((ffesymbol_equiv (s) != NULL)
-          && (ffeequiv_common (ffesymbol_equiv (s)) != NULL)
-          && (ffeequiv_common (ffesymbol_equiv (s))
-              != ffestc_local_.common.symbol))
-    {
-      /* Oops, just COMMONed a symbol to a different area (via equiv).  */
-      ffebad_start (FFEBAD_EQUIV_COMMON);
-      ffebad_here (0, ffelex_token_where_line (name),
-                  ffelex_token_where_column (name));
-      ffebad_string (ffesymbol_text (ffestc_local_.common.symbol));
-      ffebad_string (ffesymbol_text (ffeequiv_common (ffesymbol_equiv (s))));
-      ffebad_finish ();
-      ffesymbol_set_attr (s, na | FFESYMBOL_attrANY);
-      ffesymbol_set_info (s, ffeinfo_new_any ());
-      ffesymbol_set_state (s, FFESYMBOL_stateUNDERSTOOD);
-      ffesymbol_signal_unreported (s);
-    }
-  else if (!(na & FFESYMBOL_attrsANY))
-    {
-      ffesymbol_set_attrs (s, na);
-      ffesymbol_set_state (s, FFESYMBOL_stateSEEN);
-      ffesymbol_set_common (s, ffestc_local_.common.symbol);
-#if FFEGLOBAL_ENABLED
-      if (ffesymbol_is_init (s))
-       ffeglobal_init_common (ffestc_local_.common.symbol, name);
-#endif
-      if (ffesymbol_is_save (ffestc_local_.common.symbol))
-       ffesymbol_update_save (s);
-      if (ffesymbol_equiv (s) != NULL)
-       {                       /* Is this newly COMMONed symbol involved in
-                                  an equivalence? */
-         if (ffeequiv_common (ffesymbol_equiv (s)) == NULL)
-           ffeequiv_set_common (ffesymbol_equiv (s),   /* Yes, tell equiv obj. */
-                                ffestc_local_.common.symbol);
-#if FFEGLOBAL_ENABLED
-         if (ffeequiv_is_init (ffesymbol_equiv (s)))
-           ffeglobal_init_common (ffestc_local_.common.symbol, name);
-#endif
-         if (ffesymbol_is_save (ffestc_local_.common.symbol))
-           ffeequiv_update_save (ffesymbol_equiv (s));
-       }
-      if (dims != NULL)
-       {
-         ffesymbol_set_dims (s, ffestt_dimlist_as_expr (dims, &rank,
-                                                        &array_size,
-                                                        &extents,
-                                                        is_ugly_assumed));
-         ffesymbol_set_arraysize (s, array_size);
-         ffesymbol_set_extents (s, extents);
-         if (!(0 && ffe_is_90 ())
-             && (ffebld_op (array_size) == FFEBLD_opCONTER)
-             && (ffebld_constant_integerdefault (ffebld_conter (array_size))
-                 == 0))
-           {
-             ffebad_start (FFEBAD_ZERO_ARRAY);
-             ffebad_here (0, ffelex_token_where_line (name),
-                          ffelex_token_where_column (name));
-             ffebad_finish ();
-           }
-         ffesymbol_set_info (s,
-                             ffeinfo_new (ffesymbol_basictype (s),
-                                          ffesymbol_kindtype (s),
-                                          rank,
-                                          ffesymbol_kind (s),
-                                          ffesymbol_where (s),
-                                          ffesymbol_size (s)));
-       }
-      ffesymbol_signal_unreported (s);
-    }
-
-  if (ffestc_parent_ok_)
-    {
-      e = ffebld_new_symter (s, FFEINTRIN_genNONE, FFEINTRIN_specNONE,
-                            FFEINTRIN_impNONE);
-      ffebld_set_info (e,
-                      ffeinfo_new (FFEINFO_basictypeNONE,
-                                   FFEINFO_kindtypeNONE,
-                                   0,
-                                   FFEINFO_kindNONE,
-                                   FFEINFO_whereNONE,
-                                   FFETARGET_charactersizeNONE));
-      ffebld_append_item
-       (ffesymbol_ptr_to_listbottom (ffestc_local_.common.symbol), e);
-    }
-
-  ffestd_R547_item_object (name, dims);
-}
-
-/* ffestc_R547_item_cblock -- COMMON statement for common-block-name
-
-   ffestc_R547_item_cblock(name_token);
-
-   Make sure name_token identifies a valid common block to be COMMONd. */
-
-void
-ffestc_R547_item_cblock (ffelexToken name)
-{
-  ffesymbol s;
-  ffesymbolAttrs sa;
-  ffesymbolAttrs na;
-
-  ffestc_check_item_ ();
-  if (!ffestc_ok_)
-    return;
-
-  if (ffestc_local_.common.symbol != NULL)
-    ffesymbol_signal_unreported (ffestc_local_.common.symbol);
-
-  s = ffesymbol_declare_cblock (name,
-                               ffelex_token_where_line (ffesta_tokens[0]),
-                             ffelex_token_where_column (ffesta_tokens[0]));
-  sa = ffesymbol_attrs (s);
-
-  /* Figure out what kind of object we've got based on previous declarations
-     of or references to the object. */
-
-  if (!ffesymbol_is_specable (s))
-    na = FFESYMBOL_attrsetNONE;
-  else if (sa & FFESYMBOL_attrsANY)
-    na = FFESYMBOL_attrsANY;   /* Already have an error here, say nothing. */
-  else if (!(sa & ~(FFESYMBOL_attrsCBLOCK
-                   | FFESYMBOL_attrsSAVECBLOCK)))
-    {
-      if (!(sa & FFESYMBOL_attrsCBLOCK))
-       ffebld_init_list (ffesymbol_ptr_to_commonlist (s),
-                         ffesymbol_ptr_to_listbottom (s));
-      na = sa | FFESYMBOL_attrsCBLOCK;
-    }
-  else
-    na = FFESYMBOL_attrsetNONE;
-
-  /* Now see what we've got for a new object: NONE means a new error cropped
-     up; ANY means an old error to be ignored; otherwise, everything's ok,
-     update the object (symbol) and continue on. */
-
-  if (na == FFESYMBOL_attrsetNONE)
-    {
-      ffesymbol_error (s, name == NULL ? ffesta_tokens[0] : name);
-      ffestc_parent_ok_ = FALSE;
-    }
-  else if (na & FFESYMBOL_attrsANY)
-    ffestc_parent_ok_ = FALSE;
-  else
-    {
-      ffesymbol_set_attrs (s, na);
-      ffesymbol_set_state (s, FFESYMBOL_stateSEEN);
-      if (name == NULL)
-       ffesymbol_update_save (s);
-      ffestc_parent_ok_ = TRUE;
-    }
-
-  ffestc_local_.common.symbol = s;
-
-  ffestd_R547_item_cblock (name);
-}
-
-/* ffestc_R547_finish -- COMMON statement list complete
-
-   ffestc_R547_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R547_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  if (ffestc_local_.common.symbol != NULL)
-    ffesymbol_signal_unreported (ffestc_local_.common.symbol);
-
-  ffestd_R547_finish ();
-}
-
-/* ffestc_R620 -- ALLOCATE statement
-
-   ffestc_R620(exprlist,stat,stat_token);
-
-   Make sure the expression list is valid, then implement it.  */
-
-#if FFESTR_F90
-void
-ffestc_R620 (ffesttExprList exprlist, ffebld stat, ffelexToken stat_token)
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  ffestd_R620 (exprlist, stat);
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R624 -- NULLIFY statement
-
-   ffestc_R624(pointer_name_list);
-
-   Make sure pointer_name_list identifies valid pointers for a NULLIFY.         */
-
-void
-ffestc_R624 (ffesttExprList pointers)
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  ffestd_R624 (pointers);
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R625 -- DEALLOCATE statement
-
-   ffestc_R625(exprlist,stat,stat_token);
-
-   Make sure the equivalence is valid, then implement it.  */
-
-void
-ffestc_R625 (ffesttExprList exprlist, ffebld stat, ffelexToken stat_token)
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  ffestd_R625 (exprlist, stat);
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-#endif
-/* ffestc_let -- R1213 or R737
-
-   ffestc_let(...);
-
-   Verify that R1213 defined-assignment or R737 assignment-stmt are
-   valid here, figure out which one, and implement.  */
-
-#if FFESTR_F90
-void
-ffestc_let (ffebld dest, ffebld source, ffelexToken source_token)
-{
-  ffestc_R737 (dest, source, source_token);
-}
-
-#endif
-/* ffestc_R737 -- Assignment statement
-
-   ffestc_R737(dest_expr,source_expr,source_token);
-
-   Make sure the assignment is valid.  */
-
-void
-ffestc_R737 (ffebld dest, ffebld source, ffelexToken source_token)
-{
-  ffestc_check_simple_ ();
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-#if FFESTR_F90
-    case FFESTV_stateWHERE:
-    case FFESTV_stateWHERETHEN:
-      if (ffestc_order_actionwhere_ () != FFESTC_orderOK_)
-       return;
-      ffestc_labeldef_useless_ ();
-
-      ffestd_R737B (dest, source);
-
-      if (ffestc_shriek_after1_ != NULL)
-       (*ffestc_shriek_after1_) (TRUE);
-      return;
-#endif
-
-    default:
-      break;
-    }
-
-  if (ffestc_order_actionwhere_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  source = ffeexpr_convert_expr (source, source_token, dest, ffesta_tokens[0],
-                                FFEEXPR_contextLET);
-
-  ffestd_R737A (dest, source);
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R738 -- Pointer assignment statement
-
-   ffestc_R738(dest_expr,source_expr,source_token);
-
-   Make sure the assignment is valid.  */
-
-#if FFESTR_F90
-void
-ffestc_R738 (ffebld dest, ffebld source, ffelexToken source_token)
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  ffestd_R738 (dest, source);
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R740 -- WHERE statement
-
-   ffestc_R740(expr,expr_token);
-
-   Make sure statement is valid here; implement.  */
-
-void
-ffestc_R740 (ffebld expr, ffelexToken expr_token)
-{
-  ffestw b;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  b = ffestw_update (ffestw_push (NULL));
-  ffestw_set_top_do (b, ffestw_top_do (ffestw_previous (b)));
-  ffestw_set_state (b, FFESTV_stateWHERE);
-  ffestw_set_blocknum (b, ffestc_blocknum_++);
-  ffestw_set_shriek (b, ffestc_shriek_where_lost_);
-
-  ffestd_R740 (expr);
-
-  /* Leave label finishing to next statement. */
-
-}
-
-/* ffestc_R742 -- WHERE-construct statement
-
-   ffestc_R742(expr,expr_token);
-
-   Make sure statement is valid here; implement.  */
-
-void
-ffestc_R742 (ffebld expr, ffelexToken expr_token)
-{
-  ffestw b;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_exec_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_notloop_probably_this_wont_work_ ();
-
-  b = ffestw_update (ffestw_push (NULL));
-  ffestw_set_top_do (b, ffestw_top_do (ffestw_previous (b)));
-  ffestw_set_state (b, FFESTV_stateWHERETHEN);
-  ffestw_set_blocknum (b, ffestc_blocknum_++);
-  ffestw_set_shriek (b, ffestc_shriek_wherethen_);
-  ffestw_set_substate (b, 0);  /* Haven't seen ELSEWHERE yet. */
-
-  ffestd_R742 (expr);
-}
-
-/* ffestc_R744 -- ELSE WHERE statement
-
-   ffestc_R744();
-
-   Make sure ffestc_kind_ identifies a WHERE block.
-   Implement the ELSE of the current WHERE block.  */
-
-void
-ffestc_R744 ()
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_where_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  if (ffestw_substate (ffestw_stack_top ()) != 0)
-    {
-      ffebad_start (FFEBAD_SECOND_ELSE_WHERE);
-      ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-      ffebad_finish ();
-    }
-
-  ffestw_set_substate (ffestw_stack_top (), 1);        /* Saw ELSEWHERE. */
-
-  ffestd_R744 ();
-}
-
-/* ffestc_R745 -- END WHERE statement
-
-   ffestc_R745();
-
-   Make sure ffestc_kind_ identifies a WHERE block.
-   Implement the end of the current WHERE block.  */
-
-void
-ffestc_R745 ()
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_where_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  ffestc_shriek_wherethen_ (TRUE);
-}
-
-#endif
-/* ffestc_R803 -- Block IF (IF-THEN) statement
-
-   ffestc_R803(construct_name,expr,expr_token);
-
-   Make sure statement is valid here; implement.  */
-
-void
-ffestc_R803 (ffelexToken construct_name, ffebld expr,
-            ffelexToken expr_token UNUSED)
-{
-  ffestw b;
-  ffesymbol s;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_exec_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_notloop_ ();
-
-  b = ffestw_update (ffestw_push (NULL));
-  ffestw_set_top_do (b, ffestw_top_do (ffestw_previous (b)));
-  ffestw_set_state (b, FFESTV_stateIFTHEN);
-  ffestw_set_blocknum (b, ffestc_blocknum_++);
-  ffestw_set_shriek (b, ffestc_shriek_ifthen_);
-  ffestw_set_substate (b, 0);  /* Haven't seen ELSE yet. */
-
-  if (construct_name == NULL)
-    ffestw_set_name (b, NULL);
-  else
-    {
-      ffestw_set_name (b, ffelex_token_use (construct_name));
-
-      s = ffesymbol_declare_local (construct_name, FALSE);
-
-      if (ffesymbol_state (s) == FFESYMBOL_stateNONE)
-       {
-         ffesymbol_set_state (s, FFESYMBOL_stateUNDERSTOOD);
-         ffesymbol_set_info (s,
-                             ffeinfo_new (FFEINFO_basictypeNONE,
-                                          FFEINFO_kindtypeNONE,
-                                          0,
-                                          FFEINFO_kindCONSTRUCT,
-                                          FFEINFO_whereLOCAL,
-                                          FFETARGET_charactersizeNONE));
-         s = ffecom_sym_learned (s);
-         ffesymbol_signal_unreported (s);
-       }
-      else
-       ffesymbol_error (s, construct_name);
-    }
-
-  ffestd_R803 (construct_name, expr);
-}
-
-/* ffestc_R804 -- ELSE IF statement
-
-   ffestc_R804(expr,expr_token,name_token);
-
-   Make sure ffestc_kind_ identifies an IF block.  If not
-   NULL, make sure name_token gives the correct name.  Implement the else
-   of the IF block.  */
-
-void
-ffestc_R804 (ffebld expr, ffelexToken expr_token UNUSED,
-            ffelexToken name)
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_ifthen_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  if (name != NULL)
-    {
-      if (ffestw_name (ffestw_stack_top ()) == NULL)
-       {
-         ffebad_start (FFEBAD_CONSTRUCT_NOT_NAMED);
-         ffebad_here (0, ffelex_token_where_line (name),
-                      ffelex_token_where_column (name));
-         ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-         ffebad_finish ();
-       }
-      else if (ffelex_token_strcmp (name,
-                                   ffestw_name (ffestw_stack_top ()))
-              != 0)
-       {
-         ffebad_start (FFEBAD_CONSTRUCT_WRONG_NAME);
-         ffebad_here (0, ffelex_token_where_line (name),
-                      ffelex_token_where_column (name));
-         ffebad_here (1, ffelex_token_where_line (ffestw_name (ffestw_stack_top ())),
-            ffelex_token_where_column (ffestw_name (ffestw_stack_top ())));
-         ffebad_finish ();
-       }
-    }
-
-  if (ffestw_substate (ffestw_stack_top ()) != 0)
-    {
-      ffebad_start (FFEBAD_AFTER_ELSE);
-      ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-      ffebad_finish ();
-      return;                  /* Don't upset back end with ELSEIF
-                                  after ELSE. */
-    }
-
-  ffestd_R804 (expr, name);
-}
-
-/* ffestc_R805 -- ELSE statement
-
-   ffestc_R805(name_token);
-
-   Make sure ffestc_kind_ identifies an IF block.  If not
-   NULL, make sure name_token gives the correct name.  Implement the ELSE
-   of the IF block.  */
-
-void
-ffestc_R805 (ffelexToken name)
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_ifthen_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  if (name != NULL)
-    {
-      if (ffestw_name (ffestw_stack_top ()) == NULL)
-       {
-         ffebad_start (FFEBAD_CONSTRUCT_NOT_NAMED);
-         ffebad_here (0, ffelex_token_where_line (name),
-                      ffelex_token_where_column (name));
-         ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-         ffebad_finish ();
-       }
-      else if (ffelex_token_strcmp (name, ffestw_name (ffestw_stack_top ())) != 0)
-       {
-         ffebad_start (FFEBAD_CONSTRUCT_WRONG_NAME);
-         ffebad_here (0, ffelex_token_where_line (name),
-                      ffelex_token_where_column (name));
-         ffebad_here (1, ffelex_token_where_line (ffestw_name (ffestw_stack_top ())),
-            ffelex_token_where_column (ffestw_name (ffestw_stack_top ())));
-         ffebad_finish ();
-       }
-    }
-
-  if (ffestw_substate (ffestw_stack_top ()) != 0)
-    {
-      ffebad_start (FFEBAD_AFTER_ELSE);
-      ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-      ffebad_finish ();
-      return;                  /* Tell back end about only one ELSE. */
-    }
-
-  ffestw_set_substate (ffestw_stack_top (), 1);        /* Saw ELSE. */
-
-  ffestd_R805 (name);
-}
-
-/* ffestc_R806 -- END IF statement
-
-   ffestc_R806(name_token);
-
-   Make sure ffestc_kind_ identifies an IF block.  If not
-   NULL, make sure name_token gives the correct name.  Implement the end
-   of the IF block.  */
-
-void
-ffestc_R806 (ffelexToken name)
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_ifthen_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_endif_ ();
-
-  if (name == NULL)
-    {
-      if (ffestw_name (ffestw_stack_top ()) != NULL)
-       {
-         ffebad_start (FFEBAD_CONSTRUCT_NAMED);
-         ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                      ffelex_token_where_column (ffesta_tokens[0]));
-         ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-         ffebad_finish ();
-       }
-    }
-  else
-    {
-      if (ffestw_name (ffestw_stack_top ()) == NULL)
-       {
-         ffebad_start (FFEBAD_CONSTRUCT_NOT_NAMED);
-         ffebad_here (0, ffelex_token_where_line (name),
-                      ffelex_token_where_column (name));
-         ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-         ffebad_finish ();
-       }
-      else if (ffelex_token_strcmp (name, ffestw_name (ffestw_stack_top ())) != 0)
-       {
-         ffebad_start (FFEBAD_CONSTRUCT_WRONG_NAME);
-         ffebad_here (0, ffelex_token_where_line (name),
-                      ffelex_token_where_column (name));
-         ffebad_here (1, ffelex_token_where_line (ffestw_name (ffestw_stack_top ())),
-            ffelex_token_where_column (ffestw_name (ffestw_stack_top ())));
-         ffebad_finish ();
-       }
-    }
-
-  ffestc_shriek_ifthen_ (TRUE);
-}
-
-/* ffestc_R807 -- Logical IF statement
-
-   ffestc_R807(expr,expr_token);
-
-   Make sure statement is valid here; implement.  */
-
-void
-ffestc_R807 (ffebld expr, ffelexToken expr_token UNUSED)
-{
-  ffestw b;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_action_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  b = ffestw_update (ffestw_push (NULL));
-  ffestw_set_top_do (b, ffestw_top_do (ffestw_previous (b)));
-  ffestw_set_state (b, FFESTV_stateIF);
-  ffestw_set_blocknum (b, ffestc_blocknum_++);
-  ffestw_set_shriek (b, ffestc_shriek_if_lost_);
-
-  ffestd_R807 (expr);
-
-  /* Do the label finishing in the next statement. */
-
-}
-
-/* ffestc_R809 -- SELECT CASE statement
-
-   ffestc_R809(construct_name,expr,expr_token);
-
-   Make sure statement is valid here; implement.  */
-
-void
-ffestc_R809 (ffelexToken construct_name, ffebld expr, ffelexToken expr_token)
-{
-  ffestw b;
-  mallocPool pool;
-  ffestwSelect s;
-  ffesymbol sym;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_exec_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_notloop_ ();
-
-  b = ffestw_update (ffestw_push (NULL));
-  ffestw_set_top_do (b, ffestw_top_do (ffestw_previous (b)));
-  ffestw_set_state (b, FFESTV_stateSELECT0);
-  ffestw_set_blocknum (b, ffestc_blocknum_++);
-  ffestw_set_shriek (b, ffestc_shriek_select_);
-  ffestw_set_substate (b, 0);  /* Haven't seen CASE DEFAULT yet. */
-
-  /* Init block to manage CASE list. */
-
-  pool = malloc_pool_new ("Select", ffe_pool_any_unit (), 1024);
-  s = (ffestwSelect) malloc_new_kp (pool, "Select", sizeof (*s));
-  s->first_rel = (ffestwCase) &s->first_rel;
-  s->last_rel = (ffestwCase) &s->first_rel;
-  s->first_stmt = (ffestwCase) &s->first_rel;
-  s->last_stmt = (ffestwCase) &s->first_rel;
-  s->pool = pool;
-  s->cases = 1;
-  s->t = ffelex_token_use (expr_token);
-  s->type = ffeinfo_basictype (ffebld_info (expr));
-  s->kindtype = ffeinfo_kindtype (ffebld_info (expr));
-  ffestw_set_select (b, s);
-
-  if (construct_name == NULL)
-    ffestw_set_name (b, NULL);
-  else
-    {
-      ffestw_set_name (b, ffelex_token_use (construct_name));
-
-      sym = ffesymbol_declare_local (construct_name, FALSE);
-
-      if (ffesymbol_state (sym) == FFESYMBOL_stateNONE)
-       {
-         ffesymbol_set_state (sym, FFESYMBOL_stateUNDERSTOOD);
-         ffesymbol_set_info (sym,
-                             ffeinfo_new (FFEINFO_basictypeNONE,
-                                          FFEINFO_kindtypeNONE, 0,
-                                          FFEINFO_kindCONSTRUCT,
-                                          FFEINFO_whereLOCAL,
-                                          FFETARGET_charactersizeNONE));
-         sym = ffecom_sym_learned (sym);
-         ffesymbol_signal_unreported (sym);
-       }
-      else
-       ffesymbol_error (sym, construct_name);
-    }
-
-  ffestd_R809 (construct_name, expr);
-}
-
-/* ffestc_R810 -- CASE statement
-
-   ffestc_R810(case_value_range_list,name);
-
-   If case_value_range_list is NULL, it's CASE DEFAULT.         name is the case-
-   construct-name.  Make sure no more than one CASE DEFAULT is present for
-   a given case-construct and that there aren't any overlapping ranges or
-   duplicate case values.  */
-
-void
-ffestc_R810 (ffesttCaseList cases, ffelexToken name)
-{
-  ffesttCaseList caseobj;
-  ffestwSelect s;
-  ffestwCase c, nc;
-  ffebldConstant expr1c, expr2c;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_selectcase_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  s = ffestw_select (ffestw_stack_top ());
-
-  if (ffestw_state (ffestw_stack_top ()) == FFESTV_stateSELECT0)
-    {
-#if 0                          /* Not sure we want to have msgs point here
-                                  instead of SELECT CASE. */
-      ffestw_update (NULL);    /* Update state line/col info. */
-#endif
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateSELECT1);
-    }
-
-  if (name != NULL)
-    {
-      if (ffestw_name (ffestw_stack_top ()) == NULL)
-       {
-         ffebad_start (FFEBAD_CONSTRUCT_NOT_NAMED);
-         ffebad_here (0, ffelex_token_where_line (name),
-                      ffelex_token_where_column (name));
-         ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-         ffebad_finish ();
-       }
-      else if (ffelex_token_strcmp (name,
-                                   ffestw_name (ffestw_stack_top ()))
-              != 0)
-       {
-         ffebad_start (FFEBAD_CONSTRUCT_WRONG_NAME);
-         ffebad_here (0, ffelex_token_where_line (name),
-                      ffelex_token_where_column (name));
-         ffebad_here (1, ffelex_token_where_line (ffestw_name (ffestw_stack_top ())),
-            ffelex_token_where_column (ffestw_name (ffestw_stack_top ())));
-         ffebad_finish ();
-       }
-    }
-
-  if (cases == NULL)
-    {
-      if (ffestw_substate (ffestw_stack_top ()) != 0)
-       {
-         ffebad_start (FFEBAD_CASE_SECOND_DEFAULT);
-         ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                      ffelex_token_where_column (ffesta_tokens[0]));
-         ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-         ffebad_finish ();
-       }
-
-      ffestw_set_substate (ffestw_stack_top (), 1);    /* Saw ELSE. */
-    }
-  else
-    {                          /* For each case, try to fit into sorted list
-                                  of ranges. */
-      for (caseobj = cases->next; caseobj != cases; caseobj = caseobj->next)
-       {
-         if ((caseobj->expr1 == NULL)
-             && (!caseobj->range
-                 || (caseobj->expr2 == NULL)))
-           {                   /* "CASE (:)". */
-             ffebad_start (FFEBAD_CASE_BAD_RANGE);
-             ffebad_here (0, ffelex_token_where_line (caseobj->t),
-                          ffelex_token_where_column (caseobj->t));
-             ffebad_finish ();
-             continue;
-           }
-
-         if (((caseobj->expr1 != NULL)
-              && ((ffeinfo_basictype (ffebld_info (caseobj->expr1))
-                   != s->type)
-                  || (ffeinfo_kindtype (ffebld_info (caseobj->expr1))
-                      != s->kindtype)))
-             || ((caseobj->range)
-                 && (caseobj->expr2 != NULL)
-                 && ((ffeinfo_basictype (ffebld_info (caseobj->expr2))
-                      != s->type)
-                     || (ffeinfo_kindtype (ffebld_info (caseobj->expr2))
-                         != s->kindtype))))
-           {
-             ffebad_start (FFEBAD_CASE_TYPE_DISAGREE);
-             ffebad_here (0, ffelex_token_where_line (caseobj->t),
-                          ffelex_token_where_column (caseobj->t));
-             ffebad_here (1, ffelex_token_where_line (s->t),
-                          ffelex_token_where_column (s->t));
-             ffebad_finish ();
-             continue;
-           }
-
-         if ((s->type == FFEINFO_basictypeLOGICAL) && (caseobj->range))
-           {
-             ffebad_start (FFEBAD_CASE_LOGICAL_RANGE);
-             ffebad_here (0, ffelex_token_where_line (caseobj->t),
-                          ffelex_token_where_column (caseobj->t));
-             ffebad_finish ();
-             continue;
-           }
-
-         if (caseobj->expr1 == NULL)
-           expr1c = NULL;
-         else if (ffebld_op (caseobj->expr1) != FFEBLD_opCONTER)
-           continue;           /* opANY. */
-         else
-           expr1c = ffebld_conter (caseobj->expr1);
-
-         if (!caseobj->range)
-           expr2c = expr1c;    /* expr1c and expr2c are NOT NULL in this
-                                  case. */
-         else if (caseobj->expr2 == NULL)
-           expr2c = NULL;
-         else if (ffebld_op (caseobj->expr2) != FFEBLD_opCONTER)
-           continue;           /* opANY. */
-         else
-           expr2c = ffebld_conter (caseobj->expr2);
-
-         if (expr1c == NULL)
-           {                   /* "CASE (:high)", must be first in list. */
-             c = s->first_rel;
-             if ((c != (ffestwCase) &s->first_rel)
-                 && ((c->low == NULL)
-                     || (ffebld_constant_cmp (expr2c, c->low) >= 0)))
-               {               /* Other "CASE (:high)" or lowest "CASE
-                                  (low[:high])" low. */
-                 ffebad_start (FFEBAD_CASE_DUPLICATE);
-                 ffebad_here (0, ffelex_token_where_line (caseobj->t),
-                              ffelex_token_where_column (caseobj->t));
-                 ffebad_here (1, ffelex_token_where_line (c->t),
-                              ffelex_token_where_column (c->t));
-                 ffebad_finish ();
-                 continue;
-               }
-           }
-         else if (expr2c == NULL)
-           {                   /* "CASE (low:)", must be last in list. */
-             c = s->last_rel;
-             if ((c != (ffestwCase) &s->first_rel)
-                 && ((c->high == NULL)
-                     || (ffebld_constant_cmp (expr1c, c->high) <= 0)))
-               {               /* Other "CASE (low:)" or lowest "CASE
-                                  ([low:]high)" high. */
-                 ffebad_start (FFEBAD_CASE_DUPLICATE);
-                 ffebad_here (0, ffelex_token_where_line (caseobj->t),
-                              ffelex_token_where_column (caseobj->t));
-                 ffebad_here (1, ffelex_token_where_line (c->t),
-                              ffelex_token_where_column (c->t));
-                 ffebad_finish ();
-                 continue;
-               }
-             c = c->next_rel;  /* Same as c = (ffestwCase) &s->first;. */
-           }
-         else
-           {                   /* (expr1c != NULL) && (expr2c != NULL). */
-             if (ffebld_constant_cmp (expr1c, expr2c) > 0)
-               {               /* Such as "CASE (3:1)" or "CASE ('B':'A')". */
-                 ffebad_start (FFEBAD_CASE_RANGE_USELESS);     /* Warn/inform only. */
-                 ffebad_here (0, ffelex_token_where_line (caseobj->t),
-                              ffelex_token_where_column (caseobj->t));
-                 ffebad_finish ();
-                 continue;
-               }
-             for (c = s->first_rel;
-                  (c != (ffestwCase) &s->first_rel)
-                  && ((c->low == NULL)
-                      || (ffebld_constant_cmp (expr1c, c->low) > 0));
-                  c = c->next_rel)
-               ;
-             nc = c;           /* Which one to report? */
-             if (((c != (ffestwCase) &s->first_rel)
-                  && (ffebld_constant_cmp (expr2c, c->low) >= 0))
-                 || (((nc = c->previous_rel) != (ffestwCase) &s->first_rel)
-                     && (ffebld_constant_cmp (expr1c, nc->high) <= 0)))
-               {               /* Interference with range in case nc. */
-                 ffebad_start (FFEBAD_CASE_DUPLICATE);
-                 ffebad_here (0, ffelex_token_where_line (caseobj->t),
-                              ffelex_token_where_column (caseobj->t));
-                 ffebad_here (1, ffelex_token_where_line (nc->t),
-                              ffelex_token_where_column (nc->t));
-                 ffebad_finish ();
-                 continue;
-               }
-           }
-
-         /* If we reach here for this case range/value, it's ok (sorts into
-            the list of ranges/values) so we give it its own case object
-            sorted into the list of case statements. */
-
-         nc = malloc_new_kp (s->pool, "Case range", sizeof (*nc));
-         nc->next_rel = c;
-         nc->previous_rel = c->previous_rel;
-         nc->next_stmt = (ffestwCase) &s->first_rel;
-         nc->previous_stmt = s->last_stmt;
-         nc->low = expr1c;
-         nc->high = expr2c;
-         nc->casenum = s->cases;
-         nc->t = ffelex_token_use (caseobj->t);
-         nc->next_rel->previous_rel = nc;
-         nc->previous_rel->next_rel = nc;
-         nc->next_stmt->previous_stmt = nc;
-         nc->previous_stmt->next_stmt = nc;
-       }
-    }
-
-  ffestd_R810 ((cases == NULL) ? 0 : s->cases);
-
-  s->cases++;                  /* Increment # of cases. */
-}
-
-/* ffestc_R811 -- END SELECT statement
-
-   ffestc_R811(name_token);
-
-   Make sure ffestc_kind_ identifies a SELECT block.  If not
-   NULL, make sure name_token gives the correct name.  Implement the end
-   of the SELECT block.         */
-
-void
-ffestc_R811 (ffelexToken name)
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_selectcase_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_notloop_ ();
-
-  if (name == NULL)
-    {
-      if (ffestw_name (ffestw_stack_top ()) != NULL)
-       {
-         ffebad_start (FFEBAD_CONSTRUCT_NAMED);
-         ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                      ffelex_token_where_column (ffesta_tokens[0]));
-         ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-         ffebad_finish ();
-       }
-    }
-  else
-    {
-      if (ffestw_name (ffestw_stack_top ()) == NULL)
-       {
-         ffebad_start (FFEBAD_CONSTRUCT_NOT_NAMED);
-         ffebad_here (0, ffelex_token_where_line (name),
-                      ffelex_token_where_column (name));
-         ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-         ffebad_finish ();
-       }
-      else if (ffelex_token_strcmp (name,
-                                   ffestw_name (ffestw_stack_top ()))
-              != 0)
-       {
-         ffebad_start (FFEBAD_CONSTRUCT_WRONG_NAME);
-         ffebad_here (0, ffelex_token_where_line (name),
-                      ffelex_token_where_column (name));
-         ffebad_here (1, ffelex_token_where_line (ffestw_name (ffestw_stack_top ())),
-            ffelex_token_where_column (ffestw_name (ffestw_stack_top ())));
-         ffebad_finish ();
-       }
-    }
-
-  ffestc_shriek_select_ (TRUE);
-}
-
-/* ffestc_R819A -- Iterative labeled DO statement
-
-   ffestc_R819A(construct_name,label_token,expr,expr_token);
-
-   Make sure statement is valid here; implement.  */
-
-void
-ffestc_R819A (ffelexToken construct_name, ffelexToken label_token, ffebld var,
-   ffelexToken var_token, ffebld start, ffelexToken start_token, ffebld end,
-             ffelexToken end_token, ffebld incr, ffelexToken incr_token)
-{
-  ffestw b;
-  ffelab label;
-  ffesymbol s;
-  ffesymbol varsym;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_exec_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_notloop_ ();
-
-  if (!ffestc_labelref_is_loopend_ (label_token, &label))
-    return;
-
-  b = ffestw_update (ffestw_push (NULL));
-  ffestw_set_top_do (b, b);
-  ffestw_set_state (b, FFESTV_stateDO);
-  ffestw_set_blocknum (b, ffestc_blocknum_++);
-  ffestw_set_shriek (b, ffestc_shriek_do_);
-  ffestw_set_label (b, label);
-  switch (ffebld_op (var))
-    {
-    case FFEBLD_opSYMTER:
-      if ((ffeinfo_basictype (ffebld_info (var)) == FFEINFO_basictypeREAL)
-         && ffe_is_warn_surprising ())
-       {
-         ffebad_start (FFEBAD_DO_REAL);        /* See error message!!! */
-         ffebad_here (0, ffelex_token_where_line (var_token),
-                      ffelex_token_where_column (var_token));
-         ffebad_string (ffesymbol_text (ffebld_symter (var)));
-         ffebad_finish ();
-       }
-      if (!ffesymbol_is_doiter (varsym = ffebld_symter (var)))
-       {                       /* Presumably already complained about by
-                                  ffeexpr_lhs_. */
-         ffesymbol_set_is_doiter (varsym, TRUE);
-         ffestw_set_do_iter_var (b, varsym);
-         ffestw_set_do_iter_var_t (b, ffelex_token_use (var_token));
-         break;
-       }
-      /* Fall through. */
-    case FFEBLD_opANY:
-      ffestw_set_do_iter_var (b, NULL);
-      ffestw_set_do_iter_var_t (b, NULL);
-      break;
-
-    default:
-      assert ("bad iter var" == NULL);
-      break;
-    }
-
-  if (construct_name == NULL)
-    ffestw_set_name (b, NULL);
-  else
-    {
-      ffestw_set_name (b, ffelex_token_use (construct_name));
-
-      s = ffesymbol_declare_local (construct_name, FALSE);
-
-      if (ffesymbol_state (s) == FFESYMBOL_stateNONE)
-       {
-         ffesymbol_set_state (s, FFESYMBOL_stateUNDERSTOOD);
-         ffesymbol_set_info (s,
-                             ffeinfo_new (FFEINFO_basictypeNONE,
-                                          FFEINFO_kindtypeNONE,
-                                          0,
-                                          FFEINFO_kindCONSTRUCT,
-                                          FFEINFO_whereLOCAL,
-                                          FFETARGET_charactersizeNONE));
-         s = ffecom_sym_learned (s);
-         ffesymbol_signal_unreported (s);
-       }
-      else
-       ffesymbol_error (s, construct_name);
-    }
-
-  if (incr == NULL)
-    {
-      incr = ffebld_new_conter (ffebld_constant_new_integerdefault_val (1));
-      ffebld_set_info (incr, ffeinfo_new
-                      (FFEINFO_basictypeINTEGER,
-                       FFEINFO_kindtypeINTEGERDEFAULT,
-                       0,
-                       FFEINFO_kindENTITY,
-                       FFEINFO_whereCONSTANT,
-                       FFETARGET_charactersizeNONE));
-    }
-
-  start = ffeexpr_convert_expr (start, start_token, var, var_token,
-                               FFEEXPR_contextLET);
-  end = ffeexpr_convert_expr (end, end_token, var, var_token,
-                             FFEEXPR_contextLET);
-  incr = ffeexpr_convert_expr (incr, incr_token, var, var_token,
-                              FFEEXPR_contextLET);
-
-  ffestd_R819A (construct_name, label, var,
-               start, start_token,
-               end, end_token,
-               incr, incr_token);
-}
-
-/* ffestc_R819B -- Labeled DO WHILE statement
-
-   ffestc_R819B(construct_name,label_token,expr,expr_token);
-
-   Make sure statement is valid here; implement.  */
-
-void
-ffestc_R819B (ffelexToken construct_name, ffelexToken label_token,
-             ffebld expr, ffelexToken expr_token UNUSED)
-{
-  ffestw b;
-  ffelab label;
-  ffesymbol s;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_exec_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_notloop_ ();
-
-  if (!ffestc_labelref_is_loopend_ (label_token, &label))
-    return;
-
-  b = ffestw_update (ffestw_push (NULL));
-  ffestw_set_top_do (b, b);
-  ffestw_set_state (b, FFESTV_stateDO);
-  ffestw_set_blocknum (b, ffestc_blocknum_++);
-  ffestw_set_shriek (b, ffestc_shriek_do_);
-  ffestw_set_label (b, label);
-  ffestw_set_do_iter_var (b, NULL);
-  ffestw_set_do_iter_var_t (b, NULL);
-
-  if (construct_name == NULL)
-    ffestw_set_name (b, NULL);
-  else
-    {
-      ffestw_set_name (b, ffelex_token_use (construct_name));
-
-      s = ffesymbol_declare_local (construct_name, FALSE);
-
-      if (ffesymbol_state (s) == FFESYMBOL_stateNONE)
-       {
-         ffesymbol_set_state (s, FFESYMBOL_stateUNDERSTOOD);
-         ffesymbol_set_info (s,
-                             ffeinfo_new (FFEINFO_basictypeNONE,
-                                          FFEINFO_kindtypeNONE,
-                                          0,
-                                          FFEINFO_kindCONSTRUCT,
-                                          FFEINFO_whereLOCAL,
-                                          FFETARGET_charactersizeNONE));
-         s = ffecom_sym_learned (s);
-         ffesymbol_signal_unreported (s);
-       }
-      else
-       ffesymbol_error (s, construct_name);
-    }
-
-  ffestd_R819B (construct_name, label, expr);
-}
-
-/* ffestc_R820A -- Iterative nonlabeled DO statement
-
-   ffestc_R820A(construct_name,expr,expr_token);
-
-   Make sure statement is valid here; implement.  */
-
-void
-ffestc_R820A (ffelexToken construct_name, ffebld var, ffelexToken var_token,
-   ffebld start, ffelexToken start_token, ffebld end, ffelexToken end_token,
-             ffebld incr, ffelexToken incr_token)
-{
-  ffestw b;
-  ffesymbol s;
-  ffesymbol varsym;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_exec_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_notloop_ ();
-
-  b = ffestw_update (ffestw_push (NULL));
-  ffestw_set_top_do (b, b);
-  ffestw_set_state (b, FFESTV_stateDO);
-  ffestw_set_blocknum (b, ffestc_blocknum_++);
-  ffestw_set_shriek (b, ffestc_shriek_do_);
-  ffestw_set_label (b, NULL);
-  switch (ffebld_op (var))
-    {
-    case FFEBLD_opSYMTER:
-      if ((ffeinfo_basictype (ffebld_info (var)) == FFEINFO_basictypeREAL)
-         && ffe_is_warn_surprising ())
-       {
-         ffebad_start (FFEBAD_DO_REAL);        /* See error message!!! */
-         ffebad_here (0, ffelex_token_where_line (var_token),
-                      ffelex_token_where_column (var_token));
-         ffebad_string (ffesymbol_text (ffebld_symter (var)));
-         ffebad_finish ();
-       }
-      if (!ffesymbol_is_doiter (varsym = ffebld_symter (var)))
-       {                       /* Presumably already complained about by
-                                  ffeexpr_lhs_. */
-         ffesymbol_set_is_doiter (varsym, TRUE);
-         ffestw_set_do_iter_var (b, varsym);
-         ffestw_set_do_iter_var_t (b, ffelex_token_use (var_token));
-         break;
-       }
-      /* Fall through. */
-    case FFEBLD_opANY:
-      ffestw_set_do_iter_var (b, NULL);
-      ffestw_set_do_iter_var_t (b, NULL);
-      break;
-
-    default:
-      assert ("bad iter var" == NULL);
-      break;
-    }
-
-  if (construct_name == NULL)
-    ffestw_set_name (b, NULL);
-  else
-    {
-      ffestw_set_name (b, ffelex_token_use (construct_name));
-
-      s = ffesymbol_declare_local (construct_name, FALSE);
-
-      if (ffesymbol_state (s) == FFESYMBOL_stateNONE)
-       {
-         ffesymbol_set_state (s, FFESYMBOL_stateUNDERSTOOD);
-         ffesymbol_set_info (s,
-                             ffeinfo_new (FFEINFO_basictypeNONE,
-                                          FFEINFO_kindtypeNONE,
-                                          0,
-                                          FFEINFO_kindCONSTRUCT,
-                                          FFEINFO_whereLOCAL,
-                                          FFETARGET_charactersizeNONE));
-         s = ffecom_sym_learned (s);
-         ffesymbol_signal_unreported (s);
-       }
-      else
-       ffesymbol_error (s, construct_name);
-    }
-
-  if (incr == NULL)
-    {
-      incr = ffebld_new_conter (ffebld_constant_new_integerdefault_val (1));
-      ffebld_set_info (incr, ffeinfo_new
-                      (FFEINFO_basictypeINTEGER,
-                       FFEINFO_kindtypeINTEGERDEFAULT,
-                       0,
-                       FFEINFO_kindENTITY,
-                       FFEINFO_whereCONSTANT,
-                       FFETARGET_charactersizeNONE));
-    }
-
-  start = ffeexpr_convert_expr (start, start_token, var, var_token,
-                               FFEEXPR_contextLET);
-  end = ffeexpr_convert_expr (end, end_token, var, var_token,
-                             FFEEXPR_contextLET);
-  incr = ffeexpr_convert_expr (incr, incr_token, var, var_token,
-                              FFEEXPR_contextLET);
-
-#if 0
-  if ((ffebld_op (incr) == FFEBLD_opCONTER)
-      && (ffebld_constant_is_zero (ffebld_conter (incr))))
-    {
-      ffebad_start (FFEBAD_DO_STEP_ZERO);
-      ffebad_here (0, ffelex_token_where_line (incr_token),
-                  ffelex_token_where_column (incr_token));
-      ffebad_string ("Iterative DO loop");
-      ffebad_finish ();
-    }
-#endif
-
-  ffestd_R819A (construct_name, NULL, var,
-               start, start_token,
-               end, end_token,
-               incr, incr_token);
-}
-
-/* ffestc_R820B -- Nonlabeled DO WHILE statement
-
-   ffestc_R820B(construct_name,expr,expr_token);
-
-   Make sure statement is valid here; implement.  */
-
-void
-ffestc_R820B (ffelexToken construct_name, ffebld expr,
-             ffelexToken expr_token UNUSED)
-{
-  ffestw b;
-  ffesymbol s;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_exec_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_notloop_ ();
-
-  b = ffestw_update (ffestw_push (NULL));
-  ffestw_set_top_do (b, b);
-  ffestw_set_state (b, FFESTV_stateDO);
-  ffestw_set_blocknum (b, ffestc_blocknum_++);
-  ffestw_set_shriek (b, ffestc_shriek_do_);
-  ffestw_set_label (b, NULL);
-  ffestw_set_do_iter_var (b, NULL);
-  ffestw_set_do_iter_var_t (b, NULL);
-
-  if (construct_name == NULL)
-    ffestw_set_name (b, NULL);
-  else
-    {
-      ffestw_set_name (b, ffelex_token_use (construct_name));
-
-      s = ffesymbol_declare_local (construct_name, FALSE);
-
-      if (ffesymbol_state (s) == FFESYMBOL_stateNONE)
-       {
-         ffesymbol_set_state (s, FFESYMBOL_stateUNDERSTOOD);
-         ffesymbol_set_info (s,
-                             ffeinfo_new (FFEINFO_basictypeNONE,
-                                          FFEINFO_kindtypeNONE,
-                                          0,
-                                          FFEINFO_kindCONSTRUCT,
-                                          FFEINFO_whereLOCAL,
-                                          FFETARGET_charactersizeNONE));
-         s = ffecom_sym_learned (s);
-         ffesymbol_signal_unreported (s);
-       }
-      else
-       ffesymbol_error (s, construct_name);
-    }
-
-  ffestd_R819B (construct_name, NULL, expr);
-}
-
-/* ffestc_R825 -- END DO statement
-
-   ffestc_R825(name_token);
-
-   Make sure ffestc_kind_ identifies a DO block.  If not
-   NULL, make sure name_token gives the correct name.  Implement the end
-   of the DO block.  */
-
-void
-ffestc_R825 (ffelexToken name)
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_do_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  if (name == NULL)
-    {
-      if (ffestw_name (ffestw_stack_top ()) != NULL)
-       {
-         ffebad_start (FFEBAD_CONSTRUCT_NAMED);
-         ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                      ffelex_token_where_column (ffesta_tokens[0]));
-         ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-         ffebad_finish ();
-       }
-    }
-  else
-    {
-      if (ffestw_name (ffestw_stack_top ()) == NULL)
-       {
-         ffebad_start (FFEBAD_CONSTRUCT_NOT_NAMED);
-         ffebad_here (0, ffelex_token_where_line (name),
-                      ffelex_token_where_column (name));
-         ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-         ffebad_finish ();
-       }
-      else if (ffelex_token_strcmp (name,
-                                   ffestw_name (ffestw_stack_top ()))
-              != 0)
-       {
-         ffebad_start (FFEBAD_CONSTRUCT_WRONG_NAME);
-         ffebad_here (0, ffelex_token_where_line (name),
-                      ffelex_token_where_column (name));
-         ffebad_here (1, ffelex_token_where_line (ffestw_name (ffestw_stack_top ())),
-            ffelex_token_where_column (ffestw_name (ffestw_stack_top ())));
-         ffebad_finish ();
-       }
-    }
-
-  if (ffesta_label_token == NULL)
-    {                          /* If top of stack has label, its an error! */
-      if (ffestw_label (ffestw_stack_top ()) != NULL)
-       {
-         ffebad_start (FFEBAD_DO_HAD_LABEL);
-         ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                      ffelex_token_where_column (ffesta_tokens[0]));
-         ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-         ffebad_finish ();
-       }
-
-      ffestc_shriek_do_ (TRUE);
-
-      ffestc_try_shriek_do_ ();
-
-      return;
-    }
-
-  ffestd_R825 (name);
-
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R834 -- CYCLE statement
-
-   ffestc_R834(name_token);
-
-   Handle a CYCLE within a loop.  */
-
-void
-ffestc_R834 (ffelexToken name)
-{
-  ffestw block;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_actiondo_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_notloop_begin_ ();
-
-  if (name == NULL)
-    block = ffestw_top_do (ffestw_stack_top ());
-  else
-    {                          /* Search for name. */
-      for (block = ffestw_top_do (ffestw_stack_top ());
-          (block != NULL) && (ffestw_blocknum (block) != 0);
-          block = ffestw_top_do (ffestw_previous (block)))
-       {
-         if ((ffestw_name (block) != NULL)
-             && (ffelex_token_strcmp (name, ffestw_name (block)) == 0))
-           break;
-       }
-      if ((block == NULL) || (ffestw_blocknum (block) == 0))
-       {
-         block = ffestw_top_do (ffestw_stack_top ());
-         ffebad_start (FFEBAD_CONSTRUCT_NO_DO_NAME);
-         ffebad_here (0, ffelex_token_where_line (name),
-                      ffelex_token_where_column (name));
-         ffebad_finish ();
-       }
-    }
-
-  ffestd_R834 (block);
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-
-  /* notloop's that are actionif's can be the target of a loop-end
-     statement if they're in the "then" part of a logical IF, as
-     in "DO 10", "10 IF (...) CYCLE".  */
-
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R835 -- EXIT statement
-
-   ffestc_R835(name_token);
-
-   Handle a EXIT within a loop.         */
-
-void
-ffestc_R835 (ffelexToken name)
-{
-  ffestw block;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_actiondo_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_notloop_begin_ ();
-
-  if (name == NULL)
-    block = ffestw_top_do (ffestw_stack_top ());
-  else
-    {                          /* Search for name. */
-      for (block = ffestw_top_do (ffestw_stack_top ());
-          (block != NULL) && (ffestw_blocknum (block) != 0);
-          block = ffestw_top_do (ffestw_previous (block)))
-       {
-         if ((ffestw_name (block) != NULL)
-             && (ffelex_token_strcmp (name, ffestw_name (block)) == 0))
-           break;
-       }
-      if ((block == NULL) || (ffestw_blocknum (block) == 0))
-       {
-         block = ffestw_top_do (ffestw_stack_top ());
-         ffebad_start (FFEBAD_CONSTRUCT_NO_DO_NAME);
-         ffebad_here (0, ffelex_token_where_line (name),
-                      ffelex_token_where_column (name));
-         ffebad_finish ();
-       }
-    }
-
-  ffestd_R835 (block);
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-
-  /* notloop's that are actionif's can be the target of a loop-end
-     statement if they're in the "then" part of a logical IF, as
-     in "DO 10", "10 IF (...) EXIT".  */
-
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R836 -- GOTO statement
-
-   ffestc_R836(label_token);
-
-   Make sure label_token identifies a valid label for a GOTO.  Update
-   that label's info to indicate it is the target of a GOTO.  */
-
-void
-ffestc_R836 (ffelexToken label_token)
-{
-  ffelab label;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_notloop_begin_ ();
-
-  if (ffestc_labelref_is_branch_ (label_token, &label))
-    ffestd_R836 (label);
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-
-  /* notloop's that are actionif's can be the target of a loop-end
-     statement if they're in the "then" part of a logical IF, as
-     in "DO 10", "10 IF (...) GOTO 100".  */
-
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R837 -- Computed GOTO statement
-
-   ffestc_R837(label_list,expr,expr_token);
-
-   Make sure label_list identifies valid labels for a GOTO.  Update
-   each label's info to indicate it is the target of a GOTO.  */
-
-void
-ffestc_R837 (ffesttTokenList label_toks, ffebld expr,
-            ffelexToken expr_token UNUSED)
-{
-  ffesttTokenItem ti;
-  bool ok = TRUE;
-  int i;
-  ffelab *labels;
-
-  assert (label_toks != NULL);
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  labels = malloc_new_kp (ffesta_output_pool, "FFESTC labels",
-                         sizeof (*labels)
-                         * ffestt_tokenlist_count (label_toks));
-
-  for (ti = label_toks->first, i = 0;
-       ti != (ffesttTokenItem) &label_toks->first;
-       ti = ti->next, ++i)
-    {
-      if (!ffestc_labelref_is_branch_ (ti->t, &labels[i]))
-       {
-         ok = FALSE;
-         break;
-       }
-    }
-
-  if (ok)
-    ffestd_R837 (labels, ffestt_tokenlist_count (label_toks), expr);
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R838 -- ASSIGN statement
-
-   ffestc_R838(label_token,target_variable,target_token);
-
-   Make sure label_token identifies a valid label for an assignment.  Update
-   that label's info to indicate it is the source of an assignment.  Update
-   target_variable's info to indicate it is the target the assignment of that
-   label.  */
-
-void
-ffestc_R838 (ffelexToken label_token, ffebld target,
-            ffelexToken target_token UNUSED)
-{
-  ffelab label;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  /* Mark target symbol as target of an ASSIGN.  */
-  if (ffebld_op (target) == FFEBLD_opSYMTER)
-    ffesymbol_set_assigned (ffebld_symter (target), TRUE);
-
-  if (ffestc_labelref_is_assignable_ (label_token, &label))
-    ffestd_R838 (label, target);
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R839 -- Assigned GOTO statement
-
-   ffestc_R839(target,target_token,label_list);
-
-   Make sure label_list identifies valid labels for a GOTO.  Update
-   each label's info to indicate it is the target of a GOTO.  */
-
-void
-ffestc_R839 (ffebld target, ffelexToken target_token UNUSED,
-            ffesttTokenList label_toks)
-{
-  ffesttTokenItem ti;
-  bool ok = TRUE;
-  int i;
-  ffelab *labels;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_notloop_begin_ ();
-
-  if (label_toks == NULL)
-    {
-      labels = NULL;
-      i = 0;
-    }
-  else
-    {
-      labels = malloc_new_kp (ffesta_output_pool, "FFESTC labels",
-                   sizeof (*labels) * ffestt_tokenlist_count (label_toks));
-
-      for (ti = label_toks->first, i = 0;
-          ti != (ffesttTokenItem) &label_toks->first;
-          ti = ti->next, ++i)
-       {
-         if (!ffestc_labelref_is_branch_ (ti->t, &labels[i]))
-           {
-             ok = FALSE;
-             break;
-           }
-       }
-    }
-
-  if (ok)
-    ffestd_R839 (target, labels, i);
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-
-  /* notloop's that are actionif's can be the target of a loop-end
-     statement if they're in the "then" part of a logical IF, as
-     in "DO 10", "10 IF (...) GOTO I".  */
-
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R840 -- Arithmetic IF statement
-
-   ffestc_R840(expr,expr_token,neg,zero,pos);
-
-   Make sure the labels are valid; implement.  */
-
-void
-ffestc_R840 (ffebld expr, ffelexToken expr_token UNUSED,
-            ffelexToken neg_token, ffelexToken zero_token,
-            ffelexToken pos_token)
-{
-  ffelab neg;
-  ffelab zero;
-  ffelab pos;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_notloop_begin_ ();
-
-  if (ffestc_labelref_is_branch_ (neg_token, &neg)
-      && ffestc_labelref_is_branch_ (zero_token, &zero)
-      && ffestc_labelref_is_branch_ (pos_token, &pos))
-    ffestd_R840 (expr, neg, zero, pos);
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-
-  /* notloop's that are actionif's can be the target of a loop-end
-     statement if they're in the "then" part of a logical IF, as
-     in "DO 10", "10 IF (...) GOTO (100,200,300), I".  */
-
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R841 -- CONTINUE statement
-
-   ffestc_R841();  */
-
-void
-ffestc_R841 ()
-{
-  ffestc_check_simple_ ();
-
-  if (ffestc_order_actionwhere_ () != FFESTC_orderOK_)
-    return;
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-#if FFESTR_F90
-    case FFESTV_stateWHERE:
-    case FFESTV_stateWHERETHEN:
-      ffestc_labeldef_useless_ ();
-
-      ffestd_R841 (TRUE);
-
-      /* It's okay that we call ffestc_labeldef_branch_end_ () below,
-        since that will be a no-op after calling _useless_ () above.  */
-      break;
-#endif
-
-    default:
-      ffestc_labeldef_branch_begin_ ();
-
-      ffestd_R841 (FALSE);
-
-      break;
-    }
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R842 -- STOP statement
-
-   ffestc_R842(expr,expr_token);
-
-   Make sure statement is valid here; implement.  expr and expr_token are
-   both NULL if there was no expression.  */
-
-void
-ffestc_R842 (ffebld expr, ffelexToken expr_token UNUSED)
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_notloop_begin_ ();
-
-  ffestd_R842 (expr);
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-
-  /* notloop's that are actionif's can be the target of a loop-end
-     statement if they're in the "then" part of a logical IF, as
-     in "DO 10", "10 IF (...) STOP".  */
-
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R843 -- PAUSE statement
-
-   ffestc_R843(expr,expr_token);
-
-   Make sure statement is valid here; implement.  expr and expr_token are
-   both NULL if there was no expression.  */
-
-void
-ffestc_R843 (ffebld expr, ffelexToken expr_token UNUSED)
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  ffestd_R843 (expr);
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R904 -- OPEN statement
-
-   ffestc_R904();
-
-   Make sure an OPEN is valid in the current context, and implement it.         */
-
-void
-ffestc_R904 ()
-{
-  int i;
-  int expect_file;
-  static const char *const status_strs[] =
-  {
-    "New",
-    "Old",
-    "Replace",
-    "Scratch",
-    "Unknown"
-  };
-  static const char *const access_strs[] =
-  {
-    "Append",
-    "Direct",
-    "Keyed",
-    "Sequential"
-  };
-  static const char *const blank_strs[] =
-  {
-    "Null",
-    "Zero"
-  };
-  static const char *const carriagecontrol_strs[] =
-  {
-    "Fortran",
-    "List",
-    "None"
-  };
-  static const char *const dispose_strs[] =
-  {
-    "Delete",
-    "Keep",
-    "Print",
-    "Print/Delete",
-    "Save",
-    "Submit",
-    "Submit/Delete"
-  };
-  static const char *const form_strs[] =
-  {
-    "Formatted",
-    "Unformatted"
-  };
-  static const char *const organization_strs[] =
-  {
-    "Indexed",
-    "Relative",
-    "Sequential"
-  };
-  static const char *const position_strs[] =
-  {
-    "Append",
-    "AsIs",
-    "Rewind"
-  };
-  static const char *const action_strs[] =
-  {
-    "Read",
-    "ReadWrite",
-    "Write"
-  };
-  static const char *const delim_strs[] =
-  {
-    "Apostrophe",
-    "None",
-    "Quote"
-  };
-  static const char *const recordtype_strs[] =
-  {
-    "Fixed",
-    "Segmented",
-    "Stream",
-    "Stream_CR",
-    "Stream_LF",
-    "Variable"
-  };
-  static const char *const pad_strs[] =
-  {
-    "No",
-    "Yes"
-  };
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  if (ffestc_subr_is_branch_
-      (&ffestp_file.open.open_spec[FFESTP_openixERR])
-      && ffestc_subr_is_present_ ("UNIT",
-                           &ffestp_file.open.open_spec[FFESTP_openixUNIT]))
-    {
-      i = ffestc_subr_binsrch_ (status_strs,
-                               ARRAY_SIZE (status_strs),
-                          &ffestp_file.open.open_spec[FFESTP_openixSTATUS],
-                               "NEW, OLD, REPLACE, SCRATCH, or UNKNOWN");
-      switch (i)
-       {
-       case 0:         /* Unknown. */
-       case 5:         /* UNKNOWN. */
-         expect_file = 2;      /* Unknown, don't care about FILE=. */
-         break;
-
-       case 1:         /* NEW. */
-       case 2:         /* OLD. */
-         if (ffe_is_pedantic ())
-           expect_file = 1;    /* Yes, need FILE=. */
-         else
-           expect_file = 2;    /* f2clib doesn't care about FILE=. */
-         break;
-
-       case 3:         /* REPLACE. */
-         expect_file = 1;      /* Yes, need FILE=. */
-         break;
-
-       case 4:         /* SCRATCH. */
-         expect_file = 0;      /* No, disallow FILE=. */
-         break;
-
-       default:
-         assert ("invalid _binsrch_ result" == NULL);
-         expect_file = 0;
-         break;
-       }
-      if ((expect_file == 0)
-         && ffestp_file.open.open_spec[FFESTP_openixFILE].kw_or_val_present)
-       {
-         ffebad_start (FFEBAD_CONFLICTING_SPECS);
-         assert (ffestp_file.open.open_spec[FFESTP_openixFILE].kw_or_val_present);
-         if (ffestp_file.open.open_spec[FFESTP_openixFILE].kw_present)
-           {
-             ffebad_here (0, ffelex_token_where_line
-                        (ffestp_file.open.open_spec[FFESTP_openixFILE].kw),
-                          ffelex_token_where_column
-                       (ffestp_file.open.open_spec[FFESTP_openixFILE].kw));
-           }
-         else
-           {
-             ffebad_here (0, ffelex_token_where_line
-                     (ffestp_file.open.open_spec[FFESTP_openixFILE].value),
-                          ffelex_token_where_column
-                    (ffestp_file.open.open_spec[FFESTP_openixFILE].value));
-           }
-         assert (ffestp_file.open.open_spec[FFESTP_openixSTATUS].kw_or_val_present);
-         if (ffestp_file.open.open_spec[FFESTP_openixSTATUS].kw_present)
-           {
-             ffebad_here (1, ffelex_token_where_line
-                      (ffestp_file.open.open_spec[FFESTP_openixSTATUS].kw),
-                          ffelex_token_where_column
-                     (ffestp_file.open.open_spec[FFESTP_openixSTATUS].kw));
-           }
-         else
-           {
-             ffebad_here (1, ffelex_token_where_line
-                   (ffestp_file.open.open_spec[FFESTP_openixSTATUS].value),
-                          ffelex_token_where_column
-                  (ffestp_file.open.open_spec[FFESTP_openixSTATUS].value));
-           }
-         ffebad_finish ();
-       }
-      else if ((expect_file == 1)
-       && !ffestp_file.open.open_spec[FFESTP_openixFILE].kw_or_val_present)
-       {
-         ffebad_start (FFEBAD_MISSING_SPECIFIER);
-         assert (ffestp_file.open.open_spec[FFESTP_openixSTATUS].kw_or_val_present);
-         if (ffestp_file.open.open_spec[FFESTP_openixSTATUS].kw_present)
-           {
-             ffebad_here (0, ffelex_token_where_line
-                      (ffestp_file.open.open_spec[FFESTP_openixSTATUS].kw),
-                          ffelex_token_where_column
-                     (ffestp_file.open.open_spec[FFESTP_openixSTATUS].kw));
-           }
-         else
-           {
-             ffebad_here (0, ffelex_token_where_line
-                   (ffestp_file.open.open_spec[FFESTP_openixSTATUS].value),
-                          ffelex_token_where_column
-                  (ffestp_file.open.open_spec[FFESTP_openixSTATUS].value));
-           }
-         ffebad_string ("FILE=");
-         ffebad_finish ();
-       }
-
-      ffestc_subr_binsrch_ (access_strs, ARRAY_SIZE (access_strs),
-                           &ffestp_file.open.open_spec[FFESTP_openixACCESS],
-                           "APPEND, DIRECT, KEYED, or SEQUENTIAL");
-
-      ffestc_subr_binsrch_ (blank_strs, ARRAY_SIZE (blank_strs),
-                           &ffestp_file.open.open_spec[FFESTP_openixBLANK],
-                           "NULL or ZERO");
-
-      ffestc_subr_binsrch_ (carriagecontrol_strs,
-                           ARRAY_SIZE (carriagecontrol_strs),
-                 &ffestp_file.open.open_spec[FFESTP_openixCARRIAGECONTROL],
-                           "FORTRAN, LIST, or NONE");
-
-      ffestc_subr_binsrch_ (dispose_strs, ARRAY_SIZE (dispose_strs),
-                         &ffestp_file.open.open_spec[FFESTP_openixDISPOSE],
-       "DELETE, KEEP, PRINT, PRINT/DELETE, SAVE, SUBMIT, or SUBMIT/DELETE");
-
-      ffestc_subr_binsrch_ (form_strs, ARRAY_SIZE (form_strs),
-                           &ffestp_file.open.open_spec[FFESTP_openixFORM],
-                           "FORMATTED or UNFORMATTED");
-
-      ffestc_subr_binsrch_ (organization_strs, ARRAY_SIZE (organization_strs),
-                    &ffestp_file.open.open_spec[FFESTP_openixORGANIZATION],
-                           "INDEXED, RELATIVE, or SEQUENTIAL");
-
-      ffestc_subr_binsrch_ (position_strs, ARRAY_SIZE (position_strs),
-                        &ffestp_file.open.open_spec[FFESTP_openixPOSITION],
-                           "APPEND, ASIS, or REWIND");
-
-      ffestc_subr_binsrch_ (action_strs, ARRAY_SIZE (action_strs),
-                           &ffestp_file.open.open_spec[FFESTP_openixACTION],
-                           "READ, READWRITE, or WRITE");
-
-      ffestc_subr_binsrch_ (delim_strs, ARRAY_SIZE (delim_strs),
-                           &ffestp_file.open.open_spec[FFESTP_openixDELIM],
-                           "APOSTROPHE, NONE, or QUOTE");
-
-      ffestc_subr_binsrch_ (recordtype_strs, ARRAY_SIZE (recordtype_strs),
-                      &ffestp_file.open.open_spec[FFESTP_openixRECORDTYPE],
-            "FIXED, SEGMENTED, STREAM, STREAM_CR, STREAM_LF, or VARIABLE");
-
-      ffestc_subr_binsrch_ (pad_strs, ARRAY_SIZE (pad_strs),
-                           &ffestp_file.open.open_spec[FFESTP_openixPAD],
-                           "NO or YES");
-
-      ffestd_R904 ();
-    }
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R907 -- CLOSE statement
-
-   ffestc_R907();
-
-   Make sure a CLOSE is valid in the current context, and implement it.         */
-
-void
-ffestc_R907 ()
-{
-  static const char *const status_strs[] =
-  {
-    "Delete",
-    "Keep",
-    "Print",
-    "Print/Delete",
-    "Save",
-    "Submit",
-    "Submit/Delete"
-  };
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  if (ffestc_subr_is_branch_
-      (&ffestp_file.close.close_spec[FFESTP_closeixERR])
-      && ffestc_subr_is_present_ ("UNIT",
-                        &ffestp_file.close.close_spec[FFESTP_closeixUNIT]))
-    {
-      ffestc_subr_binsrch_ (status_strs, ARRAY_SIZE (status_strs),
-                       &ffestp_file.close.close_spec[FFESTP_closeixSTATUS],
-       "DELETE, KEEP, PRINT, PRINT/DELETE, SAVE, SUBMIT, or SUBMIT/DELETE");
-
-      ffestd_R907 ();
-    }
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R909_start -- READ(...) statement list begin
-
-   ffestc_R909_start(FALSE);
-
-   Verify that READ is valid here, and begin accepting items in the
-   list.  */
-
-void
-ffestc_R909_start (bool only_format)
-{
-  ffestvUnit unit;
-  ffestvFormat format;
-  bool rec;
-  bool key;
-  ffestpReadIx keyn;
-  ffestpReadIx spec1;
-  ffestpReadIx spec2;
-
-  ffestc_check_start_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_branch_begin_ ();
-
-  if (!ffestc_subr_is_format_
-      (&ffestp_file.read.read_spec[FFESTP_readixFORMAT]))
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-
-  format = ffestc_subr_format_
-    (&ffestp_file.read.read_spec[FFESTP_readixFORMAT]);
-  ffestc_namelist_ = (format == FFESTV_formatNAMELIST);
-
-  if (only_format)
-    {
-      ffestd_R909_start (TRUE, FFESTV_unitNONE, format, FALSE, FALSE);
-
-      ffestc_ok_ = TRUE;
-      return;
-    }
-
-  if (!ffestc_subr_is_branch_
-      (&ffestp_file.read.read_spec[FFESTP_readixEOR])
-      || !ffestc_subr_is_branch_
-      (&ffestp_file.read.read_spec[FFESTP_readixERR])
-      || !ffestc_subr_is_branch_
-      (&ffestp_file.read.read_spec[FFESTP_readixEND]))
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-
-  unit = ffestc_subr_unit_
-    (&ffestp_file.read.read_spec[FFESTP_readixUNIT]);
-  if (unit == FFESTV_unitNONE)
-    {
-      ffebad_start (FFEBAD_NO_UNIT_SPEC);
-      ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      ffebad_finish ();
-      ffestc_ok_ = FALSE;
-      return;
-    }
-
-  rec = ffestp_file.read.read_spec[FFESTP_readixREC].kw_or_val_present;
-
-  if (ffestp_file.read.read_spec[FFESTP_readixKEYEQ].kw_or_val_present)
-    {
-      key = TRUE;
-      keyn = spec1 = FFESTP_readixKEYEQ;
-    }
-  else
-    {
-      key = FALSE;
-      keyn = spec1 = FFESTP_readix;
-    }
-
-  if (ffestp_file.read.read_spec[FFESTP_readixKEYGT].kw_or_val_present)
-    {
-      if (key)
-       {
-         spec2 = FFESTP_readixKEYGT;
-       whine:                  /* :::::::::::::::::::: */
-         ffebad_start (FFEBAD_CONFLICTING_SPECS);
-         assert (ffestp_file.read.read_spec[spec1].kw_or_val_present);
-         if (ffestp_file.read.read_spec[spec1].kw_present)
-           {
-             ffebad_here (0, ffelex_token_where_line
-                          (ffestp_file.read.read_spec[spec1].kw),
-                          ffelex_token_where_column
-                          (ffestp_file.read.read_spec[spec1].kw));
-           }
-         else
-           {
-             ffebad_here (0, ffelex_token_where_line
-                          (ffestp_file.read.read_spec[spec1].value),
-                          ffelex_token_where_column
-                          (ffestp_file.read.read_spec[spec1].value));
-           }
-         assert (ffestp_file.read.read_spec[spec2].kw_or_val_present);
-         if (ffestp_file.read.read_spec[spec2].kw_present)
-           {
-             ffebad_here (1, ffelex_token_where_line
-                          (ffestp_file.read.read_spec[spec2].kw),
-                          ffelex_token_where_column
-                          (ffestp_file.read.read_spec[spec2].kw));
-           }
-         else
-           {
-             ffebad_here (1, ffelex_token_where_line
-                          (ffestp_file.read.read_spec[spec2].value),
-                          ffelex_token_where_column
-                          (ffestp_file.read.read_spec[spec2].value));
-           }
-         ffebad_finish ();
-         ffestc_ok_ = FALSE;
-         return;
-       }
-      key = TRUE;
-      keyn = spec1 = FFESTP_readixKEYGT;
-    }
-
-  if (ffestp_file.read.read_spec[FFESTP_readixKEYGE].kw_or_val_present)
-    {
-      if (key)
-       {
-         spec2 = FFESTP_readixKEYGT;
-         goto whine;           /* :::::::::::::::::::: */
-       }
-      key = TRUE;
-      keyn = FFESTP_readixKEYGT;
-    }
-
-  if (rec)
-    {
-      spec1 = FFESTP_readixREC;
-      if (key)
-       {
-         spec2 = keyn;
-         goto whine;           /* :::::::::::::::::::: */
-       }
-      if (unit == FFESTV_unitCHAREXPR)
-       {
-         spec2 = FFESTP_readixUNIT;
-         goto whine;           /* :::::::::::::::::::: */
-       }
-      if ((format == FFESTV_formatASTERISK)
-         || (format == FFESTV_formatNAMELIST))
-       {
-         spec2 = FFESTP_readixFORMAT;
-         goto whine;           /* :::::::::::::::::::: */
-       }
-      if (ffestp_file.read.read_spec[FFESTP_readixADVANCE].kw_or_val_present)
-       {
-         spec2 = FFESTP_readixADVANCE;
-         goto whine;           /* :::::::::::::::::::: */
-       }
-      if (ffestp_file.read.read_spec[FFESTP_readixEND].kw_or_val_present)
-       {
-         spec2 = FFESTP_readixEND;
-         goto whine;           /* :::::::::::::::::::: */
-       }
-      if (ffestp_file.read.read_spec[FFESTP_readixNULLS].kw_or_val_present)
-       {
-         spec2 = FFESTP_readixNULLS;
-         goto whine;           /* :::::::::::::::::::: */
-       }
-    }
-  else if (key)
-    {
-      spec1 = keyn;
-      if (unit == FFESTV_unitCHAREXPR)
-       {
-         spec2 = FFESTP_readixUNIT;
-         goto whine;           /* :::::::::::::::::::: */
-       }
-      if ((format == FFESTV_formatASTERISK)
-         || (format == FFESTV_formatNAMELIST))
-       {
-         spec2 = FFESTP_readixFORMAT;
-         goto whine;           /* :::::::::::::::::::: */
-       }
-      if (ffestp_file.read.read_spec[FFESTP_readixADVANCE].kw_or_val_present)
-       {
-         spec2 = FFESTP_readixADVANCE;
-         goto whine;           /* :::::::::::::::::::: */
-       }
-      if (ffestp_file.read.read_spec[FFESTP_readixEND].kw_or_val_present)
-       {
-         spec2 = FFESTP_readixEND;
-         goto whine;           /* :::::::::::::::::::: */
-       }
-      if (ffestp_file.read.read_spec[FFESTP_readixEOR].kw_or_val_present)
-       {
-         spec2 = FFESTP_readixEOR;
-         goto whine;           /* :::::::::::::::::::: */
-       }
-      if (ffestp_file.read.read_spec[FFESTP_readixNULLS].kw_or_val_present)
-       {
-         spec2 = FFESTP_readixNULLS;
-         goto whine;           /* :::::::::::::::::::: */
-       }
-      if (ffestp_file.read.read_spec[FFESTP_readixREC].kw_or_val_present)
-       {
-         spec2 = FFESTP_readixREC;
-         goto whine;           /* :::::::::::::::::::: */
-       }
-      if (ffestp_file.read.read_spec[FFESTP_readixSIZE].kw_or_val_present)
-       {
-         spec2 = FFESTP_readixSIZE;
-         goto whine;           /* :::::::::::::::::::: */
-       }
-    }
-  else
-    {                          /* Sequential/Internal. */
-      if (unit == FFESTV_unitCHAREXPR)
-       {                       /* Internal file. */
-         spec1 = FFESTP_readixUNIT;
-         if (format == FFESTV_formatNAMELIST)
-           {
-             spec2 = FFESTP_readixFORMAT;
-             goto whine;       /* :::::::::::::::::::: */
-           }
-         if (ffestp_file.read.read_spec[FFESTP_readixADVANCE].kw_or_val_present)
-           {
-             spec2 = FFESTP_readixADVANCE;
-             goto whine;       /* :::::::::::::::::::: */
-           }
-       }
-      if (ffestp_file.read.read_spec[FFESTP_readixADVANCE].kw_or_val_present)
-       {                       /* ADVANCE= specified. */
-         spec1 = FFESTP_readixADVANCE;
-         if (format == FFESTV_formatNONE)
-           {
-             ffebad_start (FFEBAD_MISSING_FORMAT_SPEC);
-             ffebad_here (0, ffelex_token_where_line
-                          (ffestp_file.read.read_spec[spec1].kw),
-                          ffelex_token_where_column
-                          (ffestp_file.read.read_spec[spec1].kw));
-             ffebad_finish ();
-
-             ffestc_ok_ = FALSE;
-             return;
-           }
-         if (format == FFESTV_formatNAMELIST)
-           {
-             spec2 = FFESTP_readixFORMAT;
-             goto whine;       /* :::::::::::::::::::: */
-           }
-       }
-      if (ffestp_file.read.read_spec[FFESTP_readixEOR].kw_or_val_present)
-       {                       /* EOR= specified. */
-         spec1 = FFESTP_readixEOR;
-         if (ffestc_subr_speccmp_ ("No",
-                         &ffestp_file.read.read_spec[FFESTP_readixADVANCE],
-                                   NULL, NULL) != 0)
-           {
-             goto whine_advance;       /* :::::::::::::::::::: */
-           }
-       }
-      if (ffestp_file.read.read_spec[FFESTP_readixNULLS].kw_or_val_present)
-       {                       /* NULLS= specified. */
-         spec1 = FFESTP_readixNULLS;
-         if (format != FFESTV_formatASTERISK)
-           {
-             spec2 = FFESTP_readixFORMAT;
-             goto whine;       /* :::::::::::::::::::: */
-           }
-       }
-      if (ffestp_file.read.read_spec[FFESTP_readixSIZE].kw_or_val_present)
-       {                       /* SIZE= specified. */
-         spec1 = FFESTP_readixSIZE;
-         if (ffestc_subr_speccmp_ ("No",
-                         &ffestp_file.read.read_spec[FFESTP_readixADVANCE],
-                                   NULL, NULL) != 0)
-           {
-           whine_advance:      /* :::::::::::::::::::: */
-             if (ffestp_file.read.read_spec[FFESTP_readixADVANCE]
-                 .kw_or_val_present)
-               {
-                 ffebad_start (FFEBAD_CONFLICTING_SPECS);
-                 ffebad_here (0, ffelex_token_where_line
-                              (ffestp_file.read.read_spec[spec1].kw),
-                              ffelex_token_where_column
-                              (ffestp_file.read.read_spec[spec1].kw));
-                 ffebad_here (1, ffelex_token_where_line
-                     (ffestp_file.read.read_spec[FFESTP_readixADVANCE].kw),
-                              ffelex_token_where_column
-                    (ffestp_file.read.read_spec[FFESTP_readixADVANCE].kw));
-                 ffebad_finish ();
-               }
-             else
-               {
-                 ffebad_start (FFEBAD_MISSING_ADVANCE_SPEC);
-                 ffebad_here (0, ffelex_token_where_line
-                              (ffestp_file.read.read_spec[spec1].kw),
-                              ffelex_token_where_column
-                              (ffestp_file.read.read_spec[spec1].kw));
-                 ffebad_finish ();
-               }
-
-             ffestc_ok_ = FALSE;
-             return;
-           }
-       }
-    }
-
-  if (unit == FFESTV_unitCHAREXPR)
-    ffestc_iolist_context_ = FFEEXPR_contextIOLISTDF;
-  else
-    ffestc_iolist_context_ = FFEEXPR_contextIOLIST;
-
-  ffestd_R909_start (FALSE, unit, format, rec, key);
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R909_item -- READ statement i/o item
-
-   ffestc_R909_item(expr,expr_token);
-
-   Implement output-list expression.  */
-
-void
-ffestc_R909_item (ffebld expr, ffelexToken expr_token)
-{
-  ffestc_check_item_ ();
-  if (!ffestc_ok_)
-    return;
-
-  if (ffestc_namelist_ != 0)
-    {
-      if (ffestc_namelist_ == 1)
-       {
-         ffestc_namelist_ = 2;
-         ffebad_start (FFEBAD_NAMELIST_ITEMS);
-         ffebad_here (0, ffelex_token_where_line (expr_token),
-                      ffelex_token_where_column (expr_token));
-         ffebad_finish ();
-       }
-      return;
-    }
-
-  ffestd_R909_item (expr, expr_token);
-}
-
-/* ffestc_R909_finish -- READ statement list complete
-
-   ffestc_R909_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R909_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R909_finish ();
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R910_start -- WRITE(...) statement list begin
-
-   ffestc_R910_start();
-
-   Verify that WRITE is valid here, and begin accepting items in the
-   list.  */
-
-void
-ffestc_R910_start ()
-{
-  ffestvUnit unit;
-  ffestvFormat format;
-  bool rec;
-  ffestpWriteIx spec1;
-  ffestpWriteIx spec2;
-
-  ffestc_check_start_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_branch_begin_ ();
-
-  if (!ffestc_subr_is_branch_
-      (&ffestp_file.write.write_spec[FFESTP_writeixEOR])
-      || !ffestc_subr_is_branch_
-      (&ffestp_file.write.write_spec[FFESTP_writeixERR])
-      || !ffestc_subr_is_format_
-      (&ffestp_file.write.write_spec[FFESTP_writeixFORMAT]))
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-
-  format = ffestc_subr_format_
-    (&ffestp_file.write.write_spec[FFESTP_writeixFORMAT]);
-  ffestc_namelist_ = (format == FFESTV_formatNAMELIST);
-
-  unit = ffestc_subr_unit_
-    (&ffestp_file.write.write_spec[FFESTP_writeixUNIT]);
-  if (unit == FFESTV_unitNONE)
-    {
-      ffebad_start (FFEBAD_NO_UNIT_SPEC);
-      ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      ffebad_finish ();
-      ffestc_ok_ = FALSE;
-      return;
-    }
-
-  rec = ffestp_file.write.write_spec[FFESTP_writeixREC].kw_or_val_present;
-
-  if (rec)
-    {
-      spec1 = FFESTP_writeixREC;
-      if (unit == FFESTV_unitCHAREXPR)
-       {
-         spec2 = FFESTP_writeixUNIT;
-       whine:                  /* :::::::::::::::::::: */
-         ffebad_start (FFEBAD_CONFLICTING_SPECS);
-         assert (ffestp_file.write.write_spec[spec1].kw_or_val_present);
-         if (ffestp_file.write.write_spec[spec1].kw_present)
-           {
-             ffebad_here (0, ffelex_token_where_line
-                          (ffestp_file.write.write_spec[spec1].kw),
-                          ffelex_token_where_column
-                          (ffestp_file.write.write_spec[spec1].kw));
-           }
-         else
-           {
-             ffebad_here (0, ffelex_token_where_line
-                          (ffestp_file.write.write_spec[spec1].value),
-                          ffelex_token_where_column
-                          (ffestp_file.write.write_spec[spec1].value));
-           }
-         assert (ffestp_file.write.write_spec[spec2].kw_or_val_present);
-         if (ffestp_file.write.write_spec[spec2].kw_present)
-           {
-             ffebad_here (1, ffelex_token_where_line
-                          (ffestp_file.write.write_spec[spec2].kw),
-                          ffelex_token_where_column
-                          (ffestp_file.write.write_spec[spec2].kw));
-           }
-         else
-           {
-             ffebad_here (1, ffelex_token_where_line
-                          (ffestp_file.write.write_spec[spec2].value),
-                          ffelex_token_where_column
-                          (ffestp_file.write.write_spec[spec2].value));
-           }
-         ffebad_finish ();
-         ffestc_ok_ = FALSE;
-         return;
-       }
-      if ((format == FFESTV_formatASTERISK)
-         || (format == FFESTV_formatNAMELIST))
-       {
-         spec2 = FFESTP_writeixFORMAT;
-         goto whine;           /* :::::::::::::::::::: */
-       }
-      if (ffestp_file.write.write_spec[FFESTP_writeixADVANCE].kw_or_val_present)
-       {
-         spec2 = FFESTP_writeixADVANCE;
-         goto whine;           /* :::::::::::::::::::: */
-       }
-    }
-  else
-    {                          /* Sequential/Indexed/Internal. */
-      if (unit == FFESTV_unitCHAREXPR)
-       {                       /* Internal file. */
-         spec1 = FFESTP_writeixUNIT;
-         if (format == FFESTV_formatNAMELIST)
-           {
-             spec2 = FFESTP_writeixFORMAT;
-             goto whine;       /* :::::::::::::::::::: */
-           }
-         if (ffestp_file.write.write_spec[FFESTP_writeixADVANCE].kw_or_val_present)
-           {
-             spec2 = FFESTP_writeixADVANCE;
-             goto whine;       /* :::::::::::::::::::: */
-           }
-       }
-      if (ffestp_file.write.write_spec[FFESTP_writeixADVANCE].kw_or_val_present)
-       {                       /* ADVANCE= specified. */
-         spec1 = FFESTP_writeixADVANCE;
-         if (format == FFESTV_formatNONE)
-           {
-             ffebad_start (FFEBAD_MISSING_FORMAT_SPEC);
-             ffebad_here (0, ffelex_token_where_line
-                          (ffestp_file.write.write_spec[spec1].kw),
-                          ffelex_token_where_column
-                          (ffestp_file.write.write_spec[spec1].kw));
-             ffebad_finish ();
-
-             ffestc_ok_ = FALSE;
-             return;
-           }
-         if (format == FFESTV_formatNAMELIST)
-           {
-             spec2 = FFESTP_writeixFORMAT;
-             goto whine;       /* :::::::::::::::::::: */
-           }
-       }
-      if (ffestp_file.write.write_spec[FFESTP_writeixEOR].kw_or_val_present)
-       {                       /* EOR= specified. */
-         spec1 = FFESTP_writeixEOR;
-         if (ffestc_subr_speccmp_ ("No",
-                      &ffestp_file.write.write_spec[FFESTP_writeixADVANCE],
-                                   NULL, NULL) != 0)
-           {
-             if (ffestp_file.write.write_spec[FFESTP_writeixADVANCE]
-                 .kw_or_val_present)
-               {
-                 ffebad_start (FFEBAD_CONFLICTING_SPECS);
-                 ffebad_here (0, ffelex_token_where_line
-                              (ffestp_file.write.write_spec[spec1].kw),
-                              ffelex_token_where_column
-                              (ffestp_file.write.write_spec[spec1].kw));
-                 ffebad_here (1, ffelex_token_where_line
-                  (ffestp_file.write.write_spec[FFESTP_writeixADVANCE].kw),
-                              ffelex_token_where_column
-                 (ffestp_file.write.write_spec[FFESTP_writeixADVANCE].kw));
-                 ffebad_finish ();
-               }
-             else
-               {
-                 ffebad_start (FFEBAD_MISSING_ADVANCE_SPEC);
-                 ffebad_here (0, ffelex_token_where_line
-                              (ffestp_file.write.write_spec[spec1].kw),
-                              ffelex_token_where_column
-                              (ffestp_file.write.write_spec[spec1].kw));
-                 ffebad_finish ();
-               }
-
-             ffestc_ok_ = FALSE;
-             return;
-           }
-       }
-    }
-
-  if (unit == FFESTV_unitCHAREXPR)
-    ffestc_iolist_context_ = FFEEXPR_contextIOLISTDF;
-  else
-    ffestc_iolist_context_ = FFEEXPR_contextIOLIST;
-
-  ffestd_R910_start (unit, format, rec);
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R910_item -- WRITE statement i/o item
-
-   ffestc_R910_item(expr,expr_token);
-
-   Implement output-list expression.  */
-
-void
-ffestc_R910_item (ffebld expr, ffelexToken expr_token)
-{
-  ffestc_check_item_ ();
-  if (!ffestc_ok_)
-    return;
-
-  if (ffestc_namelist_ != 0)
-    {
-      if (ffestc_namelist_ == 1)
-       {
-         ffestc_namelist_ = 2;
-         ffebad_start (FFEBAD_NAMELIST_ITEMS);
-         ffebad_here (0, ffelex_token_where_line (expr_token),
-                      ffelex_token_where_column (expr_token));
-         ffebad_finish ();
-       }
-      return;
-    }
-
-  ffestd_R910_item (expr, expr_token);
-}
-
-/* ffestc_R910_finish -- WRITE statement list complete
-
-   ffestc_R910_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R910_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R910_finish ();
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R911_start -- PRINT(...) statement list begin
-
-   ffestc_R911_start();
-
-   Verify that PRINT is valid here, and begin accepting items in the
-   list.  */
-
-void
-ffestc_R911_start ()
-{
-  ffestvFormat format;
-
-  ffestc_check_start_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_branch_begin_ ();
-
-  if (!ffestc_subr_is_format_
-      (&ffestp_file.print.print_spec[FFESTP_printixFORMAT]))
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-
-  format = ffestc_subr_format_
-    (&ffestp_file.print.print_spec[FFESTP_printixFORMAT]);
-  ffestc_namelist_ = (format == FFESTV_formatNAMELIST);
-
-  ffestd_R911_start (format);
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R911_item -- PRINT statement i/o item
-
-   ffestc_R911_item(expr,expr_token);
-
-   Implement output-list expression.  */
-
-void
-ffestc_R911_item (ffebld expr, ffelexToken expr_token)
-{
-  ffestc_check_item_ ();
-  if (!ffestc_ok_)
-    return;
-
-  if (ffestc_namelist_ != 0)
-    {
-      if (ffestc_namelist_ == 1)
-       {
-         ffestc_namelist_ = 2;
-         ffebad_start (FFEBAD_NAMELIST_ITEMS);
-         ffebad_here (0, ffelex_token_where_line (expr_token),
-                      ffelex_token_where_column (expr_token));
-         ffebad_finish ();
-       }
-      return;
-    }
-
-  ffestd_R911_item (expr, expr_token);
-}
-
-/* ffestc_R911_finish -- PRINT statement list complete
-
-   ffestc_R911_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R911_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R911_finish ();
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R919 -- BACKSPACE statement
-
-   ffestc_R919();
-
-   Make sure a BACKSPACE is valid in the current context, and implement it.  */
-
-void
-ffestc_R919 ()
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  if (ffestc_subr_is_branch_
-      (&ffestp_file.beru.beru_spec[FFESTP_beruixERR])
-      && ffestc_subr_is_present_ ("UNIT",
-                           &ffestp_file.beru.beru_spec[FFESTP_beruixUNIT]))
-    ffestd_R919 ();
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R920 -- ENDFILE statement
-
-   ffestc_R920();
-
-   Make sure a ENDFILE is valid in the current context, and implement it.  */
-
-void
-ffestc_R920 ()
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  if (ffestc_subr_is_branch_
-      (&ffestp_file.beru.beru_spec[FFESTP_beruixERR])
-      && ffestc_subr_is_present_ ("UNIT",
-                           &ffestp_file.beru.beru_spec[FFESTP_beruixUNIT]))
-    ffestd_R920 ();
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R921 -- REWIND statement
-
-   ffestc_R921();
-
-   Make sure a REWIND is valid in the current context, and implement it.  */
-
-void
-ffestc_R921 ()
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  if (ffestc_subr_is_branch_
-      (&ffestp_file.beru.beru_spec[FFESTP_beruixERR])
-      && ffestc_subr_is_present_ ("UNIT",
-                           &ffestp_file.beru.beru_spec[FFESTP_beruixUNIT]))
-    ffestd_R921 ();
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R923A -- INQUIRE statement (non-IOLENGTH version)
-
-   ffestc_R923A();
-
-   Make sure an INQUIRE is valid in the current context, and implement it.  */
-
-void
-ffestc_R923A ()
-{
-  bool by_file;
-  bool by_unit;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  if (ffestc_subr_is_branch_
-      (&ffestp_file.inquire.inquire_spec[FFESTP_inquireixERR]))
-    {
-      by_file = ffestp_file.inquire.inquire_spec[FFESTP_inquireixFILE]
-       .kw_or_val_present;
-      by_unit = ffestp_file.inquire.inquire_spec[FFESTP_inquireixUNIT]
-       .kw_or_val_present;
-      if (by_file && by_unit)
-       {
-         ffebad_start (FFEBAD_CONFLICTING_SPECS);
-         assert (ffestp_file.inquire.inquire_spec[FFESTP_inquireixUNIT].kw_or_val_present);
-         if (ffestp_file.inquire.inquire_spec[FFESTP_inquireixUNIT].kw_present)
-           {
-             ffebad_here (0, ffelex_token_where_line
-               (ffestp_file.inquire.inquire_spec[FFESTP_inquireixUNIT].kw),
-                          ffelex_token_where_column
-              (ffestp_file.inquire.inquire_spec[FFESTP_inquireixUNIT].kw));
-           }
-         else
-           {
-             ffebad_here (0, ffelex_token_where_line
-             (ffestp_file.inquire.inquire_spec[FFESTP_inquireixUNIT].value),
-                          ffelex_token_where_column
-                          (ffestp_file.inquire.inquire_spec[FFESTP_inquireixUNIT].value));
-           }
-         assert (ffestp_file.inquire.inquire_spec[FFESTP_inquireixFILE].kw_or_val_present);
-         if (ffestp_file.inquire.inquire_spec[FFESTP_inquireixFILE].kw_present)
-           {
-             ffebad_here (1, ffelex_token_where_line
-               (ffestp_file.inquire.inquire_spec[FFESTP_inquireixFILE].kw),
-                          ffelex_token_where_column
-              (ffestp_file.inquire.inquire_spec[FFESTP_inquireixFILE].kw));
-           }
-         else
-           {
-             ffebad_here (1, ffelex_token_where_line
-             (ffestp_file.inquire.inquire_spec[FFESTP_inquireixFILE].value),
-                          ffelex_token_where_column
-                          (ffestp_file.inquire.inquire_spec[FFESTP_inquireixFILE].value));
-           }
-         ffebad_finish ();
-       }
-      else if (!by_file && !by_unit)
-       {
-         ffebad_start (FFEBAD_MISSING_SPECIFIER);
-         ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                      ffelex_token_where_column (ffesta_tokens[0]));
-         ffebad_string ("UNIT= or FILE=");
-         ffebad_finish ();
-       }
-      else
-       ffestd_R923A (by_file);
-    }
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R923B_start -- INQUIRE(IOLENGTH=expr) statement list begin
-
-   ffestc_R923B_start();
-
-   Verify that INQUIRE is valid here, and begin accepting items in the
-   list.  */
-
-void
-ffestc_R923B_start ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_branch_begin_ ();
-
-  ffestd_R923B_start ();
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R923B_item -- INQUIRE statement i/o item
-
-   ffestc_R923B_item(expr,expr_token);
-
-   Implement output-list expression.  */
-
-void
-ffestc_R923B_item (ffebld expr, ffelexToken expr_token UNUSED)
-{
-  ffestc_check_item_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R923B_item (expr);
-}
-
-/* ffestc_R923B_finish -- INQUIRE statement list complete
-
-   ffestc_R923B_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R923B_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R923B_finish ();
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R1001 -- FORMAT statement
-
-   ffestc_R1001(format_list);
-
-   Make sure format_list is valid.  Update label's info to indicate it is a
-   FORMAT label, and (perhaps) warn if there is no label!  */
-
-void
-ffestc_R1001 (ffesttFormatList f)
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_format_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_format_ ();
-
-  ffestd_R1001 (f);
-}
-
-/* ffestc_R1102 -- PROGRAM statement
-
-   ffestc_R1102(name_token);
-
-   Make sure ffestc_kind_ identifies an empty block.  Make sure name_token
-   gives a valid name. Implement the beginning of a main program.  */
-
-void
-ffestc_R1102 (ffelexToken name)
-{
-  ffestw b;
-  ffesymbol s;
-
-  assert (name != NULL);
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_unit_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  ffestc_blocknum_ = 0;
-  b = ffestw_update (ffestw_push (NULL));
-  ffestw_set_top_do (b, NULL);
-  ffestw_set_state (b, FFESTV_statePROGRAM0);
-  ffestw_set_blocknum (b, ffestc_blocknum_++);
-  ffestw_set_shriek (b, ffestc_shriek_end_program_);
-
-  ffestw_set_name (b, ffelex_token_use (name));
-
-  s = ffesymbol_declare_programunit (name,
-                                ffelex_token_where_line (ffesta_tokens[0]),
-                             ffelex_token_where_column (ffesta_tokens[0]));
-
-  if (ffesymbol_state (s) == FFESYMBOL_stateNONE)
-    {
-      ffesymbol_set_state (s, FFESYMBOL_stateUNDERSTOOD);
-      ffesymbol_set_info (s,
-                         ffeinfo_new (FFEINFO_basictypeNONE,
-                                      FFEINFO_kindtypeNONE,
-                                      0,
-                                      FFEINFO_kindPROGRAM,
-                                      FFEINFO_whereLOCAL,
-                                      FFETARGET_charactersizeNONE));
-      ffesymbol_signal_unreported (s);
-    }
-  else
-    ffesymbol_error (s, name);
-
-  ffestd_R1102 (s, name);
-}
-
-/* ffestc_R1103 -- END PROGRAM statement
-
-   ffestc_R1103(name_token);
-
-   Make sure ffestc_kind_ identifies the current kind of program unit. If not
-   NULL, make sure name_token gives the correct name.  Implement the end
-   of the current program unit.         */
-
-void
-ffestc_R1103 (ffelexToken name)
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_program_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_notloop_ ();
-
-  if (name != NULL)
-    {
-      if (ffestw_name (ffestw_stack_top ()) == NULL)
-       {
-         ffebad_start (FFEBAD_PROGRAM_NOT_NAMED);
-         ffebad_here (0, ffelex_token_where_line (name),
-                      ffelex_token_where_column (name));
-         ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-         ffebad_finish ();
-       }
-      else if (ffelex_token_strcmp (name, ffestw_name (ffestw_stack_top ())) != 0)
-       {
-         ffebad_start (FFEBAD_UNIT_WRONG_NAME);
-         ffebad_here (0, ffelex_token_where_line (name),
-                      ffelex_token_where_column (name));
-         ffebad_here (1, ffelex_token_where_line (ffestw_name (ffestw_stack_top ())),
-            ffelex_token_where_column (ffestw_name (ffestw_stack_top ())));
-         ffebad_finish ();
-       }
-    }
-
-  ffestc_shriek_end_program_ (TRUE);
-}
-
-/* ffestc_R1105 -- MODULE statement
-
-   ffestc_R1105(name_token);
-
-   Make sure ffestc_kind_ identifies an empty block.  Make sure name_token
-   gives a valid name. Implement the beginning of a module.  */
-
-#if FFESTR_F90
-void
-ffestc_R1105 (ffelexToken name)
-{
-  ffestw b;
-
-  assert (name != NULL);
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_unit_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  ffestc_blocknum_ = 0;
-  b = ffestw_update (ffestw_push (NULL));
-  ffestw_set_top_do (b, NULL);
-  ffestw_set_state (b, FFESTV_stateMODULE0);
-  ffestw_set_blocknum (b, ffestc_blocknum_++);
-  ffestw_set_shriek (b, ffestc_shriek_module_);
-  ffestw_set_name (b, ffelex_token_use (name));
-
-  ffestd_R1105 (name);
-}
-
-/* ffestc_R1106 -- END MODULE statement
-
-   ffestc_R1106(name_token);
-
-   Make sure ffestc_kind_ identifies the current kind of program unit. If not
-   NULL, make sure name_token gives the correct name.  Implement the end
-   of the current program unit.         */
-
-void
-ffestc_R1106 (ffelexToken name)
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_module_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  if ((name != NULL)
-      && (ffelex_token_strcmp (name, ffestw_name (ffestw_stack_top ())) != 0))
-    {
-      ffebad_start (FFEBAD_UNIT_WRONG_NAME);
-      ffebad_here (0, ffelex_token_where_line (name),
-                  ffelex_token_where_column (name));
-      ffebad_here (1, ffelex_token_where_line (ffestw_name (ffestw_stack_top ())),
-            ffelex_token_where_column (ffestw_name (ffestw_stack_top ())));
-      ffebad_finish ();
-    }
-
-  ffestc_shriek_module_ (TRUE);
-}
-
-/* ffestc_R1107_start -- USE statement list begin
-
-   ffestc_R1107_start();
-
-   Verify that USE is valid here, and begin accepting items in the list.  */
-
-void
-ffestc_R1107_start (ffelexToken name, bool only)
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_use_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  ffestd_R1107_start (name, only);
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R1107_item -- USE statement for name
-
-   ffestc_R1107_item(local_token,use_token);
-
-   Make sure name_token identifies a valid object to be USEed. local_token
-   may be NULL if _start_ was called with only==TRUE.  */
-
-void
-ffestc_R1107_item (ffelexToken local, ffelexToken use)
-{
-  ffestc_check_item_ ();
-  assert (use != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R1107_item (local, use);
-}
-
-/* ffestc_R1107_finish -- USE statement list complete
-
-   ffestc_R1107_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R1107_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R1107_finish ();
-}
-
-#endif
-/* ffestc_R1111 -- BLOCK DATA statement
-
-   ffestc_R1111(name_token);
-
-   Make sure ffestc_kind_ identifies no current program unit.  If not
-   NULL, make sure name_token gives a valid name.  Implement the beginning
-   of a block data program unit.  */
-
-void
-ffestc_R1111 (ffelexToken name)
-{
-  ffestw b;
-  ffesymbol s;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_unit_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  ffestc_blocknum_ = 0;
-  b = ffestw_update (ffestw_push (NULL));
-  ffestw_set_top_do (b, NULL);
-  ffestw_set_state (b, FFESTV_stateBLOCKDATA0);
-  ffestw_set_blocknum (b, ffestc_blocknum_++);
-  ffestw_set_shriek (b, ffestc_shriek_blockdata_);
-
-  if (name == NULL)
-    ffestw_set_name (b, NULL);
-  else
-    ffestw_set_name (b, ffelex_token_use (name));
-
-  s = ffesymbol_declare_blockdataunit (name,
-                                ffelex_token_where_line (ffesta_tokens[0]),
-                             ffelex_token_where_column (ffesta_tokens[0]));
-
-  if (ffesymbol_state (s) == FFESYMBOL_stateNONE)
-    {
-      ffesymbol_set_state (s, FFESYMBOL_stateUNDERSTOOD);
-      ffesymbol_set_info (s,
-                         ffeinfo_new (FFEINFO_basictypeNONE,
-                                      FFEINFO_kindtypeNONE,
-                                      0,
-                                      FFEINFO_kindBLOCKDATA,
-                                      FFEINFO_whereLOCAL,
-                                      FFETARGET_charactersizeNONE));
-      ffesymbol_signal_unreported (s);
-    }
-  else
-    ffesymbol_error (s, name);
-
-  ffestd_R1111 (s, name);
-}
-
-/* ffestc_R1112 -- END BLOCK DATA statement
-
-   ffestc_R1112(name_token);
-
-   Make sure ffestc_kind_ identifies the current kind of program unit. If not
-   NULL, make sure name_token gives the correct name.  Implement the end
-   of the current program unit.         */
-
-void
-ffestc_R1112 (ffelexToken name)
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_blockdata_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  if (name != NULL)
-    {
-      if (ffestw_name (ffestw_stack_top ()) == NULL)
-       {
-         ffebad_start (FFEBAD_BLOCKDATA_NOT_NAMED);
-         ffebad_here (0, ffelex_token_where_line (name),
-                      ffelex_token_where_column (name));
-         ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-         ffebad_finish ();
-       }
-      else if (ffelex_token_strcmp (name, ffestw_name (ffestw_stack_top ())) != 0)
-       {
-         ffebad_start (FFEBAD_UNIT_WRONG_NAME);
-         ffebad_here (0, ffelex_token_where_line (name),
-                      ffelex_token_where_column (name));
-         ffebad_here (1, ffelex_token_where_line (ffestw_name (ffestw_stack_top ())),
-            ffelex_token_where_column (ffestw_name (ffestw_stack_top ())));
-         ffebad_finish ();
-       }
-    }
-
-  ffestc_shriek_blockdata_ (TRUE);
-}
-
-/* ffestc_R1202 -- INTERFACE statement
-
-   ffestc_R1202(operator,defined_name);
-
-   Make sure ffestc_kind_ identifies an INTERFACE block.
-   Implement the end of the current interface.
-
-   15-May-90  JCB  1.1
-      Allow no operator or name to mean INTERFACE by itself; missed this
-      valid form when originally doing syntactic analysis code.         */
-
-#if FFESTR_F90
-void
-ffestc_R1202 (ffestpDefinedOperator operator, ffelexToken name)
-{
-  ffestw b;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_interfacespec_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  b = ffestw_update (ffestw_push (NULL));
-  ffestw_set_top_do (b, NULL);
-  ffestw_set_state (b, FFESTV_stateINTERFACE0);
-  ffestw_set_blocknum (b, 0);
-  ffestw_set_shriek (b, ffestc_shriek_interface_);
-
-  if ((operator == FFESTP_definedoperatorNone) && (name == NULL))
-    ffestw_set_substate (b, 0);        /* No generic-spec, so disallow MODULE
-                                  PROCEDURE. */
-  else
-    ffestw_set_substate (b, 1);        /* MODULE PROCEDURE ok. */
-
-  ffestd_R1202 (operator, name);
-
-  ffe_init_4 ();
-}
-
-/* ffestc_R1203 -- END INTERFACE statement
-
-   ffestc_R1203();
-
-   Make sure ffestc_kind_ identifies an INTERFACE block.
-   Implement the end of the current interface. */
-
-void
-ffestc_R1203 ()
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_interface_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  ffestc_shriek_interface_ (TRUE);
-
-  ffe_terminate_4 ();
-}
-
-/* ffestc_R1205_start -- MODULE PROCEDURE statement list begin
-
-   ffestc_R1205_start();
-
-   Verify that MODULE PROCEDURE is valid here, and begin accepting items in
-   the list.  */
-
-void
-ffestc_R1205_start ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_interface_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  if (ffestw_substate (ffestw_stack_top ()) == 0)
-    {
-      ffebad_start (FFEBAD_INVALID_MODULE_PROCEDURE);
-      ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-      ffebad_finish ();
-      ffestc_ok_ = FALSE;
-      return;
-    }
-
-  if (ffestw_state (ffestw_stack_top ()) == FFESTV_stateINTERFACE0)
-    {
-      ffestw_update (NULL);    /* Update state line/col info. */
-      ffestw_set_state (ffestw_stack_top (), FFESTV_stateINTERFACE1);
-    }
-
-  ffestd_R1205_start ();
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R1205_item -- MODULE PROCEDURE statement for name
-
-   ffestc_R1205_item(name_token);
-
-   Make sure name_token identifies a valid object to be MODULE PROCEDUREed.  */
-
-void
-ffestc_R1205_item (ffelexToken name)
-{
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R1205_item (name);
-}
-
-/* ffestc_R1205_finish -- MODULE PROCEDURE statement list complete
-
-   ffestc_R1205_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R1205_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R1205_finish ();
-}
-
-#endif
-/* ffestc_R1207_start -- EXTERNAL statement list begin
-
-   ffestc_R1207_start();
-
-   Verify that EXTERNAL is valid here, and begin accepting items in the list.  */
-
-void
-ffestc_R1207_start ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_progspec_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  ffestd_R1207_start ();
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R1207_item -- EXTERNAL statement for name
-
-   ffestc_R1207_item(name_token);
-
-   Make sure name_token identifies a valid object to be EXTERNALd.  */
-
-void
-ffestc_R1207_item (ffelexToken name)
-{
-  ffesymbol s;
-  ffesymbolAttrs sa;
-  ffesymbolAttrs na;
-
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  s = ffesymbol_declare_local (name, FALSE);
-  sa = ffesymbol_attrs (s);
-
-  /* Figure out what kind of object we've got based on previous declarations
-     of or references to the object. */
-
-  if (!ffesymbol_is_specable (s))
-    na = FFESYMBOL_attrsetNONE;        /* Can't dcl sym ref'd in sfuncdef. */
-  else if (sa & FFESYMBOL_attrsANY)
-    na = FFESYMBOL_attrsANY;
-  else if (!(sa & ~(FFESYMBOL_attrsDUMMY
-                   | FFESYMBOL_attrsTYPE)))
-    na = sa | FFESYMBOL_attrsEXTERNAL;
-  else
-    na = FFESYMBOL_attrsetNONE;
-
-  /* Now see what we've got for a new object: NONE means a new error cropped
-     up; ANY means an old error to be ignored; otherwise, everything's ok,
-     update the object (symbol) and continue on. */
-
-  if (na == FFESYMBOL_attrsetNONE)
-    ffesymbol_error (s, name);
-  else if (!(na & FFESYMBOL_attrsANY))
-    {
-      ffesymbol_set_attrs (s, na);
-      ffesymbol_set_state (s, FFESYMBOL_stateSEEN);
-      ffesymbol_set_explicitwhere (s, TRUE);
-      ffesymbol_reference (s, name, FALSE);
-      ffesymbol_signal_unreported (s);
-    }
-
-  ffestd_R1207_item (name);
-}
-
-/* ffestc_R1207_finish -- EXTERNAL statement list complete
-
-   ffestc_R1207_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R1207_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R1207_finish ();
-}
-
-/* ffestc_R1208_start -- INTRINSIC statement list begin
-
-   ffestc_R1208_start();
-
-   Verify that INTRINSIC is valid here, and begin accepting items in the list. */
-
-void
-ffestc_R1208_start ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_progspec_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  ffestd_R1208_start ();
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R1208_item -- INTRINSIC statement for name
-
-   ffestc_R1208_item(name_token);
-
-   Make sure name_token identifies a valid object to be INTRINSICd.  */
-
-void
-ffestc_R1208_item (ffelexToken name)
-{
-  ffesymbol s;
-  ffesymbolAttrs sa;
-  ffesymbolAttrs na;
-  ffeintrinGen gen;
-  ffeintrinSpec spec;
-  ffeintrinImp imp;
-
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  s = ffesymbol_declare_local (name, TRUE);
-  sa = ffesymbol_attrs (s);
-
-  /* Figure out what kind of object we've got based on previous declarations
-     of or references to the object. */
-
-  if (!ffesymbol_is_specable (s))
-    na = FFESYMBOL_attrsetNONE;        /* Can't dcl sym ref'd in sfuncdef. */
-  else if (sa & FFESYMBOL_attrsANY)
-    na = sa;
-  else if (!(sa & ~FFESYMBOL_attrsTYPE))
-    {
-      if (ffeintrin_is_intrinsic (ffelex_token_text (name), name, TRUE,
-                                 &gen, &spec, &imp)
-         && ((imp == FFEINTRIN_impNONE)
-#if 0  /* Don't bother with this for now. */
-             || ((ffeintrin_basictype (spec)
-                  == ffesymbol_basictype (s))
-                 && (ffeintrin_kindtype (spec)
-                     == ffesymbol_kindtype (s)))
-#else
-             || 1
-#endif
-             || !(sa & FFESYMBOL_attrsTYPE)))
-       na = sa | FFESYMBOL_attrsINTRINSIC;
-      else
-       na = FFESYMBOL_attrsetNONE;
-    }
-  else
-    na = FFESYMBOL_attrsetNONE;
-
-  /* Now see what we've got for a new object: NONE means a new error cropped
-     up; ANY means an old error to be ignored; otherwise, everything's ok,
-     update the object (symbol) and continue on. */
-
-  if (na == FFESYMBOL_attrsetNONE)
-    ffesymbol_error (s, name);
-  else if (!(na & FFESYMBOL_attrsANY))
-    {
-      ffesymbol_set_attrs (s, na);
-      ffesymbol_set_state (s, FFESYMBOL_stateUNDERSTOOD);
-      ffesymbol_set_generic (s, gen);
-      ffesymbol_set_specific (s, spec);
-      ffesymbol_set_implementation (s, imp);
-      ffesymbol_set_info (s,
-                         ffeinfo_new (ffesymbol_basictype (s),
-                                      ffesymbol_kindtype (s),
-                                      0,
-                                      FFEINFO_kindNONE,
-                                      FFEINFO_whereINTRINSIC,
-                                      ffesymbol_size (s)));
-      ffesymbol_set_explicitwhere (s, TRUE);
-      ffesymbol_reference (s, name, TRUE);
-    }
-
-  ffesymbol_signal_unreported (s);
-
-  ffestd_R1208_item (name);
-}
-
-/* ffestc_R1208_finish -- INTRINSIC statement list complete
-
-   ffestc_R1208_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_R1208_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_R1208_finish ();
-}
-
-/* ffestc_R1212 -- CALL statement
-
-   ffestc_R1212(expr,expr_token);
-
-   Make sure statement is valid here; implement.  */
-
-void
-ffestc_R1212 (ffebld expr, ffelexToken expr_token UNUSED)
-{
-  ffebld item;                 /* ITEM. */
-  ffebld labexpr;              /* LABTOK=>LABTER. */
-  ffelab label;
-  bool ok;                     /* TRUE if all LABTOKs were ok. */
-  bool ok1;                    /* TRUE if a particular LABTOK is ok. */
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  if (ffebld_op (expr) != FFEBLD_opSUBRREF)
-    ffestd_R841 (FALSE);       /* CONTINUE. */
-  else
-    {
-      ok = TRUE;
-
-      for (item = ffebld_right (expr);
-          item != NULL;
-          item = ffebld_trail (item))
-       {
-         if (((labexpr = ffebld_head (item)) != NULL)
-             && (ffebld_op (labexpr) == FFEBLD_opLABTOK))
-           {
-             ok1 = ffestc_labelref_is_branch_ (ffebld_labtok (labexpr),
-                                               &label);
-             ffelex_token_kill (ffebld_labtok (labexpr));
-             if (!ok1)
-               {
-                 label = NULL;
-                 ok = FALSE;
-               }
-             ffebld_set_op (labexpr, FFEBLD_opLABTER);
-             ffebld_set_labter (labexpr, label);
-           }
-       }
-
-      if (ok)
-       ffestd_R1212 (expr);
-    }
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R1213 -- Defined assignment statement
-
-   ffestc_R1213(dest_expr,source_expr,source_token);
-
-   Make sure the assignment is valid.  */
-
-#if FFESTR_F90
-void
-ffestc_R1213 (ffebld dest, ffebld source, ffelexToken source_token)
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  ffestd_R1213 (dest, source);
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-#endif
-/* ffestc_R1219 -- FUNCTION statement
-
-   ffestc_R1219(funcname,arglist,ending_token,kind,kindt,len,lent,
-        recursive);
-
-   Make sure statement is valid here, register arguments for the
-   function name, and so on.
-
-   06-Apr-90  JCB  2.0
-      Added the kind, len, and recursive arguments.  */
-
-void
-ffestc_R1219 (ffelexToken funcname, ffesttTokenList args,
-             ffelexToken final UNUSED, ffestpType type, ffebld kind,
-             ffelexToken kindt, ffebld len, ffelexToken lent,
-             ffelexToken recursive, ffelexToken result)
-{
-  ffestw b;
-  ffesymbol s;
-  ffesymbol fs;                        /* FUNCTION symbol when dealing with RESULT
-                                  symbol. */
-  ffesymbolAttrs sa;
-  ffesymbolAttrs na;
-  ffelexToken res;
-  bool separate_result;
-
-  assert ((funcname != NULL)
-         && (ffelex_token_type (funcname) == FFELEX_typeNAME));
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_iface_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  ffestc_blocknum_ = 0;
-  ffesta_is_entry_valid =
-    (ffestw_state (ffestw_stack_top ()) == FFESTV_stateNIL);
-  b = ffestw_update (ffestw_push (NULL));
-  ffestw_set_top_do (b, NULL);
-  ffestw_set_state (b, FFESTV_stateFUNCTION0);
-  ffestw_set_blocknum (b, ffestc_blocknum_++);
-  ffestw_set_shriek (b, ffestc_shriek_function_);
-  ffestw_set_name (b, ffelex_token_use (funcname));
-
-  if (type == FFESTP_typeNone)
-    {
-      ffestc_local_.decl.basic_type = FFEINFO_basictypeNONE;
-      ffestc_local_.decl.kind_type = FFEINFO_kindtypeNONE;
-      ffestc_local_.decl.size = FFETARGET_charactersizeNONE;
-    }
-  else
-    {
-      ffestc_establish_declstmt_ (type, ffesta_tokens[0],
-                                 kind, kindt, len, lent);
-      ffestc_establish_declinfo_ (NULL, NULL, NULL, NULL);
-    }
-
-  separate_result = (result != NULL)
-    && (ffelex_token_strcmp (funcname, result) != 0);
-
-  if (separate_result)
-    fs = ffesymbol_declare_funcnotresunit (funcname);  /* Global/local. */
-  else
-    fs = ffesymbol_declare_funcunit (funcname);        /* Global only. */
-
-  if (ffesymbol_state (fs) == FFESYMBOL_stateNONE)
-    {
-      ffesymbol_set_state (fs, FFESYMBOL_stateUNDERSTOOD);
-      ffesymbol_signal_unreported (fs);
-
-      /* Note that .basic_type and .kind_type might be NONE here. */
-
-      ffesymbol_set_info (fs,
-                         ffeinfo_new (ffestc_local_.decl.basic_type,
-                                      ffestc_local_.decl.kind_type,
-                                      0,
-                                      FFEINFO_kindFUNCTION,
-                                      FFEINFO_whereLOCAL,
-                                      ffestc_local_.decl.size));
-
-      /* Check whether the type info fits the filewide expectations;
-        set ok flag accordingly.  */
-
-      ffesymbol_reference (fs, funcname, FALSE);
-      if (ffesymbol_attrs (fs) & FFESYMBOL_attrsANY)
-       ffestc_parent_ok_ = FALSE;
-      else
-       ffestc_parent_ok_ = TRUE;
-    }
-  else
-    {
-      if (ffesymbol_kind (fs) != FFEINFO_kindANY)
-       ffesymbol_error (fs, funcname);
-      ffestc_parent_ok_ = FALSE;
-    }
-
-  if (ffestc_parent_ok_)
-    {
-      ffebld_init_list (&fs->dummy_args, &ffestc_local_.dummy.list_bottom);
-      ffestt_tokenlist_drive (args, ffestc_promote_dummy_);
-      ffebld_end_list (&ffestc_local_.dummy.list_bottom);
-    }
-
-  if (result == NULL)
-    res = funcname;
-  else
-    res = result;
-
-  s = ffesymbol_declare_funcresult (res);
-  sa = ffesymbol_attrs (s);
-
-  /* Figure out what kind of object we've got based on previous declarations
-     of or references to the object. */
-
-  if (sa & FFESYMBOL_attrsANY)
-    na = FFESYMBOL_attrsANY;
-  else if (ffesymbol_state (s) != FFESYMBOL_stateNONE)
-    na = FFESYMBOL_attrsetNONE;
-  else
-    {
-      na = FFESYMBOL_attrsRESULT;
-      if (ffestc_local_.decl.basic_type != FFEINFO_basictypeNONE)
-       {
-         na |= FFESYMBOL_attrsTYPE;
-         if ((ffestc_local_.decl.basic_type == FFEINFO_basictypeCHARACTER)
-             && (ffestc_local_.decl.size == FFETARGET_charactersizeNONE))
-           na |= FFESYMBOL_attrsANYLEN;
-       }
-    }
-
-  /* Now see what we've got for a new object: NONE means a new error cropped
-     up; ANY means an old error to be ignored; otherwise, everything's ok,
-     update the object (symbol) and continue on. */
-
-  if ((na & ~FFESYMBOL_attrsANY) == FFESYMBOL_attrsetNONE)
-    {
-      if (!(na & FFESYMBOL_attrsANY))
-       ffesymbol_error (s, res);
-      ffesymbol_set_funcresult (fs, NULL);
-      ffesymbol_set_funcresult (s, NULL);
-      ffestc_parent_ok_ = FALSE;
-    }
-  else
-    {
-      ffesymbol_set_attrs (s, na);
-      ffesymbol_set_state (s, FFESYMBOL_stateSEEN);
-      ffesymbol_set_funcresult (fs, s);
-      ffesymbol_set_funcresult (s, fs);
-      if (ffestc_local_.decl.basic_type != FFEINFO_basictypeNONE)
-       {
-         ffesymbol_set_info (s,
-                             ffeinfo_new (ffestc_local_.decl.basic_type,
-                                          ffestc_local_.decl.kind_type,
-                                          0,
-                                          FFEINFO_kindNONE,
-                                          FFEINFO_whereNONE,
-                                          ffestc_local_.decl.size));
-       }
-    }
-
-  ffesymbol_signal_unreported (fs);
-
-  ffestd_R1219 (fs, funcname, args, type, kind, kindt, len, lent,
-               (recursive != NULL), result, separate_result);
-}
-
-/* ffestc_R1221 -- END FUNCTION statement
-
-   ffestc_R1221(name_token);
-
-   Make sure ffestc_kind_ identifies the current kind of program unit. If
-   not NULL, make sure name_token gives the correct name.  Implement the end
-   of the current program unit.         */
-
-void
-ffestc_R1221 (ffelexToken name)
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_function_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_notloop_ ();
-
-  if ((name != NULL)
-    && (ffelex_token_strcmp (name, ffestw_name (ffestw_stack_top ())) != 0))
-    {
-      ffebad_start (FFEBAD_UNIT_WRONG_NAME);
-      ffebad_here (0, ffelex_token_where_line (name),
-                  ffelex_token_where_column (name));
-      ffebad_here (1, ffelex_token_where_line (ffestw_name (ffestw_stack_top ())),
-            ffelex_token_where_column (ffestw_name (ffestw_stack_top ())));
-      ffebad_finish ();
-    }
-
-  ffestc_shriek_function_ (TRUE);
-}
-
-/* ffestc_R1223 -- SUBROUTINE statement
-
-   ffestc_R1223(subrname,arglist,ending_token,recursive_token);
-
-   Make sure statement is valid here, register arguments for the
-   subroutine name, and so on.
-
-   06-Apr-90  JCB  2.0
-      Added the recursive argument.  */
-
-void
-ffestc_R1223 (ffelexToken subrname, ffesttTokenList args,
-             ffelexToken final, ffelexToken recursive)
-{
-  ffestw b;
-  ffesymbol s;
-
-  assert ((subrname != NULL)
-         && (ffelex_token_type (subrname) == FFELEX_typeNAME));
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_iface_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  ffestc_blocknum_ = 0;
-  ffesta_is_entry_valid
-    = (ffestw_state (ffestw_stack_top ()) == FFESTV_stateNIL);
-  b = ffestw_update (ffestw_push (NULL));
-  ffestw_set_top_do (b, NULL);
-  ffestw_set_state (b, FFESTV_stateSUBROUTINE0);
-  ffestw_set_blocknum (b, ffestc_blocknum_++);
-  ffestw_set_shriek (b, ffestc_shriek_subroutine_);
-  ffestw_set_name (b, ffelex_token_use (subrname));
-
-  s = ffesymbol_declare_subrunit (subrname);
-  if (ffesymbol_state (s) == FFESYMBOL_stateNONE)
-    {
-      ffesymbol_set_state (s, FFESYMBOL_stateUNDERSTOOD);
-      ffesymbol_set_info (s,
-                         ffeinfo_new (FFEINFO_basictypeNONE,
-                                      FFEINFO_kindtypeNONE,
-                                      0,
-                                      FFEINFO_kindSUBROUTINE,
-                                      FFEINFO_whereLOCAL,
-                                      FFETARGET_charactersizeNONE));
-      ffestc_parent_ok_ = TRUE;
-    }
-  else
-    {
-      if (ffesymbol_kind (s) != FFEINFO_kindANY)
-       ffesymbol_error (s, subrname);
-      ffestc_parent_ok_ = FALSE;
-    }
-
-  if (ffestc_parent_ok_)
-    {
-      ffebld_init_list (&s->dummy_args, &ffestc_local_.dummy.list_bottom);
-      ffestt_tokenlist_drive (args, ffestc_promote_dummy_);
-      ffebld_end_list (&ffestc_local_.dummy.list_bottom);
-    }
-
-  ffesymbol_signal_unreported (s);
-
-  ffestd_R1223 (s, subrname, args, final, (recursive != NULL));
-}
-
-/* ffestc_R1225 -- END SUBROUTINE statement
-
-   ffestc_R1225(name_token);
-
-   Make sure ffestc_kind_ identifies the current kind of program unit. If
-   not NULL, make sure name_token gives the correct name.  Implement the end
-   of the current program unit.         */
-
-void
-ffestc_R1225 (ffelexToken name)
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_subroutine_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_notloop_ ();
-
-  if ((name != NULL)
-    && (ffelex_token_strcmp (name, ffestw_name (ffestw_stack_top ())) != 0))
-    {
-      ffebad_start (FFEBAD_UNIT_WRONG_NAME);
-      ffebad_here (0, ffelex_token_where_line (name),
-                  ffelex_token_where_column (name));
-      ffebad_here (1, ffelex_token_where_line (ffestw_name (ffestw_stack_top ())),
-            ffelex_token_where_column (ffestw_name (ffestw_stack_top ())));
-      ffebad_finish ();
-    }
-
-  ffestc_shriek_subroutine_ (TRUE);
-}
-
-/* ffestc_R1226 -- ENTRY statement
-
-   ffestc_R1226(entryname,arglist,ending_token);
-
-   Make sure we're in a SUBROUTINE or FUNCTION, register arguments for the
-   entry point name, and so on.         */
-
-void
-ffestc_R1226 (ffelexToken entryname, ffesttTokenList args,
-             ffelexToken final UNUSED)
-{
-  ffesymbol s;
-  ffesymbol fs;
-  ffesymbolAttrs sa;
-  ffesymbolAttrs na;
-  bool in_spec;                        /* TRUE if further specification statements
-                                  may follow, FALSE if executable stmts. */
-  bool in_func;                        /* TRUE if ENTRY is a FUNCTION, not
-                                  SUBROUTINE. */
-
-  assert ((entryname != NULL)
-         && (ffelex_token_type (entryname) == FFELEX_typeNAME));
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_entry_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateFUNCTION1:
-    case FFESTV_stateFUNCTION2:
-    case FFESTV_stateFUNCTION3:
-      in_func = TRUE;
-      in_spec = TRUE;
-      break;
-
-    case FFESTV_stateFUNCTION4:
-      in_func = TRUE;
-      in_spec = FALSE;
-      break;
-
-    case FFESTV_stateSUBROUTINE1:
-    case FFESTV_stateSUBROUTINE2:
-    case FFESTV_stateSUBROUTINE3:
-      in_func = FALSE;
-      in_spec = TRUE;
-      break;
-
-    case FFESTV_stateSUBROUTINE4:
-      in_func = FALSE;
-      in_spec = FALSE;
-      break;
-
-    default:
-      assert ("ENTRY not in FUNCTION or SUBROUTINE?" == NULL);
-      in_func = FALSE;
-      in_spec = FALSE;
-      break;
-    }
-
-  if (in_func)
-    fs = ffesymbol_declare_funcunit (entryname);
-  else
-    fs = ffesymbol_declare_subrunit (entryname);
-
-  if (ffesymbol_state (fs) == FFESYMBOL_stateNONE)
-    ffesymbol_set_state (fs, FFESYMBOL_stateUNDERSTOOD);
-  else
-    {
-      if (ffesymbol_kind (fs) != FFEINFO_kindANY)
-       ffesymbol_error (fs, entryname);
-    }
-
-  ++ffestc_entry_num_;
-
-  ffebld_init_list (&fs->dummy_args, &ffestc_local_.dummy.list_bottom);
-  if (in_spec)
-    ffestt_tokenlist_drive (args, ffestc_promote_dummy_);
-  else
-    ffestt_tokenlist_drive (args, ffestc_promote_execdummy_);
-  ffebld_end_list (&ffestc_local_.dummy.list_bottom);
-
-  if (in_func)
-    {
-      s = ffesymbol_declare_funcresult (entryname);
-      ffesymbol_set_funcresult (fs, s);
-      ffesymbol_set_funcresult (s, fs);
-      sa = ffesymbol_attrs (s);
-
-      /* Figure out what kind of object we've got based on previous
-        declarations of or references to the object. */
-
-      if (ffesymbol_state (s) == FFESYMBOL_stateUNDERSTOOD)
-       na = FFESYMBOL_attrsetNONE;
-      else if (sa & FFESYMBOL_attrsANY)
-       na = FFESYMBOL_attrsANY;
-      else if (!(sa & ~(FFESYMBOL_attrsANYLEN
-                       | FFESYMBOL_attrsTYPE)))
-       na = sa | FFESYMBOL_attrsRESULT;
-      else
-       na = FFESYMBOL_attrsetNONE;
-
-      /* Now see what we've got for a new object: NONE means a new error
-        cropped up; ANY means an old error to be ignored; otherwise,
-        everything's ok, update the object (symbol) and continue on. */
-
-      if (na == FFESYMBOL_attrsetNONE)
-       {
-         ffesymbol_error (s, entryname);
-         ffestc_parent_ok_ = FALSE;
-       }
-      else if (na & FFESYMBOL_attrsANY)
-       {
-         ffestc_parent_ok_ = FALSE;
-       }
-      else
-       {
-         ffesymbol_set_attrs (s, na);
-         if (ffesymbol_state (s) == FFESYMBOL_stateNONE)
-           ffesymbol_set_state (s, FFESYMBOL_stateSEEN);
-         else if (ffesymbol_state (s) == FFESYMBOL_stateUNCERTAIN)
-           {
-             ffesymbol_set_state (s, FFESYMBOL_stateUNDERSTOOD);
-             ffesymbol_set_info (s,
-                                 ffeinfo_new (ffesymbol_basictype (s),
-                                              ffesymbol_kindtype (s),
-                                              0,
-                                              FFEINFO_kindENTITY,
-                                              FFEINFO_whereRESULT,
-                                              ffesymbol_size (s)));
-             ffesymbol_resolve_intrin (s);
-             ffestorag_exec_layout (s);
-           }
-       }
-
-      /* Since ENTRY might appear after executable stmts, do what would have
-        been done if it hadn't -- give symbol implicit type and
-        exec-transition it.  */
-
-      if (!in_spec && ffesymbol_is_specable (s))
-       {
-         if (!ffeimplic_establish_symbol (s))  /* Do implicit typing. */
-           ffesymbol_error (s, entryname);
-         s = ffecom_sym_exec_transition (s);
-       }
-
-      /* Use whatever type info is available for ENTRY to set up type for its
-        global-name-space function symbol relative.  */
-
-      ffesymbol_set_info (fs,
-                         ffeinfo_new (ffesymbol_basictype (s),
-                                      ffesymbol_kindtype (s),
-                                      0,
-                                      FFEINFO_kindFUNCTION,
-                                      FFEINFO_whereLOCAL,
-                                      ffesymbol_size (s)));
-
-
-      /* Check whether the type info fits the filewide expectations;
-        set ok flag accordingly.  */
-
-      ffesymbol_reference (fs, entryname, FALSE);
-
-      /* ~~Question??:
-        When ENTRY FOO() RESULT(IBAR) is supported, what will the typing be
-        if FOO and IBAR would normally end up with different types?  I think
-        the answer is that FOO is always given whatever type would be chosen
-        for IBAR, rather than the other way around, and I think it ends up
-        working that way for FUNCTION FOO() RESULT(IBAR), but this should be
-        checked out in all its different combos. Related question is, is
-        there any way that FOO in either case ends up without type info
-        filled in?  Does anyone care?  */
-
-      ffesymbol_signal_unreported (s);
-    }
-  else
-    {
-      ffesymbol_set_info (fs,
-                         ffeinfo_new (FFEINFO_basictypeNONE,
-                                      FFEINFO_kindtypeNONE,
-                                      0,
-                                      FFEINFO_kindSUBROUTINE,
-                                      FFEINFO_whereLOCAL,
-                                      FFETARGET_charactersizeNONE));
-    }
-
-  if (!in_spec)
-    fs = ffecom_sym_exec_transition (fs);
-
-  ffesymbol_signal_unreported (fs);
-
-  ffestd_R1226 (fs);
-}
-
-/* ffestc_R1227 -- RETURN statement
-
-   ffestc_R1227(expr,expr_token);
-
-   Make sure statement is valid here; implement.  expr and expr_token are
-   both NULL if there was no expression.  */
-
-void
-ffestc_R1227 (ffebld expr, ffelexToken expr_token)
-{
-  ffestw b;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_notloop_begin_ ();
-
-  for (b = ffestw_stack_top (); ; b = ffestw_previous (b))
-    {
-      switch (ffestw_state (b))
-       {
-       case FFESTV_statePROGRAM4:
-       case FFESTV_stateSUBROUTINE4:
-       case FFESTV_stateFUNCTION4:
-         goto base;            /* :::::::::::::::::::: */
-
-       case FFESTV_stateNIL:
-         assert ("bad state" == NULL);
-         break;
-
-       default:
-         break;
-       }
-    }
-
- base:
-  switch (ffestw_state (b))
-    {
-    case FFESTV_statePROGRAM4:
-      if (ffe_is_pedantic ())
-       {
-         ffebad_start (FFEBAD_RETURN_IN_MAIN);
-         ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                      ffelex_token_where_column (ffesta_tokens[0]));
-         ffebad_finish ();
-       }
-      if (expr != NULL)
-       {
-         ffebad_start (FFEBAD_ALTRETURN_IN_PROGRAM);
-         ffebad_here (0, ffelex_token_where_line (expr_token),
-                      ffelex_token_where_column (expr_token));
-         ffebad_finish ();
-         expr = NULL;
-       }
-      break;
-
-    case FFESTV_stateSUBROUTINE4:
-      break;
-
-    case FFESTV_stateFUNCTION4:
-      if (expr != NULL)
-       {
-         ffebad_start (FFEBAD_ALTRETURN_IN_FUNCTION);
-         ffebad_here (0, ffelex_token_where_line (expr_token),
-                      ffelex_token_where_column (expr_token));
-         ffebad_finish ();
-         expr = NULL;
-       }
-      break;
-
-    default:
-      assert ("bad state #2" == NULL);
-      break;
-    }
-
-  ffestd_R1227 (expr);
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-
-  /* notloop's that are actionif's can be the target of a loop-end
-     statement if they're in the "then" part of a logical IF, as
-     in "DO 10", "10 IF (...) RETURN".  */
-
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_R1228 -- CONTAINS statement
-
-   ffestc_R1228();  */
-
-#if FFESTR_F90
-void
-ffestc_R1228 ()
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_contains_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  ffestd_R1228 ();
-
-  ffe_terminate_3 ();
-  ffe_init_3 ();
-}
-
-#endif
-/* ffestc_R1229_start -- STMTFUNCTION statement begin
-
-   ffestc_R1229_start(func_name,func_arg_list,close_paren);
-
-   Verify that STMTFUNCTION is valid here, establish func_arg_list in a new
-   "live" scope within the current scope, and expect the actual expression
-   (or NULL) in ffestc_R1229_finish.  The reason there are two ffestc
-   functions to handle this is so the scope can be established, allowing
-   ffeexpr to assign proper characteristics to references to the dummy
-   arguments.  */
-
-void
-ffestc_R1229_start (ffelexToken name, ffesttTokenList args,
-                   ffelexToken final UNUSED)
-{
-  ffesymbol s;
-  ffesymbolAttrs sa;
-  ffesymbolAttrs na;
-
-  ffestc_check_start_ ();
-  if (ffestc_order_sfunc_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  assert (name != NULL);
-  assert (args != NULL);
-
-  s = ffesymbol_declare_local (name, FALSE);
-  sa = ffesymbol_attrs (s);
-
-  /* Figure out what kind of object we've got based on previous declarations
-     of or references to the object. */
-
-  if (!ffesymbol_is_specable (s))
-    na = FFESYMBOL_attrsetNONE;        /* Can't dcl sym ref'd in sfuncdef. */
-  else if (sa & FFESYMBOL_attrsANY)
-    na = FFESYMBOL_attrsANY;
-  else if (!(sa & ~FFESYMBOL_attrsTYPE))
-    na = sa | FFESYMBOL_attrsSFUNC;
-  else
-    na = FFESYMBOL_attrsetNONE;
-
-  /* Now see what we've got for a new object: NONE means a new error cropped
-     up; ANY means an old error to be ignored; otherwise, everything's ok,
-     update the object (symbol) and continue on. */
-
-  if (na == FFESYMBOL_attrsetNONE)
-    {
-      ffesymbol_error (s, name);
-      ffestc_parent_ok_ = FALSE;
-    }
-  else if (na & FFESYMBOL_attrsANY)
-    ffestc_parent_ok_ = FALSE;
-  else
-    {
-      ffesymbol_set_attrs (s, na);
-      ffesymbol_set_state (s, FFESYMBOL_stateSEEN);
-      if (!ffeimplic_establish_symbol (s)
-         || ((ffesymbol_basictype (s) == FFEINFO_basictypeCHARACTER)
-             && (ffesymbol_size (s) == FFETARGET_charactersizeNONE)))
-       {
-         ffesymbol_error (s, ffesta_tokens[0]);
-         ffestc_parent_ok_ = FALSE;
-       }
-      else
-       {
-         /* Tell ffeexpr that sfunc def is in progress.  */
-         ffesymbol_set_sfexpr (s, ffebld_new_any ());
-         ffebld_set_info (ffesymbol_sfexpr (s), ffeinfo_new_any ());
-         ffestc_parent_ok_ = TRUE;
-       }
-    }
-
-  ffe_init_4 ();
-
-  if (ffestc_parent_ok_)
-    {
-      ffebld_init_list (&s->dummy_args, &ffestc_local_.dummy.list_bottom);
-      ffestc_sfdummy_argno_ = 0;
-      ffestt_tokenlist_drive (args, ffestc_promote_sfdummy_);
-      ffebld_end_list (&ffestc_local_.dummy.list_bottom);
-    }
-
-  ffestc_local_.sfunc.symbol = s;
-
-  ffestd_R1229_start (name, args);
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_R1229_finish -- STMTFUNCTION statement list complete
-
-   ffestc_R1229_finish(expr,expr_token);
-
-   If expr is NULL, an error occurred parsing the expansion expression, so
-   just cancel the effects of ffestc_R1229_start and pretend nothing
-   happened.  Otherwise, install the expression as the expansion for the
-   statement function named in _start_, then clean up. */
-
-void
-ffestc_R1229_finish (ffebld expr, ffelexToken expr_token)
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  if (ffestc_parent_ok_ && (expr != NULL))
-    ffesymbol_set_sfexpr (ffestc_local_.sfunc.symbol,
-                         ffeexpr_convert_to_sym (expr,
-                                                 expr_token,
-                                                 ffestc_local_.sfunc.symbol,
-                                                 ffesta_tokens[0]));
-
-  ffestd_R1229_finish (ffestc_local_.sfunc.symbol);
-
-  ffesymbol_signal_unreported (ffestc_local_.sfunc.symbol);
-
-  ffe_terminate_4 ();
-}
-
-/* ffestc_S3P4 -- INCLUDE line
-
-   ffestc_S3P4(filename,filename_token);
-
-   Make sure INCLUDE not preceded by any semicolons or a label def; implement. */
-
-void
-ffestc_S3P4 (ffebld filename, ffelexToken filename_token UNUSED)
-{
-  ffestc_check_simple_ ();
-  ffestc_labeldef_invalid_ ();
-
-  ffestd_S3P4 (filename);
-}
-
-/* ffestc_V003_start -- STRUCTURE statement list begin
-
-   ffestc_V003_start(structure_name);
-
-   Verify that STRUCTURE is valid here, and begin accepting items in the list. */
-
-#if FFESTR_VXT
-void
-ffestc_V003_start (ffelexToken structure_name)
-{
-  ffestw b;
-
-  ffestc_check_start_ ();
-  if (ffestc_order_vxtstructure_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateSTRUCTURE:
-    case FFESTV_stateMAP:
-      ffestc_local_.V003.list_state = 2;       /* Require at least one field
-                                                  name. */
-      ffestw_set_substate (ffestw_stack_top (), 1);    /* Seen at least one
-                                                          member. */
-      break;
-
-    default:
-      ffestc_local_.V003.list_state = 0;       /* No field names required. */
-      if (structure_name == NULL)
-       {
-         ffebad_start (FFEBAD_STRUCT_MISSING_NAME);
-         ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                      ffelex_token_where_column (ffesta_tokens[0]));
-         ffebad_finish ();
-       }
-      break;
-    }
-
-  b = ffestw_update (ffestw_push (NULL));
-  ffestw_set_top_do (b, NULL);
-  ffestw_set_state (b, FFESTV_stateSTRUCTURE);
-  ffestw_set_blocknum (b, 0);
-  ffestw_set_shriek (b, ffestc_shriek_structure_);
-  ffestw_set_substate (b, 0);  /* No field-declarations seen yet. */
-
-  ffestd_V003_start (structure_name);
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_V003_item -- STRUCTURE statement for object-name
-
-   ffestc_V003_item(name_token,dim_list);
-
-   Make sure name_token identifies a valid object to be STRUCTUREd.  */
-
-void
-ffestc_V003_item (ffelexToken name, ffesttDimList dims)
-{
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  if (ffestc_local_.V003.list_state < 2)
-    {
-      if (ffestc_local_.V003.list_state == 0)
-       {
-         ffestc_local_.V003.list_state = 1;
-         ffebad_start (FFEBAD_STRUCT_IGNORING_FIELD);
-         ffebad_here (0, ffelex_token_where_line (name),
-                      ffelex_token_where_column (name));
-         ffebad_finish ();
-       }
-      return;
-    }
-  ffestc_local_.V003.list_state = 3;   /* Have at least one field name. */
-
-  if (dims != NULL)
-    ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-
-  ffestd_V003_item (name, dims);
-}
-
-/* ffestc_V003_finish -- STRUCTURE statement list complete
-
-   ffestc_V003_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_V003_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  if (ffestc_local_.V003.list_state == 2)
-    {
-      ffebad_start (FFEBAD_STRUCT_MISSING_FIELD);
-      ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      ffebad_here (1, ffestw_line (ffestw_previous (ffestw_stack_top ())),
-                  ffestw_col (ffestw_previous (ffestw_stack_top ())));
-      ffebad_finish ();
-    }
-
-  ffestd_V003_finish ();
-}
-
-/* ffestc_V004 -- END STRUCTURE statement
-
-   ffestc_V004();
-
-   Make sure ffestc_kind_ identifies a STRUCTURE block.
-   Implement the end of the current STRUCTURE block.  */
-
-void
-ffestc_V004 ()
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_structure_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  if (ffestw_substate (ffestw_stack_top ()) != 1)
-    {
-      ffebad_start (FFEBAD_STRUCT_NO_COMPONENTS);
-      ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-      ffebad_finish ();
-    }
-
-  ffestc_shriek_structure_ (TRUE);
-}
-
-/* ffestc_V009 -- UNION statement
-
-   ffestc_V009();  */
-
-void
-ffestc_V009 ()
-{
-  ffestw b;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_structure_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  ffestw_set_substate (ffestw_stack_top (), 1);        /* Seen at least one member. */
-
-  b = ffestw_update (ffestw_push (NULL));
-  ffestw_set_top_do (b, NULL);
-  ffestw_set_state (b, FFESTV_stateUNION);
-  ffestw_set_blocknum (b, 0);
-  ffestw_set_shriek (b, ffestc_shriek_union_);
-  ffestw_set_substate (b, 0);  /* No map decls seen yet. */
-
-  ffestd_V009 ();
-}
-
-/* ffestc_V010 -- END UNION statement
-
-   ffestc_V010();
-
-   Make sure ffestc_kind_ identifies a UNION block.
-   Implement the end of the current UNION block.  */
-
-void
-ffestc_V010 ()
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_union_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  if (ffestw_substate (ffestw_stack_top ()) != 2)
-    {
-      ffebad_start (FFEBAD_UNION_NO_TWO_MAPS);
-      ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-      ffebad_finish ();
-    }
-
-  ffestc_shriek_union_ (TRUE);
-}
-
-/* ffestc_V012 -- MAP statement
-
-   ffestc_V012();  */
-
-void
-ffestc_V012 ()
-{
-  ffestw b;
-
-  ffestc_check_simple_ ();
-  if (ffestc_order_union_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  if (ffestw_substate (ffestw_stack_top ()) != 2)
-    ffestw_substate (ffestw_stack_top ())++;   /* 0=>1, 1=>2. */
-
-  b = ffestw_update (ffestw_push (NULL));
-  ffestw_set_top_do (b, NULL);
-  ffestw_set_state (b, FFESTV_stateMAP);
-  ffestw_set_blocknum (b, 0);
-  ffestw_set_shriek (b, ffestc_shriek_map_);
-  ffestw_set_substate (b, 0);  /* No field-declarations seen yet. */
-
-  ffestd_V012 ();
-}
-
-/* ffestc_V013 -- END MAP statement
-
-   ffestc_V013();
-
-   Make sure ffestc_kind_ identifies a MAP block.
-   Implement the end of the current MAP block. */
-
-void
-ffestc_V013 ()
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_map_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_useless_ ();
-
-  if (ffestw_substate (ffestw_stack_top ()) != 1)
-    {
-      ffebad_start (FFEBAD_MAP_NO_COMPONENTS);
-      ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      ffebad_here (1, ffestw_line (ffestw_stack_top ()), ffestw_col (ffestw_stack_top ()));
-      ffebad_finish ();
-    }
-
-  ffestc_shriek_map_ (TRUE);
-}
-
-#endif
-/* ffestc_V014_start -- VOLATILE statement list begin
-
-   ffestc_V014_start();
-
-   Verify that VOLATILE is valid here, and begin accepting items in the
-   list.  */
-
-void
-ffestc_V014_start ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_progspec_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  ffestd_V014_start ();
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_V014_item_object -- VOLATILE statement for object-name
-
-   ffestc_V014_item_object(name_token);
-
-   Make sure name_token identifies a valid object to be VOLATILEd.  */
-
-void
-ffestc_V014_item_object (ffelexToken name)
-{
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_V014_item_object (name);
-}
-
-/* ffestc_V014_item_cblock -- VOLATILE statement for common-block-name
-
-   ffestc_V014_item_cblock(name_token);
-
-   Make sure name_token identifies a valid common block to be VOLATILEd.  */
-
-void
-ffestc_V014_item_cblock (ffelexToken name)
-{
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_V014_item_cblock (name);
-}
-
-/* ffestc_V014_finish -- VOLATILE statement list complete
-
-   ffestc_V014_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_V014_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_V014_finish ();
-}
-
-/* ffestc_V016_start -- RECORD statement list begin
-
-   ffestc_V016_start();
-
-   Verify that RECORD is valid here, and begin accepting items in the list.  */
-
-#if FFESTR_VXT
-void
-ffestc_V016_start ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_record_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  switch (ffestw_state (ffestw_stack_top ()))
-    {
-    case FFESTV_stateSTRUCTURE:
-    case FFESTV_stateMAP:
-      ffestw_set_substate (ffestw_stack_top (), 1);    /* Seen at least one
-                                                          member. */
-      break;
-
-    default:
-      break;
-    }
-
-  ffestd_V016_start ();
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_V016_item_structure -- RECORD statement for common-block-name
-
-   ffestc_V016_item_structure(name_token);
-
-   Make sure name_token identifies a valid structure to be RECORDed.  */
-
-void
-ffestc_V016_item_structure (ffelexToken name)
-{
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_V016_item_structure (name);
-}
-
-/* ffestc_V016_item_object -- RECORD statement for object-name
-
-   ffestc_V016_item_object(name_token,dim_list);
-
-   Make sure name_token identifies a valid object to be RECORDd.  */
-
-void
-ffestc_V016_item_object (ffelexToken name, ffesttDimList dims)
-{
-  ffestc_check_item_ ();
-  assert (name != NULL);
-  if (!ffestc_ok_)
-    return;
-
-  if (dims != NULL)
-    ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-
-  ffestd_V016_item_object (name, dims);
-}
-
-/* ffestc_V016_finish -- RECORD statement list complete
-
-   ffestc_V016_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_V016_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_V016_finish ();
-}
-
-/* ffestc_V018_start -- REWRITE(...) statement list begin
-
-   ffestc_V018_start();
-
-   Verify that REWRITE is valid here, and begin accepting items in the
-   list.  */
-
-void
-ffestc_V018_start ()
-{
-  ffestvFormat format;
-
-  ffestc_check_start_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_branch_begin_ ();
-
-  if (!ffestc_subr_is_branch_
-      (&ffestp_file.rewrite.rewrite_spec[FFESTP_rewriteixERR])
-      || !ffestc_subr_is_format_
-      (&ffestp_file.rewrite.rewrite_spec[FFESTP_rewriteixFMT])
-      || !ffestc_subr_is_present_ ("UNIT",
-                  &ffestp_file.rewrite.rewrite_spec[FFESTP_rewriteixUNIT]))
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-
-  format = ffestc_subr_format_
-    (&ffestp_file.rewrite.rewrite_spec[FFESTP_rewriteixFMT]);
-  switch (format)
-    {
-    case FFESTV_formatNAMELIST:
-    case FFESTV_formatASTERISK:
-      ffebad_start (FFEBAD_CONFLICTING_SPECS);
-      ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
-                  ffelex_token_where_column (ffesta_tokens[0]));
-      assert (ffestp_file.rewrite.rewrite_spec[FFESTP_rewriteixFMT].kw_or_val_present);
-      if (ffestp_file.rewrite.rewrite_spec[FFESTP_rewriteixFMT].kw_present)
-       {
-         ffebad_here (0, ffelex_token_where_line
-                (ffestp_file.rewrite.rewrite_spec[FFESTP_rewriteixFMT].kw),
-                      ffelex_token_where_column
-               (ffestp_file.rewrite.rewrite_spec[FFESTP_rewriteixFMT].kw));
-       }
-      else
-       {
-         ffebad_here (1, ffelex_token_where_line
-             (ffestp_file.rewrite.rewrite_spec[FFESTP_rewriteixFMT].value),
-                      ffelex_token_where_column
-            (ffestp_file.rewrite.rewrite_spec[FFESTP_rewriteixFMT].value));
-       }
-      ffebad_finish ();
-      ffestc_ok_ = FALSE;
-      return;
-
-    default:
-      break;
-    }
-
-  ffestd_V018_start (format);
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_V018_item -- REWRITE statement i/o item
-
-   ffestc_V018_item(expr,expr_token);
-
-   Implement output-list expression.  */
-
-void
-ffestc_V018_item (ffebld expr, ffelexToken expr_token)
-{
-  ffestc_check_item_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_V018_item (expr);
-}
-
-/* ffestc_V018_finish -- REWRITE statement list complete
-
-   ffestc_V018_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_V018_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_V018_finish ();
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_V019_start -- ACCEPT statement list begin
-
-   ffestc_V019_start();
-
-   Verify that ACCEPT is valid here, and begin accepting items in the
-   list.  */
-
-void
-ffestc_V019_start ()
-{
-  ffestvFormat format;
-
-  ffestc_check_start_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_branch_begin_ ();
-
-  if (!ffestc_subr_is_format_
-      (&ffestp_file.accept.accept_spec[FFESTP_acceptixFORMAT]))
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-
-  format = ffestc_subr_format_
-    (&ffestp_file.accept.accept_spec[FFESTP_acceptixFORMAT]);
-  ffestc_namelist_ = (format == FFESTV_formatNAMELIST);
-
-  ffestd_V019_start (format);
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_V019_item -- ACCEPT statement i/o item
-
-   ffestc_V019_item(expr,expr_token);
-
-   Implement output-list expression.  */
-
-void
-ffestc_V019_item (ffebld expr, ffelexToken expr_token)
-{
-  ffestc_check_item_ ();
-  if (!ffestc_ok_)
-    return;
-
-  if (ffestc_namelist_ != 0)
-    {
-      if (ffestc_namelist_ == 1)
-       {
-         ffestc_namelist_ = 2;
-         ffebad_start (FFEBAD_NAMELIST_ITEMS);
-         ffebad_here (0, ffelex_token_where_line (expr_token),
-                      ffelex_token_where_column (expr_token));
-         ffebad_finish ();
-       }
-      return;
-    }
-
-  ffestd_V019_item (expr);
-}
-
-/* ffestc_V019_finish -- ACCEPT statement list complete
-
-   ffestc_V019_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_V019_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_V019_finish ();
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-#endif
-/* ffestc_V020_start -- TYPE statement list begin
-
-   ffestc_V020_start();
-
-   Verify that TYPE is valid here, and begin accepting items in the
-   list.  */
-
-void
-ffestc_V020_start ()
-{
-  ffestvFormat format;
-
-  ffestc_check_start_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_branch_begin_ ();
-
-  if (!ffestc_subr_is_format_
-      (&ffestp_file.type.type_spec[FFESTP_typeixFORMAT]))
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-
-  format = ffestc_subr_format_
-    (&ffestp_file.type.type_spec[FFESTP_typeixFORMAT]);
-  ffestc_namelist_ = (format == FFESTV_formatNAMELIST);
-
-  ffestd_V020_start (format);
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_V020_item -- TYPE statement i/o item
-
-   ffestc_V020_item(expr,expr_token);
-
-   Implement output-list expression.  */
-
-void
-ffestc_V020_item (ffebld expr, ffelexToken expr_token)
-{
-  ffestc_check_item_ ();
-  if (!ffestc_ok_)
-    return;
-
-  if (ffestc_namelist_ != 0)
-    {
-      if (ffestc_namelist_ == 1)
-       {
-         ffestc_namelist_ = 2;
-         ffebad_start (FFEBAD_NAMELIST_ITEMS);
-         ffebad_here (0, ffelex_token_where_line (expr_token),
-                      ffelex_token_where_column (expr_token));
-         ffebad_finish ();
-       }
-      return;
-    }
-
-  ffestd_V020_item (expr);
-}
-
-/* ffestc_V020_finish -- TYPE statement list complete
-
-   ffestc_V020_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_V020_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_V020_finish ();
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_V021 -- DELETE statement
-
-   ffestc_V021();
-
-   Make sure a DELETE is valid in the current context, and implement it.  */
-
-#if FFESTR_VXT
-void
-ffestc_V021 ()
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  if (ffestc_subr_is_branch_
-      (&ffestp_file.delete.delete_spec[FFESTP_deleteixERR])
-      && ffestc_subr_is_present_ ("UNIT",
-                     &ffestp_file.delete.delete_spec[FFESTP_deleteixUNIT]))
-    ffestd_V021 ();
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_V022 -- UNLOCK statement
-
-   ffestc_V022();
-
-   Make sure a UNLOCK is valid in the current context, and implement it.  */
-
-void
-ffestc_V022 ()
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  if (ffestc_subr_is_branch_
-      (&ffestp_file.beru.beru_spec[FFESTP_beruixERR])
-      && ffestc_subr_is_present_ ("UNIT",
-                           &ffestp_file.beru.beru_spec[FFESTP_beruixUNIT]))
-    ffestd_V022 ();
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_V023_start -- ENCODE(...) statement list begin
-
-   ffestc_V023_start();
-
-   Verify that ENCODE is valid here, and begin accepting items in the
-   list.  */
-
-void
-ffestc_V023_start ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_branch_begin_ ();
-
-  if (!ffestc_subr_is_branch_
-      (&ffestp_file.vxtcode.vxtcode_spec[FFESTP_vxtcodeixERR]))
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-
-  ffestd_V023_start ();
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_V023_item -- ENCODE statement i/o item
-
-   ffestc_V023_item(expr,expr_token);
-
-   Implement output-list expression.  */
-
-void
-ffestc_V023_item (ffebld expr, ffelexToken expr_token)
-{
-  ffestc_check_item_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_V023_item (expr);
-}
-
-/* ffestc_V023_finish -- ENCODE statement list complete
-
-   ffestc_V023_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_V023_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_V023_finish ();
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_V024_start -- DECODE(...) statement list begin
-
-   ffestc_V024_start();
-
-   Verify that DECODE is valid here, and begin accepting items in the
-   list.  */
-
-void
-ffestc_V024_start ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_branch_begin_ ();
-
-  if (!ffestc_subr_is_branch_
-      (&ffestp_file.vxtcode.vxtcode_spec[FFESTP_vxtcodeixERR]))
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-
-  ffestd_V024_start ();
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_V024_item -- DECODE statement i/o item
-
-   ffestc_V024_item(expr,expr_token);
-
-   Implement output-list expression.  */
-
-void
-ffestc_V024_item (ffebld expr, ffelexToken expr_token)
-{
-  ffestc_check_item_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_V024_item (expr);
-}
-
-/* ffestc_V024_finish -- DECODE statement list complete
-
-   ffestc_V024_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_V024_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_V024_finish ();
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_V025_start -- DEFINEFILE statement list begin
-
-   ffestc_V025_start();
-
-   Verify that DEFINEFILE is valid here, and begin accepting items in the
-   list.  */
-
-void
-ffestc_V025_start ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_branch_begin_ ();
-
-  ffestd_V025_start ();
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_V025_item -- DEFINE FILE statement item
-
-   ffestc_V025_item(u,ut,m,mt,n,nt,asv,asvt);
-
-   Implement item.  */
-
-void
-ffestc_V025_item (ffebld u, ffelexToken ut, ffebld m, ffelexToken mt,
-                 ffebld n, ffelexToken nt, ffebld asv, ffelexToken asvt)
-{
-  ffestc_check_item_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_V025_item (u, m, n, asv);
-}
-
-/* ffestc_V025_finish -- DEFINE FILE statement list complete
-
-   ffestc_V025_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_V025_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_V025_finish ();
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-/* ffestc_V026 -- FIND statement
-
-   ffestc_V026();
-
-   Make sure a FIND is valid in the current context, and implement it. */
-
-void
-ffestc_V026 ()
-{
-  ffestc_check_simple_ ();
-  if (ffestc_order_actionif_ () != FFESTC_orderOK_)
-    return;
-  ffestc_labeldef_branch_begin_ ();
-
-  if (ffestc_subr_is_branch_
-      (&ffestp_file.find.find_spec[FFESTP_findixERR])
-      && ffestc_subr_is_present_ ("UNIT",
-                            &ffestp_file.find.find_spec[FFESTP_findixUNIT])
-      && ffestc_subr_is_present_ ("REC",
-                            &ffestp_file.find.find_spec[FFESTP_findixREC]))
-    ffestd_V026 ();
-
-  if (ffestc_shriek_after1_ != NULL)
-    (*ffestc_shriek_after1_) (TRUE);
-  ffestc_labeldef_branch_end_ ();
-}
-
-#endif
-/* ffestc_V027_start -- VXT PARAMETER statement list begin
-
-   ffestc_V027_start();
-
-   Verify that PARAMETER is valid here, and begin accepting items in the list. */
-
-void
-ffestc_V027_start ()
-{
-  ffestc_check_start_ ();
-  if (ffestc_order_parameter_ () != FFESTC_orderOK_)
-    {
-      ffestc_ok_ = FALSE;
-      return;
-    }
-  ffestc_labeldef_useless_ ();
-
-  ffestd_V027_start ();
-
-  ffestc_ok_ = TRUE;
-}
-
-/* ffestc_V027_item -- VXT PARAMETER statement assignment
-
-   ffestc_V027_item(dest,dest_token,source,source_token);
-
-   Make sure the source is a valid source for the destination; make the
-   assignment. */
-
-void
-ffestc_V027_item (ffelexToken dest_token, ffebld source,
-                 ffelexToken source_token UNUSED)
-{
-  ffestc_check_item_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_V027_item (dest_token, source);
-}
-
-/* ffestc_V027_finish -- VXT PARAMETER statement list complete
-
-   ffestc_V027_finish();
-
-   Just wrap up any local activities.  */
-
-void
-ffestc_V027_finish ()
-{
-  ffestc_check_finish_ ();
-  if (!ffestc_ok_)
-    return;
-
-  ffestd_V027_finish ();
-}
-
-/* Any executable statement.  Mainly make sure that one-shot things
-   like the statement for a logical IF are reset.  */
-
-void
-ffestc_any ()
-{
-  ffestc_check_simple_ ();
-
-  ffestc_order_any_ ();
-
-  ffestc_labeldef_any_ ();
-
-  if (ffestc_shriek_after1_ == NULL)
-    return;
-
-  ffestd_any ();
-
-  (*ffestc_shriek_after1_) (TRUE);
-}