summaryrefslogtreecommitdiffstats
path: root/contrib/gcc/f/stb.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/gcc/f/stb.c')
-rw-r--r--contrib/gcc/f/stb.c17812
1 files changed, 0 insertions, 17812 deletions
diff --git a/contrib/gcc/f/stb.c b/contrib/gcc/f/stb.c
deleted file mode 100644
index 673f96c..0000000
--- a/contrib/gcc/f/stb.c
+++ /dev/null
@@ -1,17812 +0,0 @@
-/* stb.c -- Implementation File (module.c template V1.0)
- Copyright (C) 1995, 1996, 2002, 2003
- 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:
- Parses the proper form for statements, builds up expression trees for
- them, but does not actually implement them. Uses ffebad (primarily via
- ffesta_ffebad_start) to indicate errors in form. In many cases, an invalid
- statement form indicates another possible statement needs to be looked at
- by ffest. In a few cases, a valid statement form might not completely
- determine the nature of the statement, as in REALFUNCTIONA(B), which is
- a valid form for either the first statement of a function named A taking
- an argument named B or for the declaration of a real array named FUNCTIONA
- with an adjustable size of B. A similar (though somewhat easier) choice
- must be made for the statement-function-def vs. assignment forms, as in
- the case of FOO(A) = A+2.0.
-
- A given parser consists of one or more state handlers, the first of which
- is the initial state, and the last of which (for any given input) returns
- control to a final state handler (ffesta_zero or ffesta_two, explained
- below). The functions handling the states for a given parser usually have
- the same names, differing only in the final number, as in ffestb_foo_
- (handles the initial state), ffestb_foo_1_, ffestb_foo_2_ (handle
- subsequent states), although liberties sometimes are taken with the "foo"
- part either when keywords are clarified into given statements or are
- transferred into other possible areas. (For example, the type-name
- states can hop over to _dummy_ functions when the FUNCTION or RECURSIVE
- keywords are seen, though this kind of thing is kept to a minimum.) Only
- the names without numbers are exported to the rest of ffest; the others
- are local (static).
-
- Each initial state is provided with the first token in ffesta_tokens[0],
- which will be killed upon return to the final state (ffesta_zero or
- ffelex_swallow_tokens passed through to ffesta_zero), so while it may
- be changed to another token, a valid token must be left there to be
- killed. Also, a "convenient" array of tokens are left in
- ffesta_tokens[1..FFESTA_tokensMAX]. The initial state of this set of
- elements is undefined, thus, if tokens are stored here, they must be
- killed before returning to the final state. Any parser may also use
- cross-state local variables by sticking a structure containing storage
- for those variables in the local union ffestb_local_ (unless the union
- goes on strike). Furthermore, parsers that handle more than one first or
- second tokens (like _varlist_, which handles EXTERNAL, INTENT, INTRINSIC,
- OPTIONAL,
- PUBLIC, or PRIVATE, and _endxyz_, which handles ENDBLOCK, ENDBLOCKDATA,
- ENDDO, ENDIF, and so on) may expect arguments from ffest in the
- ffest-wide union ffest_args_, the substructure specific to the parser.
-
- A parser's responsibility is: to call either ffesta_confirmed or
- ffest_ffebad_start before returning to the final state; to be the only
- parser that can possibly call ffesta_confirmed for a given statement;
- to call ffest_ffebad_start immediately upon recognizing a bad token
- (specifically one that another statement parser might confirm upon);
- to call ffestc functions only after calling ffesta_confirmed and only
- when ffesta_is_inhibited returns FALSE; and to call ffesta_is_inhibited
- only after calling ffesta_confirmed. Confirm as early as reasonably
- possible, even when only one ffestc function is called for the statement
- later on, because early confirmation can enhance the error-reporting
- capabilities if a subsequent error is detected and this parser isn't
- the first possibility for the statement.
-
- To assist the parser, functions like ffesta_ffebad_1t and _1p_ have
- been provided to make use of ffest_ffebad_start fairly easy.
-
- Modifications:
-*/
-
-/* Include files. */
-
-#include "proj.h"
-#include "stb.h"
-#include "bad.h"
-#include "expr.h"
-#include "lex.h"
-#include "malloc.h"
-#include "src.h"
-#include "sta.h"
-#include "stc.h"
-#include "stp.h"
-#include "str.h"
-
-/* Externals defined here. */
-
-struct _ffestb_args_ ffestb_args;
-
-/* Simple definitions and enumerations. */
-
-#define FFESTB_KILL_EASY_ 1 /* 1 for only one _subr_kill_xyz_ fn. */
-
-/* Internal typedefs. */
-
-union ffestb_subrargs_u_
- {
- struct
- {
- ffesttTokenList labels; /* Input arg, must not be NULL. */
- ffelexHandler handler; /* Input arg, call me when done. */
- bool ok; /* Output arg, TRUE if list ended in
- CLOSE_PAREN. */
- }
- label_list;
- struct
- {
- ffesttDimList dims; /* Input arg, must not be NULL. */
- ffelexHandler handler; /* Input arg, call me when done. */
- mallocPool pool; /* Pool to allocate into. */
- bool ok; /* Output arg, TRUE if list ended in
- CLOSE_PAREN. */
- ffeexprContext ctx; /* DIMLIST or DIMLISTCOMMON. */
-#ifdef FFECOM_dimensionsMAX
- int ndims; /* For backends that really can't have
- infinite dims. */
-#endif
- }
- dim_list;
- struct
- {
- ffesttTokenList args; /* Input arg, must not be NULL. */
- ffelexHandler handler; /* Input arg, call me when done. */
- ffelexToken close_paren;/* Output arg if ok, CLOSE_PAREN token. */
- bool is_subr; /* Input arg, TRUE if list in subr-def
- context. */
- bool ok; /* Output arg, TRUE if list ended in
- CLOSE_PAREN. */
- bool names; /* Do ffelex_set_names(TRUE) before return. */
- }
- name_list;
- };
-
-union ffestb_local_u_
- {
- struct
- {
- ffebld expr;
- }
- call_stmt;
- struct
- {
- ffebld expr;
- }
- go_to;
- struct
- {
- ffebld dest;
- bool vxtparam; /* If assignment might really be VXT
- PARAMETER stmt. */
- }
- let;
- struct
- {
- ffebld expr;
- }
- if_stmt;
- struct
- {
- ffebld expr;
- }
- else_stmt;
- struct
- {
- ffebld expr;
- }
- dowhile;
- struct
- {
- ffebld var;
- ffebld start;
- ffebld end;
- }
- do_stmt;
- struct
- {
- bool is_cblock;
- }
- R522;
- struct
- {
- ffebld expr;
- bool started;
- }
- parameter;
- struct
- {
- ffesttExprList exprs;
- bool started;
- }
- equivalence;
- struct
- {
- ffebld expr;
- bool started;
- }
- data;
- struct
- {
- ffestrOther kw;
- }
- varlist;
- struct
- {
- ffelexHandler next;
- }
- construct;
- struct
- {
- ffesttFormatList f;
- ffestpFormatType current; /* What we're currently working on. */
- ffelexToken t; /* Token of what we're currently working on. */
- ffesttFormatValue pre;
- ffesttFormatValue post;
- ffesttFormatValue dot;
- ffesttFormatValue exp;
- bool sign; /* _3_, pos/neg; elsewhere, signed/unsigned. */
- bool complained; /* If run-time expr seen in nonexec context. */
- }
- format;
- struct
- {
- ffebld expr;
- }
- selectcase;
- struct
- {
- ffesttCaseList cases;
- }
- case_stmt;
- struct
- {
- bool is_cblock;
- }
- V014;
- struct
- {
- ffestpBeruIx ix;
- bool label;
- bool left;
- ffeexprContext context;
- }
- beru;
- struct
- {
- ffestpCloseIx ix;
- bool label;
- bool left;
- ffeexprContext context;
- }
- close;
- struct
- {
- ffestpDeleteIx ix;
- bool label;
- bool left;
- ffeexprContext context;
- }
- delete;
- struct
- {
- ffestpDeleteIx ix;
- bool label;
- bool left;
- ffeexprContext context;
- }
- find;
- struct
- {
- ffestpInquireIx ix;
- bool label;
- bool left;
- ffeexprContext context;
- bool may_be_iolength;
- }
- inquire;
- struct
- {
- ffestpOpenIx ix;
- bool label;
- bool left;
- ffeexprContext context;
- }
- open;
- struct
- {
- ffestpReadIx ix;
- bool label;
- bool left;
- ffeexprContext context;
- }
- read;
- struct
- {
- ffestpRewriteIx ix;
- bool label;
- bool left;
- ffeexprContext context;
- }
- rewrite;
- struct
- {
- ffestpWriteIx ix;
- bool label;
- bool left;
- ffeexprContext context;
- }
- vxtcode;
- struct
- {
- ffestpWriteIx ix;
- bool label;
- bool left;
- ffeexprContext context;
- }
- write;
- struct
- {
- bool started;
- }
- common;
- struct
- {
- bool started;
- }
- dimension;
- struct
- {
- bool started;
- }
- dimlist;
- struct
- {
- const char *badname;
- ffestrFirst first_kw;
- bool is_subr;
- }
- dummy;
- struct
- {
- ffebld kind; /* Kind type parameter, if any. */
- ffelexToken kindt; /* Kind type first token, if any. */
- ffebld len; /* Length type parameter, if any. */
- ffelexToken lent; /* Length type parameter, if any. */
- ffelexHandler handler;
- ffelexToken recursive;
- ffebld expr;
- ffesttTokenList toklist;/* For ambiguity resolution. */
- ffesttImpList imps; /* List of IMPLICIT letters. */
- ffelexHandler imp_handler; /* Call if paren list wasn't letters. */
- const char *badname;
- ffestrOther kw; /* INTENT(IN/OUT/INOUT). */
- ffestpType type;
- bool parameter; /* If PARAMETER attribute seen (governs =expr
- context). */
- bool coloncolon; /* If COLONCOLON seen (allows =expr). */
- bool aster_after; /* "*" seen after, not before,
- [RECURSIVE]FUNCTIONxyz. */
- bool empty; /* Ambig function dummy arg list empty so
- far? */
- bool imp_started; /* Started IMPLICIT statement already. */
- bool imp_seen_comma; /* TRUE if next COMMA within parens means not
- R541. */
- }
- decl;
- struct
- {
- bool started;
- }
- vxtparam;
- }; /* Merge with the one in ffestb later. */
-
-/* Private include files. */
-
-
-/* Internal structure definitions. */
-
-
-/* Static objects accessed by functions in this module. */
-
-static union ffestb_subrargs_u_ ffestb_subrargs_;
-static union ffestb_local_u_ ffestb_local_;
-
-/* Static functions (internal). */
-
-static void ffestb_subr_ambig_to_ents_ (void);
-static ffelexHandler ffestb_subr_ambig_nope_ (ffelexToken t);
-static ffelexHandler ffestb_subr_dimlist_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_subr_dimlist_1_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_subr_dimlist_2_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_subr_name_list_ (ffelexToken t);
-static ffelexHandler ffestb_subr_name_list_1_ (ffelexToken t);
-static void ffestb_subr_R1001_append_p_ (void);
-static ffelexHandler ffestb_decl_kindparam_ (ffelexToken t);
-static ffelexHandler ffestb_decl_kindparam_1_ (ffelexToken t);
-static ffelexHandler ffestb_decl_kindparam_2_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_decl_starkind_ (ffelexToken t);
-static ffelexHandler ffestb_decl_starlen_ (ffelexToken t);
-static ffelexHandler ffestb_decl_starlen_1_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_decl_typeparams_ (ffelexToken t);
-static ffelexHandler ffestb_decl_typeparams_1_ (ffelexToken t);
-static ffelexHandler ffestb_decl_typeparams_2_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_decl_typeparams_3_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_subr_label_list_ (ffelexToken t);
-static ffelexHandler ffestb_subr_label_list_1_ (ffelexToken t);
-static ffelexHandler ffestb_do1_ (ffelexToken t);
-static ffelexHandler ffestb_do2_ (ffelexToken t);
-static ffelexHandler ffestb_do3_ (ffelexToken t);
-static ffelexHandler ffestb_do4_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_do5_ (ffelexToken t);
-static ffelexHandler ffestb_do6_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_do7_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_do8_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_do9_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_else1_ (ffelexToken t);
-static ffelexHandler ffestb_else2_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_else3_ (ffelexToken t);
-static ffelexHandler ffestb_else4_ (ffelexToken t);
-static ffelexHandler ffestb_else5_ (ffelexToken t);
-static ffelexHandler ffestb_end1_ (ffelexToken t);
-static ffelexHandler ffestb_end2_ (ffelexToken t);
-static ffelexHandler ffestb_end3_ (ffelexToken t);
-static ffelexHandler ffestb_goto1_ (ffelexToken t);
-static ffelexHandler ffestb_goto2_ (ffelexToken t);
-static ffelexHandler ffestb_goto3_ (ffelexToken t);
-static ffelexHandler ffestb_goto4_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_goto5_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_goto6_ (ffelexToken t);
-static ffelexHandler ffestb_goto7_ (ffelexToken t);
-static ffelexHandler ffestb_halt1_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_if1_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_if2_ (ffelexToken t);
-static ffelexHandler ffestb_if3_ (ffelexToken t);
-static ffelexHandler ffestb_let1_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_let2_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_varlist5_ (ffelexToken t);
-static ffelexHandler ffestb_varlist6_ (ffelexToken t);
-static ffelexHandler ffestb_R5221_ (ffelexToken t);
-static ffelexHandler ffestb_R5222_ (ffelexToken t);
-static ffelexHandler ffestb_R5223_ (ffelexToken t);
-static ffelexHandler ffestb_R5224_ (ffelexToken t);
-static ffelexHandler ffestb_R5281_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R5282_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R5283_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R5284_ (ffelexToken t);
-static ffelexHandler ffestb_R5371_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R5372_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R5373_ (ffelexToken t);
-static ffelexHandler ffestb_R5421_ (ffelexToken t);
-static ffelexHandler ffestb_R5422_ (ffelexToken t);
-static ffelexHandler ffestb_R5423_ (ffelexToken t);
-static ffelexHandler ffestb_R5424_ (ffelexToken t);
-static ffelexHandler ffestb_R5425_ (ffelexToken t);
-static ffelexHandler ffestb_R5441_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R5442_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R5443_ (ffelexToken t);
-static ffelexHandler ffestb_R5444_ (ffelexToken t);
-static ffelexHandler ffestb_R8341_ (ffelexToken t);
-static ffelexHandler ffestb_R8351_ (ffelexToken t);
-static ffelexHandler ffestb_R8381_ (ffelexToken t);
-static ffelexHandler ffestb_R8382_ (ffelexToken t);
-static ffelexHandler ffestb_R8383_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R8401_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R8402_ (ffelexToken t);
-static ffelexHandler ffestb_R8403_ (ffelexToken t);
-static ffelexHandler ffestb_R8404_ (ffelexToken t);
-static ffelexHandler ffestb_R8405_ (ffelexToken t);
-static ffelexHandler ffestb_R8406_ (ffelexToken t);
-static ffelexHandler ffestb_R8407_ (ffelexToken t);
-static ffelexHandler ffestb_R11021_ (ffelexToken t);
-static ffelexHandler ffestb_R1111_1_ (ffelexToken t);
-static ffelexHandler ffestb_R1111_2_ (ffelexToken t);
-static ffelexHandler ffestb_R12121_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R12271_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_construct1_ (ffelexToken t);
-static ffelexHandler ffestb_construct2_ (ffelexToken t);
-static ffelexHandler ffestb_R8091_ (ffelexToken t);
-static ffelexHandler ffestb_R8092_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R8093_ (ffelexToken t);
-static ffelexHandler ffestb_R8101_ (ffelexToken t);
-static ffelexHandler ffestb_R8102_ (ffelexToken t);
-static ffelexHandler ffestb_R8103_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R8104_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R10011_ (ffelexToken t);
-static ffelexHandler ffestb_R10012_ (ffelexToken t);
-static ffelexHandler ffestb_R10013_ (ffelexToken t);
-static ffelexHandler ffestb_R10014_ (ffelexToken t);
-static ffelexHandler ffestb_R10015_ (ffelexToken t);
-static ffelexHandler ffestb_R10016_ (ffelexToken t);
-static ffelexHandler ffestb_R10017_ (ffelexToken t);
-static ffelexHandler ffestb_R10018_ (ffelexToken t);
-static ffelexHandler ffestb_R10019_ (ffelexToken t);
-static ffelexHandler ffestb_R100110_ (ffelexToken t);
-static ffelexHandler ffestb_R100111_ (ffelexToken t);
-static ffelexHandler ffestb_R100112_ (ffelexToken t);
-static ffelexHandler ffestb_R100113_ (ffelexToken t);
-static ffelexHandler ffestb_R100114_ (ffelexToken t);
-static ffelexHandler ffestb_R100115_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R100116_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R100117_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R100118_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_S3P41_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_V0141_ (ffelexToken t);
-static ffelexHandler ffestb_V0142_ (ffelexToken t);
-static ffelexHandler ffestb_V0143_ (ffelexToken t);
-static ffelexHandler ffestb_V0144_ (ffelexToken t);
-#if FFESTB_KILL_EASY_
-static void ffestb_subr_kill_easy_ (ffestpInquireIx max);
-#else
-static void ffestb_subr_kill_accept_ (void);
-static void ffestb_subr_kill_beru_ (void);
-static void ffestb_subr_kill_close_ (void);
-static void ffestb_subr_kill_delete_ (void);
-static void ffestb_subr_kill_find_ (void); /* Not written yet. */
-static void ffestb_subr_kill_inquire_ (void);
-static void ffestb_subr_kill_open_ (void);
-static void ffestb_subr_kill_print_ (void);
-static void ffestb_subr_kill_read_ (void);
-static void ffestb_subr_kill_rewrite_ (void);
-static void ffestb_subr_kill_type_ (void);
-static void ffestb_subr_kill_vxtcode_ (void); /* Not written yet. */
-static void ffestb_subr_kill_write_ (void);
-#endif
-static ffelexHandler ffestb_beru1_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_beru2_ (ffelexToken t);
-static ffelexHandler ffestb_beru3_ (ffelexToken t);
-static ffelexHandler ffestb_beru4_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_beru5_ (ffelexToken t);
-static ffelexHandler ffestb_beru6_ (ffelexToken t);
-static ffelexHandler ffestb_beru7_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_beru8_ (ffelexToken t);
-static ffelexHandler ffestb_beru9_ (ffelexToken t);
-static ffelexHandler ffestb_beru10_ (ffelexToken t);
-static ffelexHandler ffestb_R9041_ (ffelexToken t);
-static ffelexHandler ffestb_R9042_ (ffelexToken t);
-static ffelexHandler ffestb_R9043_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R9044_ (ffelexToken t);
-static ffelexHandler ffestb_R9045_ (ffelexToken t);
-static ffelexHandler ffestb_R9046_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R9047_ (ffelexToken t);
-static ffelexHandler ffestb_R9048_ (ffelexToken t);
-static ffelexHandler ffestb_R9049_ (ffelexToken t);
-static ffelexHandler ffestb_R9071_ (ffelexToken t);
-static ffelexHandler ffestb_R9072_ (ffelexToken t);
-static ffelexHandler ffestb_R9073_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R9074_ (ffelexToken t);
-static ffelexHandler ffestb_R9075_ (ffelexToken t);
-static ffelexHandler ffestb_R9076_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R9077_ (ffelexToken t);
-static ffelexHandler ffestb_R9078_ (ffelexToken t);
-static ffelexHandler ffestb_R9079_ (ffelexToken t);
-static ffelexHandler ffestb_R9091_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R9092_ (ffelexToken t);
-static ffelexHandler ffestb_R9093_ (ffelexToken t);
-static ffelexHandler ffestb_R9094_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R9095_ (ffelexToken t);
-static ffelexHandler ffestb_R9096_ (ffelexToken t);
-static ffelexHandler ffestb_R9097_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R9098_ (ffelexToken t);
-static ffelexHandler ffestb_R9099_ (ffelexToken t);
-static ffelexHandler ffestb_R90910_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R90911_ (ffelexToken t);
-static ffelexHandler ffestb_R90912_ (ffelexToken t);
-static ffelexHandler ffestb_R90913_ (ffelexToken t);
-static ffelexHandler ffestb_R90914_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R90915_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R9101_ (ffelexToken t);
-static ffelexHandler ffestb_R9102_ (ffelexToken t);
-static ffelexHandler ffestb_R9103_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R9104_ (ffelexToken t);
-static ffelexHandler ffestb_R9105_ (ffelexToken t);
-static ffelexHandler ffestb_R9106_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R9107_ (ffelexToken t);
-static ffelexHandler ffestb_R9108_ (ffelexToken t);
-static ffelexHandler ffestb_R9109_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R91010_ (ffelexToken t);
-static ffelexHandler ffestb_R91011_ (ffelexToken t);
-static ffelexHandler ffestb_R91012_ (ffelexToken t);
-static ffelexHandler ffestb_R91013_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R91014_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R9111_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R9112_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R9231_ (ffelexToken t);
-static ffelexHandler ffestb_R9232_ (ffelexToken t);
-static ffelexHandler ffestb_R9233_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R9234_ (ffelexToken t);
-static ffelexHandler ffestb_R9235_ (ffelexToken t);
-static ffelexHandler ffestb_R9236_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_R9237_ (ffelexToken t);
-static ffelexHandler ffestb_R9238_ (ffelexToken t);
-static ffelexHandler ffestb_R9239_ (ffelexToken t);
-static ffelexHandler ffestb_R92310_ (ffelexToken t);
-static ffelexHandler ffestb_R92311_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_V0201_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_V0202_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_dummy1_ (ffelexToken t);
-static ffelexHandler ffestb_dummy2_ (ffelexToken t);
-static ffelexHandler ffestb_R5241_ (ffelexToken t);
-static ffelexHandler ffestb_R5242_ (ffelexToken t);
-static ffelexHandler ffestb_R5243_ (ffelexToken t);
-static ffelexHandler ffestb_R5244_ (ffelexToken t);
-static ffelexHandler ffestb_R5471_ (ffelexToken t);
-static ffelexHandler ffestb_R5472_ (ffelexToken t);
-static ffelexHandler ffestb_R5473_ (ffelexToken t);
-static ffelexHandler ffestb_R5474_ (ffelexToken t);
-static ffelexHandler ffestb_R5475_ (ffelexToken t);
-static ffelexHandler ffestb_R5476_ (ffelexToken t);
-static ffelexHandler ffestb_R5477_ (ffelexToken t);
-static ffelexHandler ffestb_R12291_ (ffelexToken t);
-static ffelexHandler ffestb_R12292_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_decl_chartype1_ (ffelexToken t);
-static ffelexHandler ffestb_decl_attrs_ (ffelexToken t);
-static ffelexHandler ffestb_decl_attrs_1_ (ffelexToken t);
-static ffelexHandler ffestb_decl_attrs_2_ (ffelexToken t);
-static ffelexHandler ffestb_decl_attrs_7_ (ffelexToken t);
-static ffelexHandler ffestb_decl_attrsp_ (ffelexToken t);
-static ffelexHandler ffestb_decl_ents_ (ffelexToken t);
-static ffelexHandler ffestb_decl_ents_1_ (ffelexToken t);
-static ffelexHandler ffestb_decl_ents_2_ (ffelexToken t);
-static ffelexHandler ffestb_decl_ents_3_ (ffelexToken t);
-static ffelexHandler ffestb_decl_ents_4_ (ffelexToken t);
-static ffelexHandler ffestb_decl_ents_5_ (ffelexToken t);
-static ffelexHandler ffestb_decl_ents_6_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_decl_ents_7_ (ffelexToken t);
-static ffelexHandler ffestb_decl_ents_8_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_decl_ents_9_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_decl_ents_10_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_decl_ents_11_ (ffelexToken t);
-static ffelexHandler ffestb_decl_entsp_ (ffelexToken t);
-static ffelexHandler ffestb_decl_entsp_1_ (ffelexToken t);
-static ffelexHandler ffestb_decl_entsp_2_ (ffelexToken t);
-static ffelexHandler ffestb_decl_entsp_3_ (ffelexToken t);
-static ffelexHandler ffestb_decl_entsp_4_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_decl_entsp_5_ (ffelexToken t);
-static ffelexHandler ffestb_decl_entsp_6_ (ffelexToken t);
-static ffelexHandler ffestb_decl_entsp_7_ (ffelexToken t);
-static ffelexHandler ffestb_decl_entsp_8_ (ffelexToken t);
-static ffelexHandler ffestb_decl_funcname_ (ffelexToken t);
-static ffelexHandler ffestb_decl_funcname_1_ (ffelexToken t);
-static ffelexHandler ffestb_decl_funcname_2_ (ffelexToken t);
-static ffelexHandler ffestb_decl_funcname_3_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_decl_funcname_4_ (ffelexToken t);
-static ffelexHandler ffestb_decl_funcname_5_ (ffelexToken t);
-static ffelexHandler ffestb_decl_funcname_6_ (ffelexToken t);
-static ffelexHandler ffestb_decl_funcname_7_ (ffelexToken t);
-static ffelexHandler ffestb_decl_funcname_8_ (ffelexToken t);
-static ffelexHandler ffestb_decl_funcname_9_ (ffelexToken t);
-static ffelexHandler ffestb_V0271_ (ffelexToken t);
-static ffelexHandler ffestb_V0272_ (ffelexToken ft, ffebld expr,
- ffelexToken t);
-static ffelexHandler ffestb_V0273_ (ffelexToken t);
-static ffelexHandler ffestb_decl_R5391_ (ffelexToken t);
-static ffelexHandler ffestb_decl_R5392_ (ffelexToken t);
-static ffelexHandler ffestb_decl_R5394_ (ffelexToken t);
-static ffelexHandler ffestb_decl_R5395_ (ffelexToken t);
-static ffelexHandler ffestb_decl_R539letters_ (ffelexToken t);
-static ffelexHandler ffestb_decl_R539letters_1_ (ffelexToken t);
-static ffelexHandler ffestb_decl_R539letters_2_ (ffelexToken t);
-static ffelexHandler ffestb_decl_R539letters_3_ (ffelexToken t);
-static ffelexHandler ffestb_decl_R539letters_4_ (ffelexToken t);
-static ffelexHandler ffestb_decl_R539letters_5_ (ffelexToken t);
-static ffelexHandler ffestb_decl_R539maybe_ (ffelexToken t);
-static ffelexHandler ffestb_decl_R539maybe_1_ (ffelexToken t);
-static ffelexHandler ffestb_decl_R539maybe_2_ (ffelexToken t);
-static ffelexHandler ffestb_decl_R539maybe_3_ (ffelexToken t);
-static ffelexHandler ffestb_decl_R539maybe_4_ (ffelexToken t);
-static ffelexHandler ffestb_decl_R539maybe_5_ (ffelexToken t);
-
-/* Internal macros. */
-
-#if FFESTB_KILL_EASY_
-#define ffestb_subr_kill_accept_() \
- ffestb_subr_kill_easy_((ffestpInquireIx) FFESTP_acceptix)
-#define ffestb_subr_kill_beru_() \
- ffestb_subr_kill_easy_((ffestpInquireIx) FFESTP_beruix)
-#define ffestb_subr_kill_close_() \
- ffestb_subr_kill_easy_((ffestpInquireIx) FFESTP_closeix)
-#define ffestb_subr_kill_delete_() \
- ffestb_subr_kill_easy_((ffestpInquireIx) FFESTP_deleteix)
-#define ffestb_subr_kill_find_() \
- ffestb_subr_kill_easy_((ffestpInquireIx) FFESTP_findix)
-#define ffestb_subr_kill_inquire_() \
- ffestb_subr_kill_easy_((ffestpInquireIx) FFESTP_inquireix)
-#define ffestb_subr_kill_open_() \
- ffestb_subr_kill_easy_((ffestpInquireIx) FFESTP_openix)
-#define ffestb_subr_kill_print_() \
- ffestb_subr_kill_easy_((ffestpInquireIx) FFESTP_printix)
-#define ffestb_subr_kill_read_() \
- ffestb_subr_kill_easy_((ffestpInquireIx) FFESTP_readix)
-#define ffestb_subr_kill_rewrite_() \
- ffestb_subr_kill_easy_((ffestpInquireIx) FFESTP_rewriteix)
-#define ffestb_subr_kill_type_() \
- ffestb_subr_kill_easy_((ffestpInquireIx) FFESTP_typeix)
-#define ffestb_subr_kill_vxtcode_() \
- ffestb_subr_kill_easy_((ffestpInquireIx) FFESTP_vxtcodeix)
-#define ffestb_subr_kill_write_() \
- ffestb_subr_kill_easy_((ffestpInquireIx) FFESTP_writeix)
-#endif
-
-/* ffestb_subr_ambig_nope_ -- Cleans up and aborts ambig w/o confirming
-
- ffestb_subr_ambig_nope_();
-
- Switch from ambiguity handling in _entsp_ functions to handling entities
- in _ents_ (perform housekeeping tasks). */
-
-static ffelexHandler
-ffestb_subr_ambig_nope_ (ffelexToken t)
-{
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffelex_token_kill (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[2]);
- ffestt_tokenlist_kill (ffestb_local_.decl.toklist);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FUNCTION", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_subr_ambig_to_ents_ -- Switches from ambiguity to entity decl
-
- ffestb_subr_ambig_to_ents_();
-
- Switch from ambiguity handling in _entsp_ functions to handling entities
- in _ents_ (perform housekeeping tasks). */
-
-static void
-ffestb_subr_ambig_to_ents_ (void)
-{
- ffelexToken nt;
-
- nt = ffelex_token_name_from_names (ffesta_tokens[1], 0, 0);
- ffelex_token_kill (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[2]);
- ffesta_tokens[1] = nt;
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- if (!ffestb_local_.decl.aster_after)
- {
- if (ffestb_local_.decl.type == FFESTP_typeCHARACTER)
- {
- if (!ffesta_is_inhibited ())
- ffestc_decl_start (ffestb_local_.decl.type, ffesta_tokens[0],
- ffestb_local_.decl.kind, ffestb_local_.decl.kindt,
- ffestb_local_.decl.len, ffestb_local_.decl.lent);
- if (ffestb_local_.decl.kindt != NULL)
- {
- ffelex_token_kill (ffestb_local_.decl.kindt);
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- }
- if (ffestb_local_.decl.lent != NULL)
- {
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- }
- }
- else
- {
- if (!ffesta_is_inhibited ())
- ffestc_decl_start (ffestb_local_.decl.type, ffesta_tokens[0],
- ffestb_local_.decl.kind, ffestb_local_.decl.kindt, NULL,
- NULL);
- if (ffestb_local_.decl.kindt != NULL)
- {
- ffelex_token_kill (ffestb_local_.decl.kindt);
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- }
- }
- return;
- }
- if (ffestb_local_.decl.type == FFESTP_typeCHARACTER)
- {
- if (!ffesta_is_inhibited ())
- ffestc_decl_start (ffestb_local_.decl.type, ffesta_tokens[0],
- ffestb_local_.decl.kind, ffestb_local_.decl.kindt, NULL, NULL);
- if (ffestb_local_.decl.kindt != NULL)
- {
- ffelex_token_kill (ffestb_local_.decl.kindt);
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- }
- }
- else if (!ffesta_is_inhibited ())
- ffestc_decl_start (ffestb_local_.decl.type, ffesta_tokens[0],
- NULL, NULL, NULL, NULL);
- /* NAME/NAMES token already in ffesta_tokens[1]. */
-}
-
-/* ffestb_subr_dimlist_ -- OPEN_PAREN expr
-
- (ffestb_subr_dimlist_) // to expression handler
-
- Deal with a dimension list.
-
- 19-Dec-90 JCB 1.1
- Detect too many dimensions if backend wants it. */
-
-static ffelexHandler
-ffestb_subr_dimlist_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- break;
-#ifdef FFECOM_dimensionsMAX
- if (ffestb_subrargs_.dim_list.ndims++ == FFECOM_dimensionsMAX)
- {
- ffesta_ffebad_1t (FFEBAD_TOO_MANY_DIMS, ft);
- ffestb_subrargs_.dim_list.ok = TRUE; /* Not a parse error, really. */
- return (ffelexHandler) ffestb_subrargs_.dim_list.handler;
- }
-#endif
- ffestt_dimlist_append (ffestb_subrargs_.dim_list.dims, NULL, expr,
- ffelex_token_use (t));
- ffestb_subrargs_.dim_list.ok = TRUE;
- return (ffelexHandler) ffestb_subrargs_.dim_list.handler;
-
- case FFELEX_typeCOMMA:
- if ((expr != NULL) && (ffebld_op (expr) == FFEBLD_opSTAR))
- break;
-#ifdef FFECOM_dimensionsMAX
- if (ffestb_subrargs_.dim_list.ndims++ == FFECOM_dimensionsMAX)
- {
- ffesta_ffebad_1t (FFEBAD_TOO_MANY_DIMS, ft);
- return (ffelexHandler) ffeexpr_rhs (ffestb_subrargs_.dim_list.pool,
- ffestb_subrargs_.dim_list.ctx,
- (ffeexprCallback) ffestb_subr_dimlist_2_);
- }
-#endif
- ffestt_dimlist_append (ffestb_subrargs_.dim_list.dims, NULL, expr,
- ffelex_token_use (t));
- return (ffelexHandler) ffeexpr_rhs (ffestb_subrargs_.dim_list.pool,
- ffestb_subrargs_.dim_list.ctx,
- (ffeexprCallback) ffestb_subr_dimlist_);
-
- case FFELEX_typeCOLON:
- if ((expr != NULL) && (ffebld_op (expr) == FFEBLD_opSTAR))
- break;
-#ifdef FFECOM_dimensionsMAX
- if (ffestb_subrargs_.dim_list.ndims++ == FFECOM_dimensionsMAX)
- {
- ffesta_ffebad_1t (FFEBAD_TOO_MANY_DIMS, ft);
- return (ffelexHandler) ffeexpr_rhs (ffestb_subrargs_.dim_list.pool,
- ffestb_subrargs_.dim_list.ctx,
- (ffeexprCallback) ffestb_subr_dimlist_2_);
- }
-#endif
- ffestt_dimlist_append (ffestb_subrargs_.dim_list.dims, expr, NULL,
- ffelex_token_use (t)); /* NULL second expr for
- now, just plug in. */
- return (ffelexHandler) ffeexpr_rhs (ffestb_subrargs_.dim_list.pool,
- ffestb_subrargs_.dim_list.ctx,
- (ffeexprCallback) ffestb_subr_dimlist_1_);
-
- default:
- break;
- }
-
- ffestb_subrargs_.dim_list.ok = FALSE;
- return (ffelexHandler) ffestb_subrargs_.dim_list.handler (t);
-}
-
-/* ffestb_subr_dimlist_1_ -- OPEN_PAREN expr COLON expr
-
- (ffestb_subr_dimlist_1_) // to expression handler
-
- Get the upper bound. */
-
-static ffelexHandler
-ffestb_subr_dimlist_1_ (ffelexToken ft UNUSED, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- ffestb_subrargs_.dim_list.dims->previous->upper = expr;
- ffestb_subrargs_.dim_list.ok = TRUE;
- return (ffelexHandler) ffestb_subrargs_.dim_list.handler;
-
- case FFELEX_typeCOMMA:
- if ((expr != NULL) && (ffebld_op (expr) == FFEBLD_opSTAR))
- break;
- ffestb_subrargs_.dim_list.dims->previous->upper = expr;
- return (ffelexHandler) ffeexpr_rhs (ffestb_subrargs_.dim_list.pool,
- ffestb_subrargs_.dim_list.ctx, (ffeexprCallback) ffestb_subr_dimlist_);
-
- default:
- break;
- }
-
- ffestb_subrargs_.dim_list.ok = FALSE;
- return (ffelexHandler) ffestb_subrargs_.dim_list.handler (t);
-}
-
-/* ffestb_subr_dimlist_2_ -- OPEN_PAREN too-many-dim-exprs
-
- (ffestb_subr_dimlist_2_) // to expression handler
-
- Get the upper bound. */
-
-static ffelexHandler
-ffestb_subr_dimlist_2_ (ffelexToken ft UNUSED, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- ffestb_subrargs_.dim_list.ok = TRUE; /* Not a parse error, really. */
- return (ffelexHandler) ffestb_subrargs_.dim_list.handler;
-
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLON:
- if ((expr != NULL) && (ffebld_op (expr) == FFEBLD_opSTAR))
- break;
- return (ffelexHandler) ffeexpr_rhs (ffestb_subrargs_.dim_list.pool,
- ffestb_subrargs_.dim_list.ctx,
- (ffeexprCallback) ffestb_subr_dimlist_2_);
-
- default:
- break;
- }
-
- ffestb_subrargs_.dim_list.ok = FALSE;
- return (ffelexHandler) ffestb_subrargs_.dim_list.handler (t);
-}
-
-/* ffestb_subr_name_list_ -- Collect a list of name args and close-paren
-
- return ffestb_subr_name_list_; // to lexer after seeing OPEN_PAREN
-
- This implements R1224 in the Fortran 90 spec. The arg list may be
- empty, or be a comma-separated list (an optional trailing comma currently
- results in a warning but no other effect) of arguments. For functions,
- however, "*" is invalid (we implement dummy-arg-name, rather than R1224
- dummy-arg, which itself is either dummy-arg-name or "*"). */
-
-static ffelexHandler
-ffestb_subr_name_list_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- if (ffestt_tokenlist_count (ffestb_subrargs_.name_list.args) != 0)
- { /* Trailing comma, warn. */
- ffebad_start (FFEBAD_TRAILING_COMMA);
- ffebad_here (0, ffelex_token_where_line (t), ffelex_token_where_column (t));
- ffebad_finish ();
- }
- ffestb_subrargs_.name_list.ok = TRUE;
- ffestb_subrargs_.name_list.close_paren = ffelex_token_use (t);
- if (ffestb_subrargs_.name_list.names)
- ffelex_set_names (TRUE);
- return (ffelexHandler) ffestb_subrargs_.name_list.handler;
-
- case FFELEX_typeASTERISK:
- if (!ffestb_subrargs_.name_list.is_subr)
- break;
-
- case FFELEX_typeNAME:
- ffestt_tokenlist_append (ffestb_subrargs_.name_list.args,
- ffelex_token_use (t));
- return (ffelexHandler) ffestb_subr_name_list_1_;
-
- default:
- break;
- }
-
- ffestb_subrargs_.name_list.ok = FALSE;
- ffestb_subrargs_.name_list.close_paren = ffelex_token_use (t);
- if (ffestb_subrargs_.name_list.names)
- ffelex_set_names (TRUE);
- return (ffelexHandler) (*ffestb_subrargs_.name_list.handler) (t);
-}
-
-/* ffestb_subr_name_list_1_ -- NAME or ASTERISK
-
- return ffestb_subr_name_list_1_; // to lexer
-
- The next token must be COMMA or CLOSE_PAREN, either way go to original
- state, but only after adding the appropriate name list item. */
-
-static ffelexHandler
-ffestb_subr_name_list_1_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- return (ffelexHandler) ffestb_subr_name_list_;
-
- case FFELEX_typeCLOSE_PAREN:
- ffestb_subrargs_.name_list.ok = TRUE;
- ffestb_subrargs_.name_list.close_paren = ffelex_token_use (t);
- if (ffestb_subrargs_.name_list.names)
- ffelex_set_names (TRUE);
- return (ffelexHandler) ffestb_subrargs_.name_list.handler;
-
- default:
- ffestb_subrargs_.name_list.ok = FALSE;
- ffestb_subrargs_.name_list.close_paren = ffelex_token_use (t);
- if (ffestb_subrargs_.name_list.names)
- ffelex_set_names (TRUE);
- return (ffelexHandler) (*ffestb_subrargs_.name_list.handler) (t);
- }
-}
-
-static void
-ffestb_subr_R1001_append_p_ (void)
-{
- ffesttFormatList f;
-
- if (!ffestb_local_.format.pre.present)
- {
- ffesta_ffebad_1t (FFEBAD_FORMAT_BAD_P_SPEC, ffestb_local_.format.t);
- ffelex_token_kill (ffestb_local_.format.t);
- return;
- }
-
- f = ffestt_formatlist_append (ffestb_local_.format.f);
- f->type = FFESTP_formattypeP;
- f->t = ffestb_local_.format.t;
- f->u.R1010.val = ffestb_local_.format.pre;
-}
-
-/* ffestb_decl_kindparam_ -- "type" OPEN_PAREN
-
- return ffestb_decl_kindparam_; // to lexer
-
- Handle "[KIND=]expr)". */
-
-static ffelexHandler
-ffestb_decl_kindparam_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_decl_kindparam_1_;
-
- default:
- return (ffelexHandler) (*((ffelexHandler)
- ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextKINDTYPE,
- (ffeexprCallback) ffestb_decl_kindparam_2_)))
- (t);
- }
-}
-
-/* ffestb_decl_kindparam_1_ -- "type" OPEN_PAREN NAME
-
- return ffestb_decl_kindparam_1_; // to lexer
-
- Handle "[KIND=]expr)". */
-
-static ffelexHandler
-ffestb_decl_kindparam_1_ (ffelexToken t)
-{
- ffelexHandler next;
- ffelexToken nt;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- ffesta_confirmed ();
- if (ffestr_other (ffesta_tokens[1]) != FFESTR_otherKIND)
- break;
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextKINDTYPE, (ffeexprCallback) ffestb_decl_kindparam_2_);
-
- default:
- nt = ffesta_tokens[1];
- next = (ffelexHandler) (*((ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextKINDTYPE, (ffeexprCallback) ffestb_decl_kindparam_2_)))
- (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
- }
-
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM,
- ffestb_local_.decl.badname,
- ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_kindparam_2_ -- "type" OPEN_PAREN ["KIND="] expr
-
- (ffestb_decl_kindparam_2_) // to expression handler
-
- Handle "[KIND=]expr)". */
-
-static ffelexHandler
-ffestb_decl_kindparam_2_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- ffestb_local_.decl.kind = expr;
- ffestb_local_.decl.kindt = ffelex_token_use (ft);
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- ffelex_set_names (TRUE);
- return (ffelexHandler) ffestb_local_.decl.handler;
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM,
- ffestb_local_.decl.badname,
- t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_starkind_ -- "type" ASTERISK
-
- return ffestb_decl_starkind_; // to lexer
-
- Handle NUMBER. */
-
-static ffelexHandler
-ffestb_decl_starkind_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNUMBER:
- ffestb_local_.decl.kindt = ffelex_token_use (t);
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- ffelex_set_names (TRUE);
- return (ffelexHandler) ffestb_local_.decl.handler;
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM,
- ffestb_local_.decl.badname,
- t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_starlen_ -- "CHARACTER" ASTERISK
-
- return ffestb_decl_starlen_; // to lexer
-
- Handle NUMBER. */
-
-static ffelexHandler
-ffestb_decl_starlen_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNUMBER:
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = ffelex_token_use (t);
- ffelex_set_names (TRUE);
- return (ffelexHandler) ffestb_local_.decl.handler;
-
- case FFELEX_typeOPEN_PAREN:
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextCHARACTERSIZE,
- (ffeexprCallback) ffestb_decl_starlen_1_);
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM,
- ffestb_local_.decl.badname,
- t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_starlen_1_ -- "CHARACTER" ASTERISK OPEN_PAREN expr
-
- (ffestb_decl_starlen_1_) // to expression handler
-
- Handle CLOSE_PAREN. */
-
-static ffelexHandler
-ffestb_decl_starlen_1_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- break;
- ffestb_local_.decl.len = expr;
- ffestb_local_.decl.lent = ffelex_token_use (ft);
- ffelex_set_names (TRUE);
- return (ffelexHandler) ffestb_local_.decl.handler;
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM,
- ffestb_local_.decl.badname,
- t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_typeparams_ -- "CHARACTER" OPEN_PAREN
-
- return ffestb_decl_typeparams_; // to lexer
-
- Handle "[KIND=]expr)". */
-
-static ffelexHandler
-ffestb_decl_typeparams_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_decl_typeparams_1_;
-
- default:
- if (ffestb_local_.decl.lent == NULL)
- return (ffelexHandler) (*((ffelexHandler)
- ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextCHARACTERSIZE,
- (ffeexprCallback) ffestb_decl_typeparams_2_)))
- (t);
- if (ffestb_local_.decl.kindt != NULL)
- break;
- return (ffelexHandler) (*((ffelexHandler)
- ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextKINDTYPE,
- (ffeexprCallback) ffestb_decl_typeparams_3_)))
- (t);
- }
-
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM,
- ffestb_local_.decl.badname,
- t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_typeparams_1_ -- "CHARACTER" OPEN_PAREN NAME
-
- return ffestb_decl_typeparams_1_; // to lexer
-
- Handle "[KIND=]expr)". */
-
-static ffelexHandler
-ffestb_decl_typeparams_1_ (ffelexToken t)
-{
- ffelexHandler next;
- ffelexToken nt;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- ffesta_confirmed ();
- switch (ffestr_other (ffesta_tokens[1]))
- {
- case FFESTR_otherLEN:
- if (ffestb_local_.decl.lent != NULL)
- break;
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextCHARACTERSIZE,
- (ffeexprCallback) ffestb_decl_typeparams_2_);
-
- case FFESTR_otherKIND:
- if (ffestb_local_.decl.kindt != NULL)
- break;
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextKINDTYPE,
- (ffeexprCallback) ffestb_decl_typeparams_3_);
-
- default:
- break;
- }
- break;
-
- default:
- nt = ffesta_tokens[1];
- if (ffestb_local_.decl.lent == NULL)
- next = (ffelexHandler) (*((ffelexHandler)
- ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextCHARACTERSIZE,
- (ffeexprCallback) ffestb_decl_typeparams_2_)))
- (nt);
- else if (ffestb_local_.decl.kindt == NULL)
- next = (ffelexHandler) (*((ffelexHandler)
- ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextKINDTYPE,
- (ffeexprCallback) ffestb_decl_typeparams_3_)))
- (nt);
- else
- {
- ffesta_tokens[1] = nt;
- break;
- }
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
- }
-
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM,
- ffestb_local_.decl.badname,
- ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_typeparams_2_ -- "CHARACTER" OPEN_PAREN ["LEN="] expr
-
- (ffestb_decl_typeparams_2_) // to expression handler
-
- Handle "[LEN=]expr)". */
-
-static ffelexHandler
-ffestb_decl_typeparams_2_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- ffestb_local_.decl.len = expr;
- ffestb_local_.decl.lent = ffelex_token_use (ft);
- ffelex_set_names (TRUE);
- return (ffelexHandler) ffestb_local_.decl.handler;
-
- case FFELEX_typeCOMMA:
- ffestb_local_.decl.len = expr;
- ffestb_local_.decl.lent = ffelex_token_use (ft);
- return (ffelexHandler) ffestb_decl_typeparams_;
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM,
- ffestb_local_.decl.badname,
- t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_typeparams_3_ -- "CHARACTER" OPEN_PAREN ["KIND="] expr
-
- (ffestb_decl_typeparams_3_) // to expression handler
-
- Handle "[KIND=]expr)". */
-
-static ffelexHandler
-ffestb_decl_typeparams_3_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- ffestb_local_.decl.kind = expr;
- ffestb_local_.decl.kindt = ffelex_token_use (ft);
- ffelex_set_names (TRUE);
- return (ffelexHandler) ffestb_local_.decl.handler;
-
- case FFELEX_typeCOMMA:
- ffestb_local_.decl.kind = expr;
- ffestb_local_.decl.kindt = ffelex_token_use (ft);
- return (ffelexHandler) ffestb_decl_typeparams_;
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM,
- ffestb_local_.decl.badname,
- t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_subr_label_list_ -- Collect a tokenlist of labels and close-paren
-
- return ffestb_subr_label_list_; // to lexer after seeing OPEN_PAREN
-
- First token must be a NUMBER. Must be followed by zero or more COMMA
- NUMBER pairs. Must then be followed by a CLOSE_PAREN. If all ok, put
- the NUMBER tokens in a token list and return via the handler for the
- token after CLOSE_PAREN. Else return via
- same handler, but with the ok return value set FALSE. */
-
-static ffelexHandler
-ffestb_subr_label_list_ (ffelexToken t)
-{
- if (ffelex_token_type (t) == FFELEX_typeNUMBER)
- {
- ffestt_tokenlist_append (ffestb_subrargs_.label_list.labels,
- ffelex_token_use (t));
- return (ffelexHandler) ffestb_subr_label_list_1_;
- }
-
- ffestb_subrargs_.label_list.ok = FALSE;
- return (ffelexHandler) (*ffestb_subrargs_.label_list.handler) (t);
-}
-
-/* ffestb_subr_label_list_1_ -- NUMBER
-
- return ffestb_subr_label_list_1_; // to lexer after seeing NUMBER
-
- The next token must be COMMA, in which case go back to
- ffestb_subr_label_list_, or CLOSE_PAREN, in which case set ok to TRUE
- and go to the handler. */
-
-static ffelexHandler
-ffestb_subr_label_list_1_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- return (ffelexHandler) ffestb_subr_label_list_;
-
- case FFELEX_typeCLOSE_PAREN:
- ffestb_subrargs_.label_list.ok = TRUE;
- return (ffelexHandler) ffestb_subrargs_.label_list.handler;
-
- default:
- ffestb_subrargs_.label_list.ok = FALSE;
- return (ffelexHandler) (*ffestb_subrargs_.label_list.handler) (t);
- }
-}
-
-/* ffestb_do -- Parse the DO statement
-
- return ffestb_do; // to lexer
-
- Make sure the statement has a valid form for the DO statement. If it
- does, implement the statement. */
-
-ffelexHandler
-ffestb_do (ffelexToken t)
-{
- ffeTokenLength i;
- unsigned const char *p;
- ffelexHandler next;
- ffelexToken nt;
- ffestrSecond kw;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstDO)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNUMBER:
- ffesta_confirmed ();
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_do1_;
-
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- ffesta_tokens[1] = NULL;
- return (ffelexHandler) ffestb_do2_;
-
- case FFELEX_typeNAME:
- ffesta_confirmed ();
- ffesta_tokens[1] = NULL;
- ffesta_tokens[2] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_do3_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- ffesta_tokens[1] = NULL;
- return (ffelexHandler) ffestb_do1_ (t);
-
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstDO)
- goto bad_0; /* :::::::::::::::::::: */
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlDO);
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeOPEN_PAREN: /* Must be "DO" label "WHILE". */
- if (! ISDIGIT (*p))
- goto bad_i; /* :::::::::::::::::::: */
- ffesta_tokens[1] = ffelex_token_number_from_names (ffesta_tokens[0],
- i);
- p += ffelex_token_length (ffesta_tokens[1]);
- i += ffelex_token_length (ffesta_tokens[1]);
- if (((*p) != 'W') && ((*p) != 'w'))
- goto bad_i1; /* :::::::::::::::::::: */
- nt = ffelex_token_name_from_names (ffesta_tokens[0], i, 0);
- kw = ffestr_second (nt);
- ffelex_token_kill (nt);
- if (kw != FFESTR_secondWHILE)
- goto bad_i1; /* :::::::::::::::::::: */
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextDOWHILE, (ffeexprCallback) ffestb_do4_);
-
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- if (*p == '\0')
- {
- ffesta_tokens[1] = NULL;
- return (ffelexHandler) ffestb_do2_;
- }
- if (! ISDIGIT (*p))
- goto bad_i; /* :::::::::::::::::::: */
- ffesta_tokens[1] = ffelex_token_number_from_names (ffesta_tokens[0],
- i);
- p += ffelex_token_length (ffesta_tokens[1]);
- i += ffelex_token_length (ffesta_tokens[1]);
- if (*p != '\0')
- goto bad_i1; /* :::::::::::::::::::: */
- return (ffelexHandler) ffestb_do2_;
-
- case FFELEX_typeEQUALS:
- if (ISDIGIT (*p))
- {
- ffesta_tokens[1]
- = ffelex_token_number_from_names (ffesta_tokens[0], i);
- p += ffelex_token_length (ffesta_tokens[1]);
- i += ffelex_token_length (ffesta_tokens[1]);
- }
- else
- ffesta_tokens[1] = NULL;
- if (!ffesrc_is_name_init (*p))
- goto bad_i1; /* :::::::::::::::::::: */
- nt = ffelex_token_name_from_names (ffesta_tokens[0], i, 0);
- next = (ffelexHandler) (*((ffelexHandler) ffeexpr_lhs
- (ffesta_output_pool, FFEEXPR_contextDO,
- (ffeexprCallback) ffestb_do6_)))
- (nt);
- ffelex_token_kill (nt); /* Will get it back in _6_... */
- return (ffelexHandler) (*next) (t);
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (ISDIGIT (*p))
- {
- ffesta_tokens[1]
- = ffelex_token_number_from_names (ffesta_tokens[0], i);
- p += ffelex_token_length (ffesta_tokens[1]);
- i += ffelex_token_length (ffesta_tokens[1]);
- }
- else
- ffesta_tokens[1] = NULL;
- if (*p != '\0')
- goto bad_i1; /* :::::::::::::::::::: */
- return (ffelexHandler) ffestb_do1_ (t);
- }
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "DO", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "DO", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i1: /* :::::::::::::::::::: */
- if (ffesta_tokens[1])
- ffelex_token_kill (ffesta_tokens[1]);
-
-bad_i: /* :::::::::::::::::::: */
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "DO", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_dowhile -- Parse the DOWHILE statement
-
- return ffestb_dowhile; // to lexer
-
- Make sure the statement has a valid form for the DOWHILE statement. If it
- does, implement the statement. */
-
-ffelexHandler
-ffestb_dowhile (ffelexToken t)
-{
- ffeTokenLength i;
- const char *p;
- ffelexHandler next;
- ffelexToken nt;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstDOWHILE)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeOPEN_PAREN:
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlDOWHILE);
- if (*p != '\0')
- goto bad_i; /* :::::::::::::::::::: */
- ffesta_tokens[1] = NULL;
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextDOWHILE, (ffeexprCallback) ffestb_do4_);
-
- case FFELEX_typeEQUALS:/* Not really DOWHILE, but DOWHILExyz=.... */
- ffesta_tokens[1] = NULL;
- nt = ffelex_token_name_from_names (ffesta_tokens[0], FFESTR_firstlDO,
- 0);
- next = (ffelexHandler) (*((ffelexHandler) ffeexpr_lhs
- (ffesta_output_pool, FFEEXPR_contextDO,
- (ffeexprCallback) ffestb_do6_)))
- (nt);
- ffelex_token_kill (nt); /* Will get it back in _6_... */
- return (ffelexHandler) (*next) (t);
- }
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "DO", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "DO", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "DO", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_do1_ -- "DO" [label]
-
- return ffestb_do1_; // to lexer
-
- Make sure the statement has a valid form for the DO statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_do1_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- return (ffelexHandler) ffestb_do2_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- {
- if (ffesta_tokens[1] != NULL)
- ffestc_R819B (ffesta_construct_name, ffesta_tokens[1], NULL,
- NULL);
- else
- ffestc_R820B (ffesta_construct_name, NULL, NULL);
- }
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- return (ffelexHandler) ffesta_zero (t);
-
- case FFELEX_typeNAME:
- return (ffelexHandler) ffestb_do2_ (t);
-
- default:
- break;
- }
-
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "DO", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_do2_ -- "DO" [label] [,]
-
- return ffestb_do2_; // to lexer
-
- Make sure the statement has a valid form for the DO statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_do2_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[2] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_do3_;
-
- default:
- break;
- }
-
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "DO", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_do3_ -- "DO" [label] [,] NAME
-
- return ffestb_do3_; // to lexer
-
- Make sure the statement has a valid form for the DO statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_do3_ (ffelexToken t)
-{
- ffelexHandler next;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- next = (ffelexHandler) (*((ffelexHandler) ffeexpr_lhs (ffesta_output_pool,
- FFEEXPR_contextDO, (ffeexprCallback) ffestb_do6_)))
- (ffesta_tokens[2]);
- ffelex_token_kill (ffesta_tokens[2]); /* Will get it back in _6_... */
- return (ffelexHandler) (*next) (t);
-
- case FFELEX_typeOPEN_PAREN:
- if (ffestr_second (ffesta_tokens[2]) != FFESTR_secondWHILE)
- {
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "DO", ffesta_tokens[2]);
- ffelex_token_kill (ffesta_tokens[2]);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid token. */
- }
- ffelex_token_kill (ffesta_tokens[2]);
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextDOWHILE, (ffeexprCallback) ffestb_do4_);
-
- default:
- break;
- }
-
- ffelex_token_kill (ffesta_tokens[2]);
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "DO", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_do4_ -- "DO" [label] [,] "WHILE" OPEN_PAREN expr
-
- (ffestb_do4_) // to expression handler
-
- Make sure the statement has a valid form for the DO statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_do4_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- break;
- ffesta_tokens[2] = ffelex_token_use (ft);
- ffestb_local_.dowhile.expr = expr;
- return (ffelexHandler) ffestb_do5_;
-
- default:
- break;
- }
-
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "DO", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_do5_ -- "DO" [label] [,] "WHILE" OPEN_PAREN expr CLOSE_PAREN
-
- return ffestb_do5_; // to lexer
-
- Make sure the statement has a valid form for the DO statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_do5_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- {
- if (ffesta_tokens[1] != NULL)
- ffestc_R819B (ffesta_construct_name, ffesta_tokens[1],
- ffestb_local_.dowhile.expr, ffesta_tokens[2]);
- else
- ffestc_R820B (ffesta_construct_name, ffestb_local_.dowhile.expr,
- ffesta_tokens[2]);
- }
- ffelex_token_kill (ffesta_tokens[2]);
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffelex_token_kill (ffesta_tokens[2]);
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "DO", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_do6_ -- "DO" [label] [,] var-expr
-
- (ffestb_do6_) // to expression handler
-
- Make sure the statement has a valid form for the DO statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_do6_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- /* _3_ already ensured that this would be an EQUALS token. If not, it is a
- bug in the FFE. */
-
- assert (ffelex_token_type (t) == FFELEX_typeEQUALS);
-
- ffesta_tokens[2] = ffelex_token_use (ft);
- ffestb_local_.do_stmt.var = expr;
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextDO, (ffeexprCallback) ffestb_do7_);
-}
-
-/* ffestb_do7_ -- "DO" [label] [,] var-expr EQUALS expr
-
- (ffestb_do7_) // to expression handler
-
- Make sure the statement has a valid form for the DO statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_do7_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- if (expr == NULL)
- break;
- ffesta_tokens[3] = ffelex_token_use (ft);
- ffestb_local_.do_stmt.start = expr;
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextDO, (ffeexprCallback) ffestb_do8_);
-
- default:
- break;
- }
-
- ffelex_token_kill (ffesta_tokens[2]);
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "DO", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_do8_ -- "DO" [label] [,] var-expr EQUALS expr COMMA expr
-
- (ffestb_do8_) // to expression handler
-
- Make sure the statement has a valid form for the DO statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_do8_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (expr == NULL)
- break;
- ffesta_tokens[4] = ffelex_token_use (ft);
- ffestb_local_.do_stmt.end = expr;
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextDO, (ffeexprCallback) ffestb_do9_);
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (expr == NULL)
- break;
- ffesta_tokens[4] = ffelex_token_use (ft);
- ffestb_local_.do_stmt.end = expr;
- return (ffelexHandler) ffestb_do9_ (NULL, NULL, t);
-
- default:
- break;
- }
-
- ffelex_token_kill (ffesta_tokens[3]);
- ffelex_token_kill (ffesta_tokens[2]);
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "DO", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_do9_ -- "DO" [label] [,] var-expr EQUALS expr COMMA expr
- [COMMA expr]
-
- (ffestb_do9_) // to expression handler
-
- Make sure the statement has a valid form for the DO statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_do9_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if ((expr == NULL) && (ft != NULL))
- break;
- if (!ffesta_is_inhibited ())
- {
- if (ffesta_tokens[1] != NULL)
- ffestc_R819A (ffesta_construct_name, ffesta_tokens[1],
- ffestb_local_.do_stmt.var, ffesta_tokens[2],
- ffestb_local_.do_stmt.start, ffesta_tokens[3],
- ffestb_local_.do_stmt.end, ffesta_tokens[4], expr, ft);
- else
- ffestc_R820A (ffesta_construct_name, ffestb_local_.do_stmt.var,
- ffesta_tokens[2], ffestb_local_.do_stmt.start,
- ffesta_tokens[3], ffestb_local_.do_stmt.end,
- ffesta_tokens[4], expr, ft);
- }
- ffelex_token_kill (ffesta_tokens[4]);
- ffelex_token_kill (ffesta_tokens[3]);
- ffelex_token_kill (ffesta_tokens[2]);
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
-
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffelex_token_kill (ffesta_tokens[4]);
- ffelex_token_kill (ffesta_tokens[3]);
- ffelex_token_kill (ffesta_tokens[2]);
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "DO", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_else -- Parse the ELSE statement
-
- return ffestb_else; // to lexer
-
- Make sure the statement has a valid form for the ELSE statement. If it
- does, implement the statement. */
-
-ffelexHandler
-ffestb_else (ffelexToken t)
-{
- ffeTokenLength i;
- unsigned const char *p;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstELSE)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- ffesta_tokens[1] = NULL;
- ffestb_args.elsexyz.second = FFESTR_secondNone;
- return (ffelexHandler) ffestb_else1_ (t);
-
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNAME:
- break;
- }
-
- ffesta_confirmed ();
- ffestb_args.elsexyz.second = ffesta_second_kw;
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_else1_;
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstELSE)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- break;
- }
- ffesta_confirmed ();
- if (ffelex_token_length (ffesta_tokens[0]) != FFESTR_firstlELSE)
- {
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlELSE);
- if (!ffesrc_is_name_init (*p))
- goto bad_i; /* :::::::::::::::::::: */
- ffesta_tokens[1]
- = ffelex_token_name_from_names (ffesta_tokens[0], i, 0);
- }
- else
- ffesta_tokens[1] = NULL;
- ffestb_args.elsexyz.second = FFESTR_secondNone;
- return (ffelexHandler) ffestb_else1_ (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "ELSE", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "ELSE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "ELSE", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_elsexyz -- Parse an ELSEIF/ELSEWHERE statement
-
- return ffestb_elsexyz; // to lexer
-
- Expects len and second to be set in ffestb_args.elsexyz to the length
- of the ELSExyz keyword involved and the corresponding ffestrSecond value. */
-
-ffelexHandler
-ffestb_elsexyz (ffelexToken t)
-{
- ffeTokenLength i;
- const char *p;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (ffesta_first_kw == FFESTR_firstELSEIF)
- goto bad_0; /* :::::::::::::::::::: */
- ffesta_confirmed ();
- ffesta_tokens[1] = NULL;
- return (ffelexHandler) ffestb_else1_ (t);
-
- case FFELEX_typeNAME:
- ffesta_confirmed ();
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeOPEN_PAREN:
- if (ffesta_first_kw != FFESTR_firstELSEIF)
- goto bad_0; /* :::::::::::::::::::: */
- ffesta_tokens[1] = NULL;
- return (ffelexHandler) ffestb_else1_ (t);
-
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
-
- case FFELEX_typeNAMES:
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeOPEN_PAREN:
- if (ffesta_first_kw != FFESTR_firstELSEIF)
- goto bad_1; /* :::::::::::::::::::: */
- if (ffelex_token_length (ffesta_tokens[0]) != FFESTR_firstlELSEIF)
- {
- i = FFESTR_firstlELSEIF;
- goto bad_i; /* :::::::::::::::::::: */
- }
- ffesta_tokens[1] = NULL;
- return (ffelexHandler) ffestb_else1_ (t);
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- break;
- }
- ffesta_confirmed ();
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlELSE);
- ffesta_tokens[1]
- = ffelex_token_name_from_names (ffesta_tokens[0], i, 0);
- return (ffelexHandler) ffestb_else1_ (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "ELSE", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "ELSE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "ELSE IF", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_else1_ -- "ELSE" (NAME)
-
- return ffestb_else1_; // to lexer
-
- If EOS/SEMICOLON, implement the appropriate statement (keep in mind that
- "ELSE WHERE" is ambiguous at the syntactic level). If OPEN_PAREN, start
- expression analysis with callback at _2_. */
-
-static ffelexHandler
-ffestb_else1_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_PAREN:
- if (ffestb_args.elsexyz.second == FFESTR_secondIF)
- {
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextIF, (ffeexprCallback) ffestb_else2_);
- }
- /* Fall through. */
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "ELSE", t);
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero);
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- break;
-
- }
-
- switch (ffestb_args.elsexyz.second)
- {
-
- default:
- if (!ffesta_is_inhibited ())
- ffestc_R805 (ffesta_tokens[1]);
- break;
- }
-
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffesta_zero (t);
-}
-
-/* ffestb_else2_ -- "ELSE" "IF" OPEN_PAREN expr
-
- (ffestb_else2_) // to expression handler
-
- Make sure the next token is CLOSE_PAREN. */
-
-static ffelexHandler
-ffestb_else2_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- ffestb_local_.else_stmt.expr = expr;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- break;
- ffesta_tokens[1] = ffelex_token_use (ft);
- ffelex_set_names (TRUE);
- return (ffelexHandler) ffestb_else3_;
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "ELSE IF", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_else3_ -- "ELSE" "IF" OPEN_PAREN expr CLOSE_PAREN
-
- return ffestb_else3_; // to lexer
-
- Make sure the next token is "THEN". */
-
-static ffelexHandler
-ffestb_else3_ (ffelexToken t)
-{
- ffeTokenLength i;
- unsigned const char *p;
-
- ffelex_set_names (FALSE);
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_confirmed ();
- if (ffestr_first (t) == FFESTR_firstTHEN)
- return (ffelexHandler) ffestb_else4_;
- break;
-
- case FFELEX_typeNAMES:
- ffesta_confirmed ();
- if (ffestr_first (t) != FFESTR_firstTHEN)
- break;
- if (ffelex_token_length (t) == FFESTR_firstlTHEN)
- return (ffelexHandler) ffestb_else4_;
- p = ffelex_token_text (t) + (i = FFESTR_firstlTHEN);
- if (!ffesrc_is_name_init (*p))
- goto bad_i; /* :::::::::::::::::::: */
- ffesta_tokens[2] = ffelex_token_name_from_names (t, i, 0);
- return (ffelexHandler) ffestb_else5_;
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "ELSE IF", t);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "ELSE IF", t, i, NULL);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_else4_ -- "ELSE" "IF" OPEN_PAREN expr CLOSE_PAREN "THEN"
-
- return ffestb_else4_; // to lexer
-
- Handle a NAME or EOS/SEMICOLON, then go to state _5_. */
-
-static ffelexHandler
-ffestb_else4_ (ffelexToken t)
-{
- ffelex_set_names (FALSE);
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_tokens[2] = NULL;
- return (ffelexHandler) ffestb_else5_ (t);
-
- case FFELEX_typeNAME:
- ffesta_tokens[2] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_else5_;
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "ELSE IF", t);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_else5_ -- "ELSE" "IF" OPEN_PAREN expr CLOSE_PAREN "THEN"
-
- return ffestb_else5_; // to lexer
-
- Make sure the next token is EOS or SEMICOLON; implement R804. */
-
-static ffelexHandler
-ffestb_else5_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (!ffesta_is_inhibited ())
- ffestc_R804 (ffestb_local_.else_stmt.expr, ffesta_tokens[1],
- ffesta_tokens[2]);
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffesta_tokens[2] != NULL)
- ffelex_token_kill (ffesta_tokens[2]);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "ELSE IF", t);
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffesta_tokens[2] != NULL)
- ffelex_token_kill (ffesta_tokens[2]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_end -- Parse the END statement
-
- return ffestb_end; // to lexer
-
- Make sure the statement has a valid form for the END statement. If it
- does, implement the statement. */
-
-ffelexHandler
-ffestb_end (ffelexToken t)
-{
- ffeTokenLength i;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstEND)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_tokens[1] = NULL;
- ffestb_args.endxyz.second = FFESTR_secondNone;
- return (ffelexHandler) ffestb_end3_ (t);
-
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNAME:
- break;
- }
-
- ffesta_confirmed ();
- ffestb_args.endxyz.second = ffesta_second_kw;
- switch (ffesta_second_kw)
- {
- case FFESTR_secondFILE:
- ffestb_args.beru.badname = "ENDFILE";
- return (ffelexHandler) ffestb_beru;
-
- case FFESTR_secondBLOCK:
- return (ffelexHandler) ffestb_end1_;
-
- case FFESTR_secondNone:
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- return (ffelexHandler) ffestb_end2_;
- }
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstEND)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- break;
- }
- ffesta_confirmed ();
- if (ffelex_token_length (ffesta_tokens[0]) != FFESTR_firstlEND)
- {
- i = FFESTR_firstlEND;
- goto bad_i; /* :::::::::::::::::::: */
- }
- ffesta_tokens[1] = NULL;
- ffestb_args.endxyz.second = FFESTR_secondNone;
- return (ffelexHandler) ffestb_end3_ (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "END", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "END", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "END", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_endxyz -- Parse an ENDxyz statement
-
- return ffestb_endxyz; // to lexer
-
- Expects len and second to be set in ffestb_args.endxyz to the length
- of the ENDxyz keyword involved and the corresponding ffestrSecond value. */
-
-ffelexHandler
-ffestb_endxyz (ffelexToken t)
-{
- ffeTokenLength i;
- unsigned const char *p;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- ffesta_tokens[1] = NULL;
- return (ffelexHandler) ffestb_end3_ (t);
-
- case FFELEX_typeNAME:
- ffesta_confirmed ();
- switch (ffestb_args.endxyz.second)
- {
- case FFESTR_secondBLOCK:
- if (ffesta_second_kw != FFESTR_secondDATA)
- goto bad_1; /* :::::::::::::::::::: */
- return (ffelexHandler) ffestb_end2_;
-
- default:
- return (ffelexHandler) ffestb_end2_ (t);
- }
-
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
-
- case FFELEX_typeNAMES:
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- break;
- }
- ffesta_confirmed ();
- if (ffestb_args.endxyz.second == FFESTR_secondBLOCK)
- {
- i = FFESTR_firstlEND;
- goto bad_i; /* :::::::::::::::::::: */
- }
- if (ffelex_token_length (ffesta_tokens[0]) != ffestb_args.endxyz.len)
- {
- p = ffelex_token_text (ffesta_tokens[0])
- + (i = ffestb_args.endxyz.len);
- if (!ffesrc_is_name_init (*p))
- goto bad_i; /* :::::::::::::::::::: */
- ffesta_tokens[1]
- = ffelex_token_name_from_names (ffesta_tokens[0], i, 0);
- return (ffelexHandler) ffestb_end3_ (t);
- }
- ffesta_tokens[1] = NULL;
- return (ffelexHandler) ffestb_end3_ (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "END", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "END", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "END", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_end1_ -- "END" "BLOCK"
-
- return ffestb_end1_; // to lexer
-
- Make sure the next token is "DATA". */
-
-static ffelexHandler
-ffestb_end1_ (ffelexToken t)
-{
- if ((ffelex_token_type (t) == FFELEX_typeNAME)
- && (ffesrc_strcmp_2c (ffe_case_match (), ffelex_token_text (t), "DATA",
- "data", "Data")
- == 0))
- {
- return (ffelexHandler) ffestb_end2_;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "END", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_end2_ -- "END" <unit-kind>
-
- return ffestb_end2_; // to lexer
-
- Make sure the next token is a NAME or EOS. */
-
-static ffelexHandler
-ffestb_end2_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_end3_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_tokens[1] = NULL;
- return (ffelexHandler) ffestb_end3_ (t);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "END", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero);
- }
-}
-
-/* ffestb_end3_ -- "END" <unit-kind> (NAME)
-
- return ffestb_end3_; // to lexer
-
- Make sure the next token is an EOS, then implement the statement. */
-
-static ffelexHandler
-ffestb_end3_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "END", t);
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero);
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (ffestb_args.endxyz.second == FFESTR_secondNone)
- {
- if (!ffesta_is_inhibited ())
- ffestc_end ();
- return (ffelexHandler) ffesta_zero (t);
- }
- break;
- }
-
- switch (ffestb_args.endxyz.second)
- {
- case FFESTR_secondIF:
- if (!ffesta_is_inhibited ())
- ffestc_R806 (ffesta_tokens[1]);
- break;
-
- case FFESTR_secondSELECT:
- if (!ffesta_is_inhibited ())
- ffestc_R811 (ffesta_tokens[1]);
- break;
-
- case FFESTR_secondDO:
- if (!ffesta_is_inhibited ())
- ffestc_R825 (ffesta_tokens[1]);
- break;
-
- case FFESTR_secondPROGRAM:
- if (!ffesta_is_inhibited ())
- ffestc_R1103 (ffesta_tokens[1]);
- break;
-
- case FFESTR_secondBLOCK:
- case FFESTR_secondBLOCKDATA:
- if (!ffesta_is_inhibited ())
- ffestc_R1112 (ffesta_tokens[1]);
- break;
-
- case FFESTR_secondFUNCTION:
- if (!ffesta_is_inhibited ())
- ffestc_R1221 (ffesta_tokens[1]);
- break;
-
- case FFESTR_secondSUBROUTINE:
- if (!ffesta_is_inhibited ())
- ffestc_R1225 (ffesta_tokens[1]);
- break;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "END", ffesta_tokens[0]);
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero);
- }
-
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffesta_zero (t);
-}
-
-/* ffestb_goto -- Parse the GOTO statement
-
- return ffestb_goto; // to lexer
-
- Make sure the statement has a valid form for the GOTO statement. If it
- does, implement the statement. */
-
-ffelexHandler
-ffestb_goto (ffelexToken t)
-{
- ffeTokenLength i;
- unsigned const char *p;
- ffelexHandler next;
- ffelexToken nt;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- switch (ffesta_first_kw)
- {
- case FFESTR_firstGO:
- if ((ffelex_token_type (t) != FFELEX_typeNAME)
- || (ffesta_second_kw != FFESTR_secondTO))
- goto bad_1; /* :::::::::::::::::::: */
- ffesta_confirmed ();
- return (ffelexHandler) ffestb_goto1_;
-
- case FFESTR_firstGOTO:
- return (ffelexHandler) ffestb_goto1_ (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstGOTO)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeOPEN_PAREN:
- case FFELEX_typePERCENT: /* Since GOTO I%J is apparently valid
- in '90. */
- case FFELEX_typeCOMMA:
- break;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- break;
- }
- if (ffelex_token_length (ffesta_tokens[0]) != FFESTR_firstlGOTO)
- {
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlGOTO);
- if (ISDIGIT (*p))
- {
- nt = ffelex_token_number_from_names (ffesta_tokens[0], i);
- p += ffelex_token_length (nt);
- i += ffelex_token_length (nt);
- if (*p != '\0')
- {
- ffelex_token_kill (nt);
- goto bad_i; /* :::::::::::::::::::: */
- }
- }
- else if (ffesrc_is_name_init (*p))
- {
- nt = ffelex_token_name_from_names (ffesta_tokens[0], i, 0);
- }
- else
- goto bad_i; /* :::::::::::::::::::: */
- next = (ffelexHandler) ffestb_goto1_ (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
- }
- return (ffelexHandler) ffestb_goto1_ (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "GO TO", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "GO TO", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "GO TO", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_goto1_ -- "GOTO" or "GO" "TO"
-
- return ffestb_goto1_; // to lexer
-
- Make sure the statement has a valid form for the GOTO statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_goto1_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNUMBER:
- if (ffelex_token_type (ffesta_tokens[0]) == FFELEX_typeNAME)
- ffesta_confirmed ();
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_goto2_;
-
- case FFELEX_typeOPEN_PAREN:
- ffesta_tokens[1] = ffelex_token_use (t);
- ffestb_subrargs_.label_list.labels = ffestt_tokenlist_create ();
- ffestb_subrargs_.label_list.handler = (ffelexHandler) ffestb_goto3_;
- return (ffelexHandler) ffestb_subr_label_list_;
-
- case FFELEX_typeNAME:
- if (ffelex_token_type (ffesta_tokens[0]) == FFELEX_typeNAME)
- ffesta_confirmed ();
- return (ffelexHandler) (*((ffelexHandler)
- ffeexpr_lhs (ffesta_output_pool,
- FFEEXPR_contextAGOTO,
- (ffeexprCallback) ffestb_goto4_)))
- (t);
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- break;
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "GO TO", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_goto2_ -- "GO/TO" NUMBER
-
- return ffestb_goto2_; // to lexer
-
- Make sure the statement has a valid form for the GOTO statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_goto2_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R836 (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "GO TO", t);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_goto3_ -- "GO/TO" OPEN_PAREN label-list CLOSE_PAREN
-
- return ffestb_goto3_; // to lexer
-
- Make sure the statement has a valid form for the GOTO statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_goto3_ (ffelexToken t)
-{
- if (!ffestb_subrargs_.label_list.ok)
- goto bad; /* :::::::::::::::::::: */
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool, FFEEXPR_contextCGOTO,
- (ffeexprCallback) ffestb_goto5_);
-
- case FFELEX_typeEQUALS:
- case FFELEX_typePOINTS:
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- break;
-
- default:
- ffesta_confirmed ();
- /* Fall through. */
- case FFELEX_typeOPEN_PAREN: /* Could still be assignment!! */
- return (ffelexHandler) (*((ffelexHandler)
- ffeexpr_rhs (ffesta_output_pool, FFEEXPR_contextCGOTO,
- (ffeexprCallback) ffestb_goto5_)))
- (t);
- }
-
-bad: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "computed-GOTO", t);
- ffelex_token_kill (ffesta_tokens[1]);
- ffestt_tokenlist_kill (ffestb_subrargs_.label_list.labels);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_goto4_ -- "GO/TO" expr
-
- (ffestb_goto4_) // to expression handler
-
- Make sure the statement has a valid form for the GOTO statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_goto4_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- if (expr == NULL)
- break;
- ffesta_tokens[1] = ffelex_token_use (ft);
- ffestb_local_.go_to.expr = expr;
- return (ffelexHandler) ffestb_goto6_;
-
- case FFELEX_typeOPEN_PAREN:
- if (expr == NULL)
- break;
- ffesta_tokens[1] = ffelex_token_use (ft);
- ffestb_local_.go_to.expr = expr;
- return (ffelexHandler) ffestb_goto6_ (t);
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- ffestc_R839 (expr, ft, NULL);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "assigned-GOTO", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_goto5_ -- "GO/TO" OPEN_PAREN label-list CLOSE_PAREN (COMMA) expr
-
- (ffestb_goto5_) // to expression handler
-
- Make sure the statement has a valid form for the GOTO statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_goto5_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (expr == NULL)
- break;
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R837 (ffestb_subrargs_.label_list.labels, expr, ft);
- ffelex_token_kill (ffesta_tokens[1]);
- ffestt_tokenlist_kill (ffestb_subrargs_.label_list.labels);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "computed-GOTO", t);
- ffelex_token_kill (ffesta_tokens[1]);
- ffestt_tokenlist_kill (ffestb_subrargs_.label_list.labels);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_goto6_ -- "GO/TO" expr (COMMA)
-
- return ffestb_goto6_; // to lexer
-
- Make sure the statement has a valid form for the GOTO statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_goto6_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_PAREN:
- ffesta_tokens[2] = ffelex_token_use (t);
- ffestb_subrargs_.label_list.labels = ffestt_tokenlist_create ();
- ffestb_subrargs_.label_list.handler = (ffelexHandler) ffestb_goto7_;
- return (ffelexHandler) ffestb_subr_label_list_;
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "assigned-GOTO", t);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_goto7_ -- "GO/TO" expr (COMMA) OPEN_PAREN label-list CLOSE_PAREN
-
- return ffestb_goto7_; // to lexer
-
- Make sure the statement has a valid form for the GOTO statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_goto7_ (ffelexToken t)
-{
- if (!ffestb_subrargs_.label_list.ok)
- goto bad; /* :::::::::::::::::::: */
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R839 (ffestb_local_.go_to.expr, ffesta_tokens[1],
- ffestb_subrargs_.label_list.labels);
- ffelex_token_kill (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[2]);
- ffestt_tokenlist_kill (ffestb_subrargs_.label_list.labels);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
-bad: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "assigned-GOTO", t);
- ffelex_token_kill (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[2]);
- ffestt_tokenlist_kill (ffestb_subrargs_.label_list.labels);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_halt -- Parse the STOP/PAUSE statement
-
- return ffestb_halt; // to lexer
-
- Make sure the statement has a valid form for the STOP/PAUSE statement. If
- it does, implement the statement. */
-
-ffelexHandler
-ffestb_halt (ffelexToken t)
-{
- ffelexHandler next;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeNAME:
- case FFELEX_typeNUMBER:
- case FFELEX_typeAPOSTROPHE:
- case FFELEX_typeQUOTE:
- ffesta_confirmed ();
- break;
- }
-
- return (ffelexHandler) (*((ffelexHandler)
- ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextSTOP,
- (ffeexprCallback) ffestb_halt1_)))
- (t);
-
- case FFELEX_typeNAMES:
- switch (ffelex_token_type (t))
- {
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeNAME:
- case FFELEX_typeNUMBER:
- case FFELEX_typeAPOSTROPHE:
- case FFELEX_typeQUOTE:
- ffesta_confirmed ();
- break;
- }
- next = (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextSTOP,
- (ffeexprCallback) ffestb_halt1_);
- next = (ffelexHandler) ffelex_splice_tokens (next, ffesta_tokens[0],
- ffestb_args.halt.len);
- if (next == NULL)
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero);
- return (ffelexHandler) (*next) (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM,
- (ffesta_first_kw == FFESTR_firstSTOP)
- ? "STOP" : "PAUSE",
- ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM,
- (ffesta_first_kw == FFESTR_firstSTOP)
- ? "STOP" : "PAUSE",
- t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-}
-
-/* ffestb_halt1_ -- "STOP/PAUSE" expr
-
- (ffestb_halt1_) // to expression handler
-
- Make sure the next token is an EOS or SEMICOLON. */
-
-static ffelexHandler
-ffestb_halt1_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- {
- if (ffesta_first_kw == FFESTR_firstSTOP)
- ffestc_R842 (expr, ft);
- else
- ffestc_R843 (expr, ft);
- }
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM,
- (ffesta_first_kw == FFESTR_firstSTOP)
- ? "STOP" : "PAUSE",
- t);
- break;
- }
-
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_if -- Parse an IF statement
-
- return ffestb_if; // to lexer
-
- Make sure the statement has a valid form for an IF statement.
- If it does, implement the statement. */
-
-ffelexHandler
-ffestb_if (ffelexToken t)
-{
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstIF)
- goto bad_0; /* :::::::::::::::::::: */
- break;
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstIF)
- goto bad_0; /* :::::::::::::::::::: */
- if (ffelex_token_length (ffesta_tokens[0]) != FFESTR_firstlIF)
- goto bad_0; /* :::::::::::::::::::: */
- break;
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_PAREN:
- break;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
-
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool, FFEEXPR_contextIF,
- (ffeexprCallback) ffestb_if1_);
-
-bad_0: /* :::::::::::::::::::: */
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "IF", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "IF", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-}
-
-/* ffestb_if1_ -- "IF" OPEN_PAREN expr
-
- (ffestb_if1_) // to expression handler
-
- Make sure the next token is CLOSE_PAREN. */
-
-static ffelexHandler
-ffestb_if1_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- ffestb_local_.if_stmt.expr = expr;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- break;
- ffesta_tokens[1] = ffelex_token_use (ft);
- ffelex_set_names (TRUE);
- return (ffelexHandler) ffestb_if2_;
-
- default:
- break;
- }
-
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "IF", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_if2_ -- "IF" OPEN_PAREN expr CLOSE_PAREN
-
- return ffestb_if2_; // to lexer
-
- Make sure the next token is NAME. */
-
-static ffelexHandler
-ffestb_if2_ (ffelexToken t)
-{
- ffelex_set_names (FALSE);
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- case FFELEX_typeNAMES:
- ffesta_confirmed ();
- ffesta_tokens[2] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_if3_;
-
- default:
- break;
- }
-
- ffelex_token_kill (ffesta_tokens[1]);
- if ((ffesta_construct_name == NULL)
- || (ffelex_token_type (t) != FFELEX_typeNUMBER))
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "IF", t);
- else
- ffesta_ffebad_2st (FFEBAD_INVALID_STMT_FORM, "CONSTRUCT",
- ffesta_construct_name, t);
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_if3_ -- "IF" OPEN_PAREN expr CLOSE_PAREN NAME
-
- return ffestb_if3_; // to lexer
-
- If the next token is EOS or SEMICOLON and the preceding NAME was "THEN",
- implement R803. Else, implement R807 and send the preceding NAME followed
- by the current token. */
-
-static ffelexHandler
-ffestb_if3_ (ffelexToken t)
-{
- ffelexHandler next;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (ffestr_first (ffesta_tokens[2]) == FFESTR_firstTHEN)
- {
- if (!ffesta_is_inhibited ())
- ffestc_R803 (ffesta_construct_name, ffestb_local_.if_stmt.expr,
- ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[2]);
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- return (ffelexHandler) ffesta_zero (t);
- }
- break;
-
- default:
- break;
- }
-
- if (ffesta_construct_name != NULL)
- {
- if (!ffesta_is_inhibited ())
- ffesta_ffebad_2st (FFEBAD_INVALID_STMT_FORM, "CONSTRUCT",
- ffesta_construct_name, ffesta_tokens[2]);
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- ffelex_token_kill (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[2]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R807 (ffestb_local_.if_stmt.expr, ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[1]);
- {
- ffelexToken my_2 = ffesta_tokens[2];
-
- next = (ffelexHandler) ffesta_two (my_2, t);
- ffelex_token_kill (my_2);
- }
- return (ffelexHandler) next;
-}
-
-/* ffestb_let -- Parse an assignment statement
-
- return ffestb_let; // to lexer
-
- Make sure the statement has a valid form for an assignment statement. If
- it does, implement the statement. */
-
-ffelexHandler
-ffestb_let (ffelexToken t)
-{
- ffelexHandler next;
- bool vxtparam; /* TRUE if it might really be a VXT PARAMETER
- stmt. */
- unsigned const char *p;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- vxtparam = FALSE;
- break;
-
- case FFELEX_typeNAMES:
- vxtparam = TRUE;
- break;
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_PAREN:
- case FFELEX_typePERCENT:
- case FFELEX_typePOINTS:
- ffestb_local_.let.vxtparam = FALSE;
- break;
-
- case FFELEX_typeEQUALS:
- if (!vxtparam || (ffesta_first_kw != FFESTR_firstPARAMETER))
- {
- ffestb_local_.let.vxtparam = FALSE;
- break;
- }
- p = ffelex_token_text (ffesta_tokens[0]) + FFESTR_firstlPARAMETER;
- ffestb_local_.let.vxtparam = ffesrc_is_name_init (*p);
- break;
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
-
- next = (ffelexHandler) (*((ffelexHandler)
- ffeexpr_lhs (ffesta_output_pool,
- FFEEXPR_contextLET,
- (ffeexprCallback) ffestb_let1_)))
- (ffesta_tokens[0]);
- return (ffelexHandler) (*next) (t);
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "assignment", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "assignment", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-}
-
-/* ffestb_let1_ -- expr
-
- (ffestb_let1_) // to expression handler
-
- Make sure the next token is EQUALS or POINTS. */
-
-static ffelexHandler
-ffestb_let1_ (ffelexToken ft UNUSED, ffebld expr, ffelexToken t)
-{
- ffestb_local_.let.dest = expr;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- if (expr == NULL)
- break;
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextLET, (ffeexprCallback) ffestb_let2_);
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "assignment", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_let2_ -- expr EQUALS/POINTS expr
-
- (ffestb_end2_) // to expression handler
-
- Make sure the next token is EOS or SEMICOLON; implement the statement. */
-
-static ffelexHandler
-ffestb_let2_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (expr == NULL)
- break;
- if (ffestb_local_.let.vxtparam && !ffestc_is_let_not_V027 ())
- break;
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_let (ffestb_local_.let.dest, expr, ft);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM,
- (ffelex_token_type (ffesta_tokens[1]) == FFELEX_typeEQUALS)
- ? "assignment" : "pointer-assignment",
- t);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_varlist -- Parse EXTERNAL/INTENT/INTRINSIC/OPTIONAL/PUBLIC/PRIVATE
- statement
-
- return ffestb_varlist; // to lexer
-
- Make sure the statement has a valid form. If it
- does, implement the statement. */
-
-ffelexHandler
-ffestb_varlist (ffelexToken t)
-{
- ffeTokenLength i;
- unsigned const char *p;
- ffelexToken nt;
- ffelexHandler next;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeCOMMA:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed ();
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeOPEN_PAREN:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNAME:
- ffesta_confirmed ();
- switch (ffesta_first_kw)
- {
- case FFESTR_firstEXTERNAL:
- if (!ffesta_is_inhibited ())
- ffestc_R1207_start ();
- break;
-
- case FFESTR_firstINTRINSIC:
- if (!ffesta_is_inhibited ())
- ffestc_R1208_start ();
- break;
-
- default:
- break;
- }
- return (ffelexHandler) ffestb_varlist5_ (t);
- }
-
- case FFELEX_typeNAMES:
- p = ffelex_token_text (ffesta_tokens[0]) + (i = ffestb_args.varlist.len);
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (*p != '\0')
- break;
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeCOMMA:
- ffesta_confirmed (); /* Error, but clearly intended. */
-
- if (*p != '\0')
- break;
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed ();
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeOPEN_PAREN:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNAME:
- ffesta_confirmed ();
- switch (ffesta_first_kw)
- {
- case FFESTR_firstEXTERNAL:
- if (!ffesta_is_inhibited ())
- ffestc_R1207_start ();
- break;
-
- case FFESTR_firstINTRINSIC:
- if (!ffesta_is_inhibited ())
- ffestc_R1208_start ();
- break;
-
- default:
- break;
- }
- return (ffelexHandler) ffestb_varlist5_ (t);
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
-
- /* Here, we have at least one char after the first keyword and t is
- COMMA or EOS/SEMICOLON. Also we know that this form is valid for
- only the statements reaching here (specifically, INTENT won't reach
- here). */
-
- if (!ffesrc_is_name_init (*p))
- goto bad_i; /* :::::::::::::::::::: */
- nt = ffelex_token_name_from_names (ffesta_tokens[0], i, 0);
- if (!ffesta_is_inhibited ())
- {
- switch (ffesta_first_kw)
- {
- case FFESTR_firstEXTERNAL:
- ffestc_R1207_start ();
- break;
-
- case FFESTR_firstINTRINSIC:
- ffestc_R1208_start ();
- break;
-
- default:
- assert (FALSE);
- }
- }
- next = (ffelexHandler) ffestb_varlist5_ (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.varlist.badname, ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.varlist.badname, t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, ffestb_args.varlist.badname, ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_varlist5_ -- Handles the list of variable names
-
- return ffestb_varlist5_; // to lexer
-
- Handle NAME. */
-
-static ffelexHandler
-ffestb_varlist5_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_varlist6_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.varlist.badname, t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- {
- switch (ffesta_first_kw)
- {
- case FFESTR_firstEXTERNAL:
- ffestc_R1207_finish ();
- break;
-
- case FFESTR_firstINTRINSIC:
- ffestc_R1208_finish ();
- break;
-
- default:
- assert (FALSE);
- }
- }
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_varlist6_ -- (whatever) NAME
-
- return ffestb_varlist6_; // to lexer
-
- Handle COMMA or EOS/SEMICOLON. */
-
-static ffelexHandler
-ffestb_varlist6_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (!ffesta_is_inhibited ())
- {
- switch (ffesta_first_kw)
- {
- case FFESTR_firstEXTERNAL:
- ffestc_R1207_item (ffesta_tokens[1]);
- break;
-
- case FFESTR_firstINTRINSIC:
- ffestc_R1208_item (ffesta_tokens[1]);
- break;
-
- default:
- assert (FALSE);
- }
- }
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffestb_varlist5_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (!ffesta_is_inhibited ())
- {
- switch (ffesta_first_kw)
- {
- case FFESTR_firstEXTERNAL:
- ffestc_R1207_item (ffesta_tokens[1]);
- ffestc_R1207_finish ();
- break;
-
- case FFESTR_firstINTRINSIC:
- ffestc_R1208_item (ffesta_tokens[1]);
- ffestc_R1208_finish ();
- break;
-
- default:
- assert (FALSE);
- }
- }
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.varlist.badname, t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- {
- switch (ffesta_first_kw)
- {
- case FFESTR_firstEXTERNAL:
- ffestc_R1207_finish ();
- break;
-
- case FFESTR_firstINTRINSIC:
- ffestc_R1208_finish ();
- break;
-
- default:
- assert (FALSE);
- }
- }
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R522 -- Parse the SAVE statement
-
- return ffestb_R522; // to lexer
-
- Make sure the statement has a valid form for the SAVE statement. If it
- does, implement the statement. */
-
-ffelexHandler
-ffestb_R522 (ffelexToken t)
-{
- ffeTokenLength i;
- unsigned const char *p;
- ffelexToken nt;
- ffelexHandler next;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstSAVE)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R522 ();
- return (ffelexHandler) ffesta_zero (t);
-
- case FFELEX_typeNAME:
- case FFELEX_typeSLASH:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R522start ();
- return (ffelexHandler) ffestb_R5221_ (t);
-
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R522start ();
- return (ffelexHandler) ffestb_R5221_;
- }
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstSAVE)
- goto bad_0; /* :::::::::::::::::::: */
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlSAVE);
- switch (ffelex_token_type (t))
- {
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- break;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (*p != '\0')
- break;
- if (!ffesta_is_inhibited ())
- ffestc_R522 ();
- return (ffelexHandler) ffesta_zero (t);
-
- case FFELEX_typeSLASH:
- ffesta_confirmed ();
- if (*p != '\0')
- goto bad_i; /* :::::::::::::::::::: */
- if (!ffesta_is_inhibited ())
- ffestc_R522start ();
- return (ffelexHandler) ffestb_R5221_ (t);
-
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed ();
- if (*p != '\0')
- goto bad_i; /* :::::::::::::::::::: */
- if (!ffesta_is_inhibited ())
- ffestc_R522start ();
- return (ffelexHandler) ffestb_R5221_;
- }
-
- /* Here, we have at least one char after "SAVE" and t is COMMA or
- EOS/SEMICOLON. */
-
- if (!ffesrc_is_name_init (*p))
- goto bad_i; /* :::::::::::::::::::: */
- nt = ffelex_token_name_from_names (ffesta_tokens[0], i, 0);
- if (!ffesta_is_inhibited ())
- ffestc_R522start ();
- next = (ffelexHandler) ffestb_R5221_ (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "SAVE", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "SAVE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "SAVE", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5221_ -- "SAVE" [COLONCOLON]
-
- return ffestb_R5221_; // to lexer
-
- Handle NAME or SLASH. */
-
-static ffelexHandler
-ffestb_R5221_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffestb_local_.R522.is_cblock = FALSE;
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R5224_;
-
- case FFELEX_typeSLASH:
- ffestb_local_.R522.is_cblock = TRUE;
- return (ffelexHandler) ffestb_R5222_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "SAVE", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R522finish ();
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5222_ -- "SAVE" [COLONCOLON] SLASH
-
- return ffestb_R5222_; // to lexer
-
- Handle NAME. */
-
-static ffelexHandler
-ffestb_R5222_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R5223_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "SAVE", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R522finish ();
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5223_ -- "SAVE" [COLONCOLON] SLASH NAME
-
- return ffestb_R5223_; // to lexer
-
- Handle SLASH. */
-
-static ffelexHandler
-ffestb_R5223_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeSLASH:
- return (ffelexHandler) ffestb_R5224_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "SAVE", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R522finish ();
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5224_ -- "SAVE" [COLONCOLON] R523
-
- return ffestb_R5224_; // to lexer
-
- Handle COMMA or EOS/SEMICOLON. */
-
-static ffelexHandler
-ffestb_R5224_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (!ffesta_is_inhibited ())
- {
- if (ffestb_local_.R522.is_cblock)
- ffestc_R522item_cblock (ffesta_tokens[1]);
- else
- ffestc_R522item_object (ffesta_tokens[1]);
- }
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffestb_R5221_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (!ffesta_is_inhibited ())
- {
- if (ffestb_local_.R522.is_cblock)
- ffestc_R522item_cblock (ffesta_tokens[1]);
- else
- ffestc_R522item_object (ffesta_tokens[1]);
- ffestc_R522finish ();
- }
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "SAVE", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R522finish ();
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R528 -- Parse the DATA statement
-
- return ffestb_R528; // to lexer
-
- Make sure the statement has a valid form for the DATA statement. If it
- does, implement the statement. */
-
-ffelexHandler
-ffestb_R528 (ffelexToken t)
-{
- unsigned const char *p;
- ffeTokenLength i;
- ffelexToken nt;
- ffelexHandler next;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstDATA)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeSLASH:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNAME:
- ffesta_confirmed ();
- break;
-
- case FFELEX_typeOPEN_PAREN:
- break;
- }
- ffestb_local_.data.started = FALSE;
- return (ffelexHandler) (*((ffelexHandler)
- ffeexpr_lhs (ffesta_output_pool,
- FFEEXPR_contextDATA,
- (ffeexprCallback) ffestb_R5281_)))
- (t);
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstDATA)
- goto bad_0; /* :::::::::::::::::::: */
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlDATA);
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeOPEN_PAREN:
- if (*p == '\0')
- {
- ffestb_local_.data.started = FALSE;
- return (ffelexHandler) (*((ffelexHandler)
- ffeexpr_lhs (ffesta_output_pool,
- FFEEXPR_contextDATA,
- (ffeexprCallback)
- ffestb_R5281_)))
- (t);
- }
- break;
-
- case FFELEX_typeCOMMA:
- case FFELEX_typeSLASH:
- ffesta_confirmed ();
- break;
- }
- if (!ffesrc_is_name_init (*p))
- goto bad_i; /* :::::::::::::::::::: */
- ffestb_local_.data.started = FALSE;
- nt = ffelex_token_name_from_names (ffesta_tokens[0], i, 0);
- next = (ffelexHandler) (*((ffelexHandler)
- ffeexpr_lhs (ffesta_output_pool,
- FFEEXPR_contextDATA,
- (ffeexprCallback) ffestb_R5281_)))
- (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "DATA", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "DATA", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "DATA", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5281_ -- "DATA" expr-list
-
- (ffestb_R5281_) // to expression handler
-
- Handle COMMA or SLASH. */
-
-static ffelexHandler
-ffestb_R5281_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- {
- if (!ffestb_local_.data.started)
- {
- ffestc_R528_start ();
- ffestb_local_.data.started = TRUE;
- }
- ffestc_R528_item_object (expr, ft);
- }
- return (ffelexHandler) ffeexpr_lhs (ffesta_output_pool,
- FFEEXPR_contextDATA,
- (ffeexprCallback) ffestb_R5281_);
-
- case FFELEX_typeSLASH:
- ffesta_confirmed ();
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- {
- if (!ffestb_local_.data.started)
- {
- ffestc_R528_start ();
- ffestb_local_.data.started = TRUE;
- }
- ffestc_R528_item_object (expr, ft);
- ffestc_R528_item_startvals ();
- }
- return (ffelexHandler) ffeexpr_rhs
- (ffesta_output_pool, FFEEXPR_contextDATA,
- (ffeexprCallback) ffestb_R5282_);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "DATA", t);
- break;
- }
-
- if (ffestb_local_.data.started && !ffesta_is_inhibited ())
- ffestc_R528_finish ();
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5282_ -- "DATA" expr-list SLASH expr-list
-
- (ffestb_R5282_) // to expression handler
-
- Handle ASTERISK, COMMA, or SLASH. */
-
-static ffelexHandler
-ffestb_R5282_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- ffestc_R528_item_value (NULL, NULL, expr, ft);
- return (ffelexHandler) ffeexpr_rhs
- (ffesta_output_pool, FFEEXPR_contextDATA,
- (ffeexprCallback) ffestb_R5282_);
-
- case FFELEX_typeASTERISK:
- if (expr == NULL)
- break;
- ffestb_local_.data.expr = ffeexpr_convert (expr, ft, t,
- FFEINFO_basictypeINTEGER,
- FFEINFO_kindtypeINTEGER1,
- 0,
- FFETARGET_charactersizeNONE,
- FFEEXPR_contextLET);
- ffesta_tokens[1] = ffelex_token_use (ft);
- return (ffelexHandler) ffeexpr_rhs
- (ffesta_output_pool, FFEEXPR_contextDATA,
- (ffeexprCallback) ffestb_R5283_);
-
- case FFELEX_typeSLASH:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- {
- ffestc_R528_item_value (NULL, NULL, expr, ft);
- ffestc_R528_item_endvals (t);
- }
- return (ffelexHandler) ffestb_R5284_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "DATA", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- {
- ffestc_R528_item_endvals (t);
- ffestc_R528_finish ();
- }
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5283_ -- "DATA" expr-list SLASH expr ASTERISK expr
-
- (ffestb_R5283_) // to expression handler
-
- Handle COMMA or SLASH. */
-
-static ffelexHandler
-ffestb_R5283_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- ffestc_R528_item_value (ffestb_local_.data.expr, ffesta_tokens[1],
- expr, ft);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffeexpr_rhs
- (ffesta_output_pool, FFEEXPR_contextDATA,
- (ffeexprCallback) ffestb_R5282_);
-
- case FFELEX_typeSLASH:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- {
- ffestc_R528_item_value (ffestb_local_.data.expr, ffesta_tokens[1],
- expr, ft);
- ffestc_R528_item_endvals (t);
- }
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffestb_R5284_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "DATA", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- {
- ffestc_R528_item_endvals (t);
- ffestc_R528_finish ();
- }
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5284_ -- "DATA" expr-list SLASH expr-list SLASH
-
- return ffestb_R5284_; // to lexer
-
- Handle [COMMA] NAME or EOS/SEMICOLON. */
-
-static ffelexHandler
-ffestb_R5284_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- return (ffelexHandler) ffeexpr_lhs (ffesta_output_pool,
- FFEEXPR_contextDATA,
- (ffeexprCallback) ffestb_R5281_);
-
- case FFELEX_typeNAME:
- case FFELEX_typeOPEN_PAREN:
- return (ffelexHandler) (*((ffelexHandler)
- ffeexpr_lhs (ffesta_output_pool,
- FFEEXPR_contextDATA,
- (ffeexprCallback) ffestb_R5281_)))
- (t);
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (!ffesta_is_inhibited ())
- ffestc_R528_finish ();
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "DATA", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R528_finish ();
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R537 -- Parse a PARAMETER statement
-
- return ffestb_R537; // to lexer
-
- Make sure the statement has a valid form for an PARAMETER statement.
- If it does, implement the statement. */
-
-ffelexHandler
-ffestb_R537 (ffelexToken t)
-{
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstPARAMETER)
- goto bad_0; /* :::::::::::::::::::: */
- break;
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstPARAMETER)
- goto bad_0; /* :::::::::::::::::::: */
- if (ffelex_token_length (ffesta_tokens[0]) != FFESTR_firstlPARAMETER)
- goto bad_0; /* :::::::::::::::::::: */
- break;
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_PAREN:
- break;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
-
- ffestb_local_.parameter.started = FALSE;
- return (ffelexHandler) ffeexpr_lhs (ffesta_output_pool,
- FFEEXPR_contextPARAMETER,
- (ffeexprCallback) ffestb_R5371_);
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "PARAMETER", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "PARAMETER", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-}
-
-/* ffestb_R5371_ -- "PARAMETER" OPEN_PAREN expr
-
- (ffestb_R5371_) // to expression handler
-
- Make sure the next token is EQUALS. */
-
-static ffelexHandler
-ffestb_R5371_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- ffestb_local_.parameter.expr = expr;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- ffesta_confirmed ();
- if (expr == NULL)
- break;
- ffesta_tokens[1] = ffelex_token_use (ft);
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextPARAMETER, (ffeexprCallback) ffestb_R5372_);
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "PARAMETER", t);
- if (ffestb_local_.parameter.started)
- ffestc_R537_finish ();
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5372_ -- "PARAMETER" OPEN_PAREN expr EQUALS expr
-
- (ffestb_R5372_) // to expression handler
-
- Make sure the next token is COMMA or CLOSE_PAREN. */
-
-static ffelexHandler
-ffestb_R5372_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- {
- if (!ffestb_local_.parameter.started)
- {
- ffestc_R537_start ();
- ffestb_local_.parameter.started = TRUE;
- }
- ffestc_R537_item (ffestb_local_.parameter.expr, ffesta_tokens[1],
- expr, ft);
- }
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffeexpr_lhs (ffesta_output_pool,
- FFEEXPR_contextPARAMETER,
- (ffeexprCallback) ffestb_R5371_);
-
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- {
- if (!ffestb_local_.parameter.started)
- {
- ffestc_R537_start ();
- ffestb_local_.parameter.started = TRUE;
- }
- ffestc_R537_item (ffestb_local_.parameter.expr, ffesta_tokens[1],
- expr, ft);
- ffestc_R537_finish ();
- }
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffestb_R5373_;
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "PARAMETER", t);
- if (ffestb_local_.parameter.started)
- ffestc_R537_finish ();
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5373_ -- "PARAMETER" OPEN_PAREN expr EQUALS expr CLOSE_PAREN
-
- return ffestb_R5373_; // to lexer
-
- Make sure the next token is EOS or SEMICOLON, or generate an error. All
- cleanup has already been done, by the way. */
-
-static ffelexHandler
-ffestb_R5373_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "PARAMETER", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R542 -- Parse the NAMELIST statement
-
- return ffestb_R542; // to lexer
-
- Make sure the statement has a valid form for the NAMELIST statement. If it
- does, implement the statement. */
-
-ffelexHandler
-ffestb_R542 (ffelexToken t)
-{
- const char *p;
- ffeTokenLength i;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstNAMELIST)
- goto bad_0; /* :::::::::::::::::::: */
- break;
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstNAMELIST)
- goto bad_0; /* :::::::::::::::::::: */
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlNAMELIST);
- if (*p != '\0')
- goto bad_i; /* :::::::::::::::::::: */
- break;
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeSLASH:
- break;
- }
-
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R542_start ();
- return (ffelexHandler) ffestb_R5421_;
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "NAMELIST", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "NAMELIST", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "NAMELIST", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5421_ -- "NAMELIST" SLASH
-
- return ffestb_R5421_; // to lexer
-
- Handle NAME. */
-
-static ffelexHandler
-ffestb_R5421_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- if (!ffesta_is_inhibited ())
- ffestc_R542_item_nlist (t);
- return (ffelexHandler) ffestb_R5422_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "NAMELIST", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R542_finish ();
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5422_ -- "NAMELIST" SLASH NAME
-
- return ffestb_R5422_; // to lexer
-
- Handle SLASH. */
-
-static ffelexHandler
-ffestb_R5422_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeSLASH:
- return (ffelexHandler) ffestb_R5423_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "NAMELIST", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R542_finish ();
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5423_ -- "NAMELIST" SLASH NAME SLASH
-
- return ffestb_R5423_; // to lexer
-
- Handle NAME. */
-
-static ffelexHandler
-ffestb_R5423_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- if (!ffesta_is_inhibited ())
- ffestc_R542_item_nitem (t);
- return (ffelexHandler) ffestb_R5424_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "NAMELIST", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R542_finish ();
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5424_ -- "NAMELIST" SLASH NAME SLASH NAME
-
- return ffestb_R5424_; // to lexer
-
- Handle COMMA, EOS/SEMICOLON, or SLASH. */
-
-static ffelexHandler
-ffestb_R5424_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- return (ffelexHandler) ffestb_R5425_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (!ffesta_is_inhibited ())
- ffestc_R542_finish ();
- return (ffelexHandler) ffesta_zero (t);
-
- case FFELEX_typeSLASH:
- return (ffelexHandler) ffestb_R5421_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "NAMELIST", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R542_finish ();
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5425_ -- "NAMELIST" SLASH NAME SLASH NAME COMMA
-
- return ffestb_R5425_; // to lexer
-
- Handle NAME or SLASH. */
-
-static ffelexHandler
-ffestb_R5425_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- if (!ffesta_is_inhibited ())
- ffestc_R542_item_nitem (t);
- return (ffelexHandler) ffestb_R5424_;
-
- case FFELEX_typeSLASH:
- return (ffelexHandler) ffestb_R5421_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "NAMELIST", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R542_finish ();
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R544 -- Parse an EQUIVALENCE statement
-
- return ffestb_R544; // to lexer
-
- Make sure the statement has a valid form for an EQUIVALENCE statement.
- If it does, implement the statement. */
-
-ffelexHandler
-ffestb_R544 (ffelexToken t)
-{
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstEQUIVALENCE)
- goto bad_0; /* :::::::::::::::::::: */
- break;
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstEQUIVALENCE)
- goto bad_0; /* :::::::::::::::::::: */
- if (ffelex_token_length (ffesta_tokens[0]) != FFESTR_firstlEQUIVALENCE)
- goto bad_0; /* :::::::::::::::::::: */
- break;
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_PAREN:
- break;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
-
- ffestb_local_.equivalence.started = FALSE;
- return (ffelexHandler) ffeexpr_lhs (ffesta_output_pool,
- FFEEXPR_contextEQUIVALENCE,
- (ffeexprCallback) ffestb_R5441_);
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "EQUIVALENCE", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "EQUIVALENCE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-}
-
-/* ffestb_R5441_ -- "EQUIVALENCE" OPEN_PAREN expr
-
- (ffestb_R5441_) // to expression handler
-
- Make sure the next token is COMMA. */
-
-static ffelexHandler
-ffestb_R5441_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (expr == NULL)
- break;
- ffestb_local_.equivalence.exprs = ffestt_exprlist_create ();
- ffestt_exprlist_append (ffestb_local_.equivalence.exprs, expr,
- ffelex_token_use (ft));
- return (ffelexHandler) ffeexpr_lhs (ffesta_output_pool,
- FFEEXPR_contextEQUIVALENCE,
- (ffeexprCallback) ffestb_R5442_);
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "EQUIVALENCE", t);
- if (ffestb_local_.equivalence.started)
- ffestc_R544_finish ();
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5442_ -- "EQUIVALENCE" OPEN_PAREN expr COMMA expr
-
- (ffestb_R5442_) // to expression handler
-
- Make sure the next token is COMMA or CLOSE_PAREN. For COMMA, we just
- append the expression to our list and continue; for CLOSE_PAREN, we
- append the expression and move to _3_. */
-
-static ffelexHandler
-ffestb_R5442_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (expr == NULL)
- break;
- ffestt_exprlist_append (ffestb_local_.equivalence.exprs, expr,
- ffelex_token_use (ft));
- return (ffelexHandler) ffeexpr_lhs (ffesta_output_pool,
- FFEEXPR_contextEQUIVALENCE,
- (ffeexprCallback) ffestb_R5442_);
-
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- break;
- ffestt_exprlist_append (ffestb_local_.equivalence.exprs, expr,
- ffelex_token_use (ft));
- return (ffelexHandler) ffestb_R5443_;
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "EQUIVALENCE", t);
- if (ffestb_local_.equivalence.started)
- ffestc_R544_finish ();
- ffestt_exprlist_kill (ffestb_local_.equivalence.exprs);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5443_ -- "EQUIVALENCE" OPEN_PAREN expr COMMA expr CLOSE_PAREN
-
- return ffestb_R5443_; // to lexer
-
- Make sure the next token is COMMA or EOS/SEMICOLON. */
-
-static ffelexHandler
-ffestb_R5443_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- {
- if (!ffestb_local_.equivalence.started)
- {
- ffestc_R544_start ();
- ffestb_local_.equivalence.started = TRUE;
- }
- ffestc_R544_item (ffestb_local_.equivalence.exprs);
- }
- ffestt_exprlist_kill (ffestb_local_.equivalence.exprs);
- return (ffelexHandler) ffestb_R5444_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- {
- if (!ffestb_local_.equivalence.started)
- {
- ffestc_R544_start ();
- ffestb_local_.equivalence.started = TRUE;
- }
- ffestc_R544_item (ffestb_local_.equivalence.exprs);
- ffestc_R544_finish ();
- }
- ffestt_exprlist_kill (ffestb_local_.equivalence.exprs);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "EQUIVALENCE", t);
- if (ffestb_local_.equivalence.started)
- ffestc_R544_finish ();
- ffestt_exprlist_kill (ffestb_local_.equivalence.exprs);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5444_ -- "EQUIVALENCE" OPEN_PAREN expr COMMA expr CLOSE_PAREN COMMA
-
- return ffestb_R5444_; // to lexer
-
- Make sure the next token is OPEN_PAREN, or generate an error. */
-
-static ffelexHandler
-ffestb_R5444_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_PAREN:
- return (ffelexHandler) ffeexpr_lhs (ffesta_output_pool,
- FFEEXPR_contextEQUIVALENCE,
- (ffeexprCallback) ffestb_R5441_);
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "EQUIVALENCE", t);
- if (ffestb_local_.equivalence.started)
- ffestc_R544_finish ();
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R834 -- Parse the CYCLE statement
-
- return ffestb_R834; // to lexer
-
- Make sure the statement has a valid form for the CYCLE statement. If
- it does, implement the statement. */
-
-ffelexHandler
-ffestb_R834 (ffelexToken t)
-{
- ffeTokenLength i;
- unsigned const char *p;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstCYCLE)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNAME:
- ffesta_confirmed ();
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R8341_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- ffesta_tokens[1] = NULL;
- return (ffelexHandler) ffestb_R8341_ (t);
- }
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstCYCLE)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- break;
- }
- ffesta_confirmed ();
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlCYCLE);
- if (*p == '\0')
- {
- ffesta_tokens[1] = NULL;
- }
- else
- {
- if (!ffesrc_is_name_init (*p))
- goto bad_i; /* :::::::::::::::::::: */
- ffesta_tokens[1]
- = ffelex_token_name_from_names (ffesta_tokens[0], i, 0);
- }
- return (ffelexHandler) ffestb_R8341_ (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CYCLE", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CYCLE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "CYCLE", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R8341_ -- "CYCLE" [NAME]
-
- return ffestb_R8341_; // to lexer
-
- Make sure the next token is an EOS or SEMICOLON. */
-
-static ffelexHandler
-ffestb_R8341_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R834 (ffesta_tokens[1]);
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CYCLE", t);
- break;
- }
-
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R835 -- Parse the EXIT statement
-
- return ffestb_R835; // to lexer
-
- Make sure the statement has a valid form for the EXIT statement. If
- it does, implement the statement. */
-
-ffelexHandler
-ffestb_R835 (ffelexToken t)
-{
- ffeTokenLength i;
- unsigned const char *p;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstEXIT)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNAME:
- ffesta_confirmed ();
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R8351_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- ffesta_tokens[1] = NULL;
- return (ffelexHandler) ffestb_R8351_ (t);
- }
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstEXIT)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- break;
- }
- ffesta_confirmed ();
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlEXIT);
- if (*p == '\0')
- {
- ffesta_tokens[1] = NULL;
- }
- else
- {
- if (!ffesrc_is_name_init (*p))
- goto bad_i; /* :::::::::::::::::::: */
- ffesta_tokens[1]
- = ffelex_token_name_from_names (ffesta_tokens[0], i, 0);
- }
- return (ffelexHandler) ffestb_R8351_ (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "EXIT", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "EXIT", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "EXIT", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R8351_ -- "EXIT" [NAME]
-
- return ffestb_R8351_; // to lexer
-
- Make sure the next token is an EOS or SEMICOLON. */
-
-static ffelexHandler
-ffestb_R8351_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R835 (ffesta_tokens[1]);
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "EXIT", t);
- break;
- }
-
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R838 -- Parse the ASSIGN statement
-
- return ffestb_R838; // to lexer
-
- Make sure the statement has a valid form for the ASSIGN statement. If it
- does, implement the statement. */
-
-ffelexHandler
-ffestb_R838 (ffelexToken t)
-{
- unsigned const char *p;
- ffeTokenLength i;
- ffelexHandler next;
- ffelexToken et; /* First token in target. */
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstASSIGN)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNUMBER:
- break;
- }
- ffesta_tokens[1] = ffelex_token_use (t);
- ffesta_confirmed ();
- return (ffelexHandler) ffestb_R8381_;
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstASSIGN)
- goto bad_0; /* :::::::::::::::::::: */
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- /* Fall through. */
- case FFELEX_typePERCENT:
- case FFELEX_typeOPEN_PAREN:
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlASSIGN);
- if (! ISDIGIT (*p))
- goto bad_i; /* :::::::::::::::::::: */
- ffesta_tokens[1]
- = ffelex_token_number_from_names (ffesta_tokens[0], i);
- p += ffelex_token_length (ffesta_tokens[1]); /* Skip to "TO". */
- i += ffelex_token_length (ffesta_tokens[1]);
- if (!ffesrc_char_match_init (*p, 'T', 't') /* "TO". */
- || (++i, !ffesrc_char_match_noninit (*++p, 'O', 'o')))
- {
- bad_i_1: /* :::::::::::::::::::: */
- ffelex_token_kill (ffesta_tokens[1]);
- goto bad_i; /* :::::::::::::::::::: */
- }
- ++p, ++i;
- if (!ffesrc_is_name_init (*p))
- goto bad_i_1; /* :::::::::::::::::::: */
- et = ffelex_token_name_from_names (ffesta_tokens[0], i, 0);
- next = (ffelexHandler)
- (*((ffelexHandler)
- ffeexpr_lhs (ffesta_output_pool,
- FFEEXPR_contextASSIGN,
- (ffeexprCallback)
- ffestb_R8383_)))
- (et);
- ffelex_token_kill (et);
- return (ffelexHandler) (*next) (t);
-
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "ASSIGN", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid first token. */
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "ASSIGN", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "ASSIGN", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R8381_ -- "ASSIGN" NUMBER
-
- return ffestb_R8381_; // to lexer
-
- Make sure the next token is "TO". */
-
-static ffelexHandler
-ffestb_R8381_ (ffelexToken t)
-{
- if ((ffelex_token_type (t) == FFELEX_typeNAME)
- && (ffesrc_strcmp_2c (ffe_case_match (), ffelex_token_text (t), "TO", "to",
- "To") == 0))
- {
- return (ffelexHandler) ffestb_R8382_;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "ASSIGN", t);
- if (ffelex_token_type (t) == FFELEX_typeNAME)
- return (ffelexHandler) ffestb_R8382_ (t); /* Maybe user forgot "TO". */
-
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R8382_ -- "ASSIGN" NUMBER ("TO")
-
- return ffestb_R8382_; // to lexer
-
- Make sure the next token is a name, then pass it along to the expression
- evaluator as an LHS expression. The callback function is _3_. */
-
-static ffelexHandler
-ffestb_R8382_ (ffelexToken t)
-{
- if (ffelex_token_type (t) == FFELEX_typeNAME)
- {
- return (ffelexHandler)
- (*((ffelexHandler)
- ffeexpr_lhs (ffesta_output_pool, FFEEXPR_contextASSIGN,
- (ffeexprCallback) ffestb_R8383_)))
- (t);
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "ASSIGN", t);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R8383_ -- "ASSIGN" NUMBER ("TO") expression
-
- (ffestb_R8383_) // to expression handler
-
- Make sure the next token is an EOS or SEMICOLON. */
-
-static ffelexHandler
-ffestb_R8383_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- ffestc_R838 (ffesta_tokens[1], expr, ft);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "ASSIGN", t);
- break;
- }
-
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R840 -- Parse an arithmetic-IF statement
-
- return ffestb_R840; // to lexer
-
- Make sure the statement has a valid form for an arithmetic-IF statement.
- If it does, implement the statement. */
-
-ffelexHandler
-ffestb_R840 (ffelexToken t)
-{
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffelex_token_length (ffesta_tokens[0]) != FFESTR_firstlIF)
- goto bad_0; /* :::::::::::::::::::: */
- if (ffesta_first_kw != FFESTR_firstIF)
- goto bad_0; /* :::::::::::::::::::: */
- break;
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstIF)
- goto bad_0; /* :::::::::::::::::::: */
- break;
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_PAREN:
- break;
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
-
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool, FFEEXPR_contextARITHIF,
- (ffeexprCallback) ffestb_R8401_);
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "arithmetic-IF", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "arithmetic-IF", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-}
-
-/* ffestb_R8401_ -- "IF" OPEN_PAREN expr
-
- (ffestb_R8401_) // to expression handler
-
- Make sure the next token is CLOSE_PAREN. */
-
-static ffelexHandler
-ffestb_R8401_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- ffestb_local_.if_stmt.expr = expr;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- break;
- ffesta_tokens[1] = ffelex_token_use (ft);
- ffelex_set_names (TRUE); /* In case it's a logical IF instead. */
- return (ffelexHandler) ffestb_R8402_;
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "arithmetic-IF", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R8402_ -- "IF" OPEN_PAREN expr CLOSE_PAREN
-
- return ffestb_R8402_; // to lexer
-
- Make sure the next token is NUMBER. */
-
-static ffelexHandler
-ffestb_R8402_ (ffelexToken t)
-{
- ffelex_set_names (FALSE);
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNUMBER:
- ffesta_confirmed ();
- ffesta_tokens[2] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R8403_;
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "arithmetic-IF", t);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R8403_ -- "IF" OPEN_PAREN expr CLOSE_PAREN NUMBER
-
- return ffestb_R8403_; // to lexer
-
- Make sure the next token is COMMA. */
-
-static ffelexHandler
-ffestb_R8403_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- return (ffelexHandler) ffestb_R8404_;
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "arithmetic-IF", t);
- ffelex_token_kill (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[2]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R8404_ -- "IF" OPEN_PAREN expr CLOSE_PAREN NUMBER COMMA
-
- return ffestb_R8404_; // to lexer
-
- Make sure the next token is NUMBER. */
-
-static ffelexHandler
-ffestb_R8404_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNUMBER:
- ffesta_tokens[3] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R8405_;
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "arithmetic-IF", t);
- ffelex_token_kill (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[2]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R8405_ -- "IF" OPEN_PAREN expr CLOSE_PAREN NUMBER COMMA NUMBER
-
- return ffestb_R8405_; // to lexer
-
- Make sure the next token is COMMA. */
-
-static ffelexHandler
-ffestb_R8405_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- return (ffelexHandler) ffestb_R8406_;
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "arithmetic-IF", t);
- ffelex_token_kill (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[2]);
- ffelex_token_kill (ffesta_tokens[3]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R8406_ -- "IF" OPEN_PAREN expr CLOSE_PAREN NUMBER COMMA NUMBER COMMA
-
- return ffestb_R8406_; // to lexer
-
- Make sure the next token is NUMBER. */
-
-static ffelexHandler
-ffestb_R8406_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNUMBER:
- ffesta_tokens[4] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R8407_;
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "arithmetic-IF", t);
- ffelex_token_kill (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[2]);
- ffelex_token_kill (ffesta_tokens[3]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R8407_ -- "IF" OPEN_PAREN expr CLOSE_PAREN NUMBER COMMA NUMBER COMMA
- NUMBER
-
- return ffestb_R8407_; // to lexer
-
- Make sure the next token is EOS or SEMICOLON. */
-
-static ffelexHandler
-ffestb_R8407_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (!ffesta_is_inhibited ())
- ffestc_R840 (ffestb_local_.if_stmt.expr, ffesta_tokens[1],
- ffesta_tokens[2], ffesta_tokens[3], ffesta_tokens[4]);
- ffelex_token_kill (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[2]);
- ffelex_token_kill (ffesta_tokens[3]);
- ffelex_token_kill (ffesta_tokens[4]);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "arithmetic-IF", t);
- ffelex_token_kill (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[2]);
- ffelex_token_kill (ffesta_tokens[3]);
- ffelex_token_kill (ffesta_tokens[4]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R841 -- Parse the CONTINUE statement
-
- return ffestb_R841; // to lexer
-
- Make sure the statement has a valid form for the CONTINUE statement. If
- it does, implement the statement. */
-
-ffelexHandler
-ffestb_R841 (ffelexToken t)
-{
- const char *p;
- ffeTokenLength i;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstCONTINUE)
- goto bad_0; /* :::::::::::::::::::: */
- break;
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstCONTINUE)
- goto bad_0; /* :::::::::::::::::::: */
- if (ffelex_token_length (ffesta_tokens[0]) != FFESTR_firstlCONTINUE)
- {
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlCONTINUE);
- goto bad_i; /* :::::::::::::::::::: */
- }
- break;
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R841 ();
- return (ffelexHandler) ffesta_zero (t);
-
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CONTINUE", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid first token. */
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CONTINUE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "CONTINUE", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R1102 -- Parse the PROGRAM statement
-
- return ffestb_R1102; // to lexer
-
- Make sure the statement has a valid form for the PROGRAM statement. If it
- does, implement the statement. */
-
-ffelexHandler
-ffestb_R1102 (ffelexToken t)
-{
- ffeTokenLength i;
- unsigned const char *p;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstPROGRAM)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNAME:
- break;
- }
-
- ffesta_confirmed ();
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R11021_;
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstPROGRAM)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- break;
- }
- ffesta_confirmed ();
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlPROGRAM);
- if (!ffesrc_is_name_init (*p))
- goto bad_i; /* :::::::::::::::::::: */
- ffesta_tokens[1]
- = ffelex_token_name_from_names (ffesta_tokens[0], i, 0);
- return (ffelexHandler) ffestb_R11021_ (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "PROGRAM", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "PROGRAM", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "PROGRAM", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R11021_ -- "PROGRAM" NAME
-
- return ffestb_R11021_; // to lexer
-
- Make sure the next token is an EOS or SEMICOLON. */
-
-static ffelexHandler
-ffestb_R11021_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R1102 (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "PROGRAM", t);
- break;
- }
-
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_block -- Parse the BLOCK DATA statement
-
- return ffestb_block; // to lexer
-
- Make sure the statement has a valid form for the BLOCK DATA statement. If
- it does, implement the statement. */
-
-ffelexHandler
-ffestb_block (ffelexToken t)
-{
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstBLOCK)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNAME:
- if (ffesta_second_kw != FFESTR_secondDATA)
- goto bad_1; /* :::::::::::::::::::: */
- break;
- }
-
- ffesta_confirmed ();
- return (ffelexHandler) ffestb_R1111_1_;
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "BLOCK DATA", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "BLOCK DATA", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-}
-
-/* ffestb_blockdata -- Parse the BLOCKDATA statement
-
- return ffestb_blockdata; // to lexer
-
- Make sure the statement has a valid form for the BLOCKDATA statement. If
- it does, implement the statement. */
-
-ffelexHandler
-ffestb_blockdata (ffelexToken t)
-{
- ffeTokenLength i;
- unsigned const char *p;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstBLOCKDATA)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNAME:
- ffesta_confirmed ();
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R1111_2_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- ffesta_tokens[1] = NULL;
- return (ffelexHandler) ffestb_R1111_2_ (t);
- }
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstBLOCKDATA)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- break;
- }
- ffesta_confirmed ();
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlBLOCKDATA);
- if (*p == '\0')
- {
- ffesta_tokens[1] = NULL;
- }
- else
- {
- if (!ffesrc_is_name_init (*p))
- goto bad_i; /* :::::::::::::::::::: */
- ffesta_tokens[1]
- = ffelex_token_name_from_names (ffesta_tokens[0], i, 0);
- }
- return (ffelexHandler) ffestb_R1111_2_ (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "BLOCK DATA", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "BLOCK DATA", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "BLOCK DATA", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R1111_1_ -- "BLOCK" "DATA"
-
- return ffestb_R1111_1_; // to lexer
-
- Make sure the next token is a NAME, EOS, or SEMICOLON token. */
-
-static ffelexHandler
-ffestb_R1111_1_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R1111_2_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_tokens[1] = NULL;
- return (ffelexHandler) ffestb_R1111_2_ (t);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "BLOCK DATA", t);
- break;
- }
-
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R1111_2_ -- "BLOCK/DATA" NAME
-
- return ffestb_R1111_2_; // to lexer
-
- Make sure the next token is an EOS or SEMICOLON. */
-
-static ffelexHandler
-ffestb_R1111_2_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R1111 (ffesta_tokens[1]);
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "BLOCK DATA", t);
- break;
- }
-
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R1212 -- Parse the CALL statement
-
- return ffestb_R1212; // to lexer
-
- Make sure the statement has a valid form for the CALL statement. If it
- does, implement the statement. */
-
-ffelexHandler
-ffestb_R1212 (ffelexToken t)
-{
- ffeTokenLength i;
- unsigned const char *p;
- ffelexHandler next;
- ffelexToken nt;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstCALL)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNAME:
- break;
- }
- ffesta_confirmed ();
- return (ffelexHandler)
- (*((ffelexHandler)
- ffeexpr_lhs (ffesta_output_pool, FFEEXPR_contextSUBROUTINEREF,
- (ffeexprCallback) ffestb_R12121_)))
- (t);
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstCALL)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOLONCOLON:
- case FFELEX_typeCOMMA:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeOPEN_PAREN:
- break;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- break;
- }
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlCALL);
- if (!ffesrc_is_name_init (*p))
- goto bad_i; /* :::::::::::::::::::: */
- nt = ffelex_token_name_from_names (ffesta_tokens[0], i, 0);
- next = (ffelexHandler)
- (*((ffelexHandler)
- ffeexpr_lhs (ffesta_output_pool, FFEEXPR_contextSUBROUTINEREF,
- (ffeexprCallback) ffestb_R12121_)))
- (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CALL", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CALL", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "CALL", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R12121_ -- "CALL" expr
-
- (ffestb_R12121_) // to expression handler
-
- Make sure the statement has a valid form for the CALL statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_R12121_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- ffestc_R1212 (expr, ft);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CALL", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R1227 -- Parse the RETURN statement
-
- return ffestb_R1227; // to lexer
-
- Make sure the statement has a valid form for the RETURN statement. If it
- does, implement the statement. */
-
-ffelexHandler
-ffestb_R1227 (ffelexToken t)
-{
- ffelexHandler next;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstRETURN)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEQUALS:
- case FFELEX_typePOINTS:
- case FFELEX_typeCOLON:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeNAME:
- case FFELEX_typeNUMBER:
- ffesta_confirmed ();
- break;
-
- default:
- break;
- }
-
- return (ffelexHandler) (*((ffelexHandler)
- ffeexpr_rhs (ffesta_output_pool, FFEEXPR_contextRETURN,
- (ffeexprCallback) ffestb_R12271_)))
- (t);
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstRETURN)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEQUALS:
- case FFELEX_typePOINTS:
- case FFELEX_typeCOLON:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- break;
-
- default:
- break;
- }
- next = (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextRETURN, (ffeexprCallback) ffestb_R12271_);
- next = (ffelexHandler) ffelex_splice_tokens (next, ffesta_tokens[0],
- FFESTR_firstlRETURN);
- if (next == NULL)
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero);
- return (ffelexHandler) (*next) (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "RETURN", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "RETURN", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-}
-
-/* ffestb_R12271_ -- "RETURN" expr
-
- (ffestb_R12271_) // to expression handler
-
- Make sure the next token is an EOS or SEMICOLON. */
-
-static ffelexHandler
-ffestb_R12271_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R1227 (expr, ft);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "RETURN", t);
- break;
- }
-
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_construct -- Parse a construct name
-
- return ffestb_construct; // to lexer
-
- Make sure the statement can have a construct name (if-then-stmt, do-stmt,
- select-case-stmt). */
-
-ffelexHandler
-ffestb_construct (ffelexToken t UNUSED)
-{
- /* This handler gets invoked only when token 0 is NAME/NAMES and token 1 is
- COLON. */
-
- ffesta_confirmed ();
- ffelex_set_names (TRUE);
- return (ffelexHandler) ffestb_construct1_;
-}
-
-/* ffestb_construct1_ -- NAME COLON
-
- return ffestb_construct1_; // to lexer
-
- Make sure we've got a NAME that is DO, DOWHILE, IF, SELECT, or SELECTCASE. */
-
-static ffelexHandler
-ffestb_construct1_ (ffelexToken t)
-{
- ffelex_set_names (FALSE);
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_first_kw = ffestr_first (t);
- switch (ffesta_first_kw)
- {
- case FFESTR_firstIF:
- ffestb_local_.construct.next = (ffelexHandler) ffestb_if;
- break;
-
- case FFESTR_firstDO:
- ffestb_local_.construct.next = (ffelexHandler) ffestb_do;
- break;
-
- case FFESTR_firstDOWHILE:
- ffestb_local_.construct.next = (ffelexHandler) ffestb_dowhile;
- break;
-
- case FFESTR_firstSELECT:
- case FFESTR_firstSELECTCASE:
- ffestb_local_.construct.next = (ffelexHandler) ffestb_R809;
- break;
-
- default:
- goto bad; /* :::::::::::::::::::: */
- }
- ffesta_construct_name = ffesta_tokens[0];
- ffesta_tokens[0] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_construct2_;
-
- case FFELEX_typeNAMES:
- ffesta_first_kw = ffestr_first (t);
- switch (ffesta_first_kw)
- {
- case FFESTR_firstIF:
- if (ffelex_token_length (t) != FFESTR_firstlIF)
- goto bad; /* :::::::::::::::::::: */
- ffestb_local_.construct.next = (ffelexHandler) ffestb_if;
- break;
-
- case FFESTR_firstDO:
- ffestb_local_.construct.next = (ffelexHandler) ffestb_do;
- break;
-
- case FFESTR_firstDOWHILE:
- if (ffelex_token_length (t) != FFESTR_firstlDOWHILE)
- goto bad; /* :::::::::::::::::::: */
- ffestb_local_.construct.next = (ffelexHandler) ffestb_dowhile;
- break;
-
- case FFESTR_firstSELECTCASE:
- if (ffelex_token_length (t) != FFESTR_firstlSELECTCASE)
- goto bad; /* :::::::::::::::::::: */
- ffestb_local_.construct.next = (ffelexHandler) ffestb_R809;
- break;
-
- default:
- goto bad; /* :::::::::::::::::::: */
- }
- ffesta_construct_name = ffesta_tokens[0];
- ffesta_tokens[0] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_construct2_;
-
- default:
- break;
- }
-
-bad: /* :::::::::::::::::::: */
- ffesta_ffebad_2st (FFEBAD_INVALID_STMT_FORM, "CONSTRUCT",
- ffesta_tokens[0], t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_construct2_ -- NAME COLON "DO/DOWHILE/IF/SELECT/SELECTCASE"
-
- return ffestb_construct2_; // to lexer
-
- This extra step is needed to set ffesta_second_kw if the second token
- (here) is a NAME, so DO and SELECT can continue to expect it. */
-
-static ffelexHandler
-ffestb_construct2_ (ffelexToken t)
-{
- if (ffelex_token_type (t) == FFELEX_typeNAME)
- ffesta_second_kw = ffestr_second (t);
- return (ffelexHandler) (*ffestb_local_.construct.next) (t);
-}
-
-/* ffestb_R809 -- Parse the SELECTCASE statement
-
- return ffestb_R809; // to lexer
-
- Make sure the statement has a valid form for the SELECTCASE statement.
- If it does, implement the statement. */
-
-ffelexHandler
-ffestb_R809 (ffelexToken t)
-{
- ffeTokenLength i;
- const char *p;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- switch (ffesta_first_kw)
- {
- case FFESTR_firstSELECT:
- if ((ffelex_token_type (t) != FFELEX_typeNAME)
- || (ffesta_second_kw != FFESTR_secondCASE))
- goto bad_1; /* :::::::::::::::::::: */
- ffesta_confirmed ();
- return (ffelexHandler) ffestb_R8091_;
-
- case FFESTR_firstSELECTCASE:
- return (ffelexHandler) ffestb_R8091_ (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstSELECTCASE)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeOPEN_PAREN:
- break;
- }
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlSELECTCASE);
- if (*p != '\0')
- goto bad_i; /* :::::::::::::::::::: */
- return (ffelexHandler) ffestb_R8091_ (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "SELECT CASE", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "SELECT CASE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "SELECT CASE", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R8091_ -- "SELECTCASE" or "SELECT" "CASE"
-
- return ffestb_R8091_; // to lexer
-
- Make sure the statement has a valid form for the SELECTCASE statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_R8091_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_PAREN:
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextSELECTCASE, (ffeexprCallback) ffestb_R8092_);
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- break;
-
- default:
- break;
- }
-
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "SELECT CASE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R8092_ -- "SELECT/CASE" OPEN_PAREN expr
-
- (ffestb_R8092_) // to expression handler
-
- Make sure the statement has a valid form for the SELECTCASE statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_R8092_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- break;
- ffesta_tokens[1] = ffelex_token_use (ft);
- ffestb_local_.selectcase.expr = expr;
- return (ffelexHandler) ffestb_R8093_;
-
- default:
- break;
- }
-
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "SELECT CASE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R8093_ -- "SELECT/CASE" OPEN_PAREN expr CLOSE_PAREN
-
- return ffestb_R8093_; // to lexer
-
- Make sure the statement has a valid form for the SELECTCASE statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_R8093_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R809 (ffesta_construct_name, ffestb_local_.selectcase.expr,
- ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- return ffesta_zero (t);
-
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- break;
-
- default:
- break;
- }
-
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffesta_construct_name != NULL)
- {
- ffelex_token_kill (ffesta_construct_name);
- ffesta_construct_name = NULL;
- }
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "SELECT CASE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R810 -- Parse the CASE statement
-
- return ffestb_R810; // to lexer
-
- Make sure the statement has a valid form for the CASE statement.
- If it does, implement the statement. */
-
-ffelexHandler
-ffestb_R810 (ffelexToken t)
-{
- ffeTokenLength i;
- unsigned const char *p;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstCASE)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNAME:
- ffesta_confirmed ();
- if (ffesta_second_kw != FFESTR_secondDEFAULT)
- goto bad_1; /* :::::::::::::::::::: */
- ffestb_local_.case_stmt.cases = NULL;
- return (ffelexHandler) ffestb_R8101_;
-
- case FFELEX_typeOPEN_PAREN:
- ffestb_local_.case_stmt.cases = ffestt_caselist_create ();
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextCASE, (ffeexprCallback) ffestb_R8103_);
- }
-
- case FFELEX_typeNAMES:
- switch (ffesta_first_kw)
- {
- case FFESTR_firstCASEDEFAULT:
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- break;
- }
- ffestb_local_.case_stmt.cases = NULL;
- p = ffelex_token_text (ffesta_tokens[0])
- + (i = FFESTR_firstlCASEDEFAULT);
- if (*p == '\0')
- return (ffelexHandler) ffestb_R8101_ (t);
- if (!ffesrc_is_name_init (*p))
- goto bad_i; /* :::::::::::::::::::: */
- ffesta_tokens[1] = ffelex_token_name_from_names (ffesta_tokens[0], i,
- 0);
- return (ffelexHandler) ffestb_R8102_ (t);
-
- case FFESTR_firstCASE:
- break;
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeOPEN_PAREN:
- break;
- }
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlCASE);
- if (*p != '\0')
- goto bad_i; /* :::::::::::::::::::: */
- ffestb_local_.case_stmt.cases = ffestt_caselist_create ();
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextCASE, (ffeexprCallback) ffestb_R8103_);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CASE", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CASE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "CASE", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R8101_ -- "CASE" case-selector
-
- return ffestb_R8101_; // to lexer
-
- Make sure the statement has a valid form for the CASE statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_R8101_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R8102_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_tokens[1] = NULL;
- return (ffelexHandler) ffestb_R8102_ (t);
-
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- break;
-
- default:
- break;
- }
-
- if (ffestb_local_.case_stmt.cases != NULL)
- ffestt_caselist_kill (ffestb_local_.case_stmt.cases);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CASE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R8102_ -- "CASE" case-selector [NAME]
-
- return ffestb_R8102_; // to lexer
-
- Make sure the statement has a valid form for the CASE statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_R8102_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R810 (ffestb_local_.case_stmt.cases, ffesta_tokens[1]);
- if (ffestb_local_.case_stmt.cases != NULL)
- ffestt_caselist_kill (ffestb_local_.case_stmt.cases);
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffesta_zero (t);
-
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- break;
-
- default:
- break;
- }
-
- if (ffestb_local_.case_stmt.cases != NULL)
- ffestt_caselist_kill (ffestb_local_.case_stmt.cases);
- if (ffesta_tokens[1] != NULL)
- ffelex_token_kill (ffesta_tokens[1]);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CASE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R8103_ -- "CASE" OPEN_PAREN expr
-
- (ffestb_R8103_) // to expression handler
-
- Make sure the statement has a valid form for the CASE statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_R8103_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- ffestt_caselist_append (ffestb_local_.case_stmt.cases, FALSE, expr, NULL,
- ffelex_token_use (ft));
- return (ffelexHandler) ffestb_R8101_;
-
- case FFELEX_typeCOMMA:
- ffestt_caselist_append (ffestb_local_.case_stmt.cases, FALSE, expr, NULL,
- ffelex_token_use (ft));
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextCASE, (ffeexprCallback) ffestb_R8103_);
-
- case FFELEX_typeCOLON:
- ffestt_caselist_append (ffestb_local_.case_stmt.cases, TRUE, expr, NULL,
- ffelex_token_use (ft)); /* NULL second expr for
- now, just plug in. */
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextCASE, (ffeexprCallback) ffestb_R8104_);
-
- default:
- break;
- }
-
- ffestt_caselist_kill (ffestb_local_.case_stmt.cases);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CASE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R8104_ -- "CASE" OPEN_PAREN expr COLON expr
-
- (ffestb_R8104_) // to expression handler
-
- Make sure the statement has a valid form for the CASE statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_R8104_ (ffelexToken ft UNUSED, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- ffestb_local_.case_stmt.cases->previous->expr2 = expr;
- return (ffelexHandler) ffestb_R8101_;
-
- case FFELEX_typeCOMMA:
- ffestb_local_.case_stmt.cases->previous->expr2 = expr;
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextCASE, (ffeexprCallback) ffestb_R8103_);
-
- default:
- break;
- }
-
- ffestt_caselist_kill (ffestb_local_.case_stmt.cases);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CASE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R1001 -- Parse a FORMAT statement
-
- return ffestb_R1001; // to lexer
-
- Make sure the statement has a valid form for an FORMAT statement.
- If it does, implement the statement. */
-
-ffelexHandler
-ffestb_R1001 (ffelexToken t)
-{
- ffesttFormatList f;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstFORMAT)
- goto bad_0; /* :::::::::::::::::::: */
- break;
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstFORMAT)
- goto bad_0; /* :::::::::::::::::::: */
- if (ffelex_token_length (ffesta_tokens[0]) != FFESTR_firstlFORMAT)
- goto bad_0; /* :::::::::::::::::::: */
- break;
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_PAREN:
- ffestb_local_.format.complained = FALSE;
- ffestb_local_.format.f = NULL; /* No parent yet. */
- ffestb_local_.format.f = ffestt_formatlist_create (NULL,
- ffelex_token_use (t));
- ffelex_set_names_pure (TRUE); /* Have even free-form lexer give us
- NAMES. */
- return (ffelexHandler) ffestb_R10011_;
-
- case FFELEX_typeOPEN_ARRAY:/* "(/". */
- ffesta_confirmed ();
- ffestb_local_.format.complained = FALSE;
- ffestb_local_.format.f = ffestt_formatlist_create (NULL,
- ffelex_token_use (t));
- f = ffestt_formatlist_append (ffestb_local_.format.f);
- f->type = FFESTP_formattypeSLASH;
- f->t = ffelex_token_use (t);
- f->u.R1010.val.present = FALSE;
- f->u.R1010.val.rtexpr = FALSE;
- f->u.R1010.val.t = NULL;
- f->u.R1010.val.u.unsigned_val = 1;
- ffelex_set_names_pure (TRUE); /* Have even free-form lexer give us
- NAMES. */
- return (ffelexHandler) ffestb_R100112_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FORMAT", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FORMAT", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-}
-
-/* ffestb_R10011_ -- "FORMAT" OPEN_PAREN expr
-
- return ffestb_R10011_; // to lexer
-
- For CLOSE_PAREN, wrap up the format list and if it is the top-level one,
- exit. For anything else, pass it to _2_. */
-
-static ffelexHandler
-ffestb_R10011_ (ffelexToken t)
-{
- ffesttFormatList f;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- break;
-
- default:
- return (ffelexHandler) ffestb_R10012_ (t);
- }
-
- /* If we have a format we're working on, continue working on it. */
-
- f = ffestb_local_.format.f->u.root.parent;
-
- if (f != NULL)
- {
- ffestb_local_.format.f = f->next;
- return (ffelexHandler) ffestb_R100111_;
- }
-
- return (ffelexHandler) ffestb_R100114_;
-}
-
-/* ffestb_R10012_ -- "FORMAT" OPEN_PAREN [format-item-list]
-
- return ffestb_R10012_; // to lexer
-
- The initial state for a format-item. Here, just handle the initial
- number, sign for number, or run-time expression. Also handle spurious
- comma, close-paren (indicating spurious comma), close-array (like
- close-paren but preceded by slash), and quoted strings. */
-
-static ffelexHandler
-ffestb_R10012_ (ffelexToken t)
-{
- unsigned long unsigned_val;
- ffesttFormatList f;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_ANGLE:
- ffesta_confirmed ();
- ffestb_local_.format.pre.t = ffelex_token_use (t);
- ffelex_set_names_pure (FALSE);
- if (!ffesta_seen_first_exec && !ffestb_local_.format.complained)
- {
- ffestb_local_.format.complained = TRUE;
- ffebad_start (FFEBAD_FORMAT_EXPR_SPEC);
- ffebad_here (0, ffelex_token_where_line (t), ffelex_token_where_column (t));
- ffebad_finish ();
- }
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFORMAT, (ffeexprCallback) ffestb_R100115_);
-
- case FFELEX_typeNUMBER:
- ffestb_local_.format.sign = FALSE; /* No sign present. */
- ffestb_local_.format.pre.present = TRUE;
- ffestb_local_.format.pre.rtexpr = FALSE;
- ffestb_local_.format.pre.t = ffelex_token_use (t);
- ffestb_local_.format.pre.u.unsigned_val = unsigned_val
- = strtoul (ffelex_token_text (t), NULL, 10);
- ffelex_set_expecting_hollerith (unsigned_val, '\0',
- ffelex_token_where_line (t),
- ffelex_token_where_column (t));
- return (ffelexHandler) ffestb_R10014_;
-
- case FFELEX_typePLUS:
- ffestb_local_.format.sign = TRUE; /* Positive. */
- ffestb_local_.format.pre.t = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R10013_;
-
- case FFELEX_typeMINUS:
- ffestb_local_.format.sign = FALSE; /* Negative. */
- ffestb_local_.format.pre.t = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R10013_;
-
- case FFELEX_typeCOLON:
- case FFELEX_typeCOLONCOLON:/* "::". */
- case FFELEX_typeSLASH:
- case FFELEX_typeCONCAT: /* "//". */
- case FFELEX_typeNAMES:
- case FFELEX_typeDOLLAR:
- case FFELEX_typeOPEN_PAREN:
- case FFELEX_typeOPEN_ARRAY:/* "(/". */
- ffestb_local_.format.sign = FALSE; /* No sign present. */
- ffestb_local_.format.pre.present = FALSE;
- ffestb_local_.format.pre.rtexpr = FALSE;
- ffestb_local_.format.pre.t = NULL;
- ffestb_local_.format.pre.u.unsigned_val = 1;
- return (ffelexHandler) ffestb_R10014_ (t);
-
- case FFELEX_typeCOMMA:
- ffebad_start (FFEBAD_FORMAT_EXTRA_COMMA);
- ffebad_here (0, ffelex_token_where_line (t), ffelex_token_where_column (t));
- ffebad_finish ();
- return (ffelexHandler) ffestb_R10012_;
-
- case FFELEX_typeCLOSE_PAREN:
- ffebad_start (FFEBAD_FORMAT_EXTRA_COMMA);
- ffebad_here (0, ffelex_token_where_line (t), ffelex_token_where_column (t));
- ffebad_finish ();
- f = ffestb_local_.format.f->u.root.parent;
- if (f == NULL)
- return (ffelexHandler) ffestb_R100114_;
- ffestb_local_.format.f = f->next;
- return (ffelexHandler) ffestb_R100111_;
-
- case FFELEX_typeCLOSE_ARRAY: /* "/)". */
- f = ffestt_formatlist_append (ffestb_local_.format.f);
- f->type = FFESTP_formattypeSLASH;
- f->t = ffelex_token_use (t);
- f->u.R1010.val.present = FALSE;
- f->u.R1010.val.rtexpr = FALSE;
- f->u.R1010.val.t = NULL;
- f->u.R1010.val.u.unsigned_val = 1;
- f = ffestb_local_.format.f->u.root.parent;
- if (f == NULL)
- return (ffelexHandler) ffestb_R100114_;
- ffestb_local_.format.f = f->next;
- return (ffelexHandler) ffestb_R100111_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- ffesta_ffebad_1t (FFEBAD_FORMAT_MISSING_PAREN, t);
- for (f = ffestb_local_.format.f;
- f->u.root.parent != NULL;
- f = f->u.root.parent->next)
- ;
- ffestb_local_.format.f = f;
- return (ffelexHandler) ffestb_R100114_ (t);
-
- case FFELEX_typeQUOTE:
- if (ffe_is_vxt ())
- break; /* Error, probably something like FORMAT("17)
- = X. */
- ffelex_set_expecting_hollerith (-1, '\"',
- ffelex_token_where_line (t),
- ffelex_token_where_column (t)); /* Don't have to unset
- this one. */
- return (ffelexHandler) ffestb_R100113_;
-
- case FFELEX_typeAPOSTROPHE:
-#if 0 /* No apparent need for this, and not killed
- anywhere. */
- ffesta_tokens[1] = ffelex_token_use (t);
-#endif
- ffelex_set_expecting_hollerith (-1, '\'',
- ffelex_token_where_line (t),
- ffelex_token_where_column (t)); /* Don't have to unset
- this one. */
- return (ffelexHandler) ffestb_R100113_;
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FORMAT", t);
- ffestt_formatlist_kill (ffestb_local_.format.f);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R10013_ -- "FORMAT" OPEN_PAREN [format-item-list] PLUS/MINUS
-
- return ffestb_R10013_; // to lexer
-
- Expect a NUMBER or complain about and then ignore the PLUS/MINUS. */
-
-static ffelexHandler
-ffestb_R10013_ (ffelexToken t)
-{
- unsigned long unsigned_val;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNUMBER:
- ffestb_local_.format.pre.present = TRUE;
- ffestb_local_.format.pre.rtexpr = FALSE;
- unsigned_val = strtoul (ffelex_token_text (t), NULL, 10);
- ffestb_local_.format.pre.u.signed_val = ffestb_local_.format.sign
- ? unsigned_val : -unsigned_val;
- ffestb_local_.format.sign = TRUE; /* Sign present. */
- return (ffelexHandler) ffestb_R10014_;
-
- default:
- ffebad_start (FFEBAD_FORMAT_SPURIOUS_SIGN);
- ffebad_here (0, ffelex_token_where_line (ffestb_local_.format.pre.t),
- ffelex_token_where_column (ffestb_local_.format.pre.t));
- ffebad_finish ();
- ffelex_token_kill (ffestb_local_.format.pre.t);
- return (ffelexHandler) ffestb_R10012_ (t);
- }
-}
-
-/* ffestb_R10014_ -- "FORMAT" OPEN_PAREN [format-item-list] [[+/-] NUMBER]
-
- return ffestb_R10014_; // to lexer
-
- Here is where we expect to see the actual NAMES, COLON, SLASH, OPEN_PAREN,
- OPEN_ARRAY, COLONCOLON, CONCAT, DOLLAR, or HOLLERITH that identifies what
- kind of format-item we're dealing with. But if we see a NUMBER instead, it
- means free-form spaces number like "5 6 X", so scale the current number
- accordingly and reenter this state. (I really wouldn't be surprised if
- they change this spacing rule in the F90 spec so that you can't embed
- spaces within numbers or within keywords like BN in a free-source-form
- program.) */
-
-static ffelexHandler
-ffestb_R10014_ (ffelexToken t)
-{
- ffesttFormatList f;
- ffeTokenLength i;
- const char *p;
- ffestrFormat kw;
-
- ffelex_set_expecting_hollerith (0, '\0',
- ffewhere_line_unknown (),
- ffewhere_column_unknown ());
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeHOLLERITH:
- f = ffestt_formatlist_append (ffestb_local_.format.f);
- f->type = FFESTP_formattypeR1016;
- f->t = ffelex_token_use (t);
- ffelex_token_kill (ffestb_local_.format.pre.t); /* It WAS present! */
- return (ffelexHandler) ffestb_R100111_;
-
- case FFELEX_typeNUMBER:
- assert (ffestb_local_.format.pre.present);
- ffesta_confirmed ();
- if (ffestb_local_.format.pre.rtexpr)
- {
- ffebad_start (FFEBAD_FORMAT_SPURIOUS_NUMBER);
- ffebad_here (0, ffelex_token_where_line (t), ffelex_token_where_column (t));
- ffebad_finish ();
- return (ffelexHandler) ffestb_R10014_;
- }
- if (ffestb_local_.format.sign)
- {
- for (i = ffelex_token_length (t) + 1; i > 0; --i)
- ffestb_local_.format.pre.u.signed_val *= 10;
- ffestb_local_.format.pre.u.signed_val += strtoul (ffelex_token_text (t),
- NULL, 10);
- }
- else
- {
- for (i = ffelex_token_length (t) + 1; i > 0; --i)
- ffestb_local_.format.pre.u.unsigned_val *= 10;
- ffestb_local_.format.pre.u.unsigned_val += strtoul (ffelex_token_text (t),
- NULL, 10);
- ffelex_set_expecting_hollerith (ffestb_local_.format.pre.u.unsigned_val,
- '\0',
- ffelex_token_where_line (t),
- ffelex_token_where_column (t));
- }
- return (ffelexHandler) ffestb_R10014_;
-
- case FFELEX_typeCOLONCOLON: /* "::". */
- if (ffestb_local_.format.pre.present)
- {
- ffesta_ffebad_1t (FFEBAD_FORMAT_BAD_COLON_SPEC,
- ffestb_local_.format.pre.t);
- ffelex_token_kill (ffestb_local_.format.pre.t);
- ffestb_local_.format.pre.present = FALSE;
- }
- else
- {
- f = ffestt_formatlist_append (ffestb_local_.format.f);
- f->type = FFESTP_formattypeCOLON;
- f->t = ffelex_token_use (t);
- f->u.R1010.val.present = FALSE;
- f->u.R1010.val.rtexpr = FALSE;
- f->u.R1010.val.t = NULL;
- f->u.R1010.val.u.unsigned_val = 1;
- }
- f = ffestt_formatlist_append (ffestb_local_.format.f);
- f->type = FFESTP_formattypeCOLON;
- f->t = ffelex_token_use (t);
- f->u.R1010.val.present = FALSE;
- f->u.R1010.val.rtexpr = FALSE;
- f->u.R1010.val.t = NULL;
- f->u.R1010.val.u.unsigned_val = 1;
- return (ffelexHandler) ffestb_R100112_;
-
- case FFELEX_typeCOLON:
- if (ffestb_local_.format.pre.present)
- {
- ffesta_ffebad_1t (FFEBAD_FORMAT_BAD_COLON_SPEC,
- ffestb_local_.format.pre.t);
- ffelex_token_kill (ffestb_local_.format.pre.t);
- return (ffelexHandler) ffestb_R100112_;
- }
- f = ffestt_formatlist_append (ffestb_local_.format.f);
- f->type = FFESTP_formattypeCOLON;
- f->t = ffelex_token_use (t);
- f->u.R1010.val.present = FALSE;
- f->u.R1010.val.rtexpr = FALSE;
- f->u.R1010.val.t = NULL;
- f->u.R1010.val.u.unsigned_val = 1;
- return (ffelexHandler) ffestb_R100112_;
-
- case FFELEX_typeCONCAT: /* "//". */
- if (ffestb_local_.format.sign)
- {
- ffebad_start (FFEBAD_FORMAT_SPURIOUS_SIGN);
- ffebad_here (0, ffelex_token_where_line (ffestb_local_.format.pre.t),
- ffelex_token_where_column (ffestb_local_.format.pre.t));
- ffebad_finish ();
- ffestb_local_.format.pre.u.unsigned_val
- = (ffestb_local_.format.pre.u.signed_val < 0)
- ? -ffestb_local_.format.pre.u.signed_val
- : ffestb_local_.format.pre.u.signed_val;
- }
- f = ffestt_formatlist_append (ffestb_local_.format.f);
- f->type = FFESTP_formattypeSLASH;
- f->t = ffelex_token_use (t);
- f->u.R1010.val = ffestb_local_.format.pre;
- ffestb_local_.format.pre.present = FALSE;
- ffestb_local_.format.pre.rtexpr = FALSE;
- ffestb_local_.format.pre.t = NULL;
- ffestb_local_.format.pre.u.unsigned_val = 1;
- f = ffestt_formatlist_append (ffestb_local_.format.f);
- f->type = FFESTP_formattypeSLASH;
- f->t = ffelex_token_use (t);
- f->u.R1010.val = ffestb_local_.format.pre;
- return (ffelexHandler) ffestb_R100112_;
-
- case FFELEX_typeSLASH:
- if (ffestb_local_.format.sign)
- {
- ffebad_start (FFEBAD_FORMAT_SPURIOUS_SIGN);
- ffebad_here (0, ffelex_token_where_line (ffestb_local_.format.pre.t),
- ffelex_token_where_column (ffestb_local_.format.pre.t));
- ffebad_finish ();
- ffestb_local_.format.pre.u.unsigned_val
- = (ffestb_local_.format.pre.u.signed_val < 0)
- ? -ffestb_local_.format.pre.u.signed_val
- : ffestb_local_.format.pre.u.signed_val;
- }
- f = ffestt_formatlist_append (ffestb_local_.format.f);
- f->type = FFESTP_formattypeSLASH;
- f->t = ffelex_token_use (t);
- f->u.R1010.val = ffestb_local_.format.pre;
- return (ffelexHandler) ffestb_R100112_;
-
- case FFELEX_typeOPEN_PAREN:
- if (ffestb_local_.format.sign)
- {
- ffebad_start (FFEBAD_FORMAT_SPURIOUS_SIGN);
- ffebad_here (0, ffelex_token_where_line (ffestb_local_.format.pre.t),
- ffelex_token_where_column (ffestb_local_.format.pre.t));
- ffebad_finish ();
- ffestb_local_.format.pre.u.unsigned_val
- = (ffestb_local_.format.pre.u.signed_val < 0)
- ? -ffestb_local_.format.pre.u.signed_val
- : ffestb_local_.format.pre.u.signed_val;
- }
- f = ffestt_formatlist_append (ffestb_local_.format.f);
- f->type = FFESTP_formattypeFORMAT;
- f->t = ffelex_token_use (t);
- f->u.R1003D.R1004 = ffestb_local_.format.pre;
- f->u.R1003D.format = ffestb_local_.format.f
- = ffestt_formatlist_create (f, ffelex_token_use (t));
- return (ffelexHandler) ffestb_R10011_;
-
- case FFELEX_typeOPEN_ARRAY:/* "(/". */
- if (ffestb_local_.format.sign)
- {
- ffebad_start (FFEBAD_FORMAT_SPURIOUS_SIGN);
- ffebad_here (0, ffelex_token_where_line (ffestb_local_.format.pre.t),
- ffelex_token_where_column (ffestb_local_.format.pre.t));
- ffebad_finish ();
- ffestb_local_.format.pre.u.unsigned_val
- = (ffestb_local_.format.pre.u.signed_val < 0)
- ? -ffestb_local_.format.pre.u.signed_val
- : ffestb_local_.format.pre.u.signed_val;
- }
- f = ffestt_formatlist_append (ffestb_local_.format.f);
- f->type = FFESTP_formattypeFORMAT;
- f->t = ffelex_token_use (t);
- f->u.R1003D.R1004 = ffestb_local_.format.pre;
- f->u.R1003D.format = ffestb_local_.format.f
- = ffestt_formatlist_create (f, ffelex_token_use (t));
- f = ffestt_formatlist_append (ffestb_local_.format.f);
- f->type = FFESTP_formattypeSLASH;
- f->t = ffelex_token_use (t);
- f->u.R1010.val.present = FALSE;
- f->u.R1010.val.rtexpr = FALSE;
- f->u.R1010.val.t = NULL;
- f->u.R1010.val.u.unsigned_val = 1;
- return (ffelexHandler) ffestb_R100112_;
-
- case FFELEX_typeCLOSE_ARRAY: /* "/)". */
- f = ffestt_formatlist_append (ffestb_local_.format.f);
- f->type = FFESTP_formattypeSLASH;
- f->t = ffelex_token_use (t);
- f->u.R1010.val = ffestb_local_.format.pre;
- f = ffestb_local_.format.f->u.root.parent;
- if (f == NULL)
- return (ffelexHandler) ffestb_R100114_;
- ffestb_local_.format.f = f->next;
- return (ffelexHandler) ffestb_R100111_;
-
- case FFELEX_typeQUOTE:
- if (ffe_is_vxt ())
- break; /* A totally bad character in a VXT FORMAT. */
- ffebad_start (FFEBAD_FORMAT_SPURIOUS_NUMBER);
- ffebad_here (0, ffelex_token_where_line (ffestb_local_.format.pre.t),
- ffelex_token_where_column (ffestb_local_.format.pre.t));
- ffebad_finish ();
- ffelex_token_kill (ffestb_local_.format.pre.t);
- ffesta_confirmed ();
-#if 0 /* No apparent need for this, and not killed
- anywhere. */
- ffesta_tokens[1] = ffelex_token_use (t);
-#endif
- ffelex_set_expecting_hollerith (-1, '\"',
- ffelex_token_where_line (t),
- ffelex_token_where_column (t)); /* Don't have to unset
- this one. */
- return (ffelexHandler) ffestb_R100113_;
-
- case FFELEX_typeAPOSTROPHE:
- ffesta_confirmed ();
- ffebad_start (FFEBAD_FORMAT_SPURIOUS_NUMBER);
- ffebad_here (0, ffelex_token_where_line (ffestb_local_.format.pre.t),
- ffelex_token_where_column (ffestb_local_.format.pre.t));
- ffebad_finish ();
- ffelex_token_kill (ffestb_local_.format.pre.t);
-#if 0 /* No apparent need for this, and not killed
- anywhere. */
- ffesta_tokens[1] = ffelex_token_use (t);
-#endif
- ffelex_set_expecting_hollerith (-1, '\'', ffelex_token_where_line (t),
- ffelex_token_where_column (t)); /* Don't have to unset
- this one. */
- return (ffelexHandler) ffestb_R100113_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- ffesta_ffebad_1t (FFEBAD_FORMAT_MISSING_PAREN, t);
- for (f = ffestb_local_.format.f;
- f->u.root.parent != NULL;
- f = f->u.root.parent->next)
- ;
- ffestb_local_.format.f = f;
- ffelex_token_kill (ffestb_local_.format.pre.t);
- return (ffelexHandler) ffestb_R100114_ (t);
-
- case FFELEX_typeDOLLAR:
- ffestb_local_.format.t = ffelex_token_use (t);
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed (); /* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeDOLLAR;
- return (ffelexHandler) ffestb_R10015_;
-
- case FFELEX_typeNAMES:
- kw = ffestr_format (t);
- ffestb_local_.format.t = ffelex_token_use (t);
- switch (kw)
- {
- case FFESTR_formatI:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeI;
- i = FFESTR_formatlI;
- break;
-
- case FFESTR_formatB:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeB;
- i = FFESTR_formatlB;
- break;
-
- case FFESTR_formatO:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeO;
- i = FFESTR_formatlO;
- break;
-
- case FFESTR_formatZ:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeZ;
- i = FFESTR_formatlZ;
- break;
-
- case FFESTR_formatF:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeF;
- i = FFESTR_formatlF;
- break;
-
- case FFESTR_formatE:
- ffestb_local_.format.current = FFESTP_formattypeE;
- i = FFESTR_formatlE;
- break;
-
- case FFESTR_formatEN:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeEN;
- i = FFESTR_formatlEN;
- break;
-
- case FFESTR_formatG:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeG;
- i = FFESTR_formatlG;
- break;
-
- case FFESTR_formatL:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeL;
- i = FFESTR_formatlL;
- break;
-
- case FFESTR_formatA:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeA;
- i = FFESTR_formatlA;
- break;
-
- case FFESTR_formatD:
- ffestb_local_.format.current = FFESTP_formattypeD;
- i = FFESTR_formatlD;
- break;
-
- case FFESTR_formatQ:
- ffestb_local_.format.current = FFESTP_formattypeQ;
- i = FFESTR_formatlQ;
- break;
-
- case FFESTR_formatDOLLAR:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeDOLLAR;
- i = FFESTR_formatlDOLLAR;
- break;
-
- case FFESTR_formatP:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeP;
- i = FFESTR_formatlP;
- break;
-
- case FFESTR_formatT:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeT;
- i = FFESTR_formatlT;
- break;
-
- case FFESTR_formatTL:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeTL;
- i = FFESTR_formatlTL;
- break;
-
- case FFESTR_formatTR:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeTR;
- i = FFESTR_formatlTR;
- break;
-
- case FFESTR_formatX:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeX;
- i = FFESTR_formatlX;
- break;
-
- case FFESTR_formatS:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeS;
- i = FFESTR_formatlS;
- break;
-
- case FFESTR_formatSP:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeSP;
- i = FFESTR_formatlSP;
- break;
-
- case FFESTR_formatSS:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeSS;
- i = FFESTR_formatlSS;
- break;
-
- case FFESTR_formatBN:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeBN;
- i = FFESTR_formatlBN;
- break;
-
- case FFESTR_formatBZ:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeBZ;
- i = FFESTR_formatlBZ;
- break;
-
- case FFESTR_formatH: /* Error, either "H" or "<expr>H". */
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeH;
- i = FFESTR_formatlH;
- break;
-
- case FFESTR_formatPD:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_subr_R1001_append_p_ ();
- ffestb_local_.format.t = ffelex_token_name_from_names (t,
- FFESTR_formatlP, 1);
- ffestb_local_.format.sign = FALSE;
- ffestb_local_.format.pre.present = FALSE;
- ffestb_local_.format.pre.rtexpr = FALSE;
- ffestb_local_.format.pre.t = NULL;
- ffestb_local_.format.pre.u.unsigned_val = 1;
- ffestb_local_.format.current = FFESTP_formattypeD;
- i = FFESTR_formatlPD;
- break;
-
- case FFESTR_formatPE:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_subr_R1001_append_p_ ();
- ffestb_local_.format.t = ffelex_token_name_from_names (t,
- FFESTR_formatlP, 1);
- ffestb_local_.format.sign = FALSE;
- ffestb_local_.format.pre.present = FALSE;
- ffestb_local_.format.pre.rtexpr = FALSE;
- ffestb_local_.format.pre.t = NULL;
- ffestb_local_.format.pre.u.unsigned_val = 1;
- ffestb_local_.format.current = FFESTP_formattypeE;
- i = FFESTR_formatlPE;
- break;
-
- case FFESTR_formatPEN:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_subr_R1001_append_p_ ();
- ffestb_local_.format.t = ffelex_token_name_from_names (t,
- FFESTR_formatlP, 1);
- ffestb_local_.format.sign = FALSE;
- ffestb_local_.format.pre.present = FALSE;
- ffestb_local_.format.pre.rtexpr = FALSE;
- ffestb_local_.format.pre.t = NULL;
- ffestb_local_.format.pre.u.unsigned_val = 1;
- ffestb_local_.format.current = FFESTP_formattypeEN;
- i = FFESTR_formatlPEN;
- break;
-
- case FFESTR_formatPF:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_subr_R1001_append_p_ ();
- ffestb_local_.format.t = ffelex_token_name_from_names (t,
- FFESTR_formatlP, 1);
- ffestb_local_.format.sign = FALSE;
- ffestb_local_.format.pre.present = FALSE;
- ffestb_local_.format.pre.rtexpr = FALSE;
- ffestb_local_.format.pre.t = NULL;
- ffestb_local_.format.pre.u.unsigned_val = 1;
- ffestb_local_.format.current = FFESTP_formattypeF;
- i = FFESTR_formatlPF;
- break;
-
- case FFESTR_formatPG:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_subr_R1001_append_p_ ();
- ffestb_local_.format.t = ffelex_token_name_from_names (t,
- FFESTR_formatlP, 1);
- ffestb_local_.format.sign = FALSE;
- ffestb_local_.format.pre.present = FALSE;
- ffestb_local_.format.pre.rtexpr = FALSE;
- ffestb_local_.format.pre.t = NULL;
- ffestb_local_.format.pre.u.unsigned_val = 1;
- ffestb_local_.format.current = FFESTP_formattypeG;
- i = FFESTR_formatlPG;
- break;
-
- default:
- if (ffestb_local_.format.pre.present)
- ffesta_confirmed ();/* Number preceding this invalid elsewhere. */
- ffestb_local_.format.current = FFESTP_formattypeNone;
- p = strpbrk (ffelex_token_text (t), "0123456789");
- if (p == NULL)
- i = ffelex_token_length (t);
- else
- i = p - ffelex_token_text (t);
- break;
- }
- p = ffelex_token_text (t) + i;
- if (*p == '\0')
- return (ffelexHandler) ffestb_R10015_;
- if (! ISDIGIT (*p))
- {
- if (ffestb_local_.format.current == FFESTP_formattypeH)
- p = strpbrk (p, "0123456789");
- else
- {
- p = NULL;
- ffestb_local_.format.current = FFESTP_formattypeNone;
- }
- if (p == NULL)
- return (ffelexHandler) ffestb_R10015_;
- i = p - ffelex_token_text (t); /* Collect digits. */
- }
- ffestb_local_.format.post.present = TRUE;
- ffestb_local_.format.post.rtexpr = FALSE;
- ffestb_local_.format.post.t = ffelex_token_number_from_names (t, i);
- ffestb_local_.format.post.u.unsigned_val
- = strtoul (ffelex_token_text (ffestb_local_.format.post.t), NULL, 10);
- p += ffelex_token_length (ffestb_local_.format.post.t);
- i += ffelex_token_length (ffestb_local_.format.post.t);
- if (*p == '\0')
- return (ffelexHandler) ffestb_R10016_;
- if ((kw != FFESTR_formatP) ||
- !ffelex_is_firstnamechar ((unsigned char)*p))
- {
- if (ffestb_local_.format.current != FFESTP_formattypeH)
- ffesta_ffebad_1p (FFEBAD_FORMAT_TEXT_IN_NUMBER, t, i, NULL);
- return (ffelexHandler) ffestb_R10016_;
- }
-
- /* Here we have [number]P[number][text]. Treat as
- [number]P,[number][text]. */
-
- ffestb_subr_R1001_append_p_ ();
- t = ffestb_local_.format.t = ffelex_token_names_from_names (t, i, 0);
- ffestb_local_.format.sign = FALSE;
- ffestb_local_.format.pre = ffestb_local_.format.post;
- kw = ffestr_format (t);
- switch (kw)
- { /* Only a few possibilities here. */
- case FFESTR_formatD:
- ffestb_local_.format.current = FFESTP_formattypeD;
- i = FFESTR_formatlD;
- break;
-
- case FFESTR_formatE:
- ffestb_local_.format.current = FFESTP_formattypeE;
- i = FFESTR_formatlE;
- break;
-
- case FFESTR_formatEN:
- ffestb_local_.format.current = FFESTP_formattypeEN;
- i = FFESTR_formatlEN;
- break;
-
- case FFESTR_formatF:
- ffestb_local_.format.current = FFESTP_formattypeF;
- i = FFESTR_formatlF;
- break;
-
- case FFESTR_formatG:
- ffestb_local_.format.current = FFESTP_formattypeG;
- i = FFESTR_formatlG;
- break;
-
- default:
- ffebad_start (FFEBAD_FORMAT_P_NOCOMMA);
- ffebad_here (0, ffelex_token_where_line (t), ffelex_token_where_column (t));
- ffebad_finish ();
- ffestb_local_.format.current = FFESTP_formattypeNone;
- p = strpbrk (ffelex_token_text (t), "0123456789");
- if (p == NULL)
- i = ffelex_token_length (t);
- else
- i = p - ffelex_token_text (t);
- }
- p = ffelex_token_text (t) + i;
- if (*p == '\0')
- return (ffelexHandler) ffestb_R10015_;
- if (! ISDIGIT (*p))
- {
- ffestb_local_.format.current = FFESTP_formattypeNone;
- p = strpbrk (p, "0123456789");
- if (p == NULL)
- return (ffelexHandler) ffestb_R10015_;
- i = p - ffelex_token_text (t); /* Collect digits anyway. */
- }
- ffestb_local_.format.post.present = TRUE;
- ffestb_local_.format.post.rtexpr = FALSE;
- ffestb_local_.format.post.t = ffelex_token_number_from_names (t, i);
- ffestb_local_.format.post.u.unsigned_val
- = strtoul (ffelex_token_text (ffestb_local_.format.post.t), NULL, 10);
- p += ffelex_token_length (ffestb_local_.format.post.t);
- i += ffelex_token_length (ffestb_local_.format.post.t);
- if (*p == '\0')
- return (ffelexHandler) ffestb_R10016_;
- ffesta_ffebad_1p (FFEBAD_FORMAT_TEXT_IN_NUMBER, t, i, NULL);
- return (ffelexHandler) ffestb_R10016_;
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FORMAT", t);
- if (ffestb_local_.format.pre.present)
- ffelex_token_kill (ffestb_local_.format.pre.t);
- ffestt_formatlist_kill (ffestb_local_.format.f);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R10015_ -- [[+/-] NUMBER] NAMES
-
- return ffestb_R10015_; // to lexer
-
- Here we've gotten at least the initial mnemonic for the edit descriptor.
- We expect either a NUMBER, for the post-mnemonic value, a NAMES, for
- further clarification (in free-form only, sigh) of the mnemonic, or
- anything else. In all cases we go to _6_, with the difference that for
- NUMBER and NAMES we send the next token rather than the current token. */
-
-static ffelexHandler
-ffestb_R10015_ (ffelexToken t)
-{
- bool split_pea; /* New NAMES requires splitting kP from new
- edit desc. */
- ffestrFormat kw;
- const char *p;
- ffeTokenLength i;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_ANGLE:
- ffesta_confirmed ();
- ffestb_local_.format.post.t = ffelex_token_use (t);
- ffelex_set_names_pure (FALSE);
- if (!ffesta_seen_first_exec && !ffestb_local_.format.complained)
- {
- ffestb_local_.format.complained = TRUE;
- ffebad_start (FFEBAD_FORMAT_EXPR_SPEC);
- ffebad_here (0, ffelex_token_where_line (t), ffelex_token_where_column (t));
- ffebad_finish ();
- }
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFORMAT, (ffeexprCallback) ffestb_R100116_);
-
- case FFELEX_typeNUMBER:
- ffestb_local_.format.post.present = TRUE;
- ffestb_local_.format.post.rtexpr = FALSE;
- ffestb_local_.format.post.t = ffelex_token_use (t);
- ffestb_local_.format.post.u.unsigned_val
- = strtoul (ffelex_token_text (t), NULL, 10);
- return (ffelexHandler) ffestb_R10016_;
-
- case FFELEX_typeNAMES:
- ffesta_confirmed (); /* NAMES " " NAMES invalid elsewhere in
- free-form. */
- kw = ffestr_format (t);
- switch (ffestb_local_.format.current)
- {
- case FFESTP_formattypeP:
- split_pea = TRUE;
- break;
-
- case FFESTP_formattypeH: /* An error, maintain this indicator. */
- kw = FFESTR_formatNone;
- split_pea = FALSE;
- break;
-
- default:
- split_pea = FALSE;
- break;
- }
-
- switch (kw)
- {
- case FFESTR_formatF:
- switch (ffestb_local_.format.current)
- {
- case FFESTP_formattypeP:
- ffestb_local_.format.current = FFESTP_formattypeF;
- break;
-
- default:
- ffestb_local_.format.current = FFESTP_formattypeNone;
- break;
- }
- i = FFESTR_formatlF;
- break;
-
- case FFESTR_formatE:
- switch (ffestb_local_.format.current)
- {
- case FFESTP_formattypeP:
- ffestb_local_.format.current = FFESTP_formattypeE;
- break;
-
- default:
- ffestb_local_.format.current = FFESTP_formattypeNone;
- break;
- }
- i = FFESTR_formatlE;
- break;
-
- case FFESTR_formatEN:
- switch (ffestb_local_.format.current)
- {
- case FFESTP_formattypeP:
- ffestb_local_.format.current = FFESTP_formattypeEN;
- break;
-
- default:
- ffestb_local_.format.current = FFESTP_formattypeNone;
- break;
- }
- i = FFESTR_formatlEN;
- break;
-
- case FFESTR_formatG:
- switch (ffestb_local_.format.current)
- {
- case FFESTP_formattypeP:
- ffestb_local_.format.current = FFESTP_formattypeG;
- break;
-
- default:
- ffestb_local_.format.current = FFESTP_formattypeNone;
- break;
- }
- i = FFESTR_formatlG;
- break;
-
- case FFESTR_formatL:
- switch (ffestb_local_.format.current)
- {
- case FFESTP_formattypeT:
- ffestb_local_.format.current = FFESTP_formattypeTL;
- break;
-
- default:
- ffestb_local_.format.current = FFESTP_formattypeNone;
- break;
- }
- i = FFESTR_formatlL;
- break;
-
- case FFESTR_formatD:
- switch (ffestb_local_.format.current)
- {
- case FFESTP_formattypeP:
- ffestb_local_.format.current = FFESTP_formattypeD;
- break;
-
- default:
- ffestb_local_.format.current = FFESTP_formattypeNone;
- break;
- }
- i = FFESTR_formatlD;
- break;
-
- case FFESTR_formatS:
- switch (ffestb_local_.format.current)
- {
- case FFESTP_formattypeS:
- ffestb_local_.format.current = FFESTP_formattypeSS;
- break;
-
- default:
- ffestb_local_.format.current = FFESTP_formattypeNone;
- break;
- }
- i = FFESTR_formatlS;
- break;
-
- case FFESTR_formatP:
- switch (ffestb_local_.format.current)
- {
- case FFESTP_formattypeS:
- ffestb_local_.format.current = FFESTP_formattypeSP;
- break;
-
- default:
- ffestb_local_.format.current = FFESTP_formattypeNone;
- break;
- }
- i = FFESTR_formatlP;
- break;
-
- case FFESTR_formatR:
- switch (ffestb_local_.format.current)
- {
- case FFESTP_formattypeT:
- ffestb_local_.format.current = FFESTP_formattypeTR;
- break;
-
- default:
- ffestb_local_.format.current = FFESTP_formattypeNone;
- break;
- }
- i = FFESTR_formatlR;
- break;
-
- case FFESTR_formatZ:
- switch (ffestb_local_.format.current)
- {
- case FFESTP_formattypeB:
- ffestb_local_.format.current = FFESTP_formattypeBZ;
- break;
-
- default:
- ffestb_local_.format.current = FFESTP_formattypeNone;
- break;
- }
- i = FFESTR_formatlZ;
- break;
-
- case FFESTR_formatN:
- switch (ffestb_local_.format.current)
- {
- case FFESTP_formattypeE:
- ffestb_local_.format.current = FFESTP_formattypeEN;
- break;
-
- case FFESTP_formattypeB:
- ffestb_local_.format.current = FFESTP_formattypeBN;
- break;
-
- default:
- ffestb_local_.format.current = FFESTP_formattypeNone;
- break;
- }
- i = FFESTR_formatlN;
- break;
-
- default:
- if (ffestb_local_.format.current != FFESTP_formattypeH)
- ffestb_local_.format.current = FFESTP_formattypeNone;
- split_pea = FALSE; /* Go ahead and let the P be in the party. */
- p = strpbrk (ffelex_token_text (t), "0123456789");
- if (p == NULL)
- i = ffelex_token_length (t);
- else
- i = p - ffelex_token_text (t);
- }
-
- if (split_pea)
- {
- ffestb_subr_R1001_append_p_ ();
- ffestb_local_.format.t = ffelex_token_use (t);
- ffestb_local_.format.sign = FALSE;
- ffestb_local_.format.pre.present = FALSE;
- ffestb_local_.format.pre.rtexpr = FALSE;
- ffestb_local_.format.pre.t = NULL;
- ffestb_local_.format.pre.u.unsigned_val = 1;
- }
-
- p = ffelex_token_text (t) + i;
- if (*p == '\0')
- return (ffelexHandler) ffestb_R10015_;
- if (! ISDIGIT (*p))
- {
- ffestb_local_.format.current = FFESTP_formattypeNone;
- p = strpbrk (p, "0123456789");
- if (p == NULL)
- return (ffelexHandler) ffestb_R10015_;
- i = p - ffelex_token_text (t); /* Collect digits anyway. */
- }
- ffestb_local_.format.post.present = TRUE;
- ffestb_local_.format.post.rtexpr = FALSE;
- ffestb_local_.format.post.t = ffelex_token_number_from_names (t, i);
- ffestb_local_.format.post.u.unsigned_val
- = strtoul (ffelex_token_text (ffestb_local_.format.post.t), NULL, 10);
- p += ffelex_token_length (ffestb_local_.format.post.t);
- i += ffelex_token_length (ffestb_local_.format.post.t);
- if (*p == '\0')
- return (ffelexHandler) ffestb_R10016_;
- ffesta_ffebad_1p (FFEBAD_FORMAT_TEXT_IN_NUMBER, t, i, NULL);
- return (ffelexHandler) ffestb_R10016_;
-
- default:
- ffestb_local_.format.post.present = FALSE;
- ffestb_local_.format.post.rtexpr = FALSE;
- ffestb_local_.format.post.t = NULL;
- ffestb_local_.format.post.u.unsigned_val = 1;
- return (ffelexHandler) ffestb_R10016_ (t);
- }
-}
-
-/* ffestb_R10016_ -- [[+/-] NUMBER] NAMES NUMBER
-
- return ffestb_R10016_; // to lexer
-
- Expect a PERIOD here. Maybe find a NUMBER to append to the current
- number, in which case return to this state. Maybe find a NAMES to switch
- from a kP descriptor to a new descriptor (else the NAMES is spurious),
- in which case generator the P item and go to state _4_. Anything
- else, pass token on to state _8_. */
-
-static ffelexHandler
-ffestb_R10016_ (ffelexToken t)
-{
- ffeTokenLength i;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typePERIOD:
- return (ffelexHandler) ffestb_R10017_;
-
- case FFELEX_typeNUMBER:
- assert (ffestb_local_.format.post.present);
- ffesta_confirmed ();
- if (ffestb_local_.format.post.rtexpr)
- {
- ffebad_start (FFEBAD_FORMAT_SPURIOUS_NUMBER);
- ffebad_here (0, ffelex_token_where_line (t), ffelex_token_where_column (t));
- ffebad_finish ();
- return (ffelexHandler) ffestb_R10016_;
- }
- for (i = ffelex_token_length (t) + 1; i > 0; --i)
- ffestb_local_.format.post.u.unsigned_val *= 10;
- ffestb_local_.format.post.u.unsigned_val += strtoul (ffelex_token_text (t),
- NULL, 10);
- return (ffelexHandler) ffestb_R10016_;
-
- case FFELEX_typeNAMES:
- ffesta_confirmed (); /* NUMBER " " NAMES invalid elsewhere. */
- if (ffestb_local_.format.current != FFESTP_formattypeP)
- {
- ffesta_ffebad_1t (FFEBAD_FORMAT_TEXT_IN_NUMBER, t);
- return (ffelexHandler) ffestb_R10016_;
- }
- ffestb_subr_R1001_append_p_ ();
- ffestb_local_.format.sign = FALSE;
- ffestb_local_.format.pre = ffestb_local_.format.post;
- return (ffelexHandler) ffestb_R10014_ (t);
-
- default:
- ffestb_local_.format.dot.present = FALSE;
- ffestb_local_.format.dot.rtexpr = FALSE;
- ffestb_local_.format.dot.t = NULL;
- ffestb_local_.format.dot.u.unsigned_val = 1;
- return (ffelexHandler) ffestb_R10018_ (t);
- }
-}
-
-/* ffestb_R10017_ -- [[+/-] NUMBER] NAMES NUMBER PERIOD
-
- return ffestb_R10017_; // to lexer
-
- Here we've gotten the period following the edit descriptor.
- We expect either a NUMBER, for the dot value, or something else, which
- probably means we're not even close to being in a real FORMAT statement. */
-
-static ffelexHandler
-ffestb_R10017_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_ANGLE:
- ffestb_local_.format.dot.t = ffelex_token_use (t);
- ffelex_set_names_pure (FALSE);
- if (!ffesta_seen_first_exec && !ffestb_local_.format.complained)
- {
- ffestb_local_.format.complained = TRUE;
- ffebad_start (FFEBAD_FORMAT_EXPR_SPEC);
- ffebad_here (0, ffelex_token_where_line (t), ffelex_token_where_column (t));
- ffebad_finish ();
- }
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFORMAT, (ffeexprCallback) ffestb_R100117_);
-
- case FFELEX_typeNUMBER:
- ffestb_local_.format.dot.present = TRUE;
- ffestb_local_.format.dot.rtexpr = FALSE;
- ffestb_local_.format.dot.t = ffelex_token_use (t);
- ffestb_local_.format.dot.u.unsigned_val
- = strtoul (ffelex_token_text (t), NULL, 10);
- return (ffelexHandler) ffestb_R10018_;
-
- default:
- ffelex_token_kill (ffestb_local_.format.t);
- if (ffestb_local_.format.pre.present)
- ffelex_token_kill (ffestb_local_.format.pre.t);
- if (ffestb_local_.format.post.present)
- ffelex_token_kill (ffestb_local_.format.post.t);
- ffesta_ffebad_1t (FFEBAD_FORMAT_MISSING_DOT, t);
- ffestt_formatlist_kill (ffestb_local_.format.f);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero);
- }
-}
-
-/* ffestb_R10018_ -- [[+/-] NUMBER] NAMES NUMBER PERIOD NUMBER
-
- return ffestb_R10018_; // to lexer
-
- Expect a NAMES here, which must begin with "E" to be valid. Maybe find a
- NUMBER to append to the current number, in which case return to this state.
- Anything else, pass token on to state _10_. */
-
-static ffelexHandler
-ffestb_R10018_ (ffelexToken t)
-{
- ffeTokenLength i;
- const char *p;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNUMBER:
- assert (ffestb_local_.format.dot.present);
- ffesta_confirmed ();
- if (ffestb_local_.format.dot.rtexpr)
- {
- ffebad_start (FFEBAD_FORMAT_SPURIOUS_NUMBER);
- ffebad_here (0, ffelex_token_where_line (t), ffelex_token_where_column (t));
- ffebad_finish ();
- return (ffelexHandler) ffestb_R10018_;
- }
- for (i = ffelex_token_length (t) + 1; i > 0; --i)
- ffestb_local_.format.dot.u.unsigned_val *= 10;
- ffestb_local_.format.dot.u.unsigned_val += strtoul (ffelex_token_text (t),
- NULL, 10);
- return (ffelexHandler) ffestb_R10018_;
-
- case FFELEX_typeNAMES:
- if (!ffesrc_char_match_init (*(p = ffelex_token_text (t)), 'E', 'e'))
- {
- ffesta_ffebad_1t (FFEBAD_FORMAT_TEXT_IN_NUMBER, t);
- return (ffelexHandler) ffestb_R10018_;
- }
- if (*++p == '\0')
- return (ffelexHandler) ffestb_R10019_; /* Go get NUMBER. */
- i = 1;
- if (! ISDIGIT (*p))
- {
- ffesta_ffebad_1p (FFEBAD_FORMAT_TEXT_IN_NUMBER, t, 1, NULL);
- return (ffelexHandler) ffestb_R10018_;
- }
- ffestb_local_.format.exp.present = TRUE;
- ffestb_local_.format.exp.rtexpr = FALSE;
- ffestb_local_.format.exp.t = ffelex_token_number_from_names (t, i);
- ffestb_local_.format.exp.u.unsigned_val
- = strtoul (ffelex_token_text (ffestb_local_.format.exp.t), NULL, 10);
- p += ffelex_token_length (ffestb_local_.format.exp.t);
- i += ffelex_token_length (ffestb_local_.format.exp.t);
- if (*p == '\0')
- return (ffelexHandler) ffestb_R100110_;
- ffesta_ffebad_1p (FFEBAD_FORMAT_TEXT_IN_NUMBER, t, i, NULL);
- return (ffelexHandler) ffestb_R100110_;
-
- default:
- ffestb_local_.format.exp.present = FALSE;
- ffestb_local_.format.exp.rtexpr = FALSE;
- ffestb_local_.format.exp.t = NULL;
- ffestb_local_.format.exp.u.unsigned_val = 1;
- return (ffelexHandler) ffestb_R100110_ (t);
- }
-}
-
-/* ffestb_R10019_ -- [[+/-] NUMBER] NAMES NUMBER PERIOD NUMBER "E"
-
- return ffestb_R10019_; // to lexer
-
- Here we've gotten the "E" following the edit descriptor.
- We expect either a NUMBER, for the exponent value, or something else. */
-
-static ffelexHandler
-ffestb_R10019_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_ANGLE:
- ffestb_local_.format.exp.t = ffelex_token_use (t);
- ffelex_set_names_pure (FALSE);
- if (!ffesta_seen_first_exec && !ffestb_local_.format.complained)
- {
- ffestb_local_.format.complained = TRUE;
- ffebad_start (FFEBAD_FORMAT_EXPR_SPEC);
- ffebad_here (0, ffelex_token_where_line (t), ffelex_token_where_column (t));
- ffebad_finish ();
- }
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFORMAT, (ffeexprCallback) ffestb_R100118_);
-
- case FFELEX_typeNUMBER:
- ffestb_local_.format.exp.present = TRUE;
- ffestb_local_.format.exp.rtexpr = FALSE;
- ffestb_local_.format.exp.t = ffelex_token_use (t);
- ffestb_local_.format.exp.u.unsigned_val
- = strtoul (ffelex_token_text (t), NULL, 10);
- return (ffelexHandler) ffestb_R100110_;
-
- default:
- ffelex_token_kill (ffestb_local_.format.t);
- if (ffestb_local_.format.pre.present)
- ffelex_token_kill (ffestb_local_.format.pre.t);
- if (ffestb_local_.format.post.present)
- ffelex_token_kill (ffestb_local_.format.post.t);
- if (ffestb_local_.format.dot.present)
- ffelex_token_kill (ffestb_local_.format.dot.t);
- ffesta_ffebad_1t (FFEBAD_FORMAT_MISSING_EXP, t);
- ffestt_formatlist_kill (ffestb_local_.format.f);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero);
- }
-}
-
-/* ffestb_R100110_ -- [[+/-] NUMBER] NAMES NUMBER [PERIOD NUMBER ["E" NUMBER]]
-
- return ffestb_R100110_; // to lexer
-
- Maybe find a NUMBER to append to the current number, in which case return
- to this state. Anything else, handle current descriptor, then pass token
- on to state _10_. */
-
-static ffelexHandler
-ffestb_R100110_ (ffelexToken t)
-{
- ffeTokenLength i;
- enum expect
- {
- required,
- optional,
- disallowed
- };
- ffebad err;
- enum expect pre;
- enum expect post;
- enum expect dot;
- enum expect exp;
- bool R1005;
- ffesttFormatList f;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNUMBER:
- assert (ffestb_local_.format.exp.present);
- ffesta_confirmed ();
- if (ffestb_local_.format.exp.rtexpr)
- {
- ffebad_start (FFEBAD_FORMAT_SPURIOUS_NUMBER);
- ffebad_here (0, ffelex_token_where_line (t), ffelex_token_where_column (t));
- ffebad_finish ();
- return (ffelexHandler) ffestb_R100110_;
- }
- for (i = ffelex_token_length (t) + 1; i > 0; --i)
- ffestb_local_.format.exp.u.unsigned_val *= 10;
- ffestb_local_.format.exp.u.unsigned_val += strtoul (ffelex_token_text (t),
- NULL, 10);
- return (ffelexHandler) ffestb_R100110_;
-
- default:
- if (ffestb_local_.format.sign
- && (ffestb_local_.format.current != FFESTP_formattypeP)
- && (ffestb_local_.format.current != FFESTP_formattypeH))
- {
- ffebad_start (FFEBAD_FORMAT_SPURIOUS_SIGN);
- ffebad_here (0, ffelex_token_where_line (ffestb_local_.format.pre.t),
- ffelex_token_where_column (ffestb_local_.format.pre.t));
- ffebad_finish ();
- ffestb_local_.format.pre.u.unsigned_val
- = (ffestb_local_.format.pre.u.signed_val < 0)
- ? -ffestb_local_.format.pre.u.signed_val
- : ffestb_local_.format.pre.u.signed_val;
- }
- switch (ffestb_local_.format.current)
- {
- case FFESTP_formattypeI:
- err = FFEBAD_FORMAT_BAD_I_SPEC;
- pre = optional;
- post = required;
- dot = optional;
- exp = disallowed;
- R1005 = TRUE;
- break;
-
- case FFESTP_formattypeB:
- err = FFEBAD_FORMAT_BAD_B_SPEC;
- pre = optional;
- post = required;
- dot = optional;
- exp = disallowed;
- R1005 = TRUE;
- break;
-
- case FFESTP_formattypeO:
- err = FFEBAD_FORMAT_BAD_O_SPEC;
- pre = optional;
- post = required;
- dot = optional;
- exp = disallowed;
- R1005 = TRUE;
- break;
-
- case FFESTP_formattypeZ:
- err = FFEBAD_FORMAT_BAD_Z_SPEC;
- pre = optional;
- post = required;
- dot = optional;
- exp = disallowed;
- R1005 = TRUE;
- break;
-
- case FFESTP_formattypeF:
- err = FFEBAD_FORMAT_BAD_F_SPEC;
- pre = optional;
- post = required;
- dot = required;
- exp = disallowed;
- R1005 = TRUE;
- break;
-
- case FFESTP_formattypeE:
- err = FFEBAD_FORMAT_BAD_E_SPEC;
- pre = optional;
- post = required;
- dot = required;
- exp = optional;
- R1005 = TRUE;
- break;
-
- case FFESTP_formattypeEN:
- err = FFEBAD_FORMAT_BAD_EN_SPEC;
- pre = optional;
- post = required;
- dot = required;
- exp = optional;
- R1005 = TRUE;
- break;
-
- case FFESTP_formattypeG:
- err = FFEBAD_FORMAT_BAD_G_SPEC;
- pre = optional;
- post = required;
- dot = required;
- exp = optional;
- R1005 = TRUE;
- break;
-
- case FFESTP_formattypeL:
- err = FFEBAD_FORMAT_BAD_L_SPEC;
- pre = optional;
- post = required;
- dot = disallowed;
- exp = disallowed;
- R1005 = TRUE;
- break;
-
- case FFESTP_formattypeA:
- err = FFEBAD_FORMAT_BAD_A_SPEC;
- pre = optional;
- post = optional;
- dot = disallowed;
- exp = disallowed;
- R1005 = TRUE;
- break;
-
- case FFESTP_formattypeD:
- err = FFEBAD_FORMAT_BAD_D_SPEC;
- pre = optional;
- post = required;
- dot = required;
- exp = disallowed;
- R1005 = TRUE;
- break;
-
- case FFESTP_formattypeQ:
- err = FFEBAD_FORMAT_BAD_Q_SPEC;
- pre = disallowed;
- post = disallowed;
- dot = disallowed;
- exp = disallowed;
- R1005 = FALSE;
- break;
-
- case FFESTP_formattypeDOLLAR:
- err = FFEBAD_FORMAT_BAD_DOLLAR_SPEC;
- pre = disallowed;
- post = disallowed;
- dot = disallowed;
- exp = disallowed;
- R1005 = FALSE;
- break;
-
- case FFESTP_formattypeP:
- err = FFEBAD_FORMAT_BAD_P_SPEC;
- pre = required;
- post = disallowed;
- dot = disallowed;
- exp = disallowed;
- R1005 = FALSE;
- break;
-
- case FFESTP_formattypeT:
- err = FFEBAD_FORMAT_BAD_T_SPEC;
- pre = disallowed;
- post = required;
- dot = disallowed;
- exp = disallowed;
- R1005 = FALSE;
- break;
-
- case FFESTP_formattypeTL:
- err = FFEBAD_FORMAT_BAD_TL_SPEC;
- pre = disallowed;
- post = required;
- dot = disallowed;
- exp = disallowed;
- R1005 = FALSE;
- break;
-
- case FFESTP_formattypeTR:
- err = FFEBAD_FORMAT_BAD_TR_SPEC;
- pre = disallowed;
- post = required;
- dot = disallowed;
- exp = disallowed;
- R1005 = FALSE;
- break;
-
- case FFESTP_formattypeX:
- err = FFEBAD_FORMAT_BAD_X_SPEC;
- pre = ffe_is_pedantic() ? required : optional;
- post = disallowed;
- dot = disallowed;
- exp = disallowed;
- R1005 = FALSE;
- break;
-
- case FFESTP_formattypeS:
- err = FFEBAD_FORMAT_BAD_S_SPEC;
- pre = disallowed;
- post = disallowed;
- dot = disallowed;
- exp = disallowed;
- R1005 = FALSE;
- break;
-
- case FFESTP_formattypeSP:
- err = FFEBAD_FORMAT_BAD_SP_SPEC;
- pre = disallowed;
- post = disallowed;
- dot = disallowed;
- exp = disallowed;
- R1005 = FALSE;
- break;
-
- case FFESTP_formattypeSS:
- err = FFEBAD_FORMAT_BAD_SS_SPEC;
- pre = disallowed;
- post = disallowed;
- dot = disallowed;
- exp = disallowed;
- R1005 = FALSE;
- break;
-
- case FFESTP_formattypeBN:
- err = FFEBAD_FORMAT_BAD_BN_SPEC;
- pre = disallowed;
- post = disallowed;
- dot = disallowed;
- exp = disallowed;
- R1005 = FALSE;
- break;
-
- case FFESTP_formattypeBZ:
- err = FFEBAD_FORMAT_BAD_BZ_SPEC;
- pre = disallowed;
- post = disallowed;
- dot = disallowed;
- exp = disallowed;
- R1005 = FALSE;
- break;
-
- case FFESTP_formattypeH: /* Definitely an error, make sure of
- it. */
- err = FFEBAD_FORMAT_BAD_H_SPEC;
- pre = ffestb_local_.format.pre.present ? disallowed : required;
- post = disallowed;
- dot = disallowed;
- exp = disallowed;
- R1005 = FALSE;
- break;
-
- case FFESTP_formattypeNone:
- ffesta_ffebad_1t (FFEBAD_FORMAT_BAD_SPEC,
- ffestb_local_.format.t);
-
- clean_up_to_11_: /* :::::::::::::::::::: */
-
- ffelex_token_kill (ffestb_local_.format.t);
- if (ffestb_local_.format.pre.present)
- ffelex_token_kill (ffestb_local_.format.pre.t);
- if (ffestb_local_.format.post.present)
- ffelex_token_kill (ffestb_local_.format.post.t);
- if (ffestb_local_.format.dot.present)
- ffelex_token_kill (ffestb_local_.format.dot.t);
- if (ffestb_local_.format.exp.present)
- ffelex_token_kill (ffestb_local_.format.exp.t);
- return (ffelexHandler) ffestb_R100111_ (t);
-
- default:
- assert ("bad format item" == NULL);
- err = FFEBAD_FORMAT_BAD_H_SPEC;
- pre = disallowed;
- post = disallowed;
- dot = disallowed;
- exp = disallowed;
- R1005 = FALSE;
- break;
- }
- if (((pre == disallowed) && ffestb_local_.format.pre.present)
- || ((pre == required) && !ffestb_local_.format.pre.present))
- {
- ffesta_ffebad_1t (err, (pre == required)
- ? ffestb_local_.format.t : ffestb_local_.format.pre.t);
- goto clean_up_to_11_; /* :::::::::::::::::::: */
- }
- if (((post == disallowed) && ffestb_local_.format.post.present)
- || ((post == required) && !ffestb_local_.format.post.present))
- {
- ffesta_ffebad_1t (err, (post == required)
- ? ffestb_local_.format.t : ffestb_local_.format.post.t);
- goto clean_up_to_11_; /* :::::::::::::::::::: */
- }
- if (((dot == disallowed) && ffestb_local_.format.dot.present)
- || ((dot == required) && !ffestb_local_.format.dot.present))
- {
- ffesta_ffebad_1t (err, (dot == required)
- ? ffestb_local_.format.t : ffestb_local_.format.dot.t);
- goto clean_up_to_11_; /* :::::::::::::::::::: */
- }
- if (((exp == disallowed) && ffestb_local_.format.exp.present)
- || ((exp == required) && !ffestb_local_.format.exp.present))
- {
- ffesta_ffebad_1t (err, (exp == required)
- ? ffestb_local_.format.t : ffestb_local_.format.exp.t);
- goto clean_up_to_11_; /* :::::::::::::::::::: */
- }
- f = ffestt_formatlist_append (ffestb_local_.format.f);
- f->type = ffestb_local_.format.current;
- f->t = ffestb_local_.format.t;
- if (R1005)
- {
- f->u.R1005.R1004 = ffestb_local_.format.pre;
- f->u.R1005.R1006 = ffestb_local_.format.post;
- f->u.R1005.R1007_or_R1008 = ffestb_local_.format.dot;
- f->u.R1005.R1009 = ffestb_local_.format.exp;
- }
- else
- /* Must be R1010. */
- {
- if (pre == disallowed)
- f->u.R1010.val = ffestb_local_.format.post;
- else
- f->u.R1010.val = ffestb_local_.format.pre;
- }
- return (ffelexHandler) ffestb_R100111_ (t);
- }
-}
-
-/* ffestb_R100111_ -- edit-descriptor
-
- return ffestb_R100111_; // to lexer
-
- Expect a COMMA, CLOSE_PAREN, CLOSE_ARRAY, COLON, COLONCOLON, SLASH, or
- CONCAT, or complain about missing comma. */
-
-static ffelexHandler
-ffestb_R100111_ (ffelexToken t)
-{
- ffesttFormatList f;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- return (ffelexHandler) ffestb_R10012_;
-
- case FFELEX_typeCOLON:
- case FFELEX_typeCOLONCOLON:
- case FFELEX_typeSLASH:
- case FFELEX_typeCONCAT:
- return (ffelexHandler) ffestb_R10012_ (t);
-
- case FFELEX_typeCLOSE_PAREN:
- f = ffestb_local_.format.f->u.root.parent;
- if (f == NULL)
- return (ffelexHandler) ffestb_R100114_;
- ffestb_local_.format.f = f->next;
- return (ffelexHandler) ffestb_R100111_;
-
- case FFELEX_typeCLOSE_ARRAY: /* "/)". */
- f = ffestt_formatlist_append (ffestb_local_.format.f);
- f->type = FFESTP_formattypeSLASH;
- f->t = ffelex_token_use (t);
- f->u.R1010.val.present = FALSE;
- f->u.R1010.val.rtexpr = FALSE;
- f->u.R1010.val.t = NULL;
- f->u.R1010.val.u.unsigned_val = 1;
- f = ffestb_local_.format.f->u.root.parent;
- if (f == NULL)
- return (ffelexHandler) ffestb_R100114_;
- ffestb_local_.format.f = f->next;
- return (ffelexHandler) ffestb_R100111_;
-
- case FFELEX_typeOPEN_ANGLE:
- case FFELEX_typeDOLLAR:
- case FFELEX_typeNUMBER:
- case FFELEX_typeOPEN_PAREN:
- case FFELEX_typeOPEN_ARRAY:
- case FFELEX_typeQUOTE:
- case FFELEX_typeAPOSTROPHE:
- case FFELEX_typeNAMES:
- ffesta_ffebad_1t (FFEBAD_FORMAT_MISSING_COMMA, t);
- return (ffelexHandler) ffestb_R10012_ (t);
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- ffesta_ffebad_1t (FFEBAD_FORMAT_MISSING_PAREN, t);
- for (f = ffestb_local_.format.f;
- f->u.root.parent != NULL;
- f = f->u.root.parent->next)
- ;
- ffestb_local_.format.f = f;
- return (ffelexHandler) ffestb_R100114_ (t);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FORMAT", t);
- ffestt_formatlist_kill (ffestb_local_.format.f);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero);
- }
-}
-
-/* ffestb_R100112_ -- COLON, COLONCOLON, SLASH, OPEN_ARRAY, or CONCAT
-
- return ffestb_R100112_; // to lexer
-
- Like _11_ except the COMMA is optional. */
-
-static ffelexHandler
-ffestb_R100112_ (ffelexToken t)
-{
- ffesttFormatList f;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- return (ffelexHandler) ffestb_R10012_;
-
- case FFELEX_typeCOLON:
- case FFELEX_typeCOLONCOLON:
- case FFELEX_typeSLASH:
- case FFELEX_typeCONCAT:
- case FFELEX_typeOPEN_ANGLE:
- case FFELEX_typeNAMES:
- case FFELEX_typeDOLLAR:
- case FFELEX_typeNUMBER:
- case FFELEX_typeOPEN_PAREN:
- case FFELEX_typeOPEN_ARRAY:
- case FFELEX_typeQUOTE:
- case FFELEX_typeAPOSTROPHE:
- case FFELEX_typePLUS:
- case FFELEX_typeMINUS:
- return (ffelexHandler) ffestb_R10012_ (t);
-
- case FFELEX_typeCLOSE_PAREN:
- f = ffestb_local_.format.f->u.root.parent;
- if (f == NULL)
- return (ffelexHandler) ffestb_R100114_;
- ffestb_local_.format.f = f->next;
- return (ffelexHandler) ffestb_R100111_;
-
- case FFELEX_typeCLOSE_ARRAY: /* "/)". */
- f = ffestt_formatlist_append (ffestb_local_.format.f);
- f->type = FFESTP_formattypeSLASH;
- f->t = ffelex_token_use (t);
- f->u.R1010.val.present = FALSE;
- f->u.R1010.val.rtexpr = FALSE;
- f->u.R1010.val.t = NULL;
- f->u.R1010.val.u.unsigned_val = 1;
- f = ffestb_local_.format.f->u.root.parent;
- if (f == NULL)
- return (ffelexHandler) ffestb_R100114_;
- ffestb_local_.format.f = f->next;
- return (ffelexHandler) ffestb_R100111_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- ffesta_ffebad_1t (FFEBAD_FORMAT_MISSING_PAREN, t);
- for (f = ffestb_local_.format.f;
- f->u.root.parent != NULL;
- f = f->u.root.parent->next)
- ;
- ffestb_local_.format.f = f;
- return (ffelexHandler) ffestb_R100114_ (t);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FORMAT", t);
- ffestt_formatlist_kill (ffestb_local_.format.f);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero);
- }
-}
-
-/* ffestb_R100113_ -- Handle CHARACTER token.
-
- return ffestb_R100113_; // to lexer
-
- Append the format item to the list, go to _11_. */
-
-static ffelexHandler
-ffestb_R100113_ (ffelexToken t)
-{
- ffesttFormatList f;
-
- assert (ffelex_token_type (t) == FFELEX_typeCHARACTER);
-
- if (ffe_is_pedantic_not_90 () && (ffelex_token_length (t) == 0))
- {
- ffebad_start (FFEBAD_NULL_CHAR_CONST);
- ffebad_here (0, ffelex_token_where_line (t),
- ffelex_token_where_column (t));
- ffebad_finish ();
- }
-
- f = ffestt_formatlist_append (ffestb_local_.format.f);
- f->type = FFESTP_formattypeR1016;
- f->t = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R100111_;
-}
-
-/* ffestb_R100114_ -- "FORMAT" OPEN_PAREN format-item-list CLOSE_PAREN
-
- return ffestb_R100114_; // to lexer
-
- Handle EOS/SEMICOLON or something else. */
-
-static ffelexHandler
-ffestb_R100114_ (ffelexToken t)
-{
- ffelex_set_names_pure (FALSE);
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited () && !ffestb_local_.format.complained)
- ffestc_R1001 (ffestb_local_.format.f);
- ffestt_formatlist_kill (ffestb_local_.format.f);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FORMAT", t);
- ffestt_formatlist_kill (ffestb_local_.format.f);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero);
- }
-}
-
-/* ffestb_R100115_ -- OPEN_ANGLE expr
-
- (ffestb_R100115_) // to expression handler
-
- Handle expression prior to the edit descriptor. */
-
-static ffelexHandler
-ffestb_R100115_ (ffelexToken ft UNUSED, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_ANGLE:
- ffestb_local_.format.pre.present = TRUE;
- ffestb_local_.format.pre.rtexpr = TRUE;
- ffestb_local_.format.pre.u.expr = expr;
- ffelex_set_names_pure (TRUE);
- return (ffelexHandler) ffestb_R10014_;
-
- default:
- ffelex_token_kill (ffestb_local_.format.pre.t);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FORMAT", t);
- ffestt_formatlist_kill (ffestb_local_.format.f);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero);
- }
-}
-
-/* ffestb_R100116_ -- "[n]X" OPEN_ANGLE expr
-
- (ffestb_R100116_) // to expression handler
-
- Handle expression after the edit descriptor. */
-
-static ffelexHandler
-ffestb_R100116_ (ffelexToken ft UNUSED, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_ANGLE:
- ffestb_local_.format.post.present = TRUE;
- ffestb_local_.format.post.rtexpr = TRUE;
- ffestb_local_.format.post.u.expr = expr;
- ffelex_set_names_pure (TRUE);
- return (ffelexHandler) ffestb_R10016_;
-
- default:
- ffelex_token_kill (ffestb_local_.format.t);
- ffelex_token_kill (ffestb_local_.format.post.t);
- if (ffestb_local_.format.pre.present)
- ffelex_token_kill (ffestb_local_.format.pre.t);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FORMAT", t);
- ffestt_formatlist_kill (ffestb_local_.format.f);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero);
- }
-}
-
-/* ffestb_R100117_ -- "[n]X[n]." OPEN_ANGLE expr
-
- (ffestb_R100117_) // to expression handler
-
- Handle expression after the PERIOD. */
-
-static ffelexHandler
-ffestb_R100117_ (ffelexToken ft UNUSED, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_ANGLE:
- ffestb_local_.format.dot.present = TRUE;
- ffestb_local_.format.dot.rtexpr = TRUE;
- ffestb_local_.format.dot.u.expr = expr;
- ffelex_set_names_pure (TRUE);
- return (ffelexHandler) ffestb_R10018_;
-
- default:
- ffelex_token_kill (ffestb_local_.format.t);
- ffelex_token_kill (ffestb_local_.format.dot.t);
- if (ffestb_local_.format.pre.present)
- ffelex_token_kill (ffestb_local_.format.pre.t);
- if (ffestb_local_.format.post.present)
- ffelex_token_kill (ffestb_local_.format.post.t);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FORMAT", t);
- ffestt_formatlist_kill (ffestb_local_.format.f);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero);
- }
-}
-
-/* ffestb_R100118_ -- "[n]X[n].[n]E" OPEN_ANGLE expr
-
- (ffestb_R100118_) // to expression handler
-
- Handle expression after the "E". */
-
-static ffelexHandler
-ffestb_R100118_ (ffelexToken ft UNUSED, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_ANGLE:
- ffestb_local_.format.exp.present = TRUE;
- ffestb_local_.format.exp.rtexpr = TRUE;
- ffestb_local_.format.exp.u.expr = expr;
- ffelex_set_names_pure (TRUE);
- return (ffelexHandler) ffestb_R100110_;
-
- default:
- ffelex_token_kill (ffestb_local_.format.t);
- ffelex_token_kill (ffestb_local_.format.exp.t);
- if (ffestb_local_.format.pre.present)
- ffelex_token_kill (ffestb_local_.format.pre.t);
- if (ffestb_local_.format.post.present)
- ffelex_token_kill (ffestb_local_.format.post.t);
- if (ffestb_local_.format.dot.present)
- ffelex_token_kill (ffestb_local_.format.dot.t);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FORMAT", t);
- ffestt_formatlist_kill (ffestb_local_.format.f);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero);
- }
-}
-
-/* ffestb_S3P4 -- Parse the INCLUDE line
-
- return ffestb_S3P4; // to lexer
-
- Make sure the statement has a valid form for the INCLUDE line. If it
- does, implement the statement. */
-
-ffelexHandler
-ffestb_S3P4 (ffelexToken t)
-{
- ffeTokenLength i;
- const char *p;
- ffelexHandler next;
- ffelexToken nt;
- ffelexToken ut;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstINCLUDE)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNUMBER:
- case FFELEX_typeAPOSTROPHE:
- case FFELEX_typeQUOTE:
- break;
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
- ffesta_confirmed ();
- return (ffelexHandler) (*((ffelexHandler)
- ffeexpr_rhs (ffesta_output_pool, FFEEXPR_contextINCLUDE,
- (ffeexprCallback) ffestb_S3P41_)))
- (t);
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstINCLUDE)
- goto bad_0; /* :::::::::::::::::::: */
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlINCLUDE);
- switch (ffelex_token_type (t))
- {
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeAPOSTROPHE:
- case FFELEX_typeQUOTE:
- break;
- }
- ffesta_confirmed ();
- if (*p == '\0')
- return (ffelexHandler) (*((ffelexHandler)
- ffeexpr_rhs (ffesta_output_pool, FFEEXPR_contextINCLUDE,
- (ffeexprCallback) ffestb_S3P41_)))
- (t);
- if (! ISDIGIT (*p))
- goto bad_i; /* :::::::::::::::::::: */
- nt = ffelex_token_number_from_names (ffesta_tokens[0], i);
- p += ffelex_token_length (nt);
- i += ffelex_token_length (nt);
- if ((*p != '_') || (++i, *++p != '\0'))
- {
- ffelex_token_kill (nt);
- goto bad_i; /* :::::::::::::::::::: */
- }
- ut = ffelex_token_uscore_from_names (ffesta_tokens[0], i - 1);
- next = (ffelexHandler) (*((ffelexHandler) ffeexpr_rhs
- (ffesta_output_pool, FFEEXPR_contextINCLUDE,
- (ffeexprCallback) ffestb_S3P41_)))
- (nt);
- ffelex_token_kill (nt);
- next = (ffelexHandler) (*next) (ut);
- ffelex_token_kill (ut);
- return (ffelexHandler) (*next) (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "INCLUDE", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "INCLUDE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "INCLUDE", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_S3P41_ -- "INCLUDE" [NUMBER "_"] expr
-
- (ffestb_S3P41_) // to expression handler
-
- Make sure the next token is an EOS, but not a SEMICOLON. */
-
-static ffelexHandler
-ffestb_S3P41_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- {
- if (ffe_is_pedantic ()
- && ((ffelex_token_type (t) == FFELEX_typeSEMICOLON)
- || ffesta_line_has_semicolons))
- {
- /* xgettext:no-c-format */
- ffebad_start_msg ("INCLUDE at %0 not the only statement on the source line", FFEBAD_severityWARNING);
- ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
- ffelex_token_where_column (ffesta_tokens[0]));
- ffebad_finish ();
- }
- ffestc_S3P4 (expr, ft);
- }
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "INCLUDE", t);
- break;
- }
-
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_V014 -- Parse the VOLATILE statement
-
- return ffestb_V014; // to lexer
-
- Make sure the statement has a valid form for the VOLATILE statement. If it
- does, implement the statement. */
-
-ffelexHandler
-ffestb_V014 (ffelexToken t)
-{
- ffeTokenLength i;
- unsigned const char *p;
- ffelexToken nt;
- ffelexHandler next;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstVOLATILE)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNAME:
- case FFELEX_typeSLASH:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_V014_start ();
- return (ffelexHandler) ffestb_V0141_ (t);
-
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_V014_start ();
- return (ffelexHandler) ffestb_V0141_;
- }
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstVOLATILE)
- goto bad_0; /* :::::::::::::::::::: */
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlVOLATILE);
- switch (ffelex_token_type (t))
- {
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeCOMMA:
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- break;
-
- case FFELEX_typeSLASH:
- ffesta_confirmed ();
- if (*p != '\0')
- goto bad_i; /* :::::::::::::::::::: */
- if (!ffesta_is_inhibited ())
- ffestc_V014_start ();
- return (ffelexHandler) ffestb_V0141_ (t);
-
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed ();
- if (*p != '\0')
- goto bad_i; /* :::::::::::::::::::: */
- if (!ffesta_is_inhibited ())
- ffestc_V014_start ();
- return (ffelexHandler) ffestb_V0141_;
- }
-
- /* Here, we have at least one char after "VOLATILE" and t is COMMA or
- EOS/SEMICOLON. */
-
- if (!ffesrc_is_name_init (*p))
- goto bad_i; /* :::::::::::::::::::: */
- nt = ffelex_token_name_from_names (ffesta_tokens[0], i, 0);
- if (!ffesta_is_inhibited ())
- ffestc_V014_start ();
- next = (ffelexHandler) ffestb_V0141_ (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "VOLATILE", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "VOLATILE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "VOLATILE", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_V0141_ -- "VOLATILE" [COLONCOLON]
-
- return ffestb_V0141_; // to lexer
-
- Handle NAME or SLASH. */
-
-static ffelexHandler
-ffestb_V0141_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffestb_local_.V014.is_cblock = FALSE;
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_V0144_;
-
- case FFELEX_typeSLASH:
- ffestb_local_.V014.is_cblock = TRUE;
- return (ffelexHandler) ffestb_V0142_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "VOLATILE", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_V014_finish ();
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_V0142_ -- "VOLATILE" [COLONCOLON] SLASH
-
- return ffestb_V0142_; // to lexer
-
- Handle NAME. */
-
-static ffelexHandler
-ffestb_V0142_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_V0143_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "VOLATILE", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_V014_finish ();
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_V0143_ -- "VOLATILE" [COLONCOLON] SLASH NAME
-
- return ffestb_V0143_; // to lexer
-
- Handle SLASH. */
-
-static ffelexHandler
-ffestb_V0143_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeSLASH:
- return (ffelexHandler) ffestb_V0144_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "VOLATILE", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_V014_finish ();
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_V0144_ -- "VOLATILE" [COLONCOLON] R523
-
- return ffestb_V0144_; // to lexer
-
- Handle COMMA or EOS/SEMICOLON. */
-
-static ffelexHandler
-ffestb_V0144_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (!ffesta_is_inhibited ())
- {
- if (ffestb_local_.V014.is_cblock)
- ffestc_V014_item_cblock (ffesta_tokens[1]);
- else
- ffestc_V014_item_object (ffesta_tokens[1]);
- }
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffestb_V0141_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (!ffesta_is_inhibited ())
- {
- if (ffestb_local_.V014.is_cblock)
- ffestc_V014_item_cblock (ffesta_tokens[1]);
- else
- ffestc_V014_item_object (ffesta_tokens[1]);
- ffestc_V014_finish ();
- }
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "VOLATILE", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_V014_finish ();
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_subr_kill_easy_ -- Kill I/O statement data structure
-
- ffestb_subr_kill_easy_();
-
- Kills all tokens in the I/O data structure. Assumes that they are
- overlaid with each other (union) in ffest_private.h and the typing
- and structure references assume (though not necessarily dangerous if
- FALSE) that INQUIRE has the most file elements. */
-
-#if FFESTB_KILL_EASY_
-static void
-ffestb_subr_kill_easy_ (ffestpInquireIx max)
-{
- ffestpInquireIx ix;
-
- for (ix = 0; ix < max; ++ix)
- {
- if (ffestp_file.inquire.inquire_spec[ix].kw_or_val_present)
- {
- if (ffestp_file.inquire.inquire_spec[ix].kw_present)
- ffelex_token_kill (ffestp_file.inquire.inquire_spec[ix].kw);
- if (ffestp_file.inquire.inquire_spec[ix].value_present)
- ffelex_token_kill (ffestp_file.inquire.inquire_spec[ix].value);
- }
- }
-}
-
-#endif
-/* ffestb_subr_kill_accept_ -- Kill ACCEPT statement data structure
-
- ffestb_subr_kill_accept_();
-
- Kills all tokens in the ACCEPT data structure. */
-
-#if !FFESTB_KILL_EASY_
-static void
-ffestb_subr_kill_accept_ (void)
-{
- ffestpAcceptIx ix;
-
- for (ix = 0; ix < FFESTP_acceptix; ++ix)
- {
- if (ffestp_file.accept.accept_spec[ix].kw_or_val_present)
- {
- if (ffestp_file.accept.accept_spec[ix].kw_present)
- ffelex_token_kill (ffestp_file.accept.accept_spec[ix].kw);
- if (ffestp_file.accept.accept_spec[ix].value_present)
- ffelex_token_kill (ffestp_file.accept.accept_spec[ix].value);
- }
- }
-}
-
-#endif
-/* ffestb_subr_kill_beru_ -- Kill BACKSPACE/ENDFILE/REWIND/UNLOCK statement
- data structure
-
- ffestb_subr_kill_beru_();
-
- Kills all tokens in the BACKSPACE/ENDFILE/REWIND/UNLOCK data structure. */
-
-#if !FFESTB_KILL_EASY_
-static void
-ffestb_subr_kill_beru_ (void)
-{
- ffestpBeruIx ix;
-
- for (ix = 0; ix < FFESTP_beruix; ++ix)
- {
- if (ffestp_file.beru.beru_spec[ix].kw_or_val_present)
- {
- if (ffestp_file.beru.beru_spec[ix].kw_present)
- ffelex_token_kill (ffestp_file.beru.beru_spec[ix].kw);
- if (ffestp_file.beru.beru_spec[ix].value_present)
- ffelex_token_kill (ffestp_file.beru.beru_spec[ix].value);
- }
- }
-}
-
-#endif
-/* ffestb_subr_kill_close_ -- Kill CLOSE statement data structure
-
- ffestb_subr_kill_close_();
-
- Kills all tokens in the CLOSE data structure. */
-
-#if !FFESTB_KILL_EASY_
-static void
-ffestb_subr_kill_close_ (void)
-{
- ffestpCloseIx ix;
-
- for (ix = 0; ix < FFESTP_closeix; ++ix)
- {
- if (ffestp_file.close.close_spec[ix].kw_or_val_present)
- {
- if (ffestp_file.close.close_spec[ix].kw_present)
- ffelex_token_kill (ffestp_file.close.close_spec[ix].kw);
- if (ffestp_file.close.close_spec[ix].value_present)
- ffelex_token_kill (ffestp_file.close.close_spec[ix].value);
- }
- }
-}
-
-#endif
-/* ffestb_subr_kill_delete_ -- Kill DELETE statement data structure
-
- ffestb_subr_kill_delete_();
-
- Kills all tokens in the DELETE data structure. */
-
-#if !FFESTB_KILL_EASY_
-static void
-ffestb_subr_kill_delete_ (void)
-{
- ffestpDeleteIx ix;
-
- for (ix = 0; ix < FFESTP_deleteix; ++ix)
- {
- if (ffestp_file.delete.delete_spec[ix].kw_or_val_present)
- {
- if (ffestp_file.delete.delete_spec[ix].kw_present)
- ffelex_token_kill (ffestp_file.delete.delete_spec[ix].kw);
- if (ffestp_file.delete.delete_spec[ix].value_present)
- ffelex_token_kill (ffestp_file.delete.delete_spec[ix].value);
- }
- }
-}
-
-#endif
-/* ffestb_subr_kill_inquire_ -- Kill INQUIRE statement data structure
-
- ffestb_subr_kill_inquire_();
-
- Kills all tokens in the INQUIRE data structure. */
-
-#if !FFESTB_KILL_EASY_
-static void
-ffestb_subr_kill_inquire_ (void)
-{
- ffestpInquireIx ix;
-
- for (ix = 0; ix < FFESTP_inquireix; ++ix)
- {
- if (ffestp_file.inquire.inquire_spec[ix].kw_or_val_present)
- {
- if (ffestp_file.inquire.inquire_spec[ix].kw_present)
- ffelex_token_kill (ffestp_file.inquire.inquire_spec[ix].kw);
- if (ffestp_file.inquire.inquire_spec[ix].value_present)
- ffelex_token_kill (ffestp_file.inquire.inquire_spec[ix].value);
- }
- }
-}
-
-#endif
-/* ffestb_subr_kill_open_ -- Kill OPEN statement data structure
-
- ffestb_subr_kill_open_();
-
- Kills all tokens in the OPEN data structure. */
-
-#if !FFESTB_KILL_EASY_
-static void
-ffestb_subr_kill_open_ (void)
-{
- ffestpOpenIx ix;
-
- for (ix = 0; ix < FFESTP_openix; ++ix)
- {
- if (ffestp_file.open.open_spec[ix].kw_or_val_present)
- {
- if (ffestp_file.open.open_spec[ix].kw_present)
- ffelex_token_kill (ffestp_file.open.open_spec[ix].kw);
- if (ffestp_file.open.open_spec[ix].value_present)
- ffelex_token_kill (ffestp_file.open.open_spec[ix].value);
- }
- }
-}
-
-#endif
-/* ffestb_subr_kill_print_ -- Kill PRINT statement data structure
-
- ffestb_subr_kill_print_();
-
- Kills all tokens in the PRINT data structure. */
-
-#if !FFESTB_KILL_EASY_
-static void
-ffestb_subr_kill_print_ (void)
-{
- ffestpPrintIx ix;
-
- for (ix = 0; ix < FFESTP_printix; ++ix)
- {
- if (ffestp_file.print.print_spec[ix].kw_or_val_present)
- {
- if (ffestp_file.print.print_spec[ix].kw_present)
- ffelex_token_kill (ffestp_file.print.print_spec[ix].kw);
- if (ffestp_file.print.print_spec[ix].value_present)
- ffelex_token_kill (ffestp_file.print.print_spec[ix].value);
- }
- }
-}
-
-#endif
-/* ffestb_subr_kill_read_ -- Kill READ statement data structure
-
- ffestb_subr_kill_read_();
-
- Kills all tokens in the READ data structure. */
-
-#if !FFESTB_KILL_EASY_
-static void
-ffestb_subr_kill_read_ (void)
-{
- ffestpReadIx ix;
-
- for (ix = 0; ix < FFESTP_readix; ++ix)
- {
- if (ffestp_file.read.read_spec[ix].kw_or_val_present)
- {
- if (ffestp_file.read.read_spec[ix].kw_present)
- ffelex_token_kill (ffestp_file.read.read_spec[ix].kw);
- if (ffestp_file.read.read_spec[ix].value_present)
- ffelex_token_kill (ffestp_file.read.read_spec[ix].value);
- }
- }
-}
-
-#endif
-/* ffestb_subr_kill_rewrite_ -- Kill REWRITE statement data structure
-
- ffestb_subr_kill_rewrite_();
-
- Kills all tokens in the REWRITE data structure. */
-
-#if !FFESTB_KILL_EASY_
-static void
-ffestb_subr_kill_rewrite_ (void)
-{
- ffestpRewriteIx ix;
-
- for (ix = 0; ix < FFESTP_rewriteix; ++ix)
- {
- if (ffestp_file.rewrite.rewrite_spec[ix].kw_or_val_present)
- {
- if (ffestp_file.rewrite.rewrite_spec[ix].kw_present)
- ffelex_token_kill (ffestp_file.rewrite.rewrite_spec[ix].kw);
- if (ffestp_file.rewrite.rewrite_spec[ix].value_present)
- ffelex_token_kill (ffestp_file.rewrite.rewrite_spec[ix].value);
- }
- }
-}
-
-#endif
-/* ffestb_subr_kill_type_ -- Kill TYPE statement data structure
-
- ffestb_subr_kill_type_();
-
- Kills all tokens in the TYPE data structure. */
-
-#if !FFESTB_KILL_EASY_
-static void
-ffestb_subr_kill_type_ (void)
-{
- ffestpTypeIx ix;
-
- for (ix = 0; ix < FFESTP_typeix; ++ix)
- {
- if (ffestp_file.type.type_spec[ix].kw_or_val_present)
- {
- if (ffestp_file.type.type_spec[ix].kw_present)
- ffelex_token_kill (ffestp_file.type.type_spec[ix].kw);
- if (ffestp_file.type.type_spec[ix].value_present)
- ffelex_token_kill (ffestp_file.type.type_spec[ix].value);
- }
- }
-}
-
-#endif
-/* ffestb_subr_kill_write_ -- Kill WRITE statement data structure
-
- ffestb_subr_kill_write_();
-
- Kills all tokens in the WRITE data structure. */
-
-#if !FFESTB_KILL_EASY_
-static void
-ffestb_subr_kill_write_ (void)
-{
- ffestpWriteIx ix;
-
- for (ix = 0; ix < FFESTP_writeix; ++ix)
- {
- if (ffestp_file.write.write_spec[ix].kw_or_val_present)
- {
- if (ffestp_file.write.write_spec[ix].kw_present)
- ffelex_token_kill (ffestp_file.write.write_spec[ix].kw);
- if (ffestp_file.write.write_spec[ix].value_present)
- ffelex_token_kill (ffestp_file.write.write_spec[ix].value);
- }
- }
-}
-
-#endif
-/* ffestb_beru -- Parse the BACKSPACE/ENDFILE/REWIND/UNLOCK statement
-
- return ffestb_beru; // to lexer
-
- Make sure the statement has a valid form for the BACKSPACE/ENDFILE/REWIND/
- UNLOCK statement. If it does, implement the statement. */
-
-ffelexHandler
-ffestb_beru (ffelexToken t)
-{
- ffelexHandler next;
- ffestpBeruIx ix;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEQUALS:
- case FFELEX_typePOINTS:
- case FFELEX_typeCOLON:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNAME:
- case FFELEX_typeNUMBER:
- ffesta_confirmed ();
- break;
-
- case FFELEX_typeOPEN_PAREN:
- for (ix = 0; ix < FFESTP_beruix; ++ix)
- ffestp_file.beru.beru_spec[ix].kw_or_val_present = FALSE;
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_beru2_;
-
- default:
- break;
- }
-
- for (ix = 0; ix < FFESTP_beruix; ++ix)
- ffestp_file.beru.beru_spec[ix].kw_or_val_present = FALSE;
- return (ffelexHandler) (*((ffelexHandler)
- ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILENUM,
- (ffeexprCallback) ffestb_beru1_)))
- (t);
-
- case FFELEX_typeNAMES:
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEQUALS:
- case FFELEX_typePOINTS:
- case FFELEX_typeCOLON:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- break;
-
- case FFELEX_typeOPEN_PAREN:
- if (ffelex_token_length (ffesta_tokens[0])
- != ffestb_args.beru.len)
- break;
-
- for (ix = 0; ix < FFESTP_beruix; ++ix)
- ffestp_file.beru.beru_spec[ix].kw_or_val_present = FALSE;
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_beru2_;
-
- default:
- break;
- }
- for (ix = 0; ix < FFESTP_beruix; ++ix)
- ffestp_file.beru.beru_spec[ix].kw_or_val_present = FALSE;
- next = (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILENUM, (ffeexprCallback) ffestb_beru1_);
- next = (ffelexHandler) ffelex_splice_tokens (next, ffesta_tokens[0],
- ffestb_args.beru.len);
- if (next == NULL)
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero);
- return (ffelexHandler) (*next) (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.beru.badname, ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.beru.badname, t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-}
-
-/* ffestb_beru1_ -- "BACKSPACE/ENDFILE/REWIND/UNLOCK" expr
-
- (ffestb_beru1_) // to expression handler
-
- Make sure the next token is an EOS or SEMICOLON. */
-
-static ffelexHandler
-ffestb_beru1_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (expr == NULL)
- break;
- ffesta_confirmed ();
- ffestp_file.beru.beru_spec[FFESTP_beruixUNIT].kw_or_val_present
- = TRUE;
- ffestp_file.beru.beru_spec[FFESTP_beruixUNIT].kw_present = FALSE;
- ffestp_file.beru.beru_spec[FFESTP_beruixUNIT].value_present = TRUE;
- ffestp_file.beru.beru_spec[FFESTP_beruixUNIT].value_is_label
- = FALSE;
- ffestp_file.beru.beru_spec[FFESTP_beruixUNIT].value
- = ffelex_token_use (ft);
- ffestp_file.beru.beru_spec[FFESTP_beruixUNIT].u.expr = expr;
- if (!ffesta_is_inhibited ())
- {
- switch (ffesta_first_kw)
- {
- case FFESTR_firstBACKSPACE:
- ffestc_R919 ();
- break;
-
- case FFESTR_firstENDFILE:
- case FFESTR_firstEND:
- ffestc_R920 ();
- break;
-
- case FFESTR_firstREWIND:
- ffestc_R921 ();
- break;
-
- default:
- assert (FALSE);
- }
- }
- ffestb_subr_kill_beru_ ();
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffestb_subr_kill_beru_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.beru.badname, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_beru2_ -- "BACKSPACE/ENDFILE/REWIND/UNLOCK" OPEN_PAREN
-
- return ffestb_beru2_; // to lexer
-
- Handle expr construct (not NAME=expr construct) here. */
-
-static ffelexHandler
-ffestb_beru2_ (ffelexToken t)
-{
- ffelexToken nt;
- ffelexHandler next;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[2] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_beru3_;
-
- default:
- nt = ffesta_tokens[1];
- next = (ffelexHandler) (*((ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILENUMAMBIG, (ffeexprCallback) ffestb_beru4_)))
- (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
- }
-}
-
-/* ffestb_beru3_ -- "BACKSPACE/ENDFILE/REWIND/UNLOCK" OPEN_PAREN NAME
-
- return ffestb_beru3_; // to lexer
-
- If EQUALS here, go to states that handle it. Else, send NAME and this
- token thru expression handler. */
-
-static ffelexHandler
-ffestb_beru3_ (ffelexToken t)
-{
- ffelexHandler next;
- ffelexToken nt;
- ffelexToken ot;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- ffelex_token_kill (ffesta_tokens[1]);
- nt = ffesta_tokens[2];
- next = (ffelexHandler) ffestb_beru5_ (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
-
- default:
- nt = ffesta_tokens[1];
- ot = ffesta_tokens[2];
- next = (ffelexHandler) (*((ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILENUMAMBIG, (ffeexprCallback) ffestb_beru4_)))
- (nt);
- ffelex_token_kill (nt);
- next = (ffelexHandler) (*next) (ot);
- ffelex_token_kill (ot);
- return (ffelexHandler) (*next) (t);
- }
-}
-
-/* ffestb_beru4_ -- "BACKSPACE/ENDFILE/REWIND/UNLOCK" OPEN_PAREN expr [CLOSE_PAREN]
-
- (ffestb_beru4_) // to expression handler
-
- Handle COMMA or EOS/SEMICOLON here.
-
- 15-Feb-91 JCB 1.2
- Now using new mechanism whereby expr comes back as opITEM if the
- expr is considered part (or all) of an I/O control list (and should
- be stripped of its outer opITEM node) or not if it is considered
- a plain unit number that happens to have been enclosed in parens.
- 26-Mar-90 JCB 1.1
- No longer expecting close-paren here because of constructs like
- BACKSPACE (5)+2, so now expecting either COMMA because it was a
- construct like BACKSPACE (5+2,... or EOS/SEMICOLON because it is like
- the former construct. Ah, the vagaries of Fortran. */
-
-static ffelexHandler
-ffestb_beru4_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- bool inlist;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- break;
- if (ffebld_op (expr) == FFEBLD_opITEM)
- {
- inlist = TRUE;
- expr = ffebld_head (expr);
- }
- else
- inlist = FALSE;
- ffestp_file.beru.beru_spec[FFESTP_beruixUNIT].kw_or_val_present
- = TRUE;
- ffestp_file.beru.beru_spec[FFESTP_beruixUNIT].kw_present = FALSE;
- ffestp_file.beru.beru_spec[FFESTP_beruixUNIT].value_present = TRUE;
- ffestp_file.beru.beru_spec[FFESTP_beruixUNIT].value_is_label
- = FALSE;
- ffestp_file.beru.beru_spec[FFESTP_beruixUNIT].value
- = ffelex_token_use (ft);
- ffestp_file.beru.beru_spec[FFESTP_beruixUNIT].u.expr = expr;
- if (inlist)
- return (ffelexHandler) ffestb_beru9_ (t);
- return (ffelexHandler) ffestb_beru10_ (t);
-
- default:
- break;
- }
-
- ffestb_subr_kill_beru_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.beru.badname, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_beru5_ -- "BACKSPACE/ENDFILE/REWIND/UNLOCK" OPEN_PAREN [external-file-unit
- COMMA]
-
- return ffestb_beru5_; // to lexer
-
- Handle expr construct (not NAME=expr construct) here. */
-
-static ffelexHandler
-ffestb_beru5_ (ffelexToken t)
-{
- ffestrGenio kw;
-
- ffestb_local_.beru.label = FALSE;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- kw = ffestr_genio (t);
- switch (kw)
- {
- case FFESTR_genioERR:
- ffestb_local_.beru.ix = FFESTP_beruixERR;
- ffestb_local_.beru.label = TRUE;
- break;
-
- case FFESTR_genioIOSTAT:
- ffestb_local_.beru.ix = FFESTP_beruixIOSTAT;
- ffestb_local_.beru.left = TRUE;
- ffestb_local_.beru.context = FFEEXPR_contextFILEINT;
- break;
-
- case FFESTR_genioUNIT:
- ffestb_local_.beru.ix = FFESTP_beruixUNIT;
- ffestb_local_.beru.left = FALSE;
- ffestb_local_.beru.context = FFEEXPR_contextFILENUM;
- break;
-
- default:
- goto bad; /* :::::::::::::::::::: */
- }
- if (ffestp_file.beru.beru_spec[ffestb_local_.beru.ix]
- .kw_or_val_present)
- break; /* Can't specify a keyword twice! */
- ffestp_file.beru.beru_spec[ffestb_local_.beru.ix]
- .kw_or_val_present = TRUE;
- ffestp_file.beru.beru_spec[ffestb_local_.beru.ix]
- .kw_present = TRUE;
- ffestp_file.beru.beru_spec[ffestb_local_.beru.ix]
- .value_present = FALSE;
- ffestp_file.beru.beru_spec[ffestb_local_.beru.ix].value_is_label
- = ffestb_local_.beru.label;
- ffestp_file.beru.beru_spec[ffestb_local_.beru.ix].kw
- = ffelex_token_use (t);
- return (ffelexHandler) ffestb_beru6_;
-
- default:
- break;
- }
-
-bad: /* :::::::::::::::::::: */
- ffestb_subr_kill_beru_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.beru.badname, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_beru6_ -- "BACKSPACE/ENDFILE/REWIND/UNLOCK" OPEN_PAREN [external-file-unit
- COMMA] NAME
-
- return ffestb_beru6_; // to lexer
-
- Make sure EQUALS here, send next token to expression handler. */
-
-static ffelexHandler
-ffestb_beru6_ (ffelexToken t)
-{
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- ffesta_confirmed ();
- if (ffestb_local_.beru.label)
- return (ffelexHandler) ffestb_beru8_;
- if (ffestb_local_.beru.left)
- return (ffelexHandler) ffeexpr_lhs (ffesta_output_pool,
- ffestb_local_.beru.context,
- (ffeexprCallback) ffestb_beru7_);
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- ffestb_local_.beru.context,
- (ffeexprCallback) ffestb_beru7_);
-
- default:
- break;
- }
-
- ffestb_subr_kill_beru_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.beru.badname, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_beru7_ -- "BACKSPACE/ENDFILE/REWIND/UNLOCK" OPEN_PAREN ... NAME EQUALS expr
-
- (ffestb_beru7_) // to expression handler
-
- Handle COMMA or CLOSE_PAREN here. */
-
-static ffelexHandler
-ffestb_beru7_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- break;
- ffestp_file.beru.beru_spec[ffestb_local_.beru.ix].value_present
- = TRUE;
- ffestp_file.beru.beru_spec[ffestb_local_.beru.ix].value
- = ffelex_token_use (ft);
- ffestp_file.beru.beru_spec[ffestb_local_.beru.ix].u.expr = expr;
- if (ffelex_token_type (t) == FFELEX_typeCOMMA)
- return (ffelexHandler) ffestb_beru5_;
- return (ffelexHandler) ffestb_beru10_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_beru_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.beru.badname, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_beru8_ -- "BACKSPACE/ENDFILE/REWIND/UNLOCK" OPEN_PAREN ... NAME EQUALS
-
- return ffestb_beru8_; // to lexer
-
- Handle NUMBER for label here. */
-
-static ffelexHandler
-ffestb_beru8_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNUMBER:
- ffestp_file.beru.beru_spec[ffestb_local_.beru.ix].value_present
- = TRUE;
- ffestp_file.beru.beru_spec[ffestb_local_.beru.ix].value
- = ffelex_token_use (t);
- return (ffelexHandler) ffestb_beru9_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_beru_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.beru.badname, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_beru9_ -- "BACKSPACE/ENDFILE/REWIND/UNLOCK" OPEN_PAREN ... NAME EQUALS
- NUMBER
-
- return ffestb_beru9_; // to lexer
-
- Handle COMMA or CLOSE_PAREN here. */
-
-static ffelexHandler
-ffestb_beru9_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- return (ffelexHandler) ffestb_beru5_;
-
- case FFELEX_typeCLOSE_PAREN:
- return (ffelexHandler) ffestb_beru10_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_beru_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.beru.badname, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_beru10_ -- "BACKSPACE/ENDFILE/REWIND/UNLOCK" OPEN_PAREN ... CLOSE_PAREN
-
- return ffestb_beru10_; // to lexer
-
- Handle EOS or SEMICOLON here. */
-
-static ffelexHandler
-ffestb_beru10_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- {
- switch (ffesta_first_kw)
- {
- case FFESTR_firstBACKSPACE:
- ffestc_R919 ();
- break;
-
- case FFESTR_firstENDFILE:
- case FFESTR_firstEND:
- ffestc_R920 ();
- break;
-
- case FFESTR_firstREWIND:
- ffestc_R921 ();
- break;
-
- default:
- assert (FALSE);
- }
- }
- ffestb_subr_kill_beru_ ();
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffestb_subr_kill_beru_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.beru.badname, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R904 -- Parse an OPEN statement
-
- return ffestb_R904; // to lexer
-
- Make sure the statement has a valid form for an OPEN statement.
- If it does, implement the statement. */
-
-ffelexHandler
-ffestb_R904 (ffelexToken t)
-{
- ffestpOpenIx ix;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstOPEN)
- goto bad_0; /* :::::::::::::::::::: */
- break;
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstOPEN)
- goto bad_0; /* :::::::::::::::::::: */
- if (ffelex_token_length (ffesta_tokens[0]) != FFESTR_firstlOPEN)
- goto bad_0; /* :::::::::::::::::::: */
- break;
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_PAREN:
- break;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
-
- for (ix = 0; ix < FFESTP_openix; ++ix)
- ffestp_file.open.open_spec[ix].kw_or_val_present = FALSE;
-
- return (ffelexHandler) ffestb_R9041_;
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "OPEN", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "OPEN", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-}
-
-/* ffestb_R9041_ -- "OPEN" OPEN_PAREN
-
- return ffestb_R9041_; // to lexer
-
- Handle expr construct (not NAME=expr construct) here. */
-
-static ffelexHandler
-ffestb_R9041_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R9042_;
-
- default:
- return (ffelexHandler) (*((ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILENUM, (ffeexprCallback) ffestb_R9043_)))
- (t);
- }
-}
-
-/* ffestb_R9042_ -- "OPEN" OPEN_PAREN NAME
-
- return ffestb_R9042_; // to lexer
-
- If EQUALS here, go to states that handle it. Else, send NAME and this
- token thru expression handler. */
-
-static ffelexHandler
-ffestb_R9042_ (ffelexToken t)
-{
- ffelexHandler next;
- ffelexToken nt;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- nt = ffesta_tokens[1];
- next = (ffelexHandler) ffestb_R9044_ (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
-
- default:
- next = (ffelexHandler) (*((ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILENUM, (ffeexprCallback) ffestb_R9043_)))
- (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) (*next) (t);
- }
-}
-
-/* ffestb_R9043_ -- "OPEN" OPEN_PAREN expr
-
- (ffestb_R9043_) // to expression handler
-
- Handle COMMA or CLOSE_PAREN here. */
-
-static ffelexHandler
-ffestb_R9043_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- break;
- ffestp_file.open.open_spec[FFESTP_openixUNIT].kw_or_val_present
- = TRUE;
- ffestp_file.open.open_spec[FFESTP_openixUNIT].kw_present = FALSE;
- ffestp_file.open.open_spec[FFESTP_openixUNIT].value_present = TRUE;
- ffestp_file.open.open_spec[FFESTP_openixUNIT].value_is_label
- = FALSE;
- ffestp_file.open.open_spec[FFESTP_openixUNIT].value
- = ffelex_token_use (ft);
- ffestp_file.open.open_spec[FFESTP_openixUNIT].u.expr = expr;
- if (ffelex_token_type (t) == FFELEX_typeCOMMA)
- return (ffelexHandler) ffestb_R9044_;
- return (ffelexHandler) ffestb_R9049_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_open_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "OPEN", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9044_ -- "OPEN" OPEN_PAREN [external-file-unit COMMA]
-
- return ffestb_R9044_; // to lexer
-
- Handle expr construct (not NAME=expr construct) here. */
-
-static ffelexHandler
-ffestb_R9044_ (ffelexToken t)
-{
- ffestrOpen kw;
-
- ffestb_local_.open.label = FALSE;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- kw = ffestr_open (t);
- switch (kw)
- {
- case FFESTR_openACCESS:
- ffestb_local_.open.ix = FFESTP_openixACCESS;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_openACTION:
- ffestb_local_.open.ix = FFESTP_openixACTION;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_openASSOCIATEVARIABLE:
- ffestb_local_.open.ix = FFESTP_openixASSOCIATEVARIABLE;
- ffestb_local_.open.left = TRUE;
- ffestb_local_.open.context = FFEEXPR_contextFILEASSOC;
- break;
-
- case FFESTR_openBLANK:
- ffestb_local_.open.ix = FFESTP_openixBLANK;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_openBLOCKSIZE:
- ffestb_local_.open.ix = FFESTP_openixBLOCKSIZE;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILENUM;
- break;
-
- case FFESTR_openBUFFERCOUNT:
- ffestb_local_.open.ix = FFESTP_openixBUFFERCOUNT;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILENUM;
- break;
-
- case FFESTR_openCARRIAGECONTROL:
- ffestb_local_.open.ix = FFESTP_openixCARRIAGECONTROL;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILECHAR;
- break;
-
- case FFESTR_openDEFAULTFILE:
- ffestb_local_.open.ix = FFESTP_openixDEFAULTFILE;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILECHAR;
- break;
-
- case FFESTR_openDELIM:
- ffestb_local_.open.ix = FFESTP_openixDELIM;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_openDISP:
- case FFESTR_openDISPOSE:
- ffestb_local_.open.ix = FFESTP_openixDISPOSE;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILECHAR;
- break;
-
- case FFESTR_openERR:
- ffestb_local_.open.ix = FFESTP_openixERR;
- ffestb_local_.open.label = TRUE;
- break;
-
- case FFESTR_openEXTENDSIZE:
- ffestb_local_.open.ix = FFESTP_openixEXTENDSIZE;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILENUM;
- break;
-
- case FFESTR_openFILE:
- case FFESTR_openNAME:
- ffestb_local_.open.ix = FFESTP_openixFILE;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILECHAR;
- break;
-
- case FFESTR_openFORM:
- ffestb_local_.open.ix = FFESTP_openixFORM;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_openINITIALSIZE:
- ffestb_local_.open.ix = FFESTP_openixINITIALSIZE;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILENUM;
- break;
-
- case FFESTR_openIOSTAT:
- ffestb_local_.open.ix = FFESTP_openixIOSTAT;
- ffestb_local_.open.left = TRUE;
- ffestb_local_.open.context = FFEEXPR_contextFILEINT;
- break;
-
-#if 0 /* Haven't added support for expression
- context yet (though easy). */
- case FFESTR_openKEY:
- ffestb_local_.open.ix = FFESTP_openixKEY;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILEKEY;
- break;
-#endif
-
- case FFESTR_openMAXREC:
- ffestb_local_.open.ix = FFESTP_openixMAXREC;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILENUM;
- break;
-
- case FFESTR_openNOSPANBLOCKS:
- if (ffestp_file.open.open_spec[FFESTP_openixNOSPANBLOCKS]
- .kw_or_val_present)
- goto bad; /* :::::::::::::::::::: */
- ffestp_file.open.open_spec[FFESTP_openixNOSPANBLOCKS]
- .kw_or_val_present = TRUE;
- ffestp_file.open.open_spec[FFESTP_openixNOSPANBLOCKS]
- .kw_present = TRUE;
- ffestp_file.open.open_spec[FFESTP_openixNOSPANBLOCKS]
- .value_present = FALSE;
- ffestp_file.open.open_spec[FFESTP_openixNOSPANBLOCKS].kw
- = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R9048_;
-
- case FFESTR_openORGANIZATION:
- ffestb_local_.open.ix = FFESTP_openixORGANIZATION;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILECHAR;
- break;
-
- case FFESTR_openPAD:
- ffestb_local_.open.ix = FFESTP_openixPAD;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_openPOSITION:
- ffestb_local_.open.ix = FFESTP_openixPOSITION;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_openREADONLY:
- if (ffestp_file.open.open_spec[FFESTP_openixREADONLY]
- .kw_or_val_present)
- goto bad; /* :::::::::::::::::::: */
- ffestp_file.open.open_spec[FFESTP_openixREADONLY]
- .kw_or_val_present = TRUE;
- ffestp_file.open.open_spec[FFESTP_openixREADONLY]
- .kw_present = TRUE;
- ffestp_file.open.open_spec[FFESTP_openixREADONLY]
- .value_present = FALSE;
- ffestp_file.open.open_spec[FFESTP_openixREADONLY].kw
- = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R9048_;
-
- case FFESTR_openRECL:
- case FFESTR_openRECORDSIZE:
- ffestb_local_.open.ix = FFESTP_openixRECL;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILENUM;
- break;
-
- case FFESTR_openRECORDTYPE:
- ffestb_local_.open.ix = FFESTP_openixRECORDTYPE;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILECHAR;
- break;
-
- case FFESTR_openSHARED:
- if (ffestp_file.open.open_spec[FFESTP_openixSHARED]
- .kw_or_val_present)
- goto bad; /* :::::::::::::::::::: */
- ffestp_file.open.open_spec[FFESTP_openixSHARED]
- .kw_or_val_present = TRUE;
- ffestp_file.open.open_spec[FFESTP_openixSHARED]
- .kw_present = TRUE;
- ffestp_file.open.open_spec[FFESTP_openixSHARED]
- .value_present = FALSE;
- ffestp_file.open.open_spec[FFESTP_openixSHARED].kw
- = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R9048_;
-
- case FFESTR_openSTATUS:
- case FFESTR_openTYPE:
- ffestb_local_.open.ix = FFESTP_openixSTATUS;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_openUNIT:
- ffestb_local_.open.ix = FFESTP_openixUNIT;
- ffestb_local_.open.left = FALSE;
- ffestb_local_.open.context = FFEEXPR_contextFILENUM;
- break;
-
- case FFESTR_openUSEROPEN:
- ffestb_local_.open.ix = FFESTP_openixUSEROPEN;
- ffestb_local_.open.left = TRUE;
- ffestb_local_.open.context = FFEEXPR_contextFILEEXTFUNC;
- break;
-
- default:
- goto bad; /* :::::::::::::::::::: */
- }
- if (ffestp_file.open.open_spec[ffestb_local_.open.ix]
- .kw_or_val_present)
- break; /* Can't specify a keyword twice! */
- ffestp_file.open.open_spec[ffestb_local_.open.ix]
- .kw_or_val_present = TRUE;
- ffestp_file.open.open_spec[ffestb_local_.open.ix]
- .kw_present = TRUE;
- ffestp_file.open.open_spec[ffestb_local_.open.ix]
- .value_present = FALSE;
- ffestp_file.open.open_spec[ffestb_local_.open.ix].value_is_label
- = ffestb_local_.open.label;
- ffestp_file.open.open_spec[ffestb_local_.open.ix].kw
- = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R9045_;
-
- default:
- break;
- }
-
-bad: /* :::::::::::::::::::: */
- ffestb_subr_kill_open_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "OPEN", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9045_ -- "OPEN" OPEN_PAREN [external-file-unit COMMA] NAME
-
- return ffestb_R9045_; // to lexer
-
- Make sure EQUALS here, send next token to expression handler. */
-
-static ffelexHandler
-ffestb_R9045_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- ffesta_confirmed ();
- if (ffestb_local_.open.label)
- return (ffelexHandler) ffestb_R9047_;
- if (ffestb_local_.open.left)
- return (ffelexHandler) ffeexpr_lhs (ffesta_output_pool,
- ffestb_local_.open.context,
- (ffeexprCallback) ffestb_R9046_);
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- ffestb_local_.open.context,
- (ffeexprCallback) ffestb_R9046_);
-
- default:
- break;
- }
-
- ffestb_subr_kill_open_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "OPEN", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9046_ -- "OPEN" OPEN_PAREN ... NAME EQUALS expr
-
- (ffestb_R9046_) // to expression handler
-
- Handle COMMA or CLOSE_PAREN here. */
-
-static ffelexHandler
-ffestb_R9046_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- break;
- ffestp_file.open.open_spec[ffestb_local_.open.ix].value_present
- = TRUE;
- ffestp_file.open.open_spec[ffestb_local_.open.ix].value
- = ffelex_token_use (ft);
- ffestp_file.open.open_spec[ffestb_local_.open.ix].u.expr = expr;
- if (ffelex_token_type (t) == FFELEX_typeCOMMA)
- return (ffelexHandler) ffestb_R9044_;
- return (ffelexHandler) ffestb_R9049_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_open_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "OPEN", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9047_ -- "OPEN" OPEN_PAREN ... NAME EQUALS
-
- return ffestb_R9047_; // to lexer
-
- Handle NUMBER for label here. */
-
-static ffelexHandler
-ffestb_R9047_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNUMBER:
- ffestp_file.open.open_spec[ffestb_local_.open.ix].value_present
- = TRUE;
- ffestp_file.open.open_spec[ffestb_local_.open.ix].value
- = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R9048_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_open_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "OPEN", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9048_ -- "OPEN" OPEN_PAREN ... NAME EQUALS NUMBER
-
- return ffestb_R9048_; // to lexer
-
- Handle COMMA or CLOSE_PAREN here. */
-
-static ffelexHandler
-ffestb_R9048_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- return (ffelexHandler) ffestb_R9044_;
-
- case FFELEX_typeCLOSE_PAREN:
- return (ffelexHandler) ffestb_R9049_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_open_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "OPEN", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9049_ -- "OPEN" OPEN_PAREN ... CLOSE_PAREN
-
- return ffestb_R9049_; // to lexer
-
- Handle EOS or SEMICOLON here. */
-
-static ffelexHandler
-ffestb_R9049_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R904 ();
- ffestb_subr_kill_open_ ();
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffestb_subr_kill_open_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "OPEN", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R907 -- Parse a CLOSE statement
-
- return ffestb_R907; // to lexer
-
- Make sure the statement has a valid form for a CLOSE statement.
- If it does, implement the statement. */
-
-ffelexHandler
-ffestb_R907 (ffelexToken t)
-{
- ffestpCloseIx ix;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstCLOSE)
- goto bad_0; /* :::::::::::::::::::: */
- break;
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstCLOSE)
- goto bad_0; /* :::::::::::::::::::: */
- if (ffelex_token_length (ffesta_tokens[0]) != FFESTR_firstlCLOSE)
- goto bad_0; /* :::::::::::::::::::: */
- break;
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_PAREN:
- break;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
-
- for (ix = 0; ix < FFESTP_closeix; ++ix)
- ffestp_file.close.close_spec[ix].kw_or_val_present = FALSE;
-
- return (ffelexHandler) ffestb_R9071_;
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CLOSE", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CLOSE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-}
-
-/* ffestb_R9071_ -- "CLOSE" OPEN_PAREN
-
- return ffestb_R9071_; // to lexer
-
- Handle expr construct (not NAME=expr construct) here. */
-
-static ffelexHandler
-ffestb_R9071_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R9072_;
-
- default:
- return (ffelexHandler) (*((ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILENUM, (ffeexprCallback) ffestb_R9073_)))
- (t);
- }
-}
-
-/* ffestb_R9072_ -- "CLOSE" OPEN_PAREN NAME
-
- return ffestb_R9072_; // to lexer
-
- If EQUALS here, go to states that handle it. Else, send NAME and this
- token thru expression handler. */
-
-static ffelexHandler
-ffestb_R9072_ (ffelexToken t)
-{
- ffelexHandler next;
- ffelexToken nt;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- nt = ffesta_tokens[1];
- next = (ffelexHandler) ffestb_R9074_ (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
-
- default:
- next = (ffelexHandler) (*((ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILENUM, (ffeexprCallback) ffestb_R9073_)))
- (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) (*next) (t);
- }
-}
-
-/* ffestb_R9073_ -- "CLOSE" OPEN_PAREN expr
-
- (ffestb_R9073_) // to expression handler
-
- Handle COMMA or CLOSE_PAREN here. */
-
-static ffelexHandler
-ffestb_R9073_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- break;
- ffestp_file.close.close_spec[FFESTP_closeixUNIT].kw_or_val_present
- = TRUE;
- ffestp_file.close.close_spec[FFESTP_closeixUNIT].kw_present = FALSE;
- ffestp_file.close.close_spec[FFESTP_closeixUNIT].value_present = TRUE;
- ffestp_file.close.close_spec[FFESTP_closeixUNIT].value_is_label
- = FALSE;
- ffestp_file.close.close_spec[FFESTP_closeixUNIT].value
- = ffelex_token_use (ft);
- ffestp_file.close.close_spec[FFESTP_closeixUNIT].u.expr = expr;
- if (ffelex_token_type (t) == FFELEX_typeCOMMA)
- return (ffelexHandler) ffestb_R9074_;
- return (ffelexHandler) ffestb_R9079_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_close_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CLOSE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9074_ -- "CLOSE" OPEN_PAREN [external-file-unit COMMA]
-
- return ffestb_R9074_; // to lexer
-
- Handle expr construct (not NAME=expr construct) here. */
-
-static ffelexHandler
-ffestb_R9074_ (ffelexToken t)
-{
- ffestrGenio kw;
-
- ffestb_local_.close.label = FALSE;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- kw = ffestr_genio (t);
- switch (kw)
- {
- case FFESTR_genioERR:
- ffestb_local_.close.ix = FFESTP_closeixERR;
- ffestb_local_.close.label = TRUE;
- break;
-
- case FFESTR_genioIOSTAT:
- ffestb_local_.close.ix = FFESTP_closeixIOSTAT;
- ffestb_local_.close.left = TRUE;
- ffestb_local_.close.context = FFEEXPR_contextFILEINT;
- break;
-
- case FFESTR_genioSTATUS:
- case FFESTR_genioDISP:
- case FFESTR_genioDISPOSE:
- ffestb_local_.close.ix = FFESTP_closeixSTATUS;
- ffestb_local_.close.left = FALSE;
- ffestb_local_.close.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_genioUNIT:
- ffestb_local_.close.ix = FFESTP_closeixUNIT;
- ffestb_local_.close.left = FALSE;
- ffestb_local_.close.context = FFEEXPR_contextFILENUM;
- break;
-
- default:
- goto bad; /* :::::::::::::::::::: */
- }
- if (ffestp_file.close.close_spec[ffestb_local_.close.ix]
- .kw_or_val_present)
- break; /* Can't specify a keyword twice! */
- ffestp_file.close.close_spec[ffestb_local_.close.ix]
- .kw_or_val_present = TRUE;
- ffestp_file.close.close_spec[ffestb_local_.close.ix]
- .kw_present = TRUE;
- ffestp_file.close.close_spec[ffestb_local_.close.ix]
- .value_present = FALSE;
- ffestp_file.close.close_spec[ffestb_local_.close.ix].value_is_label
- = ffestb_local_.close.label;
- ffestp_file.close.close_spec[ffestb_local_.close.ix].kw
- = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R9075_;
-
- default:
- break;
- }
-
-bad: /* :::::::::::::::::::: */
- ffestb_subr_kill_close_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CLOSE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9075_ -- "CLOSE" OPEN_PAREN [external-file-unit COMMA] NAME
-
- return ffestb_R9075_; // to lexer
-
- Make sure EQUALS here, send next token to expression handler. */
-
-static ffelexHandler
-ffestb_R9075_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- ffesta_confirmed ();
- if (ffestb_local_.close.label)
- return (ffelexHandler) ffestb_R9077_;
- if (ffestb_local_.close.left)
- return (ffelexHandler) ffeexpr_lhs (ffesta_output_pool,
- ffestb_local_.close.context,
- (ffeexprCallback) ffestb_R9076_);
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- ffestb_local_.close.context,
- (ffeexprCallback) ffestb_R9076_);
-
- default:
- break;
- }
-
- ffestb_subr_kill_close_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CLOSE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9076_ -- "CLOSE" OPEN_PAREN ... NAME EQUALS expr
-
- (ffestb_R9076_) // to expression handler
-
- Handle COMMA or CLOSE_PAREN here. */
-
-static ffelexHandler
-ffestb_R9076_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- break;
- ffestp_file.close.close_spec[ffestb_local_.close.ix].value_present
- = TRUE;
- ffestp_file.close.close_spec[ffestb_local_.close.ix].value
- = ffelex_token_use (ft);
- ffestp_file.close.close_spec[ffestb_local_.close.ix].u.expr = expr;
- if (ffelex_token_type (t) == FFELEX_typeCOMMA)
- return (ffelexHandler) ffestb_R9074_;
- return (ffelexHandler) ffestb_R9079_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_close_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CLOSE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9077_ -- "CLOSE" OPEN_PAREN ... NAME EQUALS
-
- return ffestb_R9077_; // to lexer
-
- Handle NUMBER for label here. */
-
-static ffelexHandler
-ffestb_R9077_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNUMBER:
- ffestp_file.close.close_spec[ffestb_local_.close.ix].value_present
- = TRUE;
- ffestp_file.close.close_spec[ffestb_local_.close.ix].value
- = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R9078_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_close_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CLOSE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9078_ -- "CLOSE" OPEN_PAREN ... NAME EQUALS NUMBER
-
- return ffestb_R9078_; // to lexer
-
- Handle COMMA or CLOSE_PAREN here. */
-
-static ffelexHandler
-ffestb_R9078_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- return (ffelexHandler) ffestb_R9074_;
-
- case FFELEX_typeCLOSE_PAREN:
- return (ffelexHandler) ffestb_R9079_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_close_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CLOSE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9079_ -- "CLOSE" OPEN_PAREN ... CLOSE_PAREN
-
- return ffestb_R9079_; // to lexer
-
- Handle EOS or SEMICOLON here. */
-
-static ffelexHandler
-ffestb_R9079_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R907 ();
- ffestb_subr_kill_close_ ();
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffestb_subr_kill_close_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "CLOSE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R909 -- Parse the READ statement
-
- return ffestb_R909; // to lexer
-
- Make sure the statement has a valid form for the READ
- statement. If it does, implement the statement. */
-
-ffelexHandler
-ffestb_R909 (ffelexToken t)
-{
- ffelexHandler next;
- ffestpReadIx ix;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstREAD)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEQUALS:
- case FFELEX_typePOINTS:
- case FFELEX_typeCOLON:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNAME:
- case FFELEX_typeNUMBER:
- ffesta_confirmed ();
- break;
-
- case FFELEX_typeOPEN_PAREN:
- for (ix = 0; ix < FFESTP_readix; ++ix)
- ffestp_file.read.read_spec[ix].kw_or_val_present = FALSE;
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R9092_;
-
- default:
- break;
- }
-
- for (ix = 0; ix < FFESTP_readix; ++ix)
- ffestp_file.read.read_spec[ix].kw_or_val_present = FALSE;
- return (ffelexHandler) (*((ffelexHandler)
- ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILEFORMATNML, (ffeexprCallback) ffestb_R9091_)))
- (t);
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstREAD)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- if (ffelex_token_length (ffesta_tokens[0]) != FFESTR_firstlREAD)
- break;
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEQUALS:
- case FFELEX_typePOINTS:
- case FFELEX_typeCOLON:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeOPEN_PAREN:
- if (ffelex_token_length (ffesta_tokens[0]) != FFESTR_firstlREAD)
- break;
-
- for (ix = 0; ix < FFESTP_readix; ++ix)
- ffestp_file.read.read_spec[ix].kw_or_val_present = FALSE;
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R9092_;
-
- default:
- break;
- }
- for (ix = 0; ix < FFESTP_readix; ++ix)
- ffestp_file.read.read_spec[ix].kw_or_val_present = FALSE;
- next = (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILEFORMATNML, (ffeexprCallback) ffestb_R9091_);
- next = (ffelexHandler) ffelex_splice_tokens (next, ffesta_tokens[0],
- FFESTR_firstlREAD);
- if (next == NULL)
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero);
- return (ffelexHandler) (*next) (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "READ", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "READ", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-}
-
-/* ffestb_R9091_ -- "READ" expr
-
- (ffestb_R9091_) // to expression handler
-
- Make sure the next token is a COMMA or EOS/SEMICOLON. */
-
-static ffelexHandler
-ffestb_R9091_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- ffestp_file.read.read_spec[FFESTP_readixFORMAT].kw_or_val_present
- = TRUE;
- ffestp_file.read.read_spec[FFESTP_readixFORMAT].kw_present = FALSE;
- ffestp_file.read.read_spec[FFESTP_readixFORMAT].value_present = TRUE;
- ffestp_file.read.read_spec[FFESTP_readixFORMAT].value_is_label
- = (expr == NULL);
- ffestp_file.read.read_spec[FFESTP_readixFORMAT].value
- = ffelex_token_use (ft);
- ffestp_file.read.read_spec[FFESTP_readixFORMAT].u.expr = expr;
- if (!ffesta_is_inhibited ())
- ffestc_R909_start (TRUE);
- ffestb_subr_kill_read_ ();
- if (ffelex_token_type (t) == FFELEX_typeCOMMA)
- return (ffelexHandler) ffeexpr_lhs (ffesta_output_pool,
- ffestc_context_iolist (),
- (ffeexprCallback) ffestb_R90915_);
- if (!ffesta_is_inhibited ())
- ffestc_R909_finish ();
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffestb_subr_kill_read_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "READ", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9092_ -- "READ" OPEN_PAREN
-
- return ffestb_R9092_; // to lexer
-
- Handle expr construct (not NAME=expr construct) here. */
-
-static ffelexHandler
-ffestb_R9092_ (ffelexToken t)
-{
- ffelexToken nt;
- ffelexHandler next;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[2] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R9093_;
-
- default:
- nt = ffesta_tokens[1];
- next = (ffelexHandler) (*((ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILEUNITAMBIG, (ffeexprCallback) ffestb_R9094_)))
- (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
- }
-}
-
-/* ffestb_R9093_ -- "READ" OPEN_PAREN NAME
-
- return ffestb_R9093_; // to lexer
-
- If EQUALS here, go to states that handle it. Else, send NAME and this
- token thru expression handler. */
-
-static ffelexHandler
-ffestb_R9093_ (ffelexToken t)
-{
- ffelexHandler next;
- ffelexToken nt;
- ffelexToken ot;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- ffelex_token_kill (ffesta_tokens[1]);
- nt = ffesta_tokens[2];
- next = (ffelexHandler) ffestb_R9098_ (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
-
- default:
- nt = ffesta_tokens[1];
- ot = ffesta_tokens[2];
- next = (ffelexHandler) (*((ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILEUNITAMBIG, (ffeexprCallback) ffestb_R9094_)))
- (nt);
- ffelex_token_kill (nt);
- next = (ffelexHandler) (*next) (ot);
- ffelex_token_kill (ot);
- return (ffelexHandler) (*next) (t);
- }
-}
-
-/* ffestb_R9094_ -- "READ" OPEN_PAREN expr [CLOSE_PAREN]
-
- (ffestb_R9094_) // to expression handler
-
- Handle COMMA or EOS/SEMICOLON here.
-
- 15-Feb-91 JCB 1.1
- Use new ffeexpr mechanism whereby the expr is encased in an opITEM if
- ffeexpr decided it was an item in a control list (hence a unit
- specifier), or a format specifier otherwise. */
-
-static ffelexHandler
-ffestb_R9094_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- if (expr == NULL)
- goto bad; /* :::::::::::::::::::: */
-
- if (ffebld_op (expr) != FFEBLD_opITEM)
- {
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- ffestp_file.read.read_spec[FFESTP_readixFORMAT].kw_or_val_present
- = TRUE;
- ffestp_file.read.read_spec[FFESTP_readixFORMAT].kw_present = FALSE;
- ffestp_file.read.read_spec[FFESTP_readixFORMAT].value_present = TRUE;
- ffestp_file.read.read_spec[FFESTP_readixFORMAT].value_is_label
- = FALSE;
- ffestp_file.read.read_spec[FFESTP_readixFORMAT].value
- = ffelex_token_use (ft);
- ffestp_file.read.read_spec[FFESTP_readixFORMAT].u.expr = expr;
- if (!ffesta_is_inhibited ())
- ffestc_R909_start (TRUE);
- ffestb_subr_kill_read_ ();
- if (ffelex_token_type (t) == FFELEX_typeCOMMA)
- return (ffelexHandler)
- ffeexpr_lhs (ffesta_output_pool,
- ffestc_context_iolist (),
- (ffeexprCallback) ffestb_R90915_);
- if (!ffesta_is_inhibited ())
- ffestc_R909_finish ();
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- goto bad; /* :::::::::::::::::::: */
- }
- }
-
- expr = ffebld_head (expr);
-
- if (expr == NULL)
- goto bad; /* :::::::::::::::::::: */
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCLOSE_PAREN:
- ffestp_file.read.read_spec[FFESTP_readixUNIT].kw_or_val_present
- = TRUE;
- ffestp_file.read.read_spec[FFESTP_readixUNIT].kw_present = FALSE;
- ffestp_file.read.read_spec[FFESTP_readixUNIT].value_present = TRUE;
- ffestp_file.read.read_spec[FFESTP_readixUNIT].value_is_label
- = FALSE;
- ffestp_file.read.read_spec[FFESTP_readixUNIT].value
- = ffelex_token_use (ft);
- ffestp_file.read.read_spec[FFESTP_readixUNIT].u.expr = expr;
- if (ffelex_token_type (t) == FFELEX_typeCOMMA)
- return (ffelexHandler) ffestb_R9095_;
- return (ffelexHandler) ffestb_R90913_;
-
- default:
- break;
- }
-
-bad: /* :::::::::::::::::::: */
- ffestb_subr_kill_read_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "READ", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9095_ -- "READ" OPEN_PAREN expr COMMA
-
- return ffestb_R9095_; // to lexer
-
- Handle expr construct (not NAME=expr construct) here. */
-
-static ffelexHandler
-ffestb_R9095_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R9096_;
-
- default:
- return (ffelexHandler) (*((ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILEFORMATNML, (ffeexprCallback) ffestb_R9097_)))
- (t);
- }
-}
-
-/* ffestb_R9096_ -- "READ" OPEN_PAREN expr COMMA NAME
-
- return ffestb_R9096_; // to lexer
-
- If EQUALS here, go to states that handle it. Else, send NAME and this
- token thru expression handler. */
-
-static ffelexHandler
-ffestb_R9096_ (ffelexToken t)
-{
- ffelexHandler next;
- ffelexToken nt;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- nt = ffesta_tokens[1];
- next = (ffelexHandler) ffestb_R9098_ (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
-
- default:
- nt = ffesta_tokens[1];
- next = (ffelexHandler) (*((ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILEFORMATNML, (ffeexprCallback) ffestb_R9097_)))
- (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
- }
-}
-
-/* ffestb_R9097_ -- "READ" OPEN_PAREN expr COMMA expr
-
- (ffestb_R9097_) // to expression handler
-
- Handle COMMA or CLOSE_PAREN here. */
-
-static ffelexHandler
-ffestb_R9097_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCLOSE_PAREN:
- ffestp_file.read.read_spec[FFESTP_readixFORMAT].kw_or_val_present
- = TRUE;
- ffestp_file.read.read_spec[FFESTP_readixFORMAT].kw_present = FALSE;
- ffestp_file.read.read_spec[FFESTP_readixFORMAT].value_present = TRUE;
- ffestp_file.read.read_spec[FFESTP_readixFORMAT].value_is_label
- = (expr == NULL);
- ffestp_file.read.read_spec[FFESTP_readixFORMAT].value
- = ffelex_token_use (ft);
- ffestp_file.read.read_spec[FFESTP_readixFORMAT].u.expr = expr;
- if (ffelex_token_type (t) == FFELEX_typeCOMMA)
- return (ffelexHandler) ffestb_R9098_;
- return (ffelexHandler) ffestb_R90913_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_read_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "READ", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9098_ -- "READ" OPEN_PAREN [external-file-unit COMMA [format
- COMMA]]
-
- return ffestb_R9098_; // to lexer
-
- Handle expr construct (not NAME=expr construct) here. */
-
-static ffelexHandler
-ffestb_R9098_ (ffelexToken t)
-{
- ffestrGenio kw;
-
- ffestb_local_.read.label = FALSE;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- kw = ffestr_genio (t);
- switch (kw)
- {
- case FFESTR_genioADVANCE:
- ffestb_local_.read.ix = FFESTP_readixADVANCE;
- ffestb_local_.read.left = FALSE;
- ffestb_local_.read.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_genioEOR:
- ffestb_local_.read.ix = FFESTP_readixEOR;
- ffestb_local_.read.label = TRUE;
- break;
-
- case FFESTR_genioERR:
- ffestb_local_.read.ix = FFESTP_readixERR;
- ffestb_local_.read.label = TRUE;
- break;
-
- case FFESTR_genioEND:
- ffestb_local_.read.ix = FFESTP_readixEND;
- ffestb_local_.read.label = TRUE;
- break;
-
- case FFESTR_genioFMT:
- ffestb_local_.read.ix = FFESTP_readixFORMAT;
- ffestb_local_.read.left = FALSE;
- ffestb_local_.read.context = FFEEXPR_contextFILEFORMAT;
- break;
-
- case FFESTR_genioIOSTAT:
- ffestb_local_.read.ix = FFESTP_readixIOSTAT;
- ffestb_local_.read.left = TRUE;
- ffestb_local_.read.context = FFEEXPR_contextFILEINT;
- break;
-
- case FFESTR_genioKEY:
- case FFESTR_genioKEYEQ:
- ffestb_local_.read.ix = FFESTP_readixKEYEQ;
- ffestb_local_.read.left = FALSE;
- ffestb_local_.read.context = FFEEXPR_contextFILENUMCHAR;
- break;
-
- case FFESTR_genioKEYGE:
- ffestb_local_.read.ix = FFESTP_readixKEYGE;
- ffestb_local_.read.left = FALSE;
- ffestb_local_.read.context = FFEEXPR_contextFILENUMCHAR;
- break;
-
- case FFESTR_genioKEYGT:
- ffestb_local_.read.ix = FFESTP_readixKEYGT;
- ffestb_local_.read.left = FALSE;
- ffestb_local_.read.context = FFEEXPR_contextFILENUMCHAR;
- break;
-
- case FFESTR_genioKEYID:
- ffestb_local_.read.ix = FFESTP_readixKEYID;
- ffestb_local_.read.left = FALSE;
- ffestb_local_.read.context = FFEEXPR_contextFILENUM;
- break;
-
- case FFESTR_genioNML:
- ffestb_local_.read.ix = FFESTP_readixFORMAT;
- ffestb_local_.read.left = TRUE;
- ffestb_local_.read.context = FFEEXPR_contextFILENAMELIST;
- break;
-
- case FFESTR_genioNULLS:
- ffestb_local_.read.ix = FFESTP_readixNULLS;
- ffestb_local_.read.left = TRUE;
- ffestb_local_.read.context = FFEEXPR_contextFILEINT;
- break;
-
- case FFESTR_genioREC:
- ffestb_local_.read.ix = FFESTP_readixREC;
- ffestb_local_.read.left = FALSE;
- ffestb_local_.read.context = FFEEXPR_contextFILENUM;
- break;
-
- case FFESTR_genioSIZE:
- ffestb_local_.read.ix = FFESTP_readixSIZE;
- ffestb_local_.read.left = TRUE;
- ffestb_local_.read.context = FFEEXPR_contextFILEINT;
- break;
-
- case FFESTR_genioUNIT:
- ffestb_local_.read.ix = FFESTP_readixUNIT;
- ffestb_local_.read.left = FALSE;
- ffestb_local_.read.context = FFEEXPR_contextFILEUNIT;
- break;
-
- default:
- goto bad; /* :::::::::::::::::::: */
- }
- if (ffestp_file.read.read_spec[ffestb_local_.read.ix]
- .kw_or_val_present)
- break; /* Can't specify a keyword twice! */
- ffestp_file.read.read_spec[ffestb_local_.read.ix]
- .kw_or_val_present = TRUE;
- ffestp_file.read.read_spec[ffestb_local_.read.ix]
- .kw_present = TRUE;
- ffestp_file.read.read_spec[ffestb_local_.read.ix]
- .value_present = FALSE;
- ffestp_file.read.read_spec[ffestb_local_.read.ix].value_is_label
- = ffestb_local_.read.label;
- ffestp_file.read.read_spec[ffestb_local_.read.ix].kw
- = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R9099_;
-
- default:
- break;
- }
-
-bad: /* :::::::::::::::::::: */
- ffestb_subr_kill_read_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "READ", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9099_ -- "READ" OPEN_PAREN [external-file-unit COMMA [format
- COMMA]] NAME
-
- return ffestb_R9099_; // to lexer
-
- Make sure EQUALS here, send next token to expression handler. */
-
-static ffelexHandler
-ffestb_R9099_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- ffesta_confirmed ();
- if (ffestb_local_.read.label)
- return (ffelexHandler) ffestb_R90911_;
- if (ffestb_local_.read.left)
- return (ffelexHandler)
- ffeexpr_lhs (ffesta_output_pool,
- ffestb_local_.read.context,
- (ffeexprCallback) ffestb_R90910_);
- return (ffelexHandler)
- ffeexpr_rhs (ffesta_output_pool,
- ffestb_local_.read.context,
- (ffeexprCallback) ffestb_R90910_);
-
- default:
- break;
- }
-
- ffestb_subr_kill_read_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "READ", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R90910_ -- "READ" OPEN_PAREN ... NAME EQUALS expr
-
- (ffestb_R90910_) // to expression handler
-
- Handle COMMA or CLOSE_PAREN here. */
-
-static ffelexHandler
-ffestb_R90910_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- {
- if (ffestb_local_.read.context == FFEEXPR_contextFILEFORMAT)
- ffestp_file.read.read_spec[ffestb_local_.read.ix]
- .value_is_label = TRUE;
- else
- break;
- }
- ffestp_file.read.read_spec[ffestb_local_.read.ix].value_present
- = TRUE;
- ffestp_file.read.read_spec[ffestb_local_.read.ix].value
- = ffelex_token_use (ft);
- ffestp_file.read.read_spec[ffestb_local_.read.ix].u.expr = expr;
- if (ffelex_token_type (t) == FFELEX_typeCOMMA)
- return (ffelexHandler) ffestb_R9098_;
- return (ffelexHandler) ffestb_R90913_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_read_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "READ", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R90911_ -- "READ" OPEN_PAREN ... NAME EQUALS
-
- return ffestb_R90911_; // to lexer
-
- Handle NUMBER for label here. */
-
-static ffelexHandler
-ffestb_R90911_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNUMBER:
- ffestp_file.read.read_spec[ffestb_local_.read.ix].value_present
- = TRUE;
- ffestp_file.read.read_spec[ffestb_local_.read.ix].value
- = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R90912_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_read_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "READ", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R90912_ -- "READ" OPEN_PAREN ... NAME EQUALS NUMBER
-
- return ffestb_R90912_; // to lexer
-
- Handle COMMA or CLOSE_PAREN here. */
-
-static ffelexHandler
-ffestb_R90912_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- return (ffelexHandler) ffestb_R9098_;
-
- case FFELEX_typeCLOSE_PAREN:
- return (ffelexHandler) ffestb_R90913_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_read_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "READ", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R90913_ -- "READ" OPEN_PAREN ... CLOSE_PAREN
-
- return ffestb_R90913_; // to lexer
-
- Handle EOS or SEMICOLON here.
-
- 15-Feb-91 JCB 1.1
- Fix to allow implied-DO construct here (OPEN_PAREN) -- actually,
- don't presume knowledge of what an initial token in an lhs context
- is going to be, let ffeexpr_lhs handle that as much as possible. */
-
-static ffelexHandler
-ffestb_R90913_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- {
- ffestc_R909_start (FALSE);
- ffestc_R909_finish ();
- }
- ffestb_subr_kill_read_ ();
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- ffesta_confirmed ();
- /* Fall through. */
- case FFELEX_typeOPEN_PAREN: /* Could still be assignment!! */
- break;
- }
-
- /* If token isn't NAME or OPEN_PAREN, ffeexpr_lhs will ultimately whine
- about it, so leave it up to that code. */
-
- /* EXTENSION: Allow an optional preceding COMMA here if not pedantic. (f2c
- provides this extension, as do other compilers, supposedly.) */
-
- if (!ffe_is_pedantic () && (ffelex_token_type (t) == FFELEX_typeCOMMA))
- return (ffelexHandler)
- ffeexpr_lhs (ffesta_output_pool,
- ffestc_context_iolist (),
- (ffeexprCallback) ffestb_R90914_);
-
- return (ffelexHandler) (*((ffelexHandler)
- ffeexpr_lhs (ffesta_output_pool,
- ffestc_context_iolist (),
- (ffeexprCallback) ffestb_R90914_)))
- (t);
-}
-
-/* ffestb_R90914_ -- "READ(...)" expr
-
- (ffestb_R90914_) // to expression handler
-
- Handle COMMA or EOS/SEMICOLON here. */
-
-static ffelexHandler
-ffestb_R90914_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (expr == NULL)
- break;
-
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R909_start (FALSE);
- ffestb_subr_kill_read_ ();
-
- if (!ffesta_is_inhibited ())
- ffestc_R909_item (expr, ft);
- return (ffelexHandler) ffeexpr_lhs (ffesta_output_pool,
- ffestc_context_iolist (),
- (ffeexprCallback) ffestb_R90915_);
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (expr == NULL)
- break;
-
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R909_start (FALSE);
- ffestb_subr_kill_read_ ();
-
- if (!ffesta_is_inhibited ())
- {
- ffestc_R909_item (expr, ft);
- ffestc_R909_finish ();
- }
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffestb_subr_kill_read_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "READ", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R90915_ -- "READ(...)" expr COMMA expr
-
- (ffestb_R90915_) // to expression handler
-
- Handle COMMA or EOS/SEMICOLON here. */
-
-static ffelexHandler
-ffestb_R90915_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- ffestc_R909_item (expr, ft);
- return (ffelexHandler) ffeexpr_lhs (ffesta_output_pool,
- ffestc_context_iolist (),
- (ffeexprCallback) ffestb_R90915_);
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- {
- ffestc_R909_item (expr, ft);
- ffestc_R909_finish ();
- }
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R909_finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "READ", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R910 -- Parse the WRITE statement
-
- return ffestb_R910; // to lexer
-
- Make sure the statement has a valid form for the WRITE
- statement. If it does, implement the statement. */
-
-ffelexHandler
-ffestb_R910 (ffelexToken t)
-{
- ffestpWriteIx ix;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstWRITE)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeNAME:
- case FFELEX_typeNUMBER:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeOPEN_PAREN:
- for (ix = 0; ix < FFESTP_writeix; ++ix)
- ffestp_file.write.write_spec[ix].kw_or_val_present = FALSE;
- return (ffelexHandler) ffestb_R9101_;
- }
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstWRITE)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeOPEN_PAREN:
- if (ffelex_token_length (ffesta_tokens[0]) != FFESTR_firstlWRITE)
- goto bad_0; /* :::::::::::::::::::: */
-
- for (ix = 0; ix < FFESTP_writeix; ++ix)
- ffestp_file.write.write_spec[ix].kw_or_val_present = FALSE;
- return (ffelexHandler) ffestb_R9101_;
- }
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "WRITE", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "WRITE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-}
-
-/* ffestb_R9101_ -- "WRITE" OPEN_PAREN
-
- return ffestb_R9101_; // to lexer
-
- Handle expr construct (not NAME=expr construct) here. */
-
-static ffelexHandler
-ffestb_R9101_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R9102_;
-
- default:
- return (ffelexHandler) (*((ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILEUNIT, (ffeexprCallback) ffestb_R9103_)))
- (t);
- }
-}
-
-/* ffestb_R9102_ -- "WRITE" OPEN_PAREN NAME
-
- return ffestb_R9102_; // to lexer
-
- If EQUALS here, go to states that handle it. Else, send NAME and this
- token thru expression handler. */
-
-static ffelexHandler
-ffestb_R9102_ (ffelexToken t)
-{
- ffelexHandler next;
- ffelexToken nt;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- nt = ffesta_tokens[1];
- next = (ffelexHandler) ffestb_R9107_ (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
-
- default:
- nt = ffesta_tokens[1];
- next = (ffelexHandler) (*((ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILEUNIT, (ffeexprCallback) ffestb_R9103_)))
- (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
- }
-}
-
-/* ffestb_R9103_ -- "WRITE" OPEN_PAREN expr [CLOSE_PAREN]
-
- (ffestb_R9103_) // to expression handler
-
- Handle COMMA or EOS/SEMICOLON here. */
-
-static ffelexHandler
-ffestb_R9103_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- break;
- ffestp_file.write.write_spec[FFESTP_writeixUNIT].kw_or_val_present
- = TRUE;
- ffestp_file.write.write_spec[FFESTP_writeixUNIT].kw_present = FALSE;
- ffestp_file.write.write_spec[FFESTP_writeixUNIT].value_present = TRUE;
- ffestp_file.write.write_spec[FFESTP_writeixUNIT].value_is_label
- = FALSE;
- ffestp_file.write.write_spec[FFESTP_writeixUNIT].value
- = ffelex_token_use (ft);
- ffestp_file.write.write_spec[FFESTP_writeixUNIT].u.expr = expr;
- if (ffelex_token_type (t) == FFELEX_typeCOMMA)
- return (ffelexHandler) ffestb_R9104_;
- return (ffelexHandler) ffestb_R91012_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_write_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "WRITE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9104_ -- "WRITE" OPEN_PAREN expr COMMA
-
- return ffestb_R9104_; // to lexer
-
- Handle expr construct (not NAME=expr construct) here. */
-
-static ffelexHandler
-ffestb_R9104_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R9105_;
-
- default:
- return (ffelexHandler) (*((ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILEFORMATNML, (ffeexprCallback) ffestb_R9106_)))
- (t);
- }
-}
-
-/* ffestb_R9105_ -- "WRITE" OPEN_PAREN expr COMMA NAME
-
- return ffestb_R9105_; // to lexer
-
- If EQUALS here, go to states that handle it. Else, send NAME and this
- token thru expression handler. */
-
-static ffelexHandler
-ffestb_R9105_ (ffelexToken t)
-{
- ffelexHandler next;
- ffelexToken nt;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- nt = ffesta_tokens[1];
- next = (ffelexHandler) ffestb_R9107_ (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
-
- default:
- nt = ffesta_tokens[1];
- next = (ffelexHandler) (*((ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILEFORMATNML, (ffeexprCallback) ffestb_R9106_)))
- (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
- }
-}
-
-/* ffestb_R9106_ -- "WRITE" OPEN_PAREN expr COMMA expr
-
- (ffestb_R9106_) // to expression handler
-
- Handle COMMA or CLOSE_PAREN here. */
-
-static ffelexHandler
-ffestb_R9106_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCLOSE_PAREN:
- ffestp_file.write.write_spec[FFESTP_writeixFORMAT].kw_or_val_present
- = TRUE;
- ffestp_file.write.write_spec[FFESTP_writeixFORMAT].kw_present = FALSE;
- ffestp_file.write.write_spec[FFESTP_writeixFORMAT].value_present = TRUE;
- ffestp_file.write.write_spec[FFESTP_writeixFORMAT].value_is_label
- = (expr == NULL);
- ffestp_file.write.write_spec[FFESTP_writeixFORMAT].value
- = ffelex_token_use (ft);
- ffestp_file.write.write_spec[FFESTP_writeixFORMAT].u.expr = expr;
- if (ffelex_token_type (t) == FFELEX_typeCOMMA)
- return (ffelexHandler) ffestb_R9107_;
- return (ffelexHandler) ffestb_R91012_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_write_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "WRITE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9107_ -- "WRITE" OPEN_PAREN [external-file-unit COMMA [format
- COMMA]]
-
- return ffestb_R9107_; // to lexer
-
- Handle expr construct (not NAME=expr construct) here. */
-
-static ffelexHandler
-ffestb_R9107_ (ffelexToken t)
-{
- ffestrGenio kw;
-
- ffestb_local_.write.label = FALSE;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- kw = ffestr_genio (t);
- switch (kw)
- {
- case FFESTR_genioADVANCE:
- ffestb_local_.write.ix = FFESTP_writeixADVANCE;
- ffestb_local_.write.left = FALSE;
- ffestb_local_.write.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_genioEOR:
- ffestb_local_.write.ix = FFESTP_writeixEOR;
- ffestb_local_.write.label = TRUE;
- break;
-
- case FFESTR_genioERR:
- ffestb_local_.write.ix = FFESTP_writeixERR;
- ffestb_local_.write.label = TRUE;
- break;
-
- case FFESTR_genioFMT:
- ffestb_local_.write.ix = FFESTP_writeixFORMAT;
- ffestb_local_.write.left = FALSE;
- ffestb_local_.write.context = FFEEXPR_contextFILEFORMAT;
- break;
-
- case FFESTR_genioIOSTAT:
- ffestb_local_.write.ix = FFESTP_writeixIOSTAT;
- ffestb_local_.write.left = TRUE;
- ffestb_local_.write.context = FFEEXPR_contextFILEINT;
- break;
-
- case FFESTR_genioNML:
- ffestb_local_.write.ix = FFESTP_writeixFORMAT;
- ffestb_local_.write.left = TRUE;
- ffestb_local_.write.context = FFEEXPR_contextFILENAMELIST;
- break;
-
- case FFESTR_genioREC:
- ffestb_local_.write.ix = FFESTP_writeixREC;
- ffestb_local_.write.left = FALSE;
- ffestb_local_.write.context = FFEEXPR_contextFILENUM;
- break;
-
- case FFESTR_genioUNIT:
- ffestb_local_.write.ix = FFESTP_writeixUNIT;
- ffestb_local_.write.left = FALSE;
- ffestb_local_.write.context = FFEEXPR_contextFILEUNIT;
- break;
-
- default:
- goto bad; /* :::::::::::::::::::: */
- }
- if (ffestp_file.write.write_spec[ffestb_local_.write.ix]
- .kw_or_val_present)
- break; /* Can't specify a keyword twice! */
- ffestp_file.write.write_spec[ffestb_local_.write.ix]
- .kw_or_val_present = TRUE;
- ffestp_file.write.write_spec[ffestb_local_.write.ix]
- .kw_present = TRUE;
- ffestp_file.write.write_spec[ffestb_local_.write.ix]
- .value_present = FALSE;
- ffestp_file.write.write_spec[ffestb_local_.write.ix].value_is_label
- = ffestb_local_.write.label;
- ffestp_file.write.write_spec[ffestb_local_.write.ix].kw
- = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R9108_;
-
- default:
- break;
- }
-
-bad: /* :::::::::::::::::::: */
- ffestb_subr_kill_write_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "WRITE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9108_ -- "WRITE" OPEN_PAREN [external-file-unit COMMA [format
- COMMA]] NAME
-
- return ffestb_R9108_; // to lexer
-
- Make sure EQUALS here, send next token to expression handler. */
-
-static ffelexHandler
-ffestb_R9108_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- ffesta_confirmed ();
- if (ffestb_local_.write.label)
- return (ffelexHandler) ffestb_R91010_;
- if (ffestb_local_.write.left)
- return (ffelexHandler) ffeexpr_lhs (ffesta_output_pool,
- ffestb_local_.write.context,
- (ffeexprCallback) ffestb_R9109_);
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- ffestb_local_.write.context,
- (ffeexprCallback) ffestb_R9109_);
-
- default:
- break;
- }
-
- ffestb_subr_kill_write_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "WRITE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9109_ -- "WRITE" OPEN_PAREN ... NAME EQUALS expr
-
- (ffestb_R9109_) // to expression handler
-
- Handle COMMA or CLOSE_PAREN here. */
-
-static ffelexHandler
-ffestb_R9109_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- {
- if (ffestb_local_.write.context == FFEEXPR_contextFILEFORMAT)
- ffestp_file.write.write_spec[ffestb_local_.write.ix]
- .value_is_label = TRUE;
- else
- break;
- }
- ffestp_file.write.write_spec[ffestb_local_.write.ix].value_present
- = TRUE;
- ffestp_file.write.write_spec[ffestb_local_.write.ix].value
- = ffelex_token_use (ft);
- ffestp_file.write.write_spec[ffestb_local_.write.ix].u.expr = expr;
- if (ffelex_token_type (t) == FFELEX_typeCOMMA)
- return (ffelexHandler) ffestb_R9107_;
- return (ffelexHandler) ffestb_R91012_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_write_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "WRITE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R91010_ -- "WRITE" OPEN_PAREN ... NAME EQUALS
-
- return ffestb_R91010_; // to lexer
-
- Handle NUMBER for label here. */
-
-static ffelexHandler
-ffestb_R91010_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNUMBER:
- ffestp_file.write.write_spec[ffestb_local_.write.ix].value_present
- = TRUE;
- ffestp_file.write.write_spec[ffestb_local_.write.ix].value
- = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R91011_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_write_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "WRITE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R91011_ -- "WRITE" OPEN_PAREN ... NAME EQUALS NUMBER
-
- return ffestb_R91011_; // to lexer
-
- Handle COMMA or CLOSE_PAREN here. */
-
-static ffelexHandler
-ffestb_R91011_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- return (ffelexHandler) ffestb_R9107_;
-
- case FFELEX_typeCLOSE_PAREN:
- return (ffelexHandler) ffestb_R91012_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_write_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "WRITE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R91012_ -- "WRITE" OPEN_PAREN ... CLOSE_PAREN
-
- return ffestb_R91012_; // to lexer
-
- Handle EOS or SEMICOLON here. */
-
-static ffelexHandler
-ffestb_R91012_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- {
- ffestc_R910_start ();
- ffestc_R910_finish ();
- }
- ffestb_subr_kill_write_ ();
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- ffesta_confirmed ();
- /* Fall through. */
- case FFELEX_typeOPEN_PAREN: /* Could still be assignment!! */
-
- /* EXTENSION: Allow an optional preceding COMMA here if not pedantic.
- (f2c provides this extension, as do other compilers, supposedly.) */
-
- if (!ffe_is_pedantic () && (ffelex_token_type (t) == FFELEX_typeCOMMA))
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- ffestc_context_iolist (), (ffeexprCallback) ffestb_R91013_);
-
- return (ffelexHandler) (*((ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- ffestc_context_iolist (), (ffeexprCallback) ffestb_R91013_)))
- (t);
-
- case FFELEX_typeEQUALS:
- case FFELEX_typePOINTS:
- break;
- }
-
- ffestb_subr_kill_write_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "WRITE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R91013_ -- "WRITE(...)" expr
-
- (ffestb_R91013_) // to expression handler
-
- Handle COMMA or EOS/SEMICOLON here. */
-
-static ffelexHandler
-ffestb_R91013_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (expr == NULL)
- break;
-
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R910_start ();
- ffestb_subr_kill_write_ ();
-
- if (!ffesta_is_inhibited ())
- ffestc_R910_item (expr, ft);
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- ffestc_context_iolist (), (ffeexprCallback) ffestb_R91014_);
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (expr == NULL)
- break;
-
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R910_start ();
- ffestb_subr_kill_write_ ();
-
- if (!ffesta_is_inhibited ())
- {
- ffestc_R910_item (expr, ft);
- ffestc_R910_finish ();
- }
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffestb_subr_kill_write_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "WRITE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R91014_ -- "WRITE(...)" expr COMMA expr
-
- (ffestb_R91014_) // to expression handler
-
- Handle COMMA or EOS/SEMICOLON here. */
-
-static ffelexHandler
-ffestb_R91014_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- ffestc_R910_item (expr, ft);
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- ffestc_context_iolist (), (ffeexprCallback) ffestb_R91014_);
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- {
- ffestc_R910_item (expr, ft);
- ffestc_R910_finish ();
- }
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R910_finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "WRITE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R911 -- Parse the PRINT statement
-
- return ffestb_R911; // to lexer
-
- Make sure the statement has a valid form for the PRINT
- statement. If it does, implement the statement. */
-
-ffelexHandler
-ffestb_R911 (ffelexToken t)
-{
- ffelexHandler next;
- ffestpPrintIx ix;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstPRINT)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEQUALS:
- case FFELEX_typePOINTS:
- case FFELEX_typeCOLON:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNAME:
- case FFELEX_typeNUMBER:
- ffesta_confirmed ();
- break;
-
- default:
- break;
- }
-
- for (ix = 0; ix < FFESTP_printix; ++ix)
- ffestp_file.print.print_spec[ix].kw_or_val_present = FALSE;
- return (ffelexHandler) (*((ffelexHandler)
- ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILEFORMATNML, (ffeexprCallback) ffestb_R9111_)))
- (t);
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstPRINT)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- if (ffelex_token_length (ffesta_tokens[0]) != FFESTR_firstlPRINT)
- break;
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEQUALS:
- case FFELEX_typePOINTS:
- case FFELEX_typeCOLON:
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- break;
- }
- for (ix = 0; ix < FFESTP_printix; ++ix)
- ffestp_file.print.print_spec[ix].kw_or_val_present = FALSE;
- next = (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILEFORMATNML, (ffeexprCallback) ffestb_R9111_);
- next = (ffelexHandler) ffelex_splice_tokens (next, ffesta_tokens[0],
- FFESTR_firstlPRINT);
- if (next == NULL)
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero);
- return (ffelexHandler) (*next) (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "PRINT", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "PRINT", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-}
-
-/* ffestb_R9111_ -- "PRINT" expr
-
- (ffestb_R9111_) // to expression handler
-
- Make sure the next token is a COMMA or EOS/SEMICOLON. */
-
-static ffelexHandler
-ffestb_R9111_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- ffestp_file.print.print_spec[FFESTP_printixFORMAT].kw_or_val_present
- = TRUE;
- ffestp_file.print.print_spec[FFESTP_printixFORMAT].kw_present = FALSE;
- ffestp_file.print.print_spec[FFESTP_printixFORMAT].value_present = TRUE;
- ffestp_file.print.print_spec[FFESTP_printixFORMAT].value_is_label
- = (expr == NULL);
- ffestp_file.print.print_spec[FFESTP_printixFORMAT].value
- = ffelex_token_use (ft);
- ffestp_file.print.print_spec[FFESTP_printixFORMAT].u.expr = expr;
- if (!ffesta_is_inhibited ())
- ffestc_R911_start ();
- ffestb_subr_kill_print_ ();
- if (ffelex_token_type (t) == FFELEX_typeCOMMA)
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextIOLIST, (ffeexprCallback) ffestb_R9112_);
- if (!ffesta_is_inhibited ())
- ffestc_R911_finish ();
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffestb_subr_kill_print_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "PRINT", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9112_ -- "PRINT" expr COMMA expr
-
- (ffestb_R9112_) // to expression handler
-
- Handle COMMA or EOS/SEMICOLON here. */
-
-static ffelexHandler
-ffestb_R9112_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- ffestc_R911_item (expr, ft);
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextIOLIST, (ffeexprCallback) ffestb_R9112_);
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- {
- ffestc_R911_item (expr, ft);
- ffestc_R911_finish ();
- }
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R911_finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "PRINT", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R923 -- Parse an INQUIRE statement
-
- return ffestb_R923; // to lexer
-
- Make sure the statement has a valid form for an INQUIRE statement.
- If it does, implement the statement. */
-
-ffelexHandler
-ffestb_R923 (ffelexToken t)
-{
- ffestpInquireIx ix;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstINQUIRE)
- goto bad_0; /* :::::::::::::::::::: */
- break;
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstINQUIRE)
- goto bad_0; /* :::::::::::::::::::: */
- if (ffelex_token_length (ffesta_tokens[0]) != FFESTR_firstlINQUIRE)
- goto bad_0; /* :::::::::::::::::::: */
- break;
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_PAREN:
- break;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
-
- for (ix = 0; ix < FFESTP_inquireix; ++ix)
- ffestp_file.inquire.inquire_spec[ix].kw_or_val_present = FALSE;
-
- ffestb_local_.inquire.may_be_iolength = TRUE;
- return (ffelexHandler) ffestb_R9231_;
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "INQUIRE", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "INQUIRE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-}
-
-/* ffestb_R9231_ -- "INQUIRE" OPEN_PAREN
-
- return ffestb_R9231_; // to lexer
-
- Handle expr construct (not NAME=expr construct) here. */
-
-static ffelexHandler
-ffestb_R9231_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R9232_;
-
- default:
- ffestb_local_.inquire.may_be_iolength = FALSE;
- return (ffelexHandler) (*((ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILENUM, (ffeexprCallback) ffestb_R9233_)))
- (t);
- }
-}
-
-/* ffestb_R9232_ -- "INQUIRE" OPEN_PAREN NAME
-
- return ffestb_R9232_; // to lexer
-
- If EQUALS here, go to states that handle it. Else, send NAME and this
- token thru expression handler. */
-
-static ffelexHandler
-ffestb_R9232_ (ffelexToken t)
-{
- ffelexHandler next;
- ffelexToken nt;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- nt = ffesta_tokens[1];
- next = (ffelexHandler) ffestb_R9234_ (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
-
- default:
- ffestb_local_.inquire.may_be_iolength = FALSE;
- next = (ffelexHandler) (*((ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILENUM, (ffeexprCallback) ffestb_R9233_)))
- (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) (*next) (t);
- }
-}
-
-/* ffestb_R9233_ -- "INQUIRE" OPEN_PAREN expr
-
- (ffestb_R9233_) // to expression handler
-
- Handle COMMA or CLOSE_PAREN here. */
-
-static ffelexHandler
-ffestb_R9233_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- break;
- ffestp_file.inquire.inquire_spec[FFESTP_inquireixUNIT].kw_or_val_present
- = TRUE;
- ffestp_file.inquire.inquire_spec[FFESTP_inquireixUNIT].kw_present = FALSE;
- ffestp_file.inquire.inquire_spec[FFESTP_inquireixUNIT].value_present = TRUE;
- ffestp_file.inquire.inquire_spec[FFESTP_inquireixUNIT].value_is_label
- = FALSE;
- ffestp_file.inquire.inquire_spec[FFESTP_inquireixUNIT].value
- = ffelex_token_use (ft);
- ffestp_file.inquire.inquire_spec[FFESTP_inquireixUNIT].u.expr = expr;
- if (ffelex_token_type (t) == FFELEX_typeCOMMA)
- return (ffelexHandler) ffestb_R9234_;
- return (ffelexHandler) ffestb_R9239_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_inquire_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "INQUIRE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9234_ -- "INQUIRE" OPEN_PAREN [external-file-unit COMMA]
-
- return ffestb_R9234_; // to lexer
-
- Handle expr construct (not NAME=expr construct) here. */
-
-static ffelexHandler
-ffestb_R9234_ (ffelexToken t)
-{
- ffestrInquire kw;
-
- ffestb_local_.inquire.label = FALSE;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- kw = ffestr_inquire (t);
- if (kw != FFESTR_inquireIOLENGTH)
- ffestb_local_.inquire.may_be_iolength = FALSE;
- switch (kw)
- {
- case FFESTR_inquireACCESS:
- ffestb_local_.inquire.ix = FFESTP_inquireixACCESS;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_inquireACTION:
- ffestb_local_.inquire.ix = FFESTP_inquireixACTION;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_inquireBLANK:
- ffestb_local_.inquire.ix = FFESTP_inquireixBLANK;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_inquireCARRIAGECONTROL:
- ffestb_local_.inquire.ix = FFESTP_inquireixCARRIAGECONTROL;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILECHAR;
- break;
-
- case FFESTR_inquireDEFAULTFILE:
- ffestb_local_.inquire.ix = FFESTP_inquireixDEFAULTFILE;
- ffestb_local_.inquire.left = FALSE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILECHAR;
- break;
-
- case FFESTR_inquireDELIM:
- ffestb_local_.inquire.ix = FFESTP_inquireixDELIM;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_inquireDIRECT:
- ffestb_local_.inquire.ix = FFESTP_inquireixDIRECT;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_inquireERR:
- ffestb_local_.inquire.ix = FFESTP_inquireixERR;
- ffestb_local_.inquire.label = TRUE;
- break;
-
- case FFESTR_inquireEXIST:
- ffestb_local_.inquire.ix = FFESTP_inquireixEXIST;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILELOG;
- break;
-
- case FFESTR_inquireFILE:
- ffestb_local_.inquire.ix = FFESTP_inquireixFILE;
- ffestb_local_.inquire.left = FALSE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILECHAR;
- break;
-
- case FFESTR_inquireFORM:
- ffestb_local_.inquire.ix = FFESTP_inquireixFORM;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_inquireFORMATTED:
- ffestb_local_.inquire.ix = FFESTP_inquireixFORMATTED;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_inquireIOLENGTH:
- if (!ffestb_local_.inquire.may_be_iolength)
- goto bad; /* :::::::::::::::::::: */
- ffestb_local_.inquire.ix = FFESTP_inquireixIOLENGTH;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILEINT;
- break;
-
- case FFESTR_inquireIOSTAT:
- ffestb_local_.inquire.ix = FFESTP_inquireixIOSTAT;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILEINT;
- break;
-
- case FFESTR_inquireKEYED:
- ffestb_local_.inquire.ix = FFESTP_inquireixKEYED;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILECHAR;
- break;
-
- case FFESTR_inquireNAME:
- ffestb_local_.inquire.ix = FFESTP_inquireixNAME;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILECHAR;
- break;
-
- case FFESTR_inquireNAMED:
- ffestb_local_.inquire.ix = FFESTP_inquireixNAMED;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILELOG;
- break;
-
- case FFESTR_inquireNEXTREC:
- ffestb_local_.inquire.ix = FFESTP_inquireixNEXTREC;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILEDFINT;
- break;
-
- case FFESTR_inquireNUMBER:
- ffestb_local_.inquire.ix = FFESTP_inquireixNUMBER;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILEINT;
- break;
-
- case FFESTR_inquireOPENED:
- ffestb_local_.inquire.ix = FFESTP_inquireixOPENED;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILELOG;
- break;
-
- case FFESTR_inquireORGANIZATION:
- ffestb_local_.inquire.ix = FFESTP_inquireixORGANIZATION;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILECHAR;
- break;
-
- case FFESTR_inquirePAD:
- ffestb_local_.inquire.ix = FFESTP_inquireixPAD;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_inquirePOSITION:
- ffestb_local_.inquire.ix = FFESTP_inquireixPOSITION;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_inquireREAD:
- ffestb_local_.inquire.ix = FFESTP_inquireixREAD;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_inquireREADWRITE:
- ffestb_local_.inquire.ix = FFESTP_inquireixREADWRITE;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_inquireRECL:
- ffestb_local_.inquire.ix = FFESTP_inquireixRECL;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILEINT;
- break;
-
- case FFESTR_inquireRECORDTYPE:
- ffestb_local_.inquire.ix = FFESTP_inquireixRECORDTYPE;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILECHAR;
- break;
-
- case FFESTR_inquireSEQUENTIAL:
- ffestb_local_.inquire.ix = FFESTP_inquireixSEQUENTIAL;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_inquireUNFORMATTED:
- ffestb_local_.inquire.ix = FFESTP_inquireixUNFORMATTED;
- ffestb_local_.inquire.left = TRUE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILEDFCHAR;
- break;
-
- case FFESTR_inquireUNIT:
- ffestb_local_.inquire.ix = FFESTP_inquireixUNIT;
- ffestb_local_.inquire.left = FALSE;
- ffestb_local_.inquire.context = FFEEXPR_contextFILENUM;
- break;
-
- default:
- goto bad; /* :::::::::::::::::::: */
- }
- if (ffestp_file.inquire.inquire_spec[ffestb_local_.inquire.ix]
- .kw_or_val_present)
- break; /* Can't specify a keyword twice! */
- ffestp_file.inquire.inquire_spec[ffestb_local_.inquire.ix]
- .kw_or_val_present = TRUE;
- ffestp_file.inquire.inquire_spec[ffestb_local_.inquire.ix]
- .kw_present = TRUE;
- ffestp_file.inquire.inquire_spec[ffestb_local_.inquire.ix]
- .value_present = FALSE;
- ffestp_file.inquire.inquire_spec[ffestb_local_.inquire.ix].value_is_label
- = ffestb_local_.inquire.label;
- ffestp_file.inquire.inquire_spec[ffestb_local_.inquire.ix].kw
- = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R9235_;
-
- default:
- break;
- }
-
-bad: /* :::::::::::::::::::: */
- ffestb_subr_kill_inquire_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "INQUIRE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9235_ -- "INQUIRE" OPEN_PAREN [external-file-unit COMMA] NAME
-
- return ffestb_R9235_; // to lexer
-
- Make sure EQUALS here, send next token to expression handler. */
-
-static ffelexHandler
-ffestb_R9235_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- ffesta_confirmed ();
- if (ffestb_local_.inquire.label)
- return (ffelexHandler) ffestb_R9237_;
- if (ffestb_local_.inquire.left)
- return (ffelexHandler) ffeexpr_lhs (ffesta_output_pool,
- ffestb_local_.inquire.context,
- (ffeexprCallback) ffestb_R9236_);
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- ffestb_local_.inquire.context,
- (ffeexprCallback) ffestb_R9236_);
-
- default:
- break;
- }
-
- ffestb_subr_kill_inquire_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "INQUIRE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9236_ -- "INQUIRE" OPEN_PAREN ... NAME EQUALS expr
-
- (ffestb_R9236_) // to expression handler
-
- Handle COMMA or CLOSE_PAREN here. */
-
-static ffelexHandler
-ffestb_R9236_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (ffestb_local_.inquire.ix == FFESTP_inquireixIOLENGTH)
- break; /* IOLENGTH=expr must be followed by
- CLOSE_PAREN. */
- /* Fall through. */
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- break;
- ffestp_file.inquire.inquire_spec[ffestb_local_.inquire.ix].value_present
- = TRUE;
- ffestp_file.inquire.inquire_spec[ffestb_local_.inquire.ix].value
- = ffelex_token_use (ft);
- ffestp_file.inquire.inquire_spec[ffestb_local_.inquire.ix].u.expr = expr;
- if (ffelex_token_type (t) == FFELEX_typeCOMMA)
- return (ffelexHandler) ffestb_R9234_;
- if (ffestb_local_.inquire.ix == FFESTP_inquireixIOLENGTH)
- return (ffelexHandler) ffestb_R92310_;
- return (ffelexHandler) ffestb_R9239_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_inquire_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "INQUIRE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9237_ -- "INQUIRE" OPEN_PAREN ... NAME EQUALS
-
- return ffestb_R9237_; // to lexer
-
- Handle NUMBER for label here. */
-
-static ffelexHandler
-ffestb_R9237_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNUMBER:
- ffestp_file.inquire.inquire_spec[ffestb_local_.inquire.ix].value_present
- = TRUE;
- ffestp_file.inquire.inquire_spec[ffestb_local_.inquire.ix].value
- = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R9238_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_inquire_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "INQUIRE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9238_ -- "INQUIRE" OPEN_PAREN ... NAME EQUALS NUMBER
-
- return ffestb_R9238_; // to lexer
-
- Handle COMMA or CLOSE_PAREN here. */
-
-static ffelexHandler
-ffestb_R9238_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- return (ffelexHandler) ffestb_R9234_;
-
- case FFELEX_typeCLOSE_PAREN:
- return (ffelexHandler) ffestb_R9239_;
-
- default:
- break;
- }
-
- ffestb_subr_kill_inquire_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "INQUIRE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R9239_ -- "INQUIRE" OPEN_PAREN ... CLOSE_PAREN
-
- return ffestb_R9239_; // to lexer
-
- Handle EOS or SEMICOLON here. */
-
-static ffelexHandler
-ffestb_R9239_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R923A ();
- ffestb_subr_kill_inquire_ ();
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffestb_subr_kill_inquire_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "INQUIRE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R92310_ -- "INQUIRE(IOLENGTH=expr)"
-
- return ffestb_R92310_; // to lexer
-
- Make sure EOS or SEMICOLON not here; begin R923B processing and expect
- output IO list. */
-
-static ffelexHandler
-ffestb_R92310_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- break;
-
- default:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R923B_start ();
- ffestb_subr_kill_inquire_ ();
- return (ffelexHandler) (*((ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextIOLIST, (ffeexprCallback) ffestb_R92311_)))
- (t);
- }
-
- ffestb_subr_kill_inquire_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "INQUIRE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R92311_ -- "INQUIRE(IOLENGTH=expr)" expr
-
- (ffestb_R92311_) // to expression handler
-
- Handle COMMA or EOS/SEMICOLON here. */
-
-static ffelexHandler
-ffestb_R92311_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- ffestc_R923B_item (expr, ft);
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextIOLIST, (ffeexprCallback) ffestb_R92311_);
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- {
- ffestc_R923B_item (expr, ft);
- ffestc_R923B_finish ();
- }
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R923B_finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "INQUIRE", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_V020 -- Parse the TYPE statement
-
- return ffestb_V020; // to lexer
-
- Make sure the statement has a valid form for the TYPE
- statement. If it does, implement the statement. */
-
-ffelexHandler
-ffestb_V020 (ffelexToken t)
-{
- ffeTokenLength i;
- const char *p;
- ffelexHandler next;
- ffestpTypeIx ix;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstTYPE)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOLONCOLON:
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEQUALS:
- case FFELEX_typePOINTS:
- case FFELEX_typeCOLON:
- case FFELEX_typeCOMMA: /* Because "TYPE,PUBLIC::A" is ambiguous with
- '90. */
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNUMBER:
- ffesta_confirmed ();
- break;
-
- case FFELEX_typeNAME: /* Because TYPE A is ambiguous with '90. */
- default:
- break;
- }
-
- for (ix = 0; ix < FFESTP_typeix; ++ix)
- ffestp_file.type.type_spec[ix].kw_or_val_present = FALSE;
- return (ffelexHandler) (*((ffelexHandler)
- ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILEFORMATNML, (ffeexprCallback) ffestb_V0201_)))
- (t);
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstTYPE)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- if (ffelex_token_length (ffesta_tokens[0]) != FFESTR_firstlTYPE)
- break;
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeOPEN_PAREN:
- if (ffelex_token_length (ffesta_tokens[0]) == FFESTR_firstlTYPE)
- break; /* Else might be assignment/stmtfuncdef. */
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEQUALS:
- case FFELEX_typePOINTS:
- case FFELEX_typeCOLON:
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- break;
- }
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlTYPE);
- if (ISDIGIT (*p))
- ffesta_confirmed (); /* Else might be '90 TYPE statement. */
- for (ix = 0; ix < FFESTP_typeix; ++ix)
- ffestp_file.type.type_spec[ix].kw_or_val_present = FALSE;
- next = (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextFILEFORMATNML, (ffeexprCallback) ffestb_V0201_);
- next = (ffelexHandler) ffelex_splice_tokens (next, ffesta_tokens[0],
- FFESTR_firstlTYPE);
- if (next == NULL)
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero);
- return (ffelexHandler) (*next) (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "TYPE I/O", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "TYPE I/O", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-}
-
-/* ffestb_V0201_ -- "TYPE" expr
-
- (ffestb_V0201_) // to expression handler
-
- Make sure the next token is a COMMA or EOS/SEMICOLON. */
-
-static ffelexHandler
-ffestb_V0201_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- bool comma = TRUE;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (!ffe_is_vxt () && (expr != NULL)
- && (ffebld_op (expr) == FFEBLD_opSYMTER))
- break;
- comma = FALSE;
- /* Fall through. */
- case FFELEX_typeCOMMA:
- if (!ffe_is_vxt () && comma && (expr != NULL)
- && (ffebld_op (expr) == FFEBLD_opPAREN)
- && (ffebld_op (ffebld_left (expr)) == FFEBLD_opSYMTER))
- break;
- ffesta_confirmed ();
- ffestp_file.type.type_spec[FFESTP_typeixFORMAT].kw_or_val_present
- = TRUE;
- ffestp_file.type.type_spec[FFESTP_typeixFORMAT].kw_present = FALSE;
- ffestp_file.type.type_spec[FFESTP_typeixFORMAT].value_present = TRUE;
- ffestp_file.type.type_spec[FFESTP_typeixFORMAT].value_is_label
- = (expr == NULL);
- ffestp_file.type.type_spec[FFESTP_typeixFORMAT].value
- = ffelex_token_use (ft);
- ffestp_file.type.type_spec[FFESTP_typeixFORMAT].u.expr = expr;
- if (!ffesta_is_inhibited ())
- ffestc_V020_start ();
- ffestb_subr_kill_type_ ();
- if (ffelex_token_type (t) == FFELEX_typeCOMMA)
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextIOLIST, (ffeexprCallback) ffestb_V0202_);
- if (!ffesta_is_inhibited ())
- ffestc_V020_finish ();
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffestb_subr_kill_type_ ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "TYPE I/O", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_V0202_ -- "TYPE" expr COMMA expr
-
- (ffestb_V0202_) // to expression handler
-
- Handle COMMA or EOS/SEMICOLON here. */
-
-static ffelexHandler
-ffestb_V0202_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- ffestc_V020_item (expr, ft);
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextIOLIST, (ffeexprCallback) ffestb_V0202_);
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- {
- ffestc_V020_item (expr, ft);
- ffestc_V020_finish ();
- }
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_V020_finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "TYPE I/O", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_dummy -- Parse an ENTRY/FUNCTION/SUBROUTINE statement
-
- return ffestb_dummy; // to lexer
-
- Make sure the statement has a valid form for an ENTRY/FUNCTION/SUBROUTINE
- statement. If it does, implement the statement. */
-
-ffelexHandler
-ffestb_dummy (ffelexToken t)
-{
- ffeTokenLength i;
- unsigned const char *p;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNAME:
- break;
- }
-
- ffesta_confirmed ();
- ffesta_tokens[1] = ffelex_token_use (t);
- ffestb_local_.decl.recursive = NULL;
- ffestb_local_.dummy.badname = ffestb_args.dummy.badname;
- ffestb_local_.dummy.is_subr = ffestb_args.dummy.is_subr;
- ffestb_local_.dummy.first_kw = ffesta_first_kw;
- return (ffelexHandler) ffestb_dummy1_;
-
- case FFELEX_typeNAMES:
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- break;
-
- case FFELEX_typeOPEN_PAREN:
- break;
- }
- p = ffelex_token_text (ffesta_tokens[0]) + (i = ffestb_args.dummy.len);
- if (!ffesrc_is_name_init (*p))
- goto bad_i; /* :::::::::::::::::::: */
- ffesta_tokens[1]
- = ffelex_token_name_from_names (ffesta_tokens[0], i, 0);
- ffestb_local_.decl.recursive = NULL;
- ffestb_local_.dummy.badname = ffestb_args.dummy.badname;
- ffestb_local_.dummy.is_subr = ffestb_args.dummy.is_subr;
- ffestb_local_.dummy.first_kw = ffesta_first_kw;
- return (ffelexHandler) ffestb_dummy1_ (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.dummy.badname, ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.dummy.badname, t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, ffestb_args.dummy.badname, ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_dummy1_ -- "ENTRY/FUNCTION/SUBROUTINE" NAME
-
- return ffestb_dummy1_; // to lexer
-
- Make sure the next token is an EOS, SEMICOLON, or OPEN_PAREN. In the
- former case, just implement a null arg list, else get the arg list and
- then implement. */
-
-static ffelexHandler
-ffestb_dummy1_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (ffestb_local_.dummy.first_kw == FFESTR_firstFUNCTION)
- {
- ffesta_confirmed (); /* Later, not if typename w/o RECURSIVE. */
- break; /* Produce an error message, need that open
- paren. */
- }
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- { /* Pretend as though we got a truly NULL
- list. */
- ffestb_subrargs_.name_list.args = NULL;
- ffestb_subrargs_.name_list.ok = TRUE;
- ffestb_subrargs_.name_list.close_paren = ffelex_token_use (t);
- return (ffelexHandler) ffestb_dummy2_ (t);
- }
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffesta_zero (t);
-
- case FFELEX_typeOPEN_PAREN:
- ffestb_subrargs_.name_list.args = ffestt_tokenlist_create ();
- ffestb_subrargs_.name_list.handler = (ffelexHandler) ffestb_dummy2_;
- ffestb_subrargs_.name_list.is_subr = ffestb_local_.dummy.is_subr;
- ffestb_subrargs_.name_list.names = FALSE;
- return (ffelexHandler) ffestb_subr_name_list_;
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_local_.dummy.badname, t);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_dummy2_ -- <dummy-keyword> NAME OPEN_PAREN arg-list CLOSE_PAREN
-
- return ffestb_dummy2_; // to lexer
-
- Make sure the statement has a valid form for a dummy-def statement. If it
- does, implement the statement. */
-
-static ffelexHandler
-ffestb_dummy2_ (ffelexToken t)
-{
- if (!ffestb_subrargs_.name_list.ok)
- goto bad; /* :::::::::::::::::::: */
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- {
- switch (ffestb_local_.dummy.first_kw)
- {
- case FFESTR_firstFUNCTION:
- ffestc_R1219 (ffesta_tokens[1], ffestb_subrargs_.name_list.args,
- ffestb_subrargs_.name_list.close_paren, FFESTP_typeNone,
- NULL, NULL, NULL, NULL, ffestb_local_.decl.recursive, NULL);
- break;
-
- case FFESTR_firstSUBROUTINE:
- ffestc_R1223 (ffesta_tokens[1], ffestb_subrargs_.name_list.args,
- ffestb_subrargs_.name_list.close_paren,
- ffestb_local_.decl.recursive);
- break;
-
- case FFESTR_firstENTRY:
- ffestc_R1226 (ffesta_tokens[1], ffestb_subrargs_.name_list.args,
- ffestb_subrargs_.name_list.close_paren);
- break;
-
- default:
- assert (FALSE);
- }
- }
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- ffelex_token_kill (ffestb_subrargs_.name_list.close_paren);
- if (ffestb_subrargs_.name_list.args != NULL)
- ffestt_tokenlist_kill (ffestb_subrargs_.name_list.args);
- return (ffelexHandler) ffesta_zero (t);
-
- case FFELEX_typeNAME:
- ffesta_confirmed ();
- if ((ffestb_local_.dummy.first_kw != FFESTR_firstFUNCTION)
- || (ffestr_other (t) != FFESTR_otherRESULT))
- break;
- ffestb_local_.decl.type = FFESTP_typeNone;
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- return (ffelexHandler) ffestb_decl_funcname_6_;
-
- default:
- break;
- }
-
-bad: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_local_.dummy.badname, t);
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- ffelex_token_kill (ffestb_subrargs_.name_list.close_paren);
- if (ffestb_subrargs_.name_list.args != NULL)
- ffestt_tokenlist_kill (ffestb_subrargs_.name_list.args);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R524 -- Parse the DIMENSION statement
-
- return ffestb_R524; // to lexer
-
- Make sure the statement has a valid form for the DIMENSION statement. If
- it does, implement the statement. */
-
-ffelexHandler
-ffestb_R524 (ffelexToken t)
-{
- ffeTokenLength i;
- unsigned const char *p;
- ffelexToken nt;
- ffelexHandler next;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNAME:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R524_start (ffesta_first_kw == FFESTR_firstVIRTUAL);
- ffestb_local_.dimension.started = TRUE;
- return (ffelexHandler) ffestb_R5241_ (t);
- }
-
- case FFELEX_typeNAMES:
- p = ffelex_token_text (ffesta_tokens[0]) + (i = ffestb_args.R524.len);
- switch (ffelex_token_type (t))
- {
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed ();
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeOPEN_PAREN:
- break;
- }
-
- /* Here, we have at least one char after "DIMENSION" and t is
- OPEN_PAREN. */
-
- if (!ffesrc_is_name_init (*p))
- goto bad_i; /* :::::::::::::::::::: */
- nt = ffelex_token_name_from_names (ffesta_tokens[0], i, 0);
- ffestb_local_.dimension.started = FALSE;
- next = (ffelexHandler) ffestb_R5241_ (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.R524.badname, ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.R524.badname, t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, ffestb_args.R524.badname, ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5241_ -- "DIMENSION"
-
- return ffestb_R5241_; // to lexer
-
- Handle NAME. */
-
-static ffelexHandler
-ffestb_R5241_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R5242_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.R524.badname, t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R524_finish ();
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5242_ -- "DIMENSION" ... NAME
-
- return ffestb_R5242_; // to lexer
-
- Handle OPEN_PAREN. */
-
-static ffelexHandler
-ffestb_R5242_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_PAREN:
- ffestb_subrargs_.dim_list.dims = ffestt_dimlist_create ();
- ffestb_subrargs_.dim_list.handler = (ffelexHandler) ffestb_R5243_;
- ffestb_subrargs_.dim_list.pool = ffesta_output_pool;
- ffestb_subrargs_.dim_list.ctx = ffesta_is_entry_valid
- ? FFEEXPR_contextDIMLIST : FFEEXPR_contextDIMLISTCOMMON;
-#ifdef FFECOM_dimensionsMAX
- ffestb_subrargs_.dim_list.ndims = 0;
-#endif
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- ffestb_subrargs_.dim_list.ctx,
- (ffeexprCallback) ffestb_subr_dimlist_);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.R524.badname, t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R524_finish ();
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5243_ -- "DIMENSION" ... NAME OPEN_PAREN dimlist CLOSE_PAREN
-
- return ffestb_R5243_; // to lexer
-
- Handle COMMA or EOS/SEMICOLON. */
-
-static ffelexHandler
-ffestb_R5243_ (ffelexToken t)
-{
- if (!ffestb_subrargs_.dim_list.ok)
- goto bad; /* :::::::::::::::::::: */
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- {
- if (!ffestb_local_.dimension.started)
- {
- ffestc_R524_start (ffesta_first_kw == FFESTR_firstVIRTUAL);
- ffestb_local_.dimension.started = TRUE;
- }
- ffestc_R524_item (ffesta_tokens[1],
- ffestb_subrargs_.dim_list.dims);
- }
- ffelex_token_kill (ffesta_tokens[1]);
- ffestt_dimlist_kill (ffestb_subrargs_.dim_list.dims);
- return (ffelexHandler) ffestb_R5244_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- {
- if (!ffestb_local_.dimension.started)
- {
- ffestc_R524_start (ffesta_first_kw == FFESTR_firstVIRTUAL);
- ffestb_local_.dimension.started = TRUE;
- }
- ffestc_R524_item (ffesta_tokens[1],
- ffestb_subrargs_.dim_list.dims);
- ffestc_R524_finish ();
- }
- ffelex_token_kill (ffesta_tokens[1]);
- ffestt_dimlist_kill (ffestb_subrargs_.dim_list.dims);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
-bad: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.R524.badname, t);
- if (ffestb_local_.dimension.started && !ffesta_is_inhibited ())
- ffestc_R524_finish ();
- ffestt_dimlist_kill (ffestb_subrargs_.dim_list.dims);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5244_ -- "DIMENSION" ... COMMA
-
- return ffestb_R5244_; // to lexer
-
- Make sure we don't have EOS or SEMICOLON. */
-
-static ffelexHandler
-ffestb_R5244_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (!ffesta_is_inhibited ())
- ffestc_R524_finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, ffestb_args.R524.badname, t);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- return (ffelexHandler) ffestb_R5241_ (t);
- }
-}
-
-/* ffestb_R547 -- Parse the COMMON statement
-
- return ffestb_R547; // to lexer
-
- Make sure the statement has a valid form for the COMMON statement. If it
- does, implement the statement. */
-
-ffelexHandler
-ffestb_R547 (ffelexToken t)
-{
- ffeTokenLength i;
- unsigned const char *p;
- ffelexToken nt;
- ffelexHandler next;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstCOMMON)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNAME:
- case FFELEX_typeSLASH:
- case FFELEX_typeCONCAT:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R547_start ();
- ffestb_local_.common.started = TRUE;
- return (ffelexHandler) ffestb_R5471_ (t);
- }
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstCOMMON)
- goto bad_0; /* :::::::::::::::::::: */
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlCOMMON);
- switch (ffelex_token_type (t))
- {
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed ();
- break;
-
- case FFELEX_typeSLASH:
- case FFELEX_typeCONCAT:
- ffesta_confirmed ();
- if (*p != '\0')
- break;
- if (!ffesta_is_inhibited ())
- ffestc_R547_start ();
- ffestb_local_.common.started = TRUE;
- return (ffelexHandler) ffestb_R5471_ (t);
-
- case FFELEX_typeOPEN_PAREN:
- break;
- }
-
- /* Here, we have at least one char after "COMMON" and t is COMMA,
- EOS/SEMICOLON, OPEN_PAREN, SLASH, or CONCAT. */
-
- if (!ffesrc_is_name_init (*p))
- goto bad_i; /* :::::::::::::::::::: */
- nt = ffelex_token_name_from_names (ffesta_tokens[0], i, 0);
- if (ffelex_token_type (t) == FFELEX_typeOPEN_PAREN)
- ffestb_local_.common.started = FALSE;
- else
- {
- if (!ffesta_is_inhibited ())
- ffestc_R547_start ();
- ffestb_local_.common.started = TRUE;
- }
- next = (ffelexHandler) ffestb_R5471_ (nt);
- ffelex_token_kill (nt);
- return (ffelexHandler) (*next) (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "COMMON", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "COMMON", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "COMMON", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5471_ -- "COMMON"
-
- return ffestb_R5471_; // to lexer
-
- Handle NAME, SLASH, or CONCAT. */
-
-static ffelexHandler
-ffestb_R5471_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- return (ffelexHandler) ffestb_R5474_ (t);
-
- case FFELEX_typeSLASH:
- return (ffelexHandler) ffestb_R5472_;
-
- case FFELEX_typeCONCAT:
- if (!ffesta_is_inhibited ())
- ffestc_R547_item_cblock (NULL);
- return (ffelexHandler) ffestb_R5474_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "COMMON", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R547_finish ();
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5472_ -- "COMMON" SLASH
-
- return ffestb_R5472_; // to lexer
-
- Handle NAME. */
-
-static ffelexHandler
-ffestb_R5472_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R5473_;
-
- case FFELEX_typeSLASH:
- if (!ffesta_is_inhibited ())
- ffestc_R547_item_cblock (NULL);
- return (ffelexHandler) ffestb_R5474_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "COMMON", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R547_finish ();
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5473_ -- "COMMON" SLASH NAME
-
- return ffestb_R5473_; // to lexer
-
- Handle SLASH. */
-
-static ffelexHandler
-ffestb_R5473_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeSLASH:
- if (!ffesta_is_inhibited ())
- ffestc_R547_item_cblock (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffestb_R5474_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "COMMON", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R547_finish ();
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5474_ -- "COMMON" [SLASH NAME SLASH] or "COMMON" CONCAT
-
- return ffestb_R5474_; // to lexer
-
- Handle NAME. */
-
-static ffelexHandler
-ffestb_R5474_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_R5475_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "COMMON", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R547_finish ();
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5475_ -- "COMMON" ... NAME
-
- return ffestb_R5475_; // to lexer
-
- Handle OPEN_PAREN. */
-
-static ffelexHandler
-ffestb_R5475_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_PAREN:
- ffestb_subrargs_.dim_list.dims = ffestt_dimlist_create ();
- ffestb_subrargs_.dim_list.handler = (ffelexHandler) ffestb_R5476_;
- ffestb_subrargs_.dim_list.pool = ffesta_output_pool;
- ffestb_subrargs_.dim_list.ctx = FFEEXPR_contextDIMLISTCOMMON;
-#ifdef FFECOM_dimensionsMAX
- ffestb_subrargs_.dim_list.ndims = 0;
-#endif
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextDIMLISTCOMMON, (ffeexprCallback) ffestb_subr_dimlist_);
-
- case FFELEX_typeCOMMA:
- if (!ffesta_is_inhibited ())
- ffestc_R547_item_object (ffesta_tokens[1], NULL);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffestb_R5477_;
-
- case FFELEX_typeSLASH:
- case FFELEX_typeCONCAT:
- if (!ffesta_is_inhibited ())
- ffestc_R547_item_object (ffesta_tokens[1], NULL);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffestb_R5471_ (t);
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (!ffesta_is_inhibited ())
- {
- ffestc_R547_item_object (ffesta_tokens[1], NULL);
- ffestc_R547_finish ();
- }
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "COMMON", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_R547_finish ();
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5476_ -- "COMMON" ... NAME OPEN_PAREN dimlist CLOSE_PAREN
-
- return ffestb_R5476_; // to lexer
-
- Handle COMMA, SLASH, CONCAT, EOS/SEMICOLON. */
-
-static ffelexHandler
-ffestb_R5476_ (ffelexToken t)
-{
- if (!ffestb_subrargs_.dim_list.ok)
- goto bad; /* :::::::::::::::::::: */
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- {
- if (!ffestb_local_.common.started)
- {
- ffestc_R547_start ();
- ffestb_local_.common.started = TRUE;
- }
- ffestc_R547_item_object (ffesta_tokens[1],
- ffestb_subrargs_.dim_list.dims);
- }
- ffelex_token_kill (ffesta_tokens[1]);
- ffestt_dimlist_kill (ffestb_subrargs_.dim_list.dims);
- return (ffelexHandler) ffestb_R5477_;
-
- case FFELEX_typeSLASH:
- case FFELEX_typeCONCAT:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- {
- if (!ffestb_local_.common.started)
- {
- ffestc_R547_start ();
- ffestb_local_.common.started = TRUE;
- }
- ffestc_R547_item_object (ffesta_tokens[1],
- ffestb_subrargs_.dim_list.dims);
- }
- ffelex_token_kill (ffesta_tokens[1]);
- ffestt_dimlist_kill (ffestb_subrargs_.dim_list.dims);
- return (ffelexHandler) ffestb_R5471_ (t);
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- {
- if (!ffestb_local_.common.started)
- ffestc_R547_start ();
- ffestc_R547_item_object (ffesta_tokens[1],
- ffestb_subrargs_.dim_list.dims);
- ffestc_R547_finish ();
- }
- ffelex_token_kill (ffesta_tokens[1]);
- ffestt_dimlist_kill (ffestb_subrargs_.dim_list.dims);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
-bad: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "COMMON", t);
- if (ffestb_local_.common.started && !ffesta_is_inhibited ())
- ffestc_R547_finish ();
- ffestt_dimlist_kill (ffestb_subrargs_.dim_list.dims);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R5477_ -- "COMMON" ... COMMA
-
- return ffestb_R5477_; // to lexer
-
- Make sure we don't have EOS or SEMICOLON. */
-
-static ffelexHandler
-ffestb_R5477_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (!ffesta_is_inhibited ())
- ffestc_R547_finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "COMMON", t);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- return (ffelexHandler) ffestb_R5471_ (t);
- }
-}
-
-/* ffestb_R1229 -- Parse a STMTFUNCTION statement
-
- return ffestb_R1229; // to lexer
-
- Make sure the statement has a valid form for a STMTFUNCTION
- statement. If it does, implement the statement. */
-
-ffelexHandler
-ffestb_R1229 (ffelexToken t)
-{
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- case FFELEX_typeNAMES:
- break;
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_PAREN:
- break;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- case FFELEX_typeNAME:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
-
- ffestb_subrargs_.name_list.args = ffestt_tokenlist_create ();
- ffestb_subrargs_.name_list.handler = (ffelexHandler) ffestb_R12291_;
- ffestb_subrargs_.name_list.is_subr = FALSE; /* No "*" items in list! */
- ffestb_subrargs_.name_list.names = TRUE; /* In case "IF(FOO)CALL
- FOO...". */
- return (ffelexHandler) ffestb_subr_name_list_;
-
-bad_0: /* :::::::::::::::::::: */
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_2t (FFEBAD_UNREC_STMT, ffesta_tokens[0], t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R12291_ -- "STMTFUNCTION" OPEN_PAREN dummy-name-list CLOSE_PAREN
-
- return ffestb_R12291_; // to lexer
-
- Make sure the statement has a valid form for a STMTFUNCTION statement. If
- it does, implement the statement. */
-
-static ffelexHandler
-ffestb_R12291_ (ffelexToken t)
-{
- ffelex_set_names (FALSE);
-
- if (!ffestb_subrargs_.name_list.ok)
- goto bad; /* :::::::::::::::::::: */
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R1229_start (ffesta_tokens[0],
- ffestb_subrargs_.name_list.args,
- ffestb_subrargs_.name_list.close_paren);
- ffelex_token_kill (ffestb_subrargs_.name_list.close_paren);
- ffestt_tokenlist_kill (ffestb_subrargs_.name_list.args);
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextSFUNCDEF, (ffeexprCallback) ffestb_R12292_);
-
- default:
- break;
- }
-
-bad: /* :::::::::::::::::::: */
- ffesta_ffebad_2t (FFEBAD_UNREC_STMT, ffesta_tokens[0], t);
- ffelex_token_kill (ffestb_subrargs_.name_list.close_paren);
- ffestt_tokenlist_kill (ffestb_subrargs_.name_list.args);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_R12292_ -- "STMTFUNCTION" OPEN_PAREN dummy-name-list CLOSE_PAREN
- EQUALS expr
-
- (ffestb_R12292_) // to expression handler
-
- Make sure the statement has a valid form for a STMTFUNCTION statement. If
- it does, implement the statement. */
-
-static ffelexHandler
-ffestb_R12292_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- if (expr == NULL)
- goto bad; /* :::::::::::::::::::: */
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (!ffesta_is_inhibited ())
- ffestc_R1229_finish (expr, ft);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
-bad: /* :::::::::::::::::::: */
- ffestc_R1229_finish (NULL, NULL);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "statement-function-definition", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_chartype -- Parse the CHARACTER statement
-
- return ffestb_decl_chartype; // to lexer
-
- Make sure the statement has a valid form for the CHARACTER statement. If
- it does, implement the statement. */
-
-ffelexHandler
-ffestb_decl_chartype (ffelexToken t)
-{
- ffeTokenLength i;
- unsigned const char *p;
-
- ffestb_local_.decl.type = FFESTP_typeCHARACTER;
- ffestb_local_.decl.recursive = NULL;
- ffestb_local_.decl.parameter = FALSE; /* No PARAMETER attribute seen. */
- ffestb_local_.decl.coloncolon = FALSE; /* No COLONCOLON seen. */
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstCHRCTR)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_decl_start (ffestb_local_.decl.type, ffesta_tokens[0],
- NULL, NULL, NULL, NULL);
- return (ffelexHandler) ffestb_decl_attrs_;
-
- case FFELEX_typeCOLONCOLON:
- ffestb_local_.decl.coloncolon = TRUE;
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_decl_start (ffestb_local_.decl.type, ffesta_tokens[0],
- NULL, NULL, NULL, NULL);
- return (ffelexHandler) ffestb_decl_ents_;
-
- case FFELEX_typeASTERISK:
- ffesta_confirmed ();
- ffestb_local_.decl.handler = (ffelexHandler) ffestb_decl_chartype1_;
- ffestb_local_.decl.badname = "TYPEDECL";
- return (ffelexHandler) ffestb_decl_starlen_;
-
- case FFELEX_typeOPEN_PAREN:
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- ffestb_local_.decl.handler = (ffelexHandler) ffestb_decl_attrsp_;
- ffestb_local_.decl.badname = "_TYPEDECL";
- return (ffelexHandler) ffestb_decl_typeparams_;
-
- case FFELEX_typeNAME:
- ffesta_confirmed ();
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- return (ffelexHandler) ffestb_decl_entsp_ (t);
- }
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstCHRCTR)
- goto bad_0; /* :::::::::::::::::::: */
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlCHRCTR);
- switch (ffelex_token_type (t))
- {
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- break;
-
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- if (*p != '\0')
- break;
- if (!ffesta_is_inhibited ())
- ffestc_decl_start (ffestb_local_.decl.type, ffesta_tokens[0],
- NULL, NULL, NULL, NULL);
- return (ffelexHandler) ffestb_decl_attrs_;
-
- case FFELEX_typeCOLONCOLON:
- ffestb_local_.decl.coloncolon = TRUE;
- ffesta_confirmed ();
- if (*p != '\0')
- goto bad_i; /* :::::::::::::::::::: */
- if (!ffesta_is_inhibited ())
- ffestc_decl_start (ffestb_local_.decl.type, ffesta_tokens[0],
- NULL, NULL, NULL, NULL);
- return (ffelexHandler) ffestb_decl_ents_;
-
- case FFELEX_typeASTERISK:
- ffesta_confirmed ();
- if (*p != '\0')
- break;
- ffestb_local_.decl.handler = (ffelexHandler) ffestb_decl_chartype1_;
- ffestb_local_.decl.badname = "TYPEDECL";
- return (ffelexHandler) ffestb_decl_starlen_;
-
- case FFELEX_typeSLASH:
- ffesta_confirmed ();
- if (*p != '\0')
- break;
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeOPEN_PAREN:
- if (*p != '\0')
- break;
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- ffestb_local_.decl.handler = (ffelexHandler) ffestb_decl_attrsp_;
- ffestb_local_.decl.badname = "TYPEDECL";
- return (ffelexHandler) ffestb_decl_typeparams_;
- }
- if (!ffesrc_is_name_init (*p))
- goto bad_i; /* :::::::::::::::::::: */
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- ffesta_tokens[1] = ffelex_token_names_from_names (ffesta_tokens[0], i, 0);
- return (ffelexHandler) ffestb_decl_entsp_2_ (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "type-declaration", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_chartype1_ -- "CHARACTER" ASTERISK char-length
-
- return ffestb_decl_chartype1_; // to lexer
-
- Handle COMMA, COLONCOLON, or anything else. */
-
-static ffelexHandler
-ffestb_decl_chartype1_ (ffelexToken t)
-{
- ffelex_set_names (FALSE);
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOLONCOLON:
- ffestb_local_.decl.coloncolon = TRUE;
- /* Fall through. */
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_decl_start (ffestb_local_.decl.type, ffesta_tokens[0],
- NULL, NULL, ffestb_local_.decl.len, ffestb_local_.decl.lent);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- return (ffelexHandler) ffestb_decl_ents_;
-
- default:
- return (ffelexHandler) ffestb_decl_entsp_ (t);
- }
-}
-
-/* ffestb_decl_dbltype -- Parse the DOUBLEPRECISION/DOUBLECOMPLEX statement
-
- return ffestb_decl_dbltype; // to lexer
-
- Make sure the statement has a valid form for the DOUBLEPRECISION/
- DOUBLECOMPLEX statement. If it does, implement the statement. */
-
-ffelexHandler
-ffestb_decl_dbltype (ffelexToken t)
-{
- ffeTokenLength i;
- unsigned const char *p;
-
- ffestb_local_.decl.type = ffestb_args.decl.type;
- ffestb_local_.decl.recursive = NULL;
- ffestb_local_.decl.parameter = FALSE; /* No PARAMETER attribute seen. */
- ffestb_local_.decl.coloncolon = FALSE; /* No COLONCOLON seen. */
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_decl_start (ffestb_local_.decl.type, ffesta_tokens[0],
- NULL, NULL, NULL, NULL);
- return (ffelexHandler) ffestb_decl_attrs_;
-
- case FFELEX_typeCOLONCOLON:
- ffestb_local_.decl.coloncolon = TRUE;
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_decl_start (ffestb_local_.decl.type, ffesta_tokens[0],
- NULL, NULL, NULL, NULL);
- return (ffelexHandler) ffestb_decl_ents_;
-
- case FFELEX_typeNAME:
- ffesta_confirmed ();
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- return (ffelexHandler) ffestb_decl_entsp_ (t);
- }
-
- case FFELEX_typeNAMES:
- p = ffelex_token_text (ffesta_tokens[0]) + (i = ffestb_args.decl.len);
- switch (ffelex_token_type (t))
- {
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- break;
-
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- if (*p != '\0')
- break;
- if (!ffesta_is_inhibited ())
- ffestc_decl_start (ffestb_local_.decl.type, ffesta_tokens[0],
- NULL, NULL, NULL, NULL);
- return (ffelexHandler) ffestb_decl_attrs_;
-
- case FFELEX_typeCOLONCOLON:
- ffestb_local_.decl.coloncolon = TRUE;
- ffesta_confirmed ();
- if (*p != '\0')
- goto bad_i; /* :::::::::::::::::::: */
- if (!ffesta_is_inhibited ())
- ffestc_decl_start (ffestb_local_.decl.type, ffesta_tokens[0],
- NULL, NULL, NULL, NULL);
- return (ffelexHandler) ffestb_decl_ents_;
-
- case FFELEX_typeSLASH:
- ffesta_confirmed ();
- if (*p != '\0')
- break;
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeOPEN_PAREN:
- if (*p != '\0')
- break;
- goto bad_1; /* :::::::::::::::::::: */
- }
- if (!ffesrc_is_name_init (*p))
- goto bad_i; /* :::::::::::::::::::: */
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- ffesta_tokens[1] = ffelex_token_names_from_names (ffesta_tokens[0], i, 0);
- return (ffelexHandler) ffestb_decl_entsp_2_ (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "type-declaration", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_double -- Parse the DOUBLE PRECISION/DOUBLE COMPLEX statement
-
- return ffestb_decl_double; // to lexer
-
- Make sure the statement has a valid form for the DOUBLE PRECISION/
- DOUBLE COMPLEX statement. If it does, implement the statement. */
-
-ffelexHandler
-ffestb_decl_double (ffelexToken t)
-{
- ffestb_local_.decl.recursive = NULL;
- ffestb_local_.decl.parameter = FALSE; /* No PARAMETER attribute seen. */
- ffestb_local_.decl.coloncolon = FALSE; /* No COLONCOLON seen. */
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstDBL)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNAME:
- ffesta_confirmed ();
- switch (ffestr_second (t))
- {
- case FFESTR_secondCOMPLEX:
- ffestb_local_.decl.type = FFESTP_typeDBLCMPLX;
- break;
-
- case FFESTR_secondPRECISION:
- ffestb_local_.decl.type = FFESTP_typeDBLPRCSN;
- break;
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- return (ffelexHandler) ffestb_decl_attrsp_;
- }
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-}
-
-/* ffestb_decl_gentype -- Parse the INTEGER/REAL/COMPLEX/LOGICAL statement
-
- return ffestb_decl_gentype; // to lexer
-
- Make sure the statement has a valid form for the INTEGER/REAL/COMPLEX/
- LOGICAL statement. If it does, implement the statement. */
-
-ffelexHandler
-ffestb_decl_gentype (ffelexToken t)
-{
- ffeTokenLength i;
- unsigned const char *p;
-
- ffestb_local_.decl.type = ffestb_args.decl.type;
- ffestb_local_.decl.recursive = NULL;
- ffestb_local_.decl.parameter = FALSE; /* No PARAMETER attribute seen. */
- ffestb_local_.decl.coloncolon = FALSE; /* No COLONCOLON seen. */
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_decl_start (ffestb_local_.decl.type, ffesta_tokens[0],
- NULL, NULL, NULL, NULL);
- return (ffelexHandler) ffestb_decl_attrs_;
-
- case FFELEX_typeCOLONCOLON:
- ffestb_local_.decl.coloncolon = TRUE;
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_decl_start (ffestb_local_.decl.type, ffesta_tokens[0],
- NULL, NULL, NULL, NULL);
- return (ffelexHandler) ffestb_decl_ents_;
-
- case FFELEX_typeASTERISK:
- ffesta_confirmed ();
- ffestb_local_.decl.handler = (ffelexHandler) ffestb_decl_attrsp_;
- ffestb_local_.decl.badname = "TYPEDECL";
- return (ffelexHandler) ffestb_decl_starkind_;
-
- case FFELEX_typeOPEN_PAREN:
- ffestb_local_.decl.handler = (ffelexHandler) ffestb_decl_attrsp_;
- ffestb_local_.decl.badname = "TYPEDECL";
- return (ffelexHandler) ffestb_decl_kindparam_;
-
- case FFELEX_typeNAME:
- ffesta_confirmed ();
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- return (ffelexHandler) ffestb_decl_entsp_ (t);
- }
-
- case FFELEX_typeNAMES:
- p = ffelex_token_text (ffesta_tokens[0]) + (i = ffestb_args.decl.len);
- switch (ffelex_token_type (t))
- {
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- break;
-
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- if (*p != '\0')
- break;
- if (!ffesta_is_inhibited ())
- ffestc_decl_start (ffestb_local_.decl.type, ffesta_tokens[0],
- NULL, NULL, NULL, NULL);
- return (ffelexHandler) ffestb_decl_attrs_;
-
- case FFELEX_typeCOLONCOLON:
- ffestb_local_.decl.coloncolon = TRUE;
- ffesta_confirmed ();
- if (*p != '\0')
- goto bad_i; /* :::::::::::::::::::: */
- if (!ffesta_is_inhibited ())
- ffestc_decl_start (ffestb_local_.decl.type, ffesta_tokens[0],
- NULL, NULL, NULL, NULL);
- return (ffelexHandler) ffestb_decl_ents_;
-
- case FFELEX_typeSLASH:
- ffesta_confirmed ();
- if (*p != '\0')
- break;
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeASTERISK:
- ffesta_confirmed ();
- if (*p != '\0')
- break;
- ffestb_local_.decl.handler = (ffelexHandler) ffestb_decl_attrsp_;
- ffestb_local_.decl.badname = "TYPEDECL";
- return (ffelexHandler) ffestb_decl_starkind_;
-
- case FFELEX_typeOPEN_PAREN:
- if (*p != '\0')
- break;
- ffestb_local_.decl.handler = (ffelexHandler) ffestb_decl_attrsp_;
- ffestb_local_.decl.badname = "TYPEDECL";
- return (ffelexHandler) ffestb_decl_kindparam_;
- }
- if (!ffesrc_is_name_init (*p))
- goto bad_i; /* :::::::::::::::::::: */
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- ffesta_tokens[1] = ffelex_token_names_from_names (ffesta_tokens[0], i, 0);
- return (ffelexHandler) ffestb_decl_entsp_2_ (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "type-declaration", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_attrs_ -- "type" [type parameters] COMMA
-
- return ffestb_decl_attrs_; // to lexer
-
- Handle NAME of an attribute. */
-
-static ffelexHandler
-ffestb_decl_attrs_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- switch (ffestr_first (t))
- {
- case FFESTR_firstDIMENSION:
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_decl_attrs_1_;
-
- case FFESTR_firstEXTERNAL:
- if (!ffesta_is_inhibited ())
- ffestc_decl_attrib (FFESTP_attribEXTERNAL, t,
- FFESTR_otherNone, NULL);
- return (ffelexHandler) ffestb_decl_attrs_7_;
-
- case FFESTR_firstINTRINSIC:
- if (!ffesta_is_inhibited ())
- ffestc_decl_attrib (FFESTP_attribINTRINSIC, t,
- FFESTR_otherNone, NULL);
- return (ffelexHandler) ffestb_decl_attrs_7_;
-
- case FFESTR_firstPARAMETER:
- ffestb_local_.decl.parameter = TRUE;
- if (!ffesta_is_inhibited ())
- ffestc_decl_attrib (FFESTP_attribPARAMETER, t,
- FFESTR_otherNone, NULL);
- return (ffelexHandler) ffestb_decl_attrs_7_;
-
- case FFESTR_firstSAVE:
- if (!ffesta_is_inhibited ())
- ffestc_decl_attrib (FFESTP_attribSAVE, t,
- FFESTR_otherNone, NULL);
- return (ffelexHandler) ffestb_decl_attrs_7_;
-
- default:
- ffesta_ffebad_1t (FFEBAD_INVALID_TYPEDECL_ATTR, t);
- return (ffelexHandler) ffestb_decl_attrs_7_;
- }
- break;
-
- default:
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_decl_finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_attrs_1_ -- "type" [type parameters] ",DIMENSION"
-
- return ffestb_decl_attrs_1_; // to lexer
-
- Handle OPEN_PAREN. */
-
-static ffelexHandler
-ffestb_decl_attrs_1_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_PAREN:
- ffestb_subrargs_.dim_list.dims = ffestt_dimlist_create ();
- ffestb_subrargs_.dim_list.handler = (ffelexHandler) ffestb_decl_attrs_2_;
- ffestb_subrargs_.dim_list.pool = ffesta_scratch_pool;
- ffestb_subrargs_.dim_list.ctx = ffesta_is_entry_valid
- ? FFEEXPR_contextDIMLIST : FFEEXPR_contextDIMLISTCOMMON;
-#ifdef FFECOM_dimensionsMAX
- ffestb_subrargs_.dim_list.ndims = 0;
-#endif
- return (ffelexHandler) ffeexpr_rhs (ffesta_scratch_pool,
- ffestb_subrargs_.dim_list.ctx,
- (ffeexprCallback) ffestb_subr_dimlist_);
-
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_ffebad_1t (FFEBAD_INVALID_TYPEDECL_ATTR, ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffestb_decl_attrs_7_ (t);
-
- default:
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_decl_finish ();
- ffelex_token_kill (ffesta_tokens[1]);
- ffesta_ffebad_1t (FFEBAD_INVALID_TYPEDECL_ATTR, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_attrs_2_ -- "type" [type parameters] ",DIMENSION" OPEN_PAREN
- dimlist CLOSE_PAREN
-
- return ffestb_decl_attrs_2_; // to lexer
-
- Handle COMMA or COLONCOLON. */
-
-static ffelexHandler
-ffestb_decl_attrs_2_ (ffelexToken t)
-{
- if (!ffestb_subrargs_.dim_list.ok)
- goto bad; /* :::::::::::::::::::: */
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- if (!ffesta_is_inhibited ())
- ffestc_decl_attrib (FFESTP_attribDIMENSION, ffesta_tokens[1],
- FFESTR_otherNone, ffestb_subrargs_.dim_list.dims);
- ffelex_token_kill (ffesta_tokens[1]);
- ffestt_dimlist_kill (ffestb_subrargs_.dim_list.dims);
- return (ffelexHandler) ffestb_decl_attrs_7_ (t);
-
- default:
- break;
- }
-
-bad: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", t);
- if (!ffesta_is_inhibited ())
- ffestc_decl_finish ();
- ffestt_dimlist_kill (ffestb_subrargs_.dim_list.dims);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_attrs_7_ -- "type" [type parameters] attribute
-
- return ffestb_decl_attrs_7_; // to lexer
-
- Handle COMMA (another attribute) or COLONCOLON (entities). */
-
-static ffelexHandler
-ffestb_decl_attrs_7_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- return (ffelexHandler) ffestb_decl_attrs_;
-
- case FFELEX_typeCOLONCOLON:
- ffestb_local_.decl.coloncolon = TRUE;
- return (ffelexHandler) ffestb_decl_ents_;
-
- default:
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_decl_finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_attrsp_ -- "type" [type parameters]
-
- return ffestb_decl_attrsp_; // to lexer
-
- Handle COMMA (meaning we have attributes), COLONCOLON (meaning we have
- no attributes but entities), or go to entsp to see about functions or
- entities. */
-
-static ffelexHandler
-ffestb_decl_attrsp_ (ffelexToken t)
-{
- ffelex_set_names (FALSE);
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_decl_start (ffestb_local_.decl.type, ffesta_tokens[0],
- ffestb_local_.decl.kind, ffestb_local_.decl.kindt,
- ffestb_local_.decl.len, ffestb_local_.decl.lent);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- return (ffelexHandler) ffestb_decl_attrs_;
-
- case FFELEX_typeCOLONCOLON:
- ffestb_local_.decl.coloncolon = TRUE;
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_decl_start (ffestb_local_.decl.type, ffesta_tokens[0],
- ffestb_local_.decl.kind, ffestb_local_.decl.kindt,
- ffestb_local_.decl.len, ffestb_local_.decl.lent);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- return (ffelexHandler) ffestb_decl_ents_;
-
- default:
- return (ffelexHandler) ffestb_decl_entsp_ (t);
- }
-}
-
-/* ffestb_decl_ents_ -- "type" [type parameters] [attributes "::"]
-
- return ffestb_decl_ents_; // to lexer
-
- Handle NAME of an entity. */
-
-static ffelexHandler
-ffestb_decl_ents_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_decl_ents_1_;
-
- default:
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_decl_finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_ents_1_ -- "type" [type parameters] [attributes "::"] NAME
-
- return ffestb_decl_ents_1_; // to lexer
-
- Handle ASTERISK, OPEN_PAREN, EQUALS, SLASH, COMMA, or EOS/SEMICOLON. */
-
-static ffelexHandler
-ffestb_decl_ents_1_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (!ffesta_is_inhibited ())
- ffestc_decl_item (ffesta_tokens[1], NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, FALSE);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffestb_decl_ents_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (!ffesta_is_inhibited ())
- {
- ffestc_decl_item (ffesta_tokens[1], NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, FALSE);
- ffestc_decl_finish ();
- }
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffesta_zero (t);
-
- case FFELEX_typeASTERISK:
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- return (ffelexHandler) ffestb_decl_ents_2_;
-
- case FFELEX_typeOPEN_PAREN:
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- return (ffelexHandler) ffestb_decl_ents_3_ (t);
-
- case FFELEX_typeEQUALS:
- case FFELEX_typeSLASH:
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_subrargs_.dim_list.dims = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- return (ffelexHandler) ffestb_decl_ents_7_ (t);
-
- default:
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_decl_finish ();
- ffelex_token_kill (ffesta_tokens[1]);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_ents_2_ -- "type" [type parameters] [attributes "::"] NAME
- ASTERISK
-
- return ffestb_decl_ents_2_; // to lexer
-
- Handle NUMBER or OPEN_PAREN. */
-
-static ffelexHandler
-ffestb_decl_ents_2_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNUMBER:
- if (ffestb_local_.decl.type != FFESTP_typeCHARACTER)
- {
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = ffelex_token_use (t);
- return (ffelexHandler) ffestb_decl_ents_3_;
- }
- /* Fall through. *//* (CHARACTER's *n is always a len spec. */
- case FFELEX_typeOPEN_PAREN:/* "*(" is after the (omitted)
- "(array-spec)". */
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_subrargs_.dim_list.dims = NULL;
- return (ffelexHandler) ffestb_decl_ents_5_ (t);
-
- default:
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_decl_finish ();
- ffelex_token_kill (ffesta_tokens[1]);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_ents_3_ -- "type" [type parameters] [attributes "::"] NAME
- [ASTERISK NUMBER]
-
- return ffestb_decl_ents_3_; // to lexer
-
- Handle ASTERISK, OPEN_PAREN, EQUALS, SLASH, COMMA, or EOS/SEMICOLON. */
-
-static ffelexHandler
-ffestb_decl_ents_3_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (!ffesta_is_inhibited ())
- ffestc_decl_item (ffesta_tokens[1], ffestb_local_.decl.kind,
- ffestb_local_.decl.kindt, NULL, NULL, NULL, NULL, NULL, FALSE);
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- return (ffelexHandler) ffestb_decl_ents_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (!ffesta_is_inhibited ())
- {
- ffestc_decl_item (ffesta_tokens[1], ffestb_local_.decl.kind,
- ffestb_local_.decl.kindt, NULL, NULL, NULL, NULL, NULL, FALSE);
- ffestc_decl_finish ();
- }
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- return (ffelexHandler) ffesta_zero (t);
-
- case FFELEX_typeASTERISK:
- ffestb_subrargs_.dim_list.dims = NULL;
- return (ffelexHandler) ffestb_decl_ents_5_;
-
- case FFELEX_typeOPEN_PAREN:
- ffestb_subrargs_.dim_list.dims = ffestt_dimlist_create ();
- ffestb_subrargs_.dim_list.handler = (ffelexHandler) ffestb_decl_ents_4_;
- ffestb_subrargs_.dim_list.pool = ffesta_output_pool;
- ffestb_subrargs_.dim_list.ctx = ffesta_is_entry_valid
- ? FFEEXPR_contextDIMLIST : FFEEXPR_contextDIMLISTCOMMON;
-#ifdef FFECOM_dimensionsMAX
- ffestb_subrargs_.dim_list.ndims = 0;
-#endif
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- ffestb_subrargs_.dim_list.ctx,
- (ffeexprCallback) ffestb_subr_dimlist_);
-
- case FFELEX_typeEQUALS:
- case FFELEX_typeSLASH:
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_subrargs_.dim_list.dims = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- return (ffelexHandler) ffestb_decl_ents_7_ (t);
-
- default:
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_decl_finish ();
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_ents_4_ -- "type" [type parameters] [attributes "::"] NAME
- [ASTERISK NUMBER] [OPEN_PAREN dimlist CLOSE_PAREN]
-
- return ffestb_decl_ents_4_; // to lexer
-
- Handle ASTERISK, EQUALS, SLASH, COMMA, or EOS/SEMICOLON. */
-
-static ffelexHandler
-ffestb_decl_ents_4_ (ffelexToken t)
-{
- ffelexToken nt;
-
- if (!ffestb_subrargs_.dim_list.ok)
- goto bad; /* :::::::::::::::::::: */
-
- if (ffelex_token_type (ffesta_tokens[1]) == FFELEX_typeNAMES)
- {
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeASTERISK:
- case FFELEX_typeSLASH: /* But NOT FFELEX_typeEQUALS. */
- case FFELEX_typeCOLONCOLON: /* Actually an error. */
- break; /* Confirm and handle. */
-
- default: /* Perhaps EQUALS, as in
- INTEGERFUNCTIONX(A)=B. */
- goto bad; /* :::::::::::::::::::: */
- }
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- {
- nt = ffelex_token_name_from_names (ffesta_tokens[1], 0, 0);
- ffelex_token_kill (ffesta_tokens[1]);
- ffesta_tokens[1] = nt;
- ffestc_decl_start (ffestb_local_.decl.type, ffesta_tokens[0],
- NULL, NULL, NULL, NULL);
- }
- }
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (!ffesta_is_inhibited ())
- ffestc_decl_item (ffesta_tokens[1], ffestb_local_.decl.kind,
- ffestb_local_.decl.kindt, ffestb_subrargs_.dim_list.dims,
- ffestb_local_.decl.len, ffestb_local_.decl.lent, NULL, NULL,
- FALSE);
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffestt_dimlist_kill (ffestb_subrargs_.dim_list.dims);
- return (ffelexHandler) ffestb_decl_ents_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (!ffesta_is_inhibited ())
- {
- ffestc_decl_item (ffesta_tokens[1], ffestb_local_.decl.kind,
- ffestb_local_.decl.kindt, ffestb_subrargs_.dim_list.dims,
- ffestb_local_.decl.len, ffestb_local_.decl.lent, NULL, NULL,
- FALSE);
- ffestc_decl_finish ();
- }
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffestt_dimlist_kill (ffestb_subrargs_.dim_list.dims);
- return (ffelexHandler) ffesta_zero (t);
-
- case FFELEX_typeASTERISK:
- if (ffestb_local_.decl.lent != NULL)
- break; /* Can't specify "*length" twice. */
- return (ffelexHandler) ffestb_decl_ents_5_;
-
- case FFELEX_typeEQUALS:
- case FFELEX_typeSLASH:
- return (ffelexHandler) ffestb_decl_ents_7_ (t);
-
- default:
- break;
- }
-
-bad: /* :::::::::::::::::::: */
- if ((ffelex_token_type (ffesta_tokens[1]) != FFELEX_typeNAMES)
- && !ffesta_is_inhibited ())
- ffestc_decl_finish ();
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffestt_dimlist_kill (ffestb_subrargs_.dim_list.dims);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_ents_5_ -- "type" [type parameters] [attributes "::"] NAME
- [ASTERISK NUMBER] [OPEN_PAREN dimlist CLOSE_PAREN]
- ASTERISK
-
- return ffestb_decl_ents_5_; // to lexer
-
- Handle NUMBER or OPEN_PAREN. */
-
-static ffelexHandler
-ffestb_decl_ents_5_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNUMBER:
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = ffelex_token_use (t);
- return (ffelexHandler) ffestb_decl_ents_7_;
-
- case FFELEX_typeOPEN_PAREN:
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextCHARACTERSIZE, (ffeexprCallback) ffestb_decl_ents_6_);
-
- default:
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_decl_finish ();
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_subrargs_.dim_list.dims != NULL)
- ffestt_dimlist_kill (ffestb_subrargs_.dim_list.dims);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_ents_6_ -- "type" [type parameters] [attributes "::"] NAME
- [ASTERISK NUMBER] [OPEN_PAREN dimlist CLOSE_PAREN]
- ASTERISK OPEN_PAREN expr
-
- (ffestb_decl_ents_6_) // to expression handler
-
- Handle CLOSE_PAREN. */
-
-static ffelexHandler
-ffestb_decl_ents_6_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- break;
- ffestb_local_.decl.len = expr;
- ffestb_local_.decl.lent = ffelex_token_use (ft);
- return (ffelexHandler) ffestb_decl_ents_7_;
-
- default:
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_decl_finish ();
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_subrargs_.dim_list.dims != NULL)
- ffestt_dimlist_kill (ffestb_subrargs_.dim_list.dims);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_ents_7_ -- "type" [type parameters] [attributes "::"] NAME
- [ASTERISK NUMBER] [OPEN_PAREN dimlist CLOSE_PAREN]
- [ASTERISK charlength]
-
- return ffestb_decl_ents_7_; // to lexer
-
- Handle EQUALS, SLASH, COMMA, or EOS/SEMICOLON. */
-
-static ffelexHandler
-ffestb_decl_ents_7_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (!ffesta_is_inhibited ())
- ffestc_decl_item (ffesta_tokens[1], ffestb_local_.decl.kind,
- ffestb_local_.decl.kindt, ffestb_subrargs_.dim_list.dims,
- ffestb_local_.decl.len, ffestb_local_.decl.lent, NULL, NULL,
- FALSE);
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_subrargs_.dim_list.dims != NULL)
- ffestt_dimlist_kill (ffestb_subrargs_.dim_list.dims);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- return (ffelexHandler) ffestb_decl_ents_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (!ffesta_is_inhibited ())
- {
- ffestc_decl_item (ffesta_tokens[1], ffestb_local_.decl.kind,
- ffestb_local_.decl.kindt, ffestb_subrargs_.dim_list.dims,
- ffestb_local_.decl.len, ffestb_local_.decl.lent, NULL, NULL,
- FALSE);
- ffestc_decl_finish ();
- }
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_subrargs_.dim_list.dims != NULL)
- ffestt_dimlist_kill (ffestb_subrargs_.dim_list.dims);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- return (ffelexHandler) ffesta_zero (t);
-
- case FFELEX_typeEQUALS:
- if (!ffestb_local_.decl.coloncolon)
- ffesta_ffebad_1t (FFEBAD_INVALID_TYPEDECL_INIT, t);
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- ffestb_local_.decl.parameter ? FFEEXPR_contextPARAMETER
- : FFEEXPR_contextINITVAL, (ffeexprCallback) ffestb_decl_ents_8_);
-
- case FFELEX_typeSLASH:
- if (!ffesta_is_inhibited ())
- {
- ffestc_decl_item (ffesta_tokens[1], ffestb_local_.decl.kind,
- ffestb_local_.decl.kindt, ffestb_subrargs_.dim_list.dims,
- ffestb_local_.decl.len, ffestb_local_.decl.lent, NULL, NULL,
- TRUE);
- ffestc_decl_itemstartvals ();
- }
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_subrargs_.dim_list.dims != NULL)
- ffestt_dimlist_kill (ffestb_subrargs_.dim_list.dims);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- return (ffelexHandler) ffeexpr_rhs
- (ffesta_output_pool, FFEEXPR_contextDATA,
- (ffeexprCallback) ffestb_decl_ents_9_);
-
- default:
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_decl_finish ();
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_subrargs_.dim_list.dims != NULL)
- ffestt_dimlist_kill (ffestb_subrargs_.dim_list.dims);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_ents_8_ -- "type" [type parameters] [attributes "::"] NAME
- [ASTERISK NUMBER] [OPEN_PAREN dimlist CLOSE_PAREN]
- [ASTERISK charlength] EQUALS expr
-
- (ffestb_decl_ents_8_) // to expression handler
-
- Handle COMMA or EOS/SEMICOLON. */
-
-static ffelexHandler
-ffestb_decl_ents_8_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- ffestc_decl_item (ffesta_tokens[1], ffestb_local_.decl.kind,
- ffestb_local_.decl.kindt, ffestb_subrargs_.dim_list.dims,
- ffestb_local_.decl.len, ffestb_local_.decl.lent, expr, ft,
- FALSE);
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_subrargs_.dim_list.dims != NULL)
- ffestt_dimlist_kill (ffestb_subrargs_.dim_list.dims);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- return (ffelexHandler) ffestb_decl_ents_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (!ffesta_is_inhibited ())
- {
- ffestc_decl_item (ffesta_tokens[1], ffestb_local_.decl.kind,
- ffestb_local_.decl.kindt, ffestb_subrargs_.dim_list.dims,
- ffestb_local_.decl.len, ffestb_local_.decl.lent, expr, ft,
- FALSE);
- ffestc_decl_finish ();
- }
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_subrargs_.dim_list.dims != NULL)
- ffestt_dimlist_kill (ffestb_subrargs_.dim_list.dims);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_decl_finish ();
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_subrargs_.dim_list.dims != NULL)
- ffestt_dimlist_kill (ffestb_subrargs_.dim_list.dims);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_ents_9_ -- "type" ... SLASH expr
-
- (ffestb_decl_ents_9_) // to expression handler
-
- Handle ASTERISK, COMMA, or SLASH. */
-
-static ffelexHandler
-ffestb_decl_ents_9_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- ffestc_decl_itemvalue (NULL, NULL, expr, ft);
- return (ffelexHandler) ffeexpr_rhs
- (ffesta_output_pool, FFEEXPR_contextDATA,
- (ffeexprCallback) ffestb_decl_ents_9_);
-
- case FFELEX_typeASTERISK:
- if (expr == NULL)
- break;
- ffestb_local_.decl.expr = expr;
- ffesta_tokens[1] = ffelex_token_use (ft);
- return (ffelexHandler) ffeexpr_rhs
- (ffesta_output_pool, FFEEXPR_contextDATA,
- (ffeexprCallback) ffestb_decl_ents_10_);
-
- case FFELEX_typeSLASH:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- {
- ffestc_decl_itemvalue (NULL, NULL, expr, ft);
- ffestc_decl_itemendvals (t);
- }
- return (ffelexHandler) ffestb_decl_ents_11_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- {
- ffestc_decl_itemendvals (t);
- ffestc_decl_finish ();
- }
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_ents_10_ -- "type" ... SLASH expr ASTERISK expr
-
- (ffestb_decl_ents_10_) // to expression handler
-
- Handle COMMA or SLASH. */
-
-static ffelexHandler
-ffestb_decl_ents_10_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- ffestc_decl_itemvalue (ffestb_local_.decl.expr, ffesta_tokens[1],
- expr, ft);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffeexpr_rhs
- (ffesta_output_pool, FFEEXPR_contextDATA,
- (ffeexprCallback) ffestb_decl_ents_9_);
-
- case FFELEX_typeSLASH:
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- {
- ffestc_decl_itemvalue (ffestb_local_.decl.expr, ffesta_tokens[1],
- expr, ft);
- ffestc_decl_itemendvals (t);
- }
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffestb_decl_ents_11_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", t);
- break;
- }
-
- if (!ffesta_is_inhibited ())
- {
- ffestc_decl_itemendvals (t);
- ffestc_decl_finish ();
- }
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_ents_11_ -- "type" [type parameters] [attributes "::"] NAME
- [ASTERISK NUMBER] [OPEN_PAREN dimlist CLOSE_PAREN]
- [ASTERISK charlength] SLASH initvals SLASH
-
- return ffestb_decl_ents_11_; // to lexer
-
- Handle COMMA or EOS/SEMICOLON. */
-
-static ffelexHandler
-ffestb_decl_ents_11_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- return (ffelexHandler) ffestb_decl_ents_;
-
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (!ffesta_is_inhibited ())
- ffestc_decl_finish ();
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- if (!ffesta_is_inhibited ())
- ffestc_decl_finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_entsp_ -- "type" [type parameters]
-
- return ffestb_decl_entsp_; // to lexer
-
- Handle NAME or NAMES beginning either an entity (object) declaration or
- a function definition.. */
-
-static ffelexHandler
-ffestb_decl_entsp_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_confirmed ();
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_decl_entsp_1_;
-
- case FFELEX_typeNAMES:
- ffesta_confirmed ();
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_decl_entsp_2_;
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "type-declaration", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_entsp_1_ -- "type" [type parameters] NAME
-
- return ffestb_decl_entsp_1_; // to lexer
-
- If we get another NAME token here, then the previous one must be
- "RECURSIVE" or "FUNCTION" and we handle it accordingly. Otherwise,
- we send the previous and current token through to _ents_. */
-
-static ffelexHandler
-ffestb_decl_entsp_1_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- switch (ffestr_first (ffesta_tokens[1]))
- {
- case FFESTR_firstFUNCTION:
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffestb_decl_funcname_ (t);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FUNCTION", ffesta_tokens[1]);
- break;
- }
- break;
-
- default:
- if ((ffelex_token_type (ffesta_tokens[1]) != FFELEX_typeNAMES)
- && !ffesta_is_inhibited ())
- ffestc_decl_start (ffestb_local_.decl.type, ffesta_tokens[0],
- ffestb_local_.decl.kind, ffestb_local_.decl.kindt,
- ffestb_local_.decl.len, ffestb_local_.decl.lent);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- /* NAME/NAMES token already in ffesta_tokens[1]. */
- return (ffelexHandler) ffestb_decl_ents_1_ (t);
- }
-
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_entsp_2_ -- "type" [type parameters] NAMES
-
- return ffestb_decl_entsp_2_; // to lexer
-
- If we get an ASTERISK or OPEN_PAREN here, then if the previous NAMES
- begins with "FUNCTION" or "RECURSIVEFUNCTION" and is followed by a
- first-name-char, we have a possible syntactically ambiguous situation.
- Otherwise, we have a straightforward situation just as if we went
- through _entsp_1_ instead of here. */
-
-static ffelexHandler
-ffestb_decl_entsp_2_ (ffelexToken t)
-{
- ffelexToken nt;
- bool asterisk_ok;
- unsigned const char *p;
- ffeTokenLength i;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeASTERISK:
- ffesta_confirmed ();
- switch (ffestb_local_.decl.type)
- {
- case FFESTP_typeINTEGER:
- case FFESTP_typeREAL:
- case FFESTP_typeCOMPLEX:
- case FFESTP_typeLOGICAL:
- asterisk_ok = (ffestb_local_.decl.kindt == NULL);
- break;
-
- case FFESTP_typeCHARACTER:
- asterisk_ok = (ffestb_local_.decl.lent == NULL);
- break;
-
- case FFESTP_typeBYTE:
- case FFESTP_typeWORD:
- default:
- asterisk_ok = FALSE;
- break;
- }
- switch (ffestr_first (ffesta_tokens[1]))
- {
- case FFESTR_firstFUNCTION:
- if (!asterisk_ok)
- break; /* For our own convenience, treat as non-FN
- stmt. */
- p = ffelex_token_text (ffesta_tokens[1])
- + (i = FFESTR_firstlFUNCTION);
- if (!ffesrc_is_name_init (*p))
- break;
- ffestb_local_.decl.recursive = NULL;
- ffesta_tokens[2] = ffelex_token_name_from_names (ffesta_tokens[1],
- FFESTR_firstlFUNCTION, 0);
- return (ffelexHandler) ffestb_decl_entsp_3_;
-
- default:
- break;
- }
- break;
-
- case FFELEX_typeOPEN_PAREN:
- ffestb_local_.decl.aster_after = FALSE;
- switch (ffestr_first (ffesta_tokens[1]))
- {
- case FFESTR_firstFUNCTION:
- p = ffelex_token_text (ffesta_tokens[1])
- + (i = FFESTR_firstlFUNCTION);
- if (!ffesrc_is_name_init (*p))
- break;
- ffestb_local_.decl.recursive = NULL;
- ffesta_tokens[2] = ffelex_token_name_from_names (ffesta_tokens[1],
- FFESTR_firstlFUNCTION, 0);
- return (ffelexHandler) ffestb_decl_entsp_5_ (t);
-
- default:
- break;
- }
- if ((ffestb_local_.decl.kindt != NULL)
- || (ffestb_local_.decl.lent != NULL))
- break; /* Have kind/len type param, definitely not
- assignment stmt. */
- return (ffelexHandler) ffestb_decl_entsp_1_ (t);
-
- default:
- break;
- }
-
- nt = ffelex_token_name_from_names (ffesta_tokens[1], 0, 0);
- ffelex_token_kill (ffesta_tokens[1]);
- ffesta_tokens[1] = nt; /* Change NAMES to NAME. */
- return (ffelexHandler) ffestb_decl_entsp_1_ (t);
-}
-
-/* ffestb_decl_entsp_3_ -- "type" [type parameters] [RECURSIVE] FUNCTION
- NAME ASTERISK
-
- return ffestb_decl_entsp_3_; // to lexer
-
- Handle NUMBER or OPEN_PAREN. */
-
-static ffelexHandler
-ffestb_decl_entsp_3_ (ffelexToken t)
-{
- ffestb_local_.decl.aster_after = TRUE;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNUMBER:
- switch (ffestb_local_.decl.type)
- {
- case FFESTP_typeINTEGER:
- case FFESTP_typeREAL:
- case FFESTP_typeCOMPLEX:
- case FFESTP_typeLOGICAL:
- ffestb_local_.decl.kindt = ffelex_token_use (t);
- break;
-
- case FFESTP_typeCHARACTER:
- ffestb_local_.decl.lent = ffelex_token_use (t);
- break;
-
- case FFESTP_typeBYTE:
- case FFESTP_typeWORD:
- default:
- assert (FALSE);
- }
- return (ffelexHandler) ffestb_decl_entsp_5_;
-
- case FFELEX_typeOPEN_PAREN:
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextCHARACTERSIZE,
- (ffeexprCallback) ffestb_decl_entsp_4_);
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffelex_token_kill (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[2]);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FUNCTION", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_entsp_4_ -- "type" [type parameters] [RECURSIVE] FUNCTION
- NAME ASTERISK OPEN_PAREN expr
-
- (ffestb_decl_entsp_4_) // to expression handler
-
- Allow only CLOSE_PAREN; and deal with character-length expression. */
-
-static ffelexHandler
-ffestb_decl_entsp_4_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- break;
- switch (ffestb_local_.decl.type)
- {
- case FFESTP_typeCHARACTER:
- ffestb_local_.decl.len = expr;
- ffestb_local_.decl.lent = ffelex_token_use (ft);
- break;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FUNCTION", t);
- break;
- }
- return (ffelexHandler) ffestb_decl_entsp_5_;
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffelex_token_kill (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[2]);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FUNCTION", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_entsp_5_ -- "type" [type parameters] [RECURSIVE] FUNCTION
- NAME [type parameter]
-
- return ffestb_decl_entsp_5_; // to lexer
-
- Make sure the next token is an OPEN_PAREN. Get the arg list or dimension
- list. If it can't be an arg list, or if the CLOSE_PAREN is followed by
- something other than EOS/SEMICOLON or NAME, then treat as dimension list
- and handle statement as an R426/R501. If it can't be a dimension list, or
- if the CLOSE_PAREN is followed by NAME, treat as an arg list and handle
- statement as an R1219. If it can be either an arg list or a dimension
- list and if the CLOSE_PAREN is followed by EOS/SEMICOLON, ask FFESTC
- whether to treat the statement as an R426/R501 or an R1219 and act
- accordingly. */
-
-static ffelexHandler
-ffestb_decl_entsp_5_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_PAREN:
- if (ffestb_local_.decl.aster_after && (ffestb_local_.decl.len != NULL))
- { /* "CHARACTER[RECURSIVE]FUNCTIONxyz*(len-expr)
- (..." must be a function-stmt, since the
- (len-expr) cannot precede (array-spec) in
- an object declaration but can precede
- (name-list) in a function stmt. */
- ffelex_token_kill (ffesta_tokens[1]);
- ffesta_tokens[1] = ffesta_tokens[2];
- return (ffelexHandler) ffestb_decl_funcname_4_ (t);
- }
- ffestb_local_.decl.toklist = ffestt_tokenlist_create ();
- ffestb_local_.decl.empty = TRUE;
- ffestt_tokenlist_append (ffestb_local_.decl.toklist, ffelex_token_use (t));
- return (ffelexHandler) ffestb_decl_entsp_6_;
-
- default:
- break;
- }
-
- assert (ffestb_local_.decl.aster_after);
- ffesta_confirmed (); /* We've seen an ASTERISK, so even EQUALS
- confirmed. */
- ffestb_subr_ambig_to_ents_ ();
- ffestb_subrargs_.dim_list.dims = NULL;
- return (ffelexHandler) ffestb_decl_ents_7_ (t);
-}
-
-/* ffestb_decl_entsp_6_ -- "type" [type parameters] [RECURSIVE] FUNCTION
- NAME [type parameter] OPEN_PAREN
-
- return ffestb_decl_entsp_6_; // to lexer
-
- If CLOSE_PAREN, we definitely have an R1219 function-stmt, since
- the notation "name()" is invalid for a declaration. */
-
-static ffelexHandler
-ffestb_decl_entsp_6_ (ffelexToken t)
-{
- ffelexHandler next;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- if (!ffestb_local_.decl.empty)
- { /* Trailing comma, just a warning for
- stmt func def, so allow ambiguity. */
- ffestt_tokenlist_append (ffestb_local_.decl.toklist,
- ffelex_token_use (t));
- return (ffelexHandler) ffestb_decl_entsp_8_;
- }
- ffelex_token_kill (ffesta_tokens[1]);
- ffesta_tokens[1] = ffesta_tokens[2];
- next = (ffelexHandler) ffestt_tokenlist_handle
- (ffestb_local_.decl.toklist, (ffelexHandler) ffestb_decl_funcname_4_);
- ffestt_tokenlist_kill (ffestb_local_.decl.toklist);
- return (ffelexHandler) (*next) (t);
-
- case FFELEX_typeNAME:
- ffestb_local_.decl.empty = FALSE;
- ffestt_tokenlist_append (ffestb_local_.decl.toklist, ffelex_token_use (t));
- return (ffelexHandler) ffestb_decl_entsp_7_;
-
- case FFELEX_typeEQUALS:
- case FFELEX_typePOINTS:
- case FFELEX_typePERCENT:
- case FFELEX_typePERIOD:
- case FFELEX_typeOPEN_PAREN:
- if ((ffestb_local_.decl.kindt != NULL)
- || (ffestb_local_.decl.lent != NULL))
- break; /* type(params)name or type*val name, either
- way confirmed. */
- return (ffelexHandler) ffestb_subr_ambig_nope_ (t);
-
- default:
- break;
- }
-
- ffesta_confirmed ();
- ffestb_subr_ambig_to_ents_ ();
- next = (ffelexHandler) ffestt_tokenlist_handle (ffestb_local_.decl.toklist,
- (ffelexHandler) ffestb_decl_ents_3_);
- ffestt_tokenlist_kill (ffestb_local_.decl.toklist);
- return (ffelexHandler) (*next) (t);
-}
-
-/* ffestb_decl_entsp_7_ -- "type" [type parameters] [RECURSIVE] FUNCTION
- NAME [type parameter] OPEN_PAREN NAME
-
- return ffestb_decl_entsp_7_; // to lexer
-
- Expect COMMA or CLOSE_PAREN to remain ambiguous, else not an R1219
- function-stmt. */
-
-static ffelexHandler
-ffestb_decl_entsp_7_ (ffelexToken t)
-{
- ffelexHandler next;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- ffestt_tokenlist_append (ffestb_local_.decl.toklist, ffelex_token_use (t));
- return (ffelexHandler) ffestb_decl_entsp_8_;
-
- case FFELEX_typeCOMMA:
- ffestt_tokenlist_append (ffestb_local_.decl.toklist, ffelex_token_use (t));
- return (ffelexHandler) ffestb_decl_entsp_6_;
-
- case FFELEX_typeEQUALS:
- case FFELEX_typePOINTS:
- case FFELEX_typePERCENT:
- case FFELEX_typePERIOD:
- case FFELEX_typeOPEN_PAREN:
- if ((ffestb_local_.decl.kindt != NULL)
- || (ffestb_local_.decl.lent != NULL))
- break; /* type(params)name or type*val name, either
- way confirmed. */
- return (ffelexHandler) ffestb_subr_ambig_nope_ (t);
-
- default:
- break;
- }
-
- ffesta_confirmed ();
- ffestb_subr_ambig_to_ents_ ();
- next = (ffelexHandler) ffestt_tokenlist_handle (ffestb_local_.decl.toklist,
- (ffelexHandler) ffestb_decl_ents_3_);
- ffestt_tokenlist_kill (ffestb_local_.decl.toklist);
- return (ffelexHandler) (*next) (t);
-}
-
-/* ffestb_decl_entsp_8_ -- "type" [type parameters] [RECURSIVE] FUNCTION
- NAME [type parameter] OPEN_PAREN name-list
- CLOSE_PAREN
-
- return ffestb_decl_entsp_8_; // to lexer
-
- If EOS/SEMICOLON, situation remains ambiguous, ask FFESTC to resolve
- it. If NAME (must be "RESULT", but that is checked later on),
- definitely an R1219 function-stmt. Anything else, handle as entity decl. */
-
-static ffelexHandler
-ffestb_decl_entsp_8_ (ffelexToken t)
-{
- ffelexHandler next;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (ffestc_is_decl_not_R1219 ())
- break;
- /* Fall through. */
- case FFELEX_typeNAME:
- ffesta_confirmed ();
- ffelex_token_kill (ffesta_tokens[1]);
- ffesta_tokens[1] = ffesta_tokens[2];
- next = (ffelexHandler) ffestt_tokenlist_handle
- (ffestb_local_.decl.toklist, (ffelexHandler) ffestb_decl_funcname_4_);
- ffestt_tokenlist_kill (ffestb_local_.decl.toklist);
- return (ffelexHandler) (*next) (t);
-
- case FFELEX_typeEQUALS:
- case FFELEX_typePOINTS:
- case FFELEX_typePERCENT:
- case FFELEX_typePERIOD:
- case FFELEX_typeOPEN_PAREN:
- if ((ffestb_local_.decl.kindt != NULL)
- || (ffestb_local_.decl.lent != NULL))
- break; /* type(params)name or type*val name, either
- way confirmed. */
- return (ffelexHandler) ffestb_subr_ambig_nope_ (t);
-
- default:
- break;
- }
-
- ffesta_confirmed ();
- ffestb_subr_ambig_to_ents_ ();
- next = (ffelexHandler) ffestt_tokenlist_handle (ffestb_local_.decl.toklist,
- (ffelexHandler) ffestb_decl_ents_3_);
- ffestt_tokenlist_kill (ffestb_local_.decl.toklist);
- return (ffelexHandler) (*next) (t);
-}
-
-/* ffestb_decl_funcname_ -- "type" [type parameters] [RECURSIVE] FUNCTION
-
- return ffestb_decl_funcname_; // to lexer
-
- Handle NAME of a function. */
-
-static ffelexHandler
-ffestb_decl_funcname_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_decl_funcname_1_;
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FUNCTION", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_funcname_1_ -- "type" [type parameters] [RECURSIVE] FUNCTION
- NAME
-
- return ffestb_decl_funcname_1_; // to lexer
-
- Handle ASTERISK or OPEN_PAREN. */
-
-static ffelexHandler
-ffestb_decl_funcname_1_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeASTERISK:
- return (ffelexHandler) ffestb_decl_funcname_2_;
-
- case FFELEX_typeOPEN_PAREN:
- return (ffelexHandler) ffestb_decl_funcname_4_ (t);
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffelex_token_kill (ffesta_tokens[1]);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FUNCTION", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_funcname_2_ -- "type" [type parameters] [RECURSIVE] FUNCTION
- NAME ASTERISK
-
- return ffestb_decl_funcname_2_; // to lexer
-
- Handle NUMBER or OPEN_PAREN. */
-
-static ffelexHandler
-ffestb_decl_funcname_2_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNUMBER:
- switch (ffestb_local_.decl.type)
- {
- case FFESTP_typeINTEGER:
- case FFESTP_typeREAL:
- case FFESTP_typeCOMPLEX:
- case FFESTP_typeLOGICAL:
- if (ffestb_local_.decl.kindt == NULL)
- ffestb_local_.decl.kindt = ffelex_token_use (t);
- else
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FUNCTION", t);
- break;
-
- case FFESTP_typeCHARACTER:
- if (ffestb_local_.decl.lent == NULL)
- ffestb_local_.decl.lent = ffelex_token_use (t);
- else
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FUNCTION", t);
- break;
-
- case FFESTP_typeBYTE:
- case FFESTP_typeWORD:
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FUNCTION", t);
- break;
- }
- return (ffelexHandler) ffestb_decl_funcname_4_;
-
- case FFELEX_typeOPEN_PAREN:
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextCHARACTERSIZE,
- (ffeexprCallback) ffestb_decl_funcname_3_);
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffelex_token_kill (ffesta_tokens[1]);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FUNCTION", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_funcname_3_ -- "type" [type parameters] [RECURSIVE] FUNCTION
- NAME ASTERISK OPEN_PAREN expr
-
- (ffestb_decl_funcname_3_) // to expression handler
-
- Allow only CLOSE_PAREN; and deal with character-length expression. */
-
-static ffelexHandler
-ffestb_decl_funcname_3_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- if (expr == NULL)
- break;
- switch (ffestb_local_.decl.type)
- {
- case FFESTP_typeCHARACTER:
- if (ffestb_local_.decl.lent == NULL)
- {
- ffestb_local_.decl.len = expr;
- ffestb_local_.decl.lent = ffelex_token_use (ft);
- }
- else
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FUNCTION", t);
- break;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FUNCTION", t);
- break;
- }
- return (ffelexHandler) ffestb_decl_funcname_4_;
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffelex_token_kill (ffesta_tokens[1]);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FUNCTION", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_funcname_4_ -- "type" [type parameters] [RECURSIVE] FUNCTION
- NAME [type parameter]
-
- return ffestb_decl_funcname_4_; // to lexer
-
- Make sure the next token is an OPEN_PAREN. Get the arg list and
- then implement. */
-
-static ffelexHandler
-ffestb_decl_funcname_4_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_PAREN:
- ffestb_subrargs_.name_list.args = ffestt_tokenlist_create ();
- ffestb_subrargs_.name_list.handler
- = (ffelexHandler) ffestb_decl_funcname_5_;
- ffestb_subrargs_.name_list.is_subr = FALSE;
- ffestb_subrargs_.name_list.names = FALSE;
- return (ffelexHandler) ffestb_subr_name_list_;
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffelex_token_kill (ffesta_tokens[1]);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FUNCTION", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_funcname_5_ -- "type" [type parameters] [RECURSIVE] FUNCTION
- NAME [type parameter] OPEN_PAREN arg-list
- CLOSE_PAREN
-
- return ffestb_decl_funcname_5_; // to lexer
-
- Must have EOS/SEMICOLON or "RESULT" here. */
-
-static ffelexHandler
-ffestb_decl_funcname_5_ (ffelexToken t)
-{
- if (!ffestb_subrargs_.name_list.ok)
- goto bad; /* :::::::::::::::::::: */
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R1219 (ffesta_tokens[1], ffestb_subrargs_.name_list.args,
- ffestb_subrargs_.name_list.close_paren, ffestb_local_.decl.type,
- ffestb_local_.decl.kind, ffestb_local_.decl.kindt,
- ffestb_local_.decl.len, ffestb_local_.decl.lent,
- ffestb_local_.decl.recursive, NULL);
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffelex_token_kill (ffesta_tokens[1]);
- ffelex_token_kill (ffestb_subrargs_.name_list.close_paren);
- ffestt_tokenlist_kill (ffestb_subrargs_.name_list.args);
- return (ffelexHandler) ffesta_zero (t);
-
- case FFELEX_typeNAME:
- if (ffestr_other (t) != FFESTR_otherRESULT)
- break;
- return (ffelexHandler) ffestb_decl_funcname_6_;
-
- default:
- break;
- }
-
-bad: /* :::::::::::::::::::: */
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffelex_token_kill (ffesta_tokens[1]);
- ffelex_token_kill (ffestb_subrargs_.name_list.close_paren);
- ffestt_tokenlist_kill (ffestb_subrargs_.name_list.args);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FUNCTION", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_funcname_6_ -- "type" [type parameters] [RECURSIVE] FUNCTION
- NAME [type parameter] OPEN_PAREN arglist
- CLOSE_PAREN "RESULT"
-
- return ffestb_decl_funcname_6_; // to lexer
-
- Make sure the next token is an OPEN_PAREN. */
-
-static ffelexHandler
-ffestb_decl_funcname_6_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_PAREN:
- return (ffelexHandler) ffestb_decl_funcname_7_;
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffelex_token_kill (ffesta_tokens[1]);
- ffelex_token_kill (ffestb_subrargs_.name_list.close_paren);
- ffestt_tokenlist_kill (ffestb_subrargs_.name_list.args);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FUNCTION", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_funcname_7_ -- "type" [type parameters] [RECURSIVE] FUNCTION
- NAME [type parameter] OPEN_PAREN arglist
- CLOSE_PAREN "RESULT" OPEN_PAREN
-
- return ffestb_decl_funcname_7_; // to lexer
-
- Make sure the next token is a NAME. */
-
-static ffelexHandler
-ffestb_decl_funcname_7_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[2] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_decl_funcname_8_;
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffelex_token_kill (ffesta_tokens[1]);
- ffelex_token_kill (ffestb_subrargs_.name_list.close_paren);
- ffestt_tokenlist_kill (ffestb_subrargs_.name_list.args);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FUNCTION", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_funcname_8_ -- "type" [type parameters] [RECURSIVE] FUNCTION
- NAME [type parameter] OPEN_PAREN arglist
- CLOSE_PAREN "RESULT" OPEN_PAREN NAME
-
- return ffestb_decl_funcname_8_; // to lexer
-
- Make sure the next token is a CLOSE_PAREN. */
-
-static ffelexHandler
-ffestb_decl_funcname_8_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCLOSE_PAREN:
- return (ffelexHandler) ffestb_decl_funcname_9_;
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffelex_token_kill (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[2]);
- ffelex_token_kill (ffestb_subrargs_.name_list.close_paren);
- ffestt_tokenlist_kill (ffestb_subrargs_.name_list.args);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FUNCTION", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_funcname_9_ -- "type" [type parameters] [RECURSIVE] FUNCTION
- NAME [type parameter] OPEN_PAREN arg-list
- CLOSE_PAREN "RESULT" OPEN_PAREN NAME CLOSE_PAREN
-
- return ffestb_decl_funcname_9_; // to lexer
-
- Must have EOS/SEMICOLON here. */
-
-static ffelexHandler
-ffestb_decl_funcname_9_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (!ffesta_is_inhibited ())
- ffestc_R1219 (ffesta_tokens[1], ffestb_subrargs_.name_list.args,
- ffestb_subrargs_.name_list.close_paren, ffestb_local_.decl.type,
- ffestb_local_.decl.kind, ffestb_local_.decl.kindt,
- ffestb_local_.decl.len, ffestb_local_.decl.lent,
- ffestb_local_.decl.recursive, ffesta_tokens[2]);
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffelex_token_kill (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[2]);
- ffelex_token_kill (ffestb_subrargs_.name_list.close_paren);
- ffestt_tokenlist_kill (ffestb_subrargs_.name_list.args);
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.recursive != NULL)
- ffelex_token_kill (ffestb_local_.decl.recursive);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffelex_token_kill (ffesta_tokens[1]);
- ffelex_token_kill (ffesta_tokens[2]);
- ffelex_token_kill (ffestb_subrargs_.name_list.close_paren);
- ffestt_tokenlist_kill (ffestb_subrargs_.name_list.args);
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "FUNCTION", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-/* ffestb_V027 -- Parse the VXT PARAMETER statement
-
- return ffestb_V027; // to lexer
-
- Make sure the statement has a valid form for the VXT PARAMETER statement.
- If it does, implement the statement. */
-
-ffelexHandler
-ffestb_V027 (ffelexToken t)
-{
- unsigned const char *p;
- ffeTokenLength i;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstPARAMETER)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- break;
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
- ffesta_confirmed ();
- ffestb_local_.vxtparam.started = TRUE;
- if (!ffesta_is_inhibited ())
- ffestc_V027_start ();
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_V0271_;
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstPARAMETER)
- goto bad_0; /* :::::::::::::::::::: */
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlPARAMETER);
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- break;
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
- if (!ffesrc_is_name_init (*p))
- goto bad_i; /* :::::::::::::::::::: */
- ffestb_local_.vxtparam.started = FALSE;
- ffesta_tokens[1] = ffelex_token_name_from_names (ffesta_tokens[0], i,
- 0);
- return (ffelexHandler) ffestb_V0271_ (t);
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "PARAMETER", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "PARAMETER", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-
-bad_i: /* :::::::::::::::::::: */
- ffesta_ffebad_1sp (FFEBAD_INVALID_STMT_FORM, "PARAMETER", ffesta_tokens[0], i, t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_V0271_ -- "PARAMETER" NAME
-
- return ffestb_V0271_; // to lexer
-
- Handle EQUALS. */
-
-static ffelexHandler
-ffestb_V0271_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEQUALS:
- return (ffelexHandler) ffeexpr_rhs (ffesta_output_pool,
- FFEEXPR_contextPARAMETER, (ffeexprCallback) ffestb_V0272_);
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "PARAMETER", t);
- break;
- }
-
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffestb_local_.vxtparam.started && !ffesta_is_inhibited ())
- ffestc_V027_finish ();
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_V0272_ -- "PARAMETER" NAME EQUALS expr
-
- (ffestb_V0272_) // to expression handler
-
- Handle COMMA or EOS/SEMICOLON. */
-
-static ffelexHandler
-ffestb_V0272_ (ffelexToken ft, ffebld expr, ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (!ffestb_local_.vxtparam.started)
- {
- if (ffestc_is_let_not_V027 ())
- break; /* Not a valid VXTPARAMETER stmt. */
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_V027_start ();
- ffestb_local_.vxtparam.started = TRUE;
- }
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- {
- ffestc_V027_item (ffesta_tokens[1], expr, ft);
- ffestc_V027_finish ();
- }
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffesta_zero (t);
-
- case FFELEX_typeCOMMA:
- ffesta_confirmed ();
- if (!ffestb_local_.vxtparam.started)
- {
- if (!ffesta_is_inhibited ())
- ffestc_V027_start ();
- ffestb_local_.vxtparam.started = TRUE;
- }
- if (expr == NULL)
- break;
- if (!ffesta_is_inhibited ())
- ffestc_V027_item (ffesta_tokens[1], expr, ft);
- ffelex_token_kill (ffesta_tokens[1]);
- return (ffelexHandler) ffestb_V0273_;
-
- default:
- break;
- }
-
- ffelex_token_kill (ffesta_tokens[1]);
- if (ffestb_local_.vxtparam.started && !ffesta_is_inhibited ())
- ffestc_V027_finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "PARAMETER", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_V0273_ -- "PARAMETER" NAME EQUALS expr COMMA
-
- return ffestb_V0273_; // to lexer
-
- Handle NAME. */
-
-static ffelexHandler
-ffestb_V0273_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_V0271_;
-
- default:
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "PARAMETER", t);
- break;
- }
-
- if (ffestb_local_.vxtparam.started && !ffesta_is_inhibited ())
- ffestc_V027_finish ();
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_R539 -- Parse the IMPLICIT FUNCTION statement
-
- return ffestb_decl_R539; // to lexer
-
- Make sure the statement has a valid form for the IMPLICIT
- statement. If it does, implement the statement. */
-
-ffelexHandler
-ffestb_decl_R539 (ffelexToken t)
-{
- ffeTokenLength i;
- unsigned const char *p;
- ffelexToken nt;
- ffestrSecond kw;
-
- ffestb_local_.decl.recursive = NULL;
-
- switch (ffelex_token_type (ffesta_tokens[0]))
- {
- case FFELEX_typeNAME:
- if (ffesta_first_kw != FFESTR_firstIMPLICIT)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- ffesta_confirmed (); /* Error, but clearly intended. */
- goto bad_1; /* :::::::::::::::::::: */
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
-
- case FFELEX_typeNAME:
- break;
- }
- ffesta_confirmed ();
- ffestb_local_.decl.imp_started = FALSE;
- switch (ffesta_second_kw)
- {
- case FFESTR_secondINTEGER:
- ffestb_local_.decl.type = FFESTP_typeINTEGER;
- return (ffelexHandler) ffestb_decl_R5391_;
-
- case FFESTR_secondBYTE:
- ffestb_local_.decl.type = FFESTP_typeBYTE;
- return (ffelexHandler) ffestb_decl_R5391_;
-
- case FFESTR_secondWORD:
- ffestb_local_.decl.type = FFESTP_typeWORD;
- return (ffelexHandler) ffestb_decl_R5391_;
-
- case FFESTR_secondREAL:
- ffestb_local_.decl.type = FFESTP_typeREAL;
- return (ffelexHandler) ffestb_decl_R5391_;
-
- case FFESTR_secondCOMPLEX:
- ffestb_local_.decl.type = FFESTP_typeCOMPLEX;
- return (ffelexHandler) ffestb_decl_R5391_;
-
- case FFESTR_secondLOGICAL:
- ffestb_local_.decl.type = FFESTP_typeLOGICAL;
- return (ffelexHandler) ffestb_decl_R5391_;
-
- case FFESTR_secondCHARACTER:
- ffestb_local_.decl.type = FFESTP_typeCHARACTER;
- return (ffelexHandler) ffestb_decl_R5391_;
-
- case FFESTR_secondDOUBLE:
- return (ffelexHandler) ffestb_decl_R5392_;
-
- case FFESTR_secondDOUBLEPRECISION:
- ffestb_local_.decl.type = FFESTP_typeDBLPRCSN;
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- return (ffelexHandler) ffestb_decl_R539letters_;
-
- case FFESTR_secondDOUBLECOMPLEX:
- ffestb_local_.decl.type = FFESTP_typeDBLCMPLX;
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- return (ffelexHandler) ffestb_decl_R539letters_;
-
- case FFESTR_secondNONE:
- return (ffelexHandler) ffestb_decl_R5394_;
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
-
- case FFELEX_typeNAMES:
- if (ffesta_first_kw != FFESTR_firstIMPLICIT)
- goto bad_0; /* :::::::::::::::::::: */
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeCOLONCOLON:
- case FFELEX_typeASTERISK:
- case FFELEX_typeSEMICOLON:
- case FFELEX_typeEOS:
- ffesta_confirmed ();
- break;
-
- case FFELEX_typeOPEN_PAREN:
- break;
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
- p = ffelex_token_text (ffesta_tokens[0]) + (i = FFESTR_firstlIMPLICIT);
- if (!ffesrc_is_name_init (*p))
- goto bad_0; /* :::::::::::::::::::: */
- ffestb_local_.decl.imp_started = FALSE;
- nt = ffelex_token_name_from_names (ffesta_tokens[0],
- FFESTR_firstlIMPLICIT, 0);
- kw = ffestr_second (nt);
- ffelex_token_kill (nt);
- switch (kw)
- {
- case FFESTR_secondINTEGER:
- ffestb_local_.decl.type = FFESTP_typeINTEGER;
- return (ffelexHandler) ffestb_decl_R5391_ (t);
-
- case FFESTR_secondBYTE:
- ffestb_local_.decl.type = FFESTP_typeBYTE;
- return (ffelexHandler) ffestb_decl_R5391_ (t);
-
- case FFESTR_secondWORD:
- ffestb_local_.decl.type = FFESTP_typeWORD;
- return (ffelexHandler) ffestb_decl_R5391_ (t);
-
- case FFESTR_secondREAL:
- ffestb_local_.decl.type = FFESTP_typeREAL;
- return (ffelexHandler) ffestb_decl_R5391_ (t);
-
- case FFESTR_secondCOMPLEX:
- ffestb_local_.decl.type = FFESTP_typeCOMPLEX;
- return (ffelexHandler) ffestb_decl_R5391_ (t);
-
- case FFESTR_secondLOGICAL:
- ffestb_local_.decl.type = FFESTP_typeLOGICAL;
- return (ffelexHandler) ffestb_decl_R5391_ (t);
-
- case FFESTR_secondCHARACTER:
- ffestb_local_.decl.type = FFESTP_typeCHARACTER;
- return (ffelexHandler) ffestb_decl_R5391_ (t);
-
- case FFESTR_secondDOUBLEPRECISION:
- ffestb_local_.decl.type = FFESTP_typeDBLPRCSN;
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- return (ffelexHandler) ffestb_decl_R539letters_ (t);
-
- case FFESTR_secondDOUBLECOMPLEX:
- ffestb_local_.decl.type = FFESTP_typeDBLCMPLX;
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- return (ffelexHandler) ffestb_decl_R539letters_ (t);
-
- case FFESTR_secondNONE:
- return (ffelexHandler) ffestb_decl_R5394_ (t);
-
- default:
- goto bad_1; /* :::::::::::::::::::: */
- }
-
- default:
- goto bad_0; /* :::::::::::::::::::: */
- }
-
-bad_0: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "IMPLICIT", ffesta_tokens[0]);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-
-bad_1: /* :::::::::::::::::::: */
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "IMPLICIT", t);
- return (ffelexHandler) ffelex_swallow_tokens (t,
- (ffelexHandler) ffesta_zero); /* Invalid second token. */
-}
-
-/* ffestb_decl_R5391_ -- "IMPLICIT" generic-type
-
- return ffestb_decl_R5391_; // to lexer
-
- Handle ASTERISK or OPEN_PAREN. */
-
-static ffelexHandler
-ffestb_decl_R5391_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeASTERISK:
- ffesta_confirmed ();
- ffestb_local_.decl.handler = (ffelexHandler) ffestb_decl_R539letters_;
- ffestb_local_.decl.badname = "IMPLICIT";
- if (ffestb_local_.decl.type == FFESTP_typeCHARACTER)
- return (ffelexHandler) ffestb_decl_starlen_;
- return (ffelexHandler) ffestb_decl_starkind_;
-
- case FFELEX_typeOPEN_PAREN:
- ffestb_local_.decl.handler = (ffelexHandler) ffestb_decl_R539letters_;
- ffestb_local_.decl.badname = "IMPLICIT";
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- if (ffestb_local_.decl.type == FFESTP_typeCHARACTER)
- ffestb_local_.decl.imp_handler
- = (ffelexHandler) ffestb_decl_typeparams_;
- else
- ffestb_local_.decl.imp_handler
- = (ffelexHandler) ffestb_decl_kindparam_;
- return (ffelexHandler) ffestb_decl_R539maybe_ (t);
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.imp_started && !ffesta_is_inhibited ())
- ffestc_R539finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "IMPLICIT", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_R5392_ -- "IMPLICIT" "DOUBLE"
-
- return ffestb_decl_R5392_; // to lexer
-
- Handle NAME. */
-
-static ffelexHandler
-ffestb_decl_R5392_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- switch (ffestr_second (t))
- {
- case FFESTR_secondPRECISION:
- ffestb_local_.decl.type = FFESTP_typeDBLPRCSN;
- break;
-
- case FFESTR_secondCOMPLEX:
- ffestb_local_.decl.type = FFESTP_typeDBLCMPLX;
- break;
-
- default:
- goto bad; /* :::::::::::::::::::: */
- }
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- return (ffelexHandler) ffestb_decl_R539letters_;
-
- default:
- break;
- }
-
-bad: /* :::::::::::::::::::: */
- if (ffestb_local_.decl.imp_started && !ffesta_is_inhibited ())
- ffestc_R539finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "IMPLICIT", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_R5394_ -- "IMPLICIT" "NONE"
-
- return ffestb_decl_R5394_; // to lexer
-
- Handle EOS/SEMICOLON. */
-
-static ffelexHandler
-ffestb_decl_R5394_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R539 (); /* IMPLICIT NONE. */
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "IMPLICIT", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_R5395_ -- "IMPLICIT" implicit-spec-list COMMA
-
- return ffestb_decl_R5395_; // to lexer
-
- Handle NAME for next type-spec. */
-
-static ffelexHandler
-ffestb_decl_R5395_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- switch (ffestr_second (t))
- {
- case FFESTR_secondINTEGER:
- ffestb_local_.decl.type = FFESTP_typeINTEGER;
- return (ffelexHandler) ffestb_decl_R5391_;
-
- case FFESTR_secondBYTE:
- ffestb_local_.decl.type = FFESTP_typeBYTE;
- return (ffelexHandler) ffestb_decl_R5391_;
-
- case FFESTR_secondWORD:
- ffestb_local_.decl.type = FFESTP_typeWORD;
- return (ffelexHandler) ffestb_decl_R5391_;
-
- case FFESTR_secondREAL:
- ffestb_local_.decl.type = FFESTP_typeREAL;
- return (ffelexHandler) ffestb_decl_R5391_;
-
- case FFESTR_secondCOMPLEX:
- ffestb_local_.decl.type = FFESTP_typeCOMPLEX;
- return (ffelexHandler) ffestb_decl_R5391_;
-
- case FFESTR_secondLOGICAL:
- ffestb_local_.decl.type = FFESTP_typeLOGICAL;
- return (ffelexHandler) ffestb_decl_R5391_;
-
- case FFESTR_secondCHARACTER:
- ffestb_local_.decl.type = FFESTP_typeCHARACTER;
- return (ffelexHandler) ffestb_decl_R5391_;
-
- case FFESTR_secondDOUBLE:
- return (ffelexHandler) ffestb_decl_R5392_;
-
- case FFESTR_secondDOUBLEPRECISION:
- ffestb_local_.decl.type = FFESTP_typeDBLPRCSN;
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- return (ffelexHandler) ffestb_decl_R539letters_;
-
- case FFESTR_secondDOUBLECOMPLEX:
- ffestb_local_.decl.type = FFESTP_typeDBLCMPLX;
- ffestb_local_.decl.kind = NULL;
- ffestb_local_.decl.kindt = NULL;
- ffestb_local_.decl.len = NULL;
- ffestb_local_.decl.lent = NULL;
- return (ffelexHandler) ffestb_decl_R539letters_;
-
- default:
- break;
- }
- break;
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.imp_started && !ffesta_is_inhibited ())
- ffestc_R539finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "IMPLICIT", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_R539letters_ -- "IMPLICIT" type-spec
-
- return ffestb_decl_R539letters_; // to lexer
-
- Handle OPEN_PAREN. */
-
-static ffelexHandler
-ffestb_decl_R539letters_ (ffelexToken t)
-{
- ffelex_set_names (FALSE);
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeOPEN_PAREN:
- ffestb_local_.decl.imps = ffestt_implist_create ();
- return (ffelexHandler) ffestb_decl_R539letters_1_;
-
- default:
- break;
- }
-
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- if (ffestb_local_.decl.imp_started && !ffesta_is_inhibited ())
- ffestc_R539finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "IMPLICIT", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_R539letters_1_ -- "IMPLICIT" type-spec OPEN_PAREN
-
- return ffestb_decl_R539letters_1_; // to lexer
-
- Handle NAME. */
-
-static ffelexHandler
-ffestb_decl_R539letters_1_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- if (ffelex_token_length (t) != 1)
- break;
- ffesta_tokens[1] = ffelex_token_use (t);
- return (ffelexHandler) ffestb_decl_R539letters_2_;
-
- default:
- break;
- }
-
- ffestt_implist_kill (ffestb_local_.decl.imps);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- if (ffestb_local_.decl.imp_started && !ffesta_is_inhibited ())
- ffestc_R539finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "IMPLICIT", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_R539letters_2_ -- "IMPLICIT" type-spec OPEN_PAREN NAME
-
- return ffestb_decl_R539letters_2_; // to lexer
-
- Handle COMMA or MINUS. */
-
-static ffelexHandler
-ffestb_decl_R539letters_2_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- ffestt_implist_append (ffestb_local_.decl.imps, ffesta_tokens[1], NULL);
- return (ffelexHandler) ffestb_decl_R539letters_1_;
-
- case FFELEX_typeCLOSE_PAREN:
- ffestt_implist_append (ffestb_local_.decl.imps, ffesta_tokens[1], NULL);
- return (ffelexHandler) ffestb_decl_R539letters_5_;
-
- case FFELEX_typeMINUS:
- return (ffelexHandler) ffestb_decl_R539letters_3_;
-
- default:
- break;
- }
-
- ffelex_token_kill (ffesta_tokens[1]);
- ffestt_implist_kill (ffestb_local_.decl.imps);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- if (ffestb_local_.decl.imp_started && !ffesta_is_inhibited ())
- ffestc_R539finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "IMPLICIT", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_R539letters_3_ -- "IMPLICIT" type-spec OPEN_PAREN NAME MINUS
-
- return ffestb_decl_R539letters_3_; // to lexer
-
- Handle NAME. */
-
-static ffelexHandler
-ffestb_decl_R539letters_3_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- if (ffelex_token_length (t) != 1)
- break;
- ffestt_implist_append (ffestb_local_.decl.imps, ffesta_tokens[1],
- ffelex_token_use (t));
- return (ffelexHandler) ffestb_decl_R539letters_4_;
-
- default:
- break;
- }
-
- ffelex_token_kill (ffesta_tokens[1]);
- ffestt_implist_kill (ffestb_local_.decl.imps);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- if (ffestb_local_.decl.imp_started && !ffesta_is_inhibited ())
- ffestc_R539finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "IMPLICIT", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_R539letters_4_ -- "IMPLICIT" type-spec OPEN_PAREN NAME MINUS
- NAME
-
- return ffestb_decl_R539letters_4_; // to lexer
-
- Handle COMMA or CLOSE_PAREN. */
-
-static ffelexHandler
-ffestb_decl_R539letters_4_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- return (ffelexHandler) ffestb_decl_R539letters_1_;
-
- case FFELEX_typeCLOSE_PAREN:
- return (ffelexHandler) ffestb_decl_R539letters_5_;
-
- default:
- break;
- }
-
- ffestt_implist_kill (ffestb_local_.decl.imps);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- if (ffestb_local_.decl.imp_started && !ffesta_is_inhibited ())
- ffestc_R539finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "IMPLICIT", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_R539letters_5_ -- "IMPLICIT" type-spec OPEN_PAREN
- letter-spec-list CLOSE_PAREN
-
- return ffestb_decl_R539letters_5_; // to lexer
-
- Handle COMMA or EOS/SEMICOLON. */
-
-static ffelexHandler
-ffestb_decl_R539letters_5_ (ffelexToken t)
-{
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- if (!ffestb_local_.decl.imp_started)
- {
- ffestb_local_.decl.imp_started = TRUE;
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R539start ();
- }
- if (!ffesta_is_inhibited ())
- ffestc_R539item (ffestb_local_.decl.type, ffestb_local_.decl.kind,
- ffestb_local_.decl.kindt, ffestb_local_.decl.len,
- ffestb_local_.decl.lent, ffestb_local_.decl.imps);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffestt_implist_kill (ffestb_local_.decl.imps);
- if (ffelex_token_type (t) == FFELEX_typeCOMMA)
- return (ffelexHandler) ffestb_decl_R5395_;
- if (!ffesta_is_inhibited ())
- ffestc_R539finish ();
- return (ffelexHandler) ffesta_zero (t);
-
- default:
- break;
- }
-
- ffestt_implist_kill (ffestb_local_.decl.imps);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- if (ffestb_local_.decl.imp_started && !ffesta_is_inhibited ())
- ffestc_R539finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "IMPLICIT", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
-
-/* ffestb_decl_R539maybe_ -- "IMPLICIT" generic-type-spec
-
- return ffestb_decl_R539maybe_; // to lexer
-
- Handle OPEN_PAREN. */
-
-static ffelexHandler
-ffestb_decl_R539maybe_ (ffelexToken t)
-{
- assert (ffelex_token_type (t) == FFELEX_typeOPEN_PAREN);
- ffestb_local_.decl.imps = ffestt_implist_create ();
- ffestb_local_.decl.toklist = ffestt_tokenlist_create ();
- ffestb_local_.decl.imp_seen_comma
- = (ffestb_local_.decl.type != FFESTP_typeCHARACTER);
- return (ffelexHandler) ffestb_decl_R539maybe_1_;
-}
-
-/* ffestb_decl_R539maybe_1_ -- "IMPLICIT" generic-type-spec OPEN_PAREN
-
- return ffestb_decl_R539maybe_1_; // to lexer
-
- Handle NAME. */
-
-static ffelexHandler
-ffestb_decl_R539maybe_1_ (ffelexToken t)
-{
- ffelexHandler next;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- if (ffelex_token_length (t) != 1)
- break;
- ffesta_tokens[1] = ffelex_token_use (t);
- ffestt_tokenlist_append (ffestb_local_.decl.toklist, ffelex_token_use (t));
- return (ffelexHandler) ffestb_decl_R539maybe_2_;
-
- default:
- break;
- }
-
- ffestt_implist_kill (ffestb_local_.decl.imps);
- next = (ffelexHandler) ffestt_tokenlist_handle (ffestb_local_.decl.toklist,
- (ffelexHandler) ffestb_local_.decl.imp_handler);
- ffestt_tokenlist_kill (ffestb_local_.decl.toklist);
- return (ffelexHandler) (*next) (t);
-}
-
-/* ffestb_decl_R539maybe_2_ -- "IMPLICIT" generic-type-spec OPEN_PAREN NAME
-
- return ffestb_decl_R539maybe_2_; // to lexer
-
- Handle COMMA or MINUS. */
-
-static ffelexHandler
-ffestb_decl_R539maybe_2_ (ffelexToken t)
-{
- ffelexHandler next;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- ffestt_implist_append (ffestb_local_.decl.imps, ffesta_tokens[1], NULL);
- if (ffestb_local_.decl.imp_seen_comma)
- {
- ffestt_tokenlist_kill (ffestb_local_.decl.toklist);
- return (ffelexHandler) ffestb_decl_R539letters_1_;
- }
- ffestb_local_.decl.imp_seen_comma = TRUE;
- ffestt_tokenlist_append (ffestb_local_.decl.toklist, ffelex_token_use (t));
- return (ffelexHandler) ffestb_decl_R539maybe_1_;
-
- case FFELEX_typeCLOSE_PAREN:
- ffestt_implist_append (ffestb_local_.decl.imps, ffesta_tokens[1], NULL);
- ffestt_tokenlist_append (ffestb_local_.decl.toklist, ffelex_token_use (t));
- return (ffelexHandler) ffestb_decl_R539maybe_5_;
-
- case FFELEX_typeMINUS:
- ffestt_tokenlist_append (ffestb_local_.decl.toklist, ffelex_token_use (t));
- return (ffelexHandler) ffestb_decl_R539maybe_3_;
-
- default:
- break;
- }
-
- ffelex_token_kill (ffesta_tokens[1]);
- ffestt_implist_kill (ffestb_local_.decl.imps);
- next = (ffelexHandler) ffestt_tokenlist_handle (ffestb_local_.decl.toklist,
- (ffelexHandler) ffestb_local_.decl.imp_handler);
- ffestt_tokenlist_kill (ffestb_local_.decl.toklist);
- return (ffelexHandler) (*next) (t);
-}
-
-/* ffestb_decl_R539maybe_3_ -- "IMPLICIT" type-spec OPEN_PAREN NAME MINUS
-
- return ffestb_decl_R539maybe_3_; // to lexer
-
- Handle NAME. */
-
-static ffelexHandler
-ffestb_decl_R539maybe_3_ (ffelexToken t)
-{
- ffelexHandler next;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeNAME:
- if (ffelex_token_length (t) != 1)
- break;
- ffestt_implist_append (ffestb_local_.decl.imps, ffesta_tokens[1],
- ffelex_token_use (t));
- ffestt_tokenlist_append (ffestb_local_.decl.toklist, ffelex_token_use (t));
- return (ffelexHandler) ffestb_decl_R539maybe_4_;
-
- default:
- break;
- }
-
- ffelex_token_kill (ffesta_tokens[1]);
- ffestt_implist_kill (ffestb_local_.decl.imps);
- next = (ffelexHandler) ffestt_tokenlist_handle (ffestb_local_.decl.toklist,
- (ffelexHandler) ffestb_local_.decl.imp_handler);
- ffestt_tokenlist_kill (ffestb_local_.decl.toklist);
- return (ffelexHandler) (*next) (t);
-}
-
-/* ffestb_decl_R539maybe_4_ -- "IMPLICIT" type-spec OPEN_PAREN NAME MINUS
- NAME
-
- return ffestb_decl_R539maybe_4_; // to lexer
-
- Handle COMMA or CLOSE_PAREN. */
-
-static ffelexHandler
-ffestb_decl_R539maybe_4_ (ffelexToken t)
-{
- ffelexHandler next;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- if (ffestb_local_.decl.imp_seen_comma)
- {
- ffestt_tokenlist_kill (ffestb_local_.decl.toklist);
- return (ffelexHandler) ffestb_decl_R539letters_1_;
- }
- ffestb_local_.decl.imp_seen_comma = TRUE;
- ffestt_tokenlist_append (ffestb_local_.decl.toklist, ffelex_token_use (t));
- return (ffelexHandler) ffestb_decl_R539maybe_1_;
-
- case FFELEX_typeCLOSE_PAREN:
- ffestt_tokenlist_append (ffestb_local_.decl.toklist, ffelex_token_use (t));
- return (ffelexHandler) ffestb_decl_R539maybe_5_;
-
- default:
- break;
- }
-
- ffestt_implist_kill (ffestb_local_.decl.imps);
- next = (ffelexHandler) ffestt_tokenlist_handle (ffestb_local_.decl.toklist,
- (ffelexHandler) ffestb_local_.decl.imp_handler);
- ffestt_tokenlist_kill (ffestb_local_.decl.toklist);
- return (ffelexHandler) (*next) (t);
-}
-
-/* ffestb_decl_R539maybe_5_ -- "IMPLICIT" type-spec OPEN_PAREN
- letter-spec-list CLOSE_PAREN
-
- return ffestb_decl_R539maybe_5_; // to lexer
-
- Handle COMMA or EOS/SEMICOLON. */
-
-static ffelexHandler
-ffestb_decl_R539maybe_5_ (ffelexToken t)
-{
- ffelexHandler next;
-
- switch (ffelex_token_type (t))
- {
- case FFELEX_typeCOMMA:
- case FFELEX_typeEOS:
- case FFELEX_typeSEMICOLON:
- ffestt_tokenlist_kill (ffestb_local_.decl.toklist);
- if (!ffestb_local_.decl.imp_started)
- {
- ffestb_local_.decl.imp_started = TRUE;
- ffesta_confirmed ();
- if (!ffesta_is_inhibited ())
- ffestc_R539start ();
- }
- if (!ffesta_is_inhibited ())
- ffestc_R539item (ffestb_local_.decl.type, ffestb_local_.decl.kind,
- ffestb_local_.decl.kindt, ffestb_local_.decl.len,
- ffestb_local_.decl.lent, ffestb_local_.decl.imps);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- ffestt_implist_kill (ffestb_local_.decl.imps);
- if (ffelex_token_type (t) == FFELEX_typeCOMMA)
- return (ffelexHandler) ffestb_decl_R5395_;
- if (!ffesta_is_inhibited ())
- ffestc_R539finish ();
- return (ffelexHandler) ffesta_zero (t);
-
- case FFELEX_typeOPEN_PAREN:
- ffesta_confirmed ();
- ffestt_implist_kill (ffestb_local_.decl.imps);
- next = (ffelexHandler) ffestt_tokenlist_handle (ffestb_local_.decl.toklist,
- (ffelexHandler) ffestb_local_.decl.imp_handler);
- ffestt_tokenlist_kill (ffestb_local_.decl.toklist);
- return (ffelexHandler) (*next) (t);
-
- default:
- break;
- }
-
- ffestt_implist_kill (ffestb_local_.decl.imps);
- ffestt_tokenlist_kill (ffestb_local_.decl.toklist);
- if (ffestb_local_.decl.kindt != NULL)
- ffelex_token_kill (ffestb_local_.decl.kindt);
- if (ffestb_local_.decl.lent != NULL)
- ffelex_token_kill (ffestb_local_.decl.lent);
- if (ffestb_local_.decl.imp_started && !ffesta_is_inhibited ())
- ffestc_R539finish ();
- ffesta_ffebad_1st (FFEBAD_INVALID_STMT_FORM, "IMPLICIT", t);
- return (ffelexHandler) ffelex_swallow_tokens (t, (ffelexHandler) ffesta_zero);
-}
OpenPOWER on IntegriCloud