summaryrefslogtreecommitdiff
path: root/contrib/gcc/f/std.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/gcc/f/std.c')
-rw-r--r--contrib/gcc/f/std.c3623
1 files changed, 0 insertions, 3623 deletions
diff --git a/contrib/gcc/f/std.c b/contrib/gcc/f/std.c
deleted file mode 100644
index 09f04198f0a8..000000000000
--- a/contrib/gcc/f/std.c
+++ /dev/null
@@ -1,3623 +0,0 @@
-/* std.c -- Implementation File (module.c template V1.0)
- Copyright (C) 1995, 1996, 2000, 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:
- Implements the various statements and such like.
-
- Modifications:
- 21-Nov-91 JCB 2.0
- Split out actual code generation to ffeste.
-*/
-
-/* Include files. */
-
-#include "proj.h"
-#include "std.h"
-#include "bld.h"
-#include "com.h"
-#include "lab.h"
-#include "lex.h"
-#include "malloc.h"
-#include "sta.h"
-#include "ste.h"
-#include "stp.h"
-#include "str.h"
-#include "sts.h"
-#include "stt.h"
-#include "stv.h"
-#include "stw.h"
-#include "symbol.h"
-#include "target.h"
-
-/* Externals defined here. */
-
-
-/* Simple definitions and enumerations. */
-
-#define FFESTD_COPY_EASY_ 1 /* 1 for only one _subr_copy_xyz_ fn. */
-
-#define FFESTD_IS_END_OPTIMIZED_ 1 /* 0=always gen STOP/RETURN before
- END. */
-
-typedef enum
- {
- FFESTD_stateletSIMPLE_, /* Expecting simple/start. */
- FFESTD_stateletATTRIB_, /* Expecting attrib/item/itemstart. */
- FFESTD_stateletITEM_, /* Expecting item/itemstart/finish. */
- FFESTD_stateletITEMVALS_, /* Expecting itemvalue/itemendvals. */
- FFESTD_
- } ffestdStatelet_;
-
-typedef enum
- {
- FFESTD_stmtidENDDOLOOP_,
- FFESTD_stmtidENDLOGIF_,
- FFESTD_stmtidEXECLABEL_,
- FFESTD_stmtidFORMATLABEL_,
- FFESTD_stmtidR737A_, /* let */
- FFESTD_stmtidR803_, /* IF-block */
- FFESTD_stmtidR804_, /* ELSE IF */
- FFESTD_stmtidR805_, /* ELSE */
- FFESTD_stmtidR806_, /* END IF */
- FFESTD_stmtidR807_, /* IF-logical */
- FFESTD_stmtidR809_, /* SELECT CASE */
- FFESTD_stmtidR810_, /* CASE */
- FFESTD_stmtidR811_, /* END SELECT */
- FFESTD_stmtidR819A_, /* DO-iterative */
- FFESTD_stmtidR819B_, /* DO WHILE */
- FFESTD_stmtidR825_, /* END DO */
- FFESTD_stmtidR834_, /* CYCLE */
- FFESTD_stmtidR835_, /* EXIT */
- FFESTD_stmtidR836_, /* GOTO */
- FFESTD_stmtidR837_, /* GOTO-computed */
- FFESTD_stmtidR838_, /* ASSIGN */
- FFESTD_stmtidR839_, /* GOTO-assigned */
- FFESTD_stmtidR840_, /* IF-arithmetic */
- FFESTD_stmtidR841_, /* CONTINUE */
- FFESTD_stmtidR842_, /* STOP */
- FFESTD_stmtidR843_, /* PAUSE */
- FFESTD_stmtidR904_, /* OPEN */
- FFESTD_stmtidR907_, /* CLOSE */
- FFESTD_stmtidR909_, /* READ */
- FFESTD_stmtidR910_, /* WRITE */
- FFESTD_stmtidR911_, /* PRINT */
- FFESTD_stmtidR919_, /* BACKSPACE */
- FFESTD_stmtidR920_, /* ENDFILE */
- FFESTD_stmtidR921_, /* REWIND */
- FFESTD_stmtidR923A_, /* INQUIRE */
- FFESTD_stmtidR923B_, /* INQUIRE-iolength */
- FFESTD_stmtidR1001_, /* FORMAT */
- FFESTD_stmtidR1103_, /* END_PROGRAM */
- FFESTD_stmtidR1112_, /* END_BLOCK_DATA */
- FFESTD_stmtidR1212_, /* CALL */
- FFESTD_stmtidR1221_, /* END_FUNCTION */
- FFESTD_stmtidR1225_, /* END_SUBROUTINE */
- FFESTD_stmtidR1226_, /* ENTRY */
- FFESTD_stmtidR1227_, /* RETURN */
- FFESTD_stmtidV020_, /* TYPE */
- FFESTD_stmtid_,
- } ffestdStmtId_;
-
-/* Internal typedefs. */
-
-typedef struct _ffestd_expr_item_ *ffestdExprItem_;
-typedef struct _ffestd_stmt_ *ffestdStmt_;
-
-/* Private include files. */
-
-
-/* Internal structure definitions. */
-
-struct _ffestd_expr_item_
- {
- ffestdExprItem_ next;
- ffebld expr;
- ffelexToken token;
- };
-
-struct _ffestd_stmt_
- {
- ffestdStmt_ next;
- ffestdStmt_ previous;
- ffestdStmtId_ id;
- char *filename;
- int filelinenum;
- union
- {
- struct
- {
- ffestw block;
- }
- enddoloop;
- struct
- {
- ffelab label;
- }
- execlabel;
- struct
- {
- ffelab label;
- }
- formatlabel;
- struct
- {
- mallocPool pool;
- ffebld dest;
- ffebld source;
- }
- R737A;
- struct
- {
- mallocPool pool;
- ffestw block;
- ffebld expr;
- }
- R803;
- struct
- {
- mallocPool pool;
- ffestw block;
- ffebld expr;
- }
- R804;
- struct
- {
- ffestw block;
- }
- R805;
- struct
- {
- ffestw block;
- }
- R806;
- struct
- {
- mallocPool pool;
- ffebld expr;
- }
- R807;
- struct
- {
- mallocPool pool;
- ffestw block;
- ffebld expr;
- }
- R809;
- struct
- {
- mallocPool pool;
- ffestw block;
- unsigned long casenum;
- }
- R810;
- struct
- {
- ffestw block;
- }
- R811;
- struct
- {
- mallocPool pool;
- ffestw block;
- ffelab label;
- ffebld var;
- ffebld start;
- ffelexToken start_token;
- ffebld end;
- ffelexToken end_token;
- ffebld incr;
- ffelexToken incr_token;
- }
- R819A;
- struct
- {
- mallocPool pool;
- ffestw block;
- ffelab label;
- ffebld expr;
- }
- R819B;
- struct
- {
- ffestw block;
- }
- R834;
- struct
- {
- ffestw block;
- }
- R835;
- struct
- {
- ffelab label;
- }
- R836;
- struct
- {
- mallocPool pool;
- ffelab *labels;
- int count;
- ffebld expr;
- }
- R837;
- struct
- {
- mallocPool pool;
- ffelab label;
- ffebld target;
- }
- R838;
- struct
- {
- mallocPool pool;
- ffebld target;
- }
- R839;
- struct
- {
- mallocPool pool;
- ffebld expr;
- ffelab neg;
- ffelab zero;
- ffelab pos;
- }
- R840;
- struct
- {
- mallocPool pool;
- ffebld expr;
- }
- R842;
- struct
- {
- mallocPool pool;
- ffebld expr;
- }
- R843;
- struct
- {
- mallocPool pool;
- ffestpOpenStmt *params;
- }
- R904;
- struct
- {
- mallocPool pool;
- ffestpCloseStmt *params;
- }
- R907;
- struct
- {
- mallocPool pool;
- ffestpReadStmt *params;
- bool only_format;
- ffestvUnit unit;
- ffestvFormat format;
- bool rec;
- bool key;
- ffestdExprItem_ list;
- }
- R909;
- struct
- {
- mallocPool pool;
- ffestpWriteStmt *params;
- ffestvUnit unit;
- ffestvFormat format;
- bool rec;
- ffestdExprItem_ list;
- }
- R910;
- struct
- {
- mallocPool pool;
- ffestpPrintStmt *params;
- ffestvFormat format;
- ffestdExprItem_ list;
- }
- R911;
- struct
- {
- mallocPool pool;
- ffestpBeruStmt *params;
- }
- R919;
- struct
- {
- mallocPool pool;
- ffestpBeruStmt *params;
- }
- R920;
- struct
- {
- mallocPool pool;
- ffestpBeruStmt *params;
- }
- R921;
- struct
- {
- mallocPool pool;
- ffestpInquireStmt *params;
- bool by_file;
- }
- R923A;
- struct
- {
- mallocPool pool;
- ffestpInquireStmt *params;
- ffestdExprItem_ list;
- }
- R923B;
- struct
- {
- ffestsHolder str;
- }
- R1001;
- struct
- {
- mallocPool pool;
- ffebld expr;
- }
- R1212;
- struct
- {
- ffesymbol entry;
- int entrynum;
- }
- R1226;
- struct
- {
- mallocPool pool;
- ffestw block;
- ffebld expr;
- }
- R1227;
- struct
- {
- mallocPool pool;
- ffestpTypeStmt *params;
- ffestvFormat format;
- ffestdExprItem_ list;
- }
- V020;
- }
- u;
- };
-
-/* Static objects accessed by functions in this module. */
-
-static ffestdStatelet_ ffestd_statelet_ = FFESTD_stateletSIMPLE_;
-static int ffestd_block_level_ = 0; /* Block level for reachableness. */
-static bool ffestd_is_reachable_; /* Is the current stmt reachable? */
-static ffelab ffestd_label_formatdef_ = NULL;
-static ffestdExprItem_ *ffestd_expr_list_;
-static struct
- {
- ffestdStmt_ first;
- ffestdStmt_ last;
- }
-ffestd_stmt_list_ =
-{
- NULL, NULL
-};
-
-
-/* # ENTRY statements pending. */
-static int ffestd_2pass_entrypoints_ = 0;
-
-/* Static functions (internal). */
-
-static void ffestd_stmt_append_ (ffestdStmt_ stmt);
-static ffestdStmt_ ffestd_stmt_new_ (ffestdStmtId_ id);
-static void ffestd_stmt_pass_ (void);
-#if FFESTD_COPY_EASY_
-static ffestpInquireStmt *ffestd_subr_copy_easy_ (ffestpInquireIx max);
-#endif
-static void ffestd_subr_vxt_ (void);
-static void ffestd_subr_labels_ (bool unexpected);
-static void ffestd_R1001dump_ (ffests s, ffesttFormatList list);
-static void ffestd_R1001dump_1005_1_ (ffests s, ffesttFormatList f,
- const char *string);
-static void ffestd_R1001dump_1005_2_ (ffests s, ffesttFormatList f,
- const char *string);
-static void ffestd_R1001dump_1005_3_ (ffests s, ffesttFormatList f,
- const char *string);
-static void ffestd_R1001dump_1005_4_ (ffests s, ffesttFormatList f,
- const char *string);
-static void ffestd_R1001dump_1005_5_ (ffests s, ffesttFormatList f,
- const char *string);
-static void ffestd_R1001dump_1010_1_ (ffests s, ffesttFormatList f,
- const char *string);
-static void ffestd_R1001dump_1010_2_ (ffests s, ffesttFormatList f,
- const char *string);
-static void ffestd_R1001dump_1010_4_ (ffests s, ffesttFormatList f,
- const char *string);
-static void ffestd_R1001dump_1010_5_ (ffests s, ffesttFormatList f,
- const char *string);
-static void ffestd_R1001error_ (ffesttFormatList f);
-static void ffestd_R1001rtexpr_ (ffests s, ffesttFormatList f, ffebld expr);
-
-/* Internal macros. */
-
-#define ffestd_subr_line_now_() \
- ffeste_set_line (ffelex_token_where_filename (ffesta_tokens[0]), \
- ffelex_token_where_filelinenum (ffesta_tokens[0]))
-#define ffestd_subr_line_restore_(s) \
- ffeste_set_line ((s)->filename, (s)->filelinenum)
-#define ffestd_subr_line_save_(s) \
- ((s)->filename = ffelex_token_where_filename (ffesta_tokens[0]), \
- (s)->filelinenum = ffelex_token_where_filelinenum (ffesta_tokens[0]))
-#define ffestd_check_simple_() \
- assert(ffestd_statelet_ == FFESTD_stateletSIMPLE_)
-#define ffestd_check_start_() \
- assert(ffestd_statelet_ == FFESTD_stateletSIMPLE_); \
- ffestd_statelet_ = FFESTD_stateletATTRIB_
-#define ffestd_check_attrib_() \
- assert(ffestd_statelet_ == FFESTD_stateletATTRIB_)
-#define ffestd_check_item_() \
- assert(ffestd_statelet_ == FFESTD_stateletATTRIB_ \
- || ffestd_statelet_ == FFESTD_stateletITEM_); \
- ffestd_statelet_ = FFESTD_stateletITEM_
-#define ffestd_check_item_startvals_() \
- assert(ffestd_statelet_ == FFESTD_stateletATTRIB_ \
- || ffestd_statelet_ == FFESTD_stateletITEM_); \
- ffestd_statelet_ = FFESTD_stateletITEMVALS_
-#define ffestd_check_item_value_() \
- assert(ffestd_statelet_ == FFESTD_stateletITEMVALS_)
-#define ffestd_check_item_endvals_() \
- assert(ffestd_statelet_ == FFESTD_stateletITEMVALS_); \
- ffestd_statelet_ = FFESTD_stateletITEM_
-#define ffestd_check_finish_() \
- assert(ffestd_statelet_ == FFESTD_stateletATTRIB_ \
- || ffestd_statelet_ == FFESTD_stateletITEM_); \
- ffestd_statelet_ = FFESTD_stateletSIMPLE_
-
-#if FFESTD_COPY_EASY_
-#define ffestd_subr_copy_accept_() (ffestpAcceptStmt *) \
- ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_acceptix)
-#define ffestd_subr_copy_beru_() (ffestpBeruStmt *) \
- ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_beruix)
-#define ffestd_subr_copy_close_() (ffestpCloseStmt *) \
- ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_closeix)
-#define ffestd_subr_copy_delete_() (ffestpDeleteStmt *) \
- ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_deleteix)
-#define ffestd_subr_copy_find_() (ffestpFindStmt *) \
- ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_findix)
-#define ffestd_subr_copy_inquire_() (ffestpInquireStmt *) \
- ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_inquireix)
-#define ffestd_subr_copy_open_() (ffestpOpenStmt *) \
- ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_openix)
-#define ffestd_subr_copy_print_() (ffestpPrintStmt *) \
- ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_printix)
-#define ffestd_subr_copy_read_() (ffestpReadStmt *) \
- ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_readix)
-#define ffestd_subr_copy_rewrite_() (ffestpRewriteStmt *) \
- ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_rewriteix)
-#define ffestd_subr_copy_type_() (ffestpTypeStmt *) \
- ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_typeix)
-#define ffestd_subr_copy_vxtcode_() (ffestpVxtcodeStmt *) \
- ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_vxtcodeix)
-#define ffestd_subr_copy_write_() (ffestpWriteStmt *) \
- ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_writeix)
-#endif
-
-/* ffestd_stmt_append_ -- Append statement to end of stmt list
-
- ffestd_stmt_append_(ffestd_stmt_new_(FFESTD_stmtidR737A_)); */
-
-static void
-ffestd_stmt_append_ (ffestdStmt_ stmt)
-{
- stmt->next = (ffestdStmt_) &ffestd_stmt_list_.first;
- stmt->previous = ffestd_stmt_list_.last;
- stmt->next->previous = stmt;
- stmt->previous->next = stmt;
-}
-
-/* ffestd_stmt_new_ -- Make new statement with given id
-
- ffestdStmt_ stmt;
- stmt = ffestd_stmt_new_(FFESTD_stmtidR737A_); */
-
-static ffestdStmt_
-ffestd_stmt_new_ (ffestdStmtId_ id)
-{
- ffestdStmt_ stmt;
-
- stmt = malloc_new_kp (ffe_pool_any_unit (), "ffestdStmt_", sizeof (*stmt));
- stmt->id = id;
- return stmt;
-}
-
-/* ffestd_stmt_pass_ -- Pass all statements on list to ffeste
-
- ffestd_stmt_pass_(); */
-
-static void
-ffestd_stmt_pass_ (void)
-{
- ffestdStmt_ stmt;
- ffestdExprItem_ expr; /* For traversing lists. */
- bool okay = (TREE_CODE (current_function_decl) != ERROR_MARK);
-
- if ((ffestd_2pass_entrypoints_ != 0) && okay)
- {
- tree which = ffecom_which_entrypoint_decl ();
- tree value;
- tree label;
- int pushok;
- int ents = ffestd_2pass_entrypoints_;
- tree duplicate;
-
- expand_start_case (0, which, TREE_TYPE (which), "entrypoint dispatch");
-
- stmt = ffestd_stmt_list_.first;
- do
- {
- while (stmt->id != FFESTD_stmtidR1226_)
- stmt = stmt->next;
-
- if (stmt->u.R1226.entry != NULL)
- {
- value = build_int_2 (stmt->u.R1226.entrynum, 0);
- /* Yes, we really want to build a null LABEL_DECL here and not
- put it on any list. That's what pushcase wants, so that's
- what it gets! */
- label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
-
- pushok = pushcase (value, convert, label, &duplicate);
- assert (pushok == 0);
-
- label = ffecom_temp_label ();
- TREE_USED (label) = 1;
- expand_goto (label);
-
- ffesymbol_hook (stmt->u.R1226.entry).length_tree = label;
- }
- stmt = stmt->next;
- }
- while (--ents != 0);
-
- expand_end_case (which);
- }
-
- for (stmt = ffestd_stmt_list_.first;
- stmt != (ffestdStmt_) &ffestd_stmt_list_.first;
- stmt = stmt->next)
- {
- switch (stmt->id)
- {
- case FFESTD_stmtidENDDOLOOP_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_do (stmt->u.enddoloop.block);
- ffestw_kill (stmt->u.enddoloop.block);
- break;
-
- case FFESTD_stmtidENDLOGIF_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_end_R807 ();
- break;
-
- case FFESTD_stmtidEXECLABEL_:
- if (okay)
- ffeste_labeldef_branch (stmt->u.execlabel.label);
- break;
-
- case FFESTD_stmtidFORMATLABEL_:
- if (okay)
- ffeste_labeldef_format (stmt->u.formatlabel.label);
- break;
-
- case FFESTD_stmtidR737A_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R737A (stmt->u.R737A.dest, stmt->u.R737A.source);
- malloc_pool_kill (stmt->u.R737A.pool);
- break;
-
- case FFESTD_stmtidR803_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R803 (stmt->u.R803.block, stmt->u.R803.expr);
- malloc_pool_kill (stmt->u.R803.pool);
- break;
-
- case FFESTD_stmtidR804_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R804 (stmt->u.R803.block, stmt->u.R804.expr);
- malloc_pool_kill (stmt->u.R804.pool);
- break;
-
- case FFESTD_stmtidR805_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R805 (stmt->u.R803.block);
- break;
-
- case FFESTD_stmtidR806_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R806 (stmt->u.R806.block);
- ffestw_kill (stmt->u.R806.block);
- break;
-
- case FFESTD_stmtidR807_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R807 (stmt->u.R807.expr);
- malloc_pool_kill (stmt->u.R807.pool);
- break;
-
- case FFESTD_stmtidR809_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R809 (stmt->u.R809.block, stmt->u.R809.expr);
- malloc_pool_kill (stmt->u.R809.pool);
- break;
-
- case FFESTD_stmtidR810_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R810 (stmt->u.R810.block, stmt->u.R810.casenum);
- malloc_pool_kill (stmt->u.R810.pool);
- break;
-
- case FFESTD_stmtidR811_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R811 (stmt->u.R811.block);
- malloc_pool_kill (ffestw_select (stmt->u.R811.block)->pool);
- ffestw_kill (stmt->u.R811.block);
- break;
-
- case FFESTD_stmtidR819A_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R819A (stmt->u.R819A.block, stmt->u.R819A.label,
- stmt->u.R819A.var,
- stmt->u.R819A.start, stmt->u.R819A.start_token,
- stmt->u.R819A.end, stmt->u.R819A.end_token,
- stmt->u.R819A.incr, stmt->u.R819A.incr_token);
- ffelex_token_kill (stmt->u.R819A.start_token);
- ffelex_token_kill (stmt->u.R819A.end_token);
- if (stmt->u.R819A.incr_token != NULL)
- ffelex_token_kill (stmt->u.R819A.incr_token);
- malloc_pool_kill (stmt->u.R819A.pool);
- break;
-
- case FFESTD_stmtidR819B_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R819B (stmt->u.R819B.block, stmt->u.R819B.label,
- stmt->u.R819B.expr);
- malloc_pool_kill (stmt->u.R819B.pool);
- break;
-
- case FFESTD_stmtidR825_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R825 ();
- break;
-
- case FFESTD_stmtidR834_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R834 (stmt->u.R834.block);
- break;
-
- case FFESTD_stmtidR835_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R835 (stmt->u.R835.block);
- break;
-
- case FFESTD_stmtidR836_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R836 (stmt->u.R836.label);
- break;
-
- case FFESTD_stmtidR837_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R837 (stmt->u.R837.labels, stmt->u.R837.count,
- stmt->u.R837.expr);
- malloc_pool_kill (stmt->u.R837.pool);
- break;
-
- case FFESTD_stmtidR838_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R838 (stmt->u.R838.label, stmt->u.R838.target);
- malloc_pool_kill (stmt->u.R838.pool);
- break;
-
- case FFESTD_stmtidR839_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R839 (stmt->u.R839.target);
- malloc_pool_kill (stmt->u.R839.pool);
- break;
-
- case FFESTD_stmtidR840_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R840 (stmt->u.R840.expr, stmt->u.R840.neg, stmt->u.R840.zero,
- stmt->u.R840.pos);
- malloc_pool_kill (stmt->u.R840.pool);
- break;
-
- case FFESTD_stmtidR841_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R841 ();
- break;
-
- case FFESTD_stmtidR842_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R842 (stmt->u.R842.expr);
- if (stmt->u.R842.pool != NULL)
- malloc_pool_kill (stmt->u.R842.pool);
- break;
-
- case FFESTD_stmtidR843_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R843 (stmt->u.R843.expr);
- malloc_pool_kill (stmt->u.R843.pool);
- break;
-
- case FFESTD_stmtidR904_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R904 (stmt->u.R904.params);
- malloc_pool_kill (stmt->u.R904.pool);
- break;
-
- case FFESTD_stmtidR907_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R907 (stmt->u.R907.params);
- malloc_pool_kill (stmt->u.R907.pool);
- break;
-
- case FFESTD_stmtidR909_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R909_start (stmt->u.R909.params, stmt->u.R909.only_format,
- stmt->u.R909.unit, stmt->u.R909.format,
- stmt->u.R909.rec, stmt->u.R909.key);
- for (expr = stmt->u.R909.list; expr != NULL; expr = expr->next)
- {
- if (okay)
- ffeste_R909_item (expr->expr, expr->token);
- ffelex_token_kill (expr->token);
- }
- if (okay)
- ffeste_R909_finish ();
- malloc_pool_kill (stmt->u.R909.pool);
- break;
-
- case FFESTD_stmtidR910_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R910_start (stmt->u.R910.params, stmt->u.R910.unit,
- stmt->u.R910.format, stmt->u.R910.rec);
- for (expr = stmt->u.R910.list; expr != NULL; expr = expr->next)
- {
- if (okay)
- ffeste_R910_item (expr->expr, expr->token);
- ffelex_token_kill (expr->token);
- }
- if (okay)
- ffeste_R910_finish ();
- malloc_pool_kill (stmt->u.R910.pool);
- break;
-
- case FFESTD_stmtidR911_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R911_start (stmt->u.R911.params, stmt->u.R911.format);
- for (expr = stmt->u.R911.list; expr != NULL; expr = expr->next)
- {
- if (okay)
- ffeste_R911_item (expr->expr, expr->token);
- ffelex_token_kill (expr->token);
- }
- if (okay)
- ffeste_R911_finish ();
- malloc_pool_kill (stmt->u.R911.pool);
- break;
-
- case FFESTD_stmtidR919_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R919 (stmt->u.R919.params);
- malloc_pool_kill (stmt->u.R919.pool);
- break;
-
- case FFESTD_stmtidR920_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R920 (stmt->u.R920.params);
- malloc_pool_kill (stmt->u.R920.pool);
- break;
-
- case FFESTD_stmtidR921_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R921 (stmt->u.R921.params);
- malloc_pool_kill (stmt->u.R921.pool);
- break;
-
- case FFESTD_stmtidR923A_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R923A (stmt->u.R923A.params, stmt->u.R923A.by_file);
- malloc_pool_kill (stmt->u.R923A.pool);
- break;
-
- case FFESTD_stmtidR923B_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R923B_start (stmt->u.R923B.params);
- for (expr = stmt->u.R923B.list; expr != NULL; expr = expr->next)
- {
- if (okay)
- ffeste_R923B_item (expr->expr);
- }
- if (okay)
- ffeste_R923B_finish ();
- malloc_pool_kill (stmt->u.R923B.pool);
- break;
-
- case FFESTD_stmtidR1001_:
- if (okay)
- ffeste_R1001 (&stmt->u.R1001.str);
- ffests_kill (&stmt->u.R1001.str);
- break;
-
- case FFESTD_stmtidR1103_:
- if (okay)
- ffeste_R1103 ();
- break;
-
- case FFESTD_stmtidR1112_:
- if (okay)
- ffeste_R1112 ();
- break;
-
- case FFESTD_stmtidR1212_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R1212 (stmt->u.R1212.expr);
- malloc_pool_kill (stmt->u.R1212.pool);
- break;
-
- case FFESTD_stmtidR1221_:
- if (okay)
- ffeste_R1221 ();
- break;
-
- case FFESTD_stmtidR1225_:
- if (okay)
- ffeste_R1225 ();
- break;
-
- case FFESTD_stmtidR1226_:
- ffestd_subr_line_restore_ (stmt);
- if (stmt->u.R1226.entry != NULL)
- {
- if (okay)
- ffeste_R1226 (stmt->u.R1226.entry);
- }
- break;
-
- case FFESTD_stmtidR1227_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_R1227 (stmt->u.R1227.block, stmt->u.R1227.expr);
- malloc_pool_kill (stmt->u.R1227.pool);
- break;
-
- case FFESTD_stmtidV020_:
- ffestd_subr_line_restore_ (stmt);
- if (okay)
- ffeste_V020_start (stmt->u.V020.params, stmt->u.V020.format);
- for (expr = stmt->u.V020.list; expr != NULL; expr = expr->next)
- {
- if (okay)
- ffeste_V020_item (expr->expr);
- }
- if (okay)
- ffeste_V020_finish ();
- malloc_pool_kill (stmt->u.V020.pool);
- break;
-
- default:
- assert ("bad stmt->id" == NULL);
- break;
- }
- }
-}
-
-/* ffestd_subr_copy_easy_ -- Copy I/O statement data structure
-
- ffestd_subr_copy_easy_();
-
- Copies all data except tokens in the I/O data structure into a new
- structure that lasts as long as the output pool for the current
- statement. Assumes that they are
- overlaid with each other (union) in stp.h and the typing
- and structure references assume (though not necessarily dangerous if
- FALSE) that INQUIRE has the most file elements. */
-
-#if FFESTD_COPY_EASY_
-static ffestpInquireStmt *
-ffestd_subr_copy_easy_ (ffestpInquireIx max)
-{
- ffestpInquireStmt *stmt;
- ffestpInquireIx ix;
-
- stmt = malloc_new_kp (ffesta_output_pool, "FFESTD easy",
- sizeof (ffestpFile) * max);
-
- for (ix = 0; ix < max; ++ix)
- {
- if ((stmt->inquire_spec[ix].kw_or_val_present
- = ffestp_file.inquire.inquire_spec[ix].kw_or_val_present)
- && (stmt->inquire_spec[ix].value_present
- = ffestp_file.inquire.inquire_spec[ix].value_present))
- {
- if ((stmt->inquire_spec[ix].value_is_label
- = ffestp_file.inquire.inquire_spec[ix].value_is_label))
- stmt->inquire_spec[ix].u.label
- = ffestp_file.inquire.inquire_spec[ix].u.label;
- else
- stmt->inquire_spec[ix].u.expr
- = ffestp_file.inquire.inquire_spec[ix].u.expr;
- }
- }
-
- return stmt;
-}
-
-#endif
-/* ffestd_subr_labels_ -- Handle any undefined labels
-
- ffestd_subr_labels_(FALSE);
-
- For every undefined label, generate an error message and either define
- label as a FORMAT() statement (for FORMAT labels) or as a STOP statement
- (for all other labels). */
-
-static void
-ffestd_subr_labels_ (bool unexpected)
-{
- ffelab l;
- ffelabHandle h;
- ffelabNumber undef;
- ffesttFormatList f;
-
- undef = ffelab_number () - ffestv_num_label_defines_;
-
- for (h = ffelab_handle_first (); h != NULL; h = ffelab_handle_next (h))
- {
- l = ffelab_handle_target (h);
- if (ffewhere_line_is_unknown (ffelab_definition_line (l)))
- { /* Undefined label. */
- assert (!unexpected);
- assert (undef > 0);
- undef--;
- ffebad_start (FFEBAD_UNDEF_LABEL);
- if (ffelab_type (l) == FFELAB_typeLOOPEND)
- ffebad_here (0, ffelab_doref_line (l), ffelab_doref_column (l));
- else if (ffelab_type (l) != FFELAB_typeANY)
- ffebad_here (0, ffelab_firstref_line (l), ffelab_firstref_column (l));
- else if (!ffewhere_line_is_unknown (ffelab_firstref_line (l)))
- ffebad_here (0, ffelab_firstref_line (l), ffelab_firstref_column (l));
- else if (!ffewhere_line_is_unknown (ffelab_doref_line (l)))
- ffebad_here (0, ffelab_doref_line (l), ffelab_doref_column (l));
- else
- ffebad_here (0, ffelab_definition_line (l), ffelab_definition_column (l));
- ffebad_finish ();
-
- switch (ffelab_type (l))
- {
- case FFELAB_typeFORMAT:
- ffelab_set_definition_line (l,
- ffewhere_line_use (ffelab_firstref_line (l)));
- ffelab_set_definition_column (l,
- ffewhere_column_use (ffelab_firstref_column (l)));
- ffestv_num_label_defines_++;
- f = ffestt_formatlist_create (NULL, NULL);
- ffestd_labeldef_format (l);
- ffestd_R1001 (f);
- ffestt_formatlist_kill (f);
- break;
-
- case FFELAB_typeASSIGNABLE:
- ffelab_set_definition_line (l,
- ffewhere_line_use (ffelab_firstref_line (l)));
- ffelab_set_definition_column (l,
- ffewhere_column_use (ffelab_firstref_column (l)));
- ffestv_num_label_defines_++;
- ffelab_set_type (l, FFELAB_typeNOTLOOP);
- ffelab_set_blocknum (l, ffestw_blocknum (ffestw_stack_top ()));
- ffestd_labeldef_notloop (l);
- ffestd_R842 (NULL);
- break;
-
- case FFELAB_typeNOTLOOP:
- ffelab_set_definition_line (l,
- ffewhere_line_use (ffelab_firstref_line (l)));
- ffelab_set_definition_column (l,
- ffewhere_column_use (ffelab_firstref_column (l)));
- ffestv_num_label_defines_++;
- ffelab_set_blocknum (l, ffestw_blocknum (ffestw_stack_top ()));
- ffestd_labeldef_notloop (l);
- ffestd_R842 (NULL);
- break;
-
- default:
- assert ("bad label type" == NULL);
- /* Fall through. */
- case FFELAB_typeUNKNOWN:
- case FFELAB_typeANY:
- break;
- }
- }
- }
- ffelab_handle_done (h);
- assert (undef == 0);
-}
-
-/* ffestd_subr_vxt_ -- Report error about lack of full VXT support
-
- ffestd_subr_vxt_(); */
-
-static void
-ffestd_subr_vxt_ (void)
-{
- ffebad_start (FFEBAD_VXT_UNSUPPORTED);
- ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
- ffelex_token_where_column (ffesta_tokens[0]));
- ffebad_finish ();
-}
-
-/* ffestd_begin_uses -- Start a bunch of USE statements
-
- ffestd_begin_uses();
-
- Invoked before handling the first USE statement in a block of one or
- more USE statements. _end_uses_(bool ok) is invoked before handling
- the first statement after the block (there are no BEGIN USE and END USE
- statements, but the semantics of USE statements effectively requires
- handling them as a single block rather than one statement at a time). */
-
-void
-ffestd_begin_uses (void)
-{
-}
-
-/* ffestd_do -- End of statement following DO-term-stmt etc
-
- ffestd_do(TRUE);
-
- Also invoked by _labeldef_branch_finish_ (or, in cases
- of errors, other _labeldef_ functions) when the label definition is
- for a DO-target (LOOPEND) label, once per matching/outstanding DO
- block on the stack. These cases invoke this function with ok==TRUE, so
- only forced stack popping (via ffestd_eof_()) invokes it with ok==FALSE. */
-
-void
-ffestd_do (bool ok UNUSED)
-{
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidENDDOLOOP_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.enddoloop.block = ffestw_stack_top ();
-
- --ffestd_block_level_;
- assert (ffestd_block_level_ >= 0);
-}
-
-/* ffestd_end_R807 -- End of statement following logical IF
-
- ffestd_end_R807(TRUE);
-
- Applies ONLY to logical IF, not to IF-THEN. For example, does not
- ffelex_token_kill the construct name for an IF-THEN block (the name
- field is invalid for logical IF). ok==TRUE iff statement following
- logical IF (substatement) is valid; else, statement is invalid or
- stack forcibly popped due to ffestd_eof_(). */
-
-void
-ffestd_end_R807 (bool ok UNUSED)
-{
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidENDLOGIF_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
-
- --ffestd_block_level_;
- assert (ffestd_block_level_ >= 0);
-}
-
-/* ffestd_exec_begin -- Executable statements can start coming in now
-
- ffestd_exec_begin(); */
-
-void
-ffestd_exec_begin (void)
-{
- ffecom_exec_transition ();
-
- if (ffestd_2pass_entrypoints_ != 0)
- { /* Process pending ENTRY statements now that
- info filled in. */
- ffestdStmt_ stmt;
- int ents = ffestd_2pass_entrypoints_;
-
- stmt = ffestd_stmt_list_.first;
- do
- {
- while (stmt->id != FFESTD_stmtidR1226_)
- stmt = stmt->next;
-
- if (!ffecom_2pass_advise_entrypoint (stmt->u.R1226.entry))
- {
- stmt->u.R1226.entry = NULL;
- --ffestd_2pass_entrypoints_;
- }
- stmt = stmt->next;
- }
- while (--ents != 0);
- }
-}
-
-/* ffestd_exec_end -- Executable statements can no longer come in now
-
- ffestd_exec_end(); */
-
-void
-ffestd_exec_end (void)
-{
- location_t old_loc = input_location;
-
- ffecom_end_transition ();
-
- ffestd_stmt_pass_ ();
-
- ffecom_finish_progunit ();
-
- if (ffestd_2pass_entrypoints_ != 0)
- {
- int ents = ffestd_2pass_entrypoints_;
- ffestdStmt_ stmt = ffestd_stmt_list_.first;
-
- do
- {
- while (stmt->id != FFESTD_stmtidR1226_)
- stmt = stmt->next;
-
- if (stmt->u.R1226.entry != NULL)
- {
- ffestd_subr_line_restore_ (stmt);
- ffecom_2pass_do_entrypoint (stmt->u.R1226.entry);
- }
- stmt = stmt->next;
- }
- while (--ents != 0);
- }
-
- ffestd_stmt_list_.first = NULL;
- ffestd_stmt_list_.last = NULL;
- ffestd_2pass_entrypoints_ = 0;
-
- input_location = old_loc;
-}
-
-/* ffestd_init_3 -- Initialize for any program unit
-
- ffestd_init_3(); */
-
-void
-ffestd_init_3 (void)
-{
- ffestd_stmt_list_.first = (ffestdStmt_) &ffestd_stmt_list_.first;
- ffestd_stmt_list_.last = (ffestdStmt_) &ffestd_stmt_list_.first;
-}
-
-/* Generate "code" for "any" label def. */
-
-void
-ffestd_labeldef_any (ffelab label UNUSED)
-{
-}
-
-/* ffestd_labeldef_branch -- Generate "code" for branch label def
-
- ffestd_labeldef_branch(label); */
-
-void
-ffestd_labeldef_branch (ffelab label)
-{
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidEXECLABEL_);
- ffestd_stmt_append_ (stmt);
- stmt->u.execlabel.label = label;
-
- ffestd_is_reachable_ = TRUE;
-}
-
-/* ffestd_labeldef_format -- Generate "code" for FORMAT label def
-
- ffestd_labeldef_format(label); */
-
-void
-ffestd_labeldef_format (ffelab label)
-{
- ffestdStmt_ stmt;
-
- ffestd_label_formatdef_ = label;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidFORMATLABEL_);
- ffestd_stmt_append_ (stmt);
- stmt->u.formatlabel.label = label;
-}
-
-/* ffestd_labeldef_useless -- Generate "code" for useless label def
-
- ffestd_labeldef_useless(label); */
-
-void
-ffestd_labeldef_useless (ffelab label UNUSED)
-{
-}
-
-/* ffestd_R522 -- SAVE statement with no list
-
- ffestd_R522();
-
- Verify that SAVE is valid here, and flag everything as SAVEd. */
-
-void
-ffestd_R522 (void)
-{
- ffestd_check_simple_ ();
-}
-
-/* ffestd_R522start -- SAVE statement list begin
-
- ffestd_R522start();
-
- Verify that SAVE is valid here, and begin accepting items in the list. */
-
-void
-ffestd_R522start (void)
-{
- ffestd_check_start_ ();
-}
-
-/* ffestd_R522item_object -- SAVE statement for object-name
-
- ffestd_R522item_object(name_token);
-
- Make sure name_token identifies a valid object to be SAVEd. */
-
-void
-ffestd_R522item_object (ffelexToken name UNUSED)
-{
- ffestd_check_item_ ();
-}
-
-/* ffestd_R522item_cblock -- SAVE statement for common-block-name
-
- ffestd_R522item_cblock(name_token);
-
- Make sure name_token identifies a valid common block to be SAVEd. */
-
-void
-ffestd_R522item_cblock (ffelexToken name UNUSED)
-{
- ffestd_check_item_ ();
-}
-
-/* ffestd_R522finish -- SAVE statement list complete
-
- ffestd_R522finish();
-
- Just wrap up any local activities. */
-
-void
-ffestd_R522finish (void)
-{
- ffestd_check_finish_ ();
-}
-
-/* ffestd_R524_start -- DIMENSION statement list begin
-
- ffestd_R524_start(bool virtual);
-
- Verify that DIMENSION is valid here, and begin accepting items in the list. */
-
-void
-ffestd_R524_start (bool virtual UNUSED)
-{
- ffestd_check_start_ ();
-}
-
-/* ffestd_R524_item -- DIMENSION statement for object-name
-
- ffestd_R524_item(name_token,dim_list);
-
- Make sure name_token identifies a valid object to be DIMENSIONd. */
-
-void
-ffestd_R524_item (ffelexToken name UNUSED, ffesttDimList dims UNUSED)
-{
- ffestd_check_item_ ();
-}
-
-/* ffestd_R524_finish -- DIMENSION statement list complete
-
- ffestd_R524_finish();
-
- Just wrap up any local activities. */
-
-void
-ffestd_R524_finish (void)
-{
- ffestd_check_finish_ ();
-}
-
-/* ffestd_R537_start -- PARAMETER statement list begin
-
- ffestd_R537_start();
-
- Verify that PARAMETER is valid here, and begin accepting items in the list. */
-
-void
-ffestd_R537_start (void)
-{
- ffestd_check_start_ ();
-}
-
-/* ffestd_R537_item -- PARAMETER statement assignment
-
- ffestd_R537_item(dest,dest_token,source,source_token);
-
- Make sure the source is a valid source for the destination; make the
- assignment. */
-
-void
-ffestd_R537_item (ffebld dest UNUSED, ffebld source UNUSED)
-{
- ffestd_check_item_ ();
-}
-
-/* ffestd_R537_finish -- PARAMETER statement list complete
-
- ffestd_R537_finish();
-
- Just wrap up any local activities. */
-
-void
-ffestd_R537_finish (void)
-{
- ffestd_check_finish_ ();
-}
-
-/* ffestd_R539 -- IMPLICIT NONE statement
-
- ffestd_R539();
-
- Verify that the IMPLICIT NONE statement is ok here and implement. */
-
-void
-ffestd_R539 (void)
-{
- ffestd_check_simple_ ();
-}
-
-/* ffestd_R539start -- IMPLICIT statement
-
- ffestd_R539start();
-
- Verify that the IMPLICIT statement is ok here and implement. */
-
-void
-ffestd_R539start (void)
-{
- ffestd_check_start_ ();
-}
-
-/* ffestd_R539item -- IMPLICIT statement specification (R540)
-
- ffestd_R539item(...);
-
- Verify that the type and letter list are all ok and implement. */
-
-void
-ffestd_R539item (ffestpType type UNUSED, ffebld kind UNUSED,
- ffelexToken kindt UNUSED, ffebld len UNUSED,
- ffelexToken lent UNUSED, ffesttImpList letters UNUSED)
-{
- ffestd_check_item_ ();
-}
-
-/* ffestd_R539finish -- IMPLICIT statement
-
- ffestd_R539finish();
-
- Finish up any local activities. */
-
-void
-ffestd_R539finish (void)
-{
- ffestd_check_finish_ ();
-}
-
-/* ffestd_R542_start -- NAMELIST statement list begin
-
- ffestd_R542_start();
-
- Verify that NAMELIST is valid here, and begin accepting items in the list. */
-
-void
-ffestd_R542_start (void)
-{
- ffestd_check_start_ ();
-}
-
-/* ffestd_R542_item_nlist -- NAMELIST statement for group-name
-
- ffestd_R542_item_nlist(groupname_token);
-
- Make sure name_token identifies a valid object to be NAMELISTd. */
-
-void
-ffestd_R542_item_nlist (ffelexToken name UNUSED)
-{
- ffestd_check_item_ ();
-}
-
-/* ffestd_R542_item_nitem -- NAMELIST statement for variable-name
-
- ffestd_R542_item_nitem(name_token);
-
- Make sure name_token identifies a valid object to be NAMELISTd. */
-
-void
-ffestd_R542_item_nitem (ffelexToken name UNUSED)
-{
- ffestd_check_item_ ();
-}
-
-/* ffestd_R542_finish -- NAMELIST statement list complete
-
- ffestd_R542_finish();
-
- Just wrap up any local activities. */
-
-void
-ffestd_R542_finish (void)
-{
- ffestd_check_finish_ ();
-}
-
-/* ffestd_R547_start -- COMMON statement list begin
-
- ffestd_R547_start();
-
- Verify that COMMON is valid here, and begin accepting items in the list. */
-
-void
-ffestd_R547_start (void)
-{
- ffestd_check_start_ ();
-}
-
-/* ffestd_R547_item_object -- COMMON statement for object-name
-
- ffestd_R547_item_object(name_token,dim_list);
-
- Make sure name_token identifies a valid object to be COMMONd. */
-
-void
-ffestd_R547_item_object (ffelexToken name UNUSED,
- ffesttDimList dims UNUSED)
-{
- ffestd_check_item_ ();
-}
-
-/* ffestd_R547_item_cblock -- COMMON statement for common-block-name
-
- ffestd_R547_item_cblock(name_token);
-
- Make sure name_token identifies a valid common block to be COMMONd. */
-
-void
-ffestd_R547_item_cblock (ffelexToken name UNUSED)
-{
- ffestd_check_item_ ();
-}
-
-/* ffestd_R547_finish -- COMMON statement list complete
-
- ffestd_R547_finish();
-
- Just wrap up any local activities. */
-
-void
-ffestd_R547_finish (void)
-{
- ffestd_check_finish_ ();
-}
-
-/* ffestd_R737A -- Assignment statement outside of WHERE
-
- ffestd_R737A(dest_expr,source_expr); */
-
-void
-ffestd_R737A (ffebld dest, ffebld source)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR737A_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R737A.pool = ffesta_output_pool;
- stmt->u.R737A.dest = dest;
- stmt->u.R737A.source = source;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-}
-
-
-/* Block IF (IF-THEN) statement. */
-
-void
-ffestd_R803 (ffelexToken construct_name UNUSED, ffebld expr)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR803_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R803.pool = ffesta_output_pool;
- stmt->u.R803.block = ffestw_use (ffestw_stack_top ());
- stmt->u.R803.expr = expr;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-
- ++ffestd_block_level_;
- assert (ffestd_block_level_ > 0);
-}
-
-/* ELSE IF statement. */
-
-void
-ffestd_R804 (ffebld expr, ffelexToken name UNUSED)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR804_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R804.pool = ffesta_output_pool;
- stmt->u.R804.block = ffestw_use (ffestw_stack_top ());
- stmt->u.R804.expr = expr;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-}
-
-/* ELSE statement. */
-
-void
-ffestd_R805 (ffelexToken name UNUSED)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR805_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R805.block = ffestw_use (ffestw_stack_top ());
-}
-
-/* END IF statement. */
-
-void
-ffestd_R806 (bool ok UNUSED)
-{
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR806_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R806.block = ffestw_use (ffestw_stack_top ());
-
- --ffestd_block_level_;
- assert (ffestd_block_level_ >= 0);
-}
-
-/* ffestd_R807 -- Logical IF statement
-
- ffestd_R807(expr,expr_token);
-
- Make sure statement is valid here; implement. */
-
-void
-ffestd_R807 (ffebld expr)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR807_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R807.pool = ffesta_output_pool;
- stmt->u.R807.expr = expr;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-
- ++ffestd_block_level_;
- assert (ffestd_block_level_ > 0);
-}
-
-/* ffestd_R809 -- SELECT CASE statement
-
- ffestd_R809(construct_name,expr,expr_token);
-
- Make sure statement is valid here; implement. */
-
-void
-ffestd_R809 (ffelexToken construct_name UNUSED, ffebld expr)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR809_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R809.pool = ffesta_output_pool;
- stmt->u.R809.block = ffestw_use (ffestw_stack_top ());
- stmt->u.R809.expr = expr;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- malloc_pool_use (ffestw_select (ffestw_stack_top ())->pool);
-
- ++ffestd_block_level_;
- assert (ffestd_block_level_ > 0);
-}
-
-/* ffestd_R810 -- CASE statement
-
- ffestd_R810(case_value_range_list,name);
-
- If casenum is 0, it's CASE DEFAULT. Else it's the case ranges at
- the start of the first_stmt list in the select object at the top of
- the stack that match casenum. */
-
-void
-ffestd_R810 (unsigned long casenum)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR810_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R810.pool = ffesta_output_pool;
- stmt->u.R810.block = ffestw_stack_top ();
- stmt->u.R810.casenum = casenum;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-}
-
-/* ffestd_R811 -- End a SELECT
-
- ffestd_R811(TRUE); */
-
-void
-ffestd_R811 (bool ok UNUSED)
-{
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR811_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R811.block = ffestw_stack_top ();
-
- --ffestd_block_level_;
- assert (ffestd_block_level_ >= 0);
-}
-
-/* ffestd_R819A -- Iterative DO statement
-
- ffestd_R819A(construct_name,label_token,expr,expr_token);
-
- Make sure statement is valid here; implement. */
-
-void
-ffestd_R819A (ffelexToken construct_name UNUSED, ffelab label,
- ffebld var, ffebld start, ffelexToken start_token,
- ffebld end, ffelexToken end_token,
- ffebld incr, ffelexToken incr_token)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR819A_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R819A.pool = ffesta_output_pool;
- stmt->u.R819A.block = ffestw_use (ffestw_stack_top ());
- stmt->u.R819A.label = label;
- stmt->u.R819A.var = var;
- stmt->u.R819A.start = start;
- stmt->u.R819A.start_token = ffelex_token_use (start_token);
- stmt->u.R819A.end = end;
- stmt->u.R819A.end_token = ffelex_token_use (end_token);
- stmt->u.R819A.incr = incr;
- stmt->u.R819A.incr_token = (incr_token == NULL) ? NULL
- : ffelex_token_use (incr_token);
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-
- ++ffestd_block_level_;
- assert (ffestd_block_level_ > 0);
-}
-
-/* ffestd_R819B -- DO WHILE statement
-
- ffestd_R819B(construct_name,label_token,expr,expr_token);
-
- Make sure statement is valid here; implement. */
-
-void
-ffestd_R819B (ffelexToken construct_name UNUSED, ffelab label,
- ffebld expr)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR819B_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R819B.pool = ffesta_output_pool;
- stmt->u.R819B.block = ffestw_use (ffestw_stack_top ());
- stmt->u.R819B.label = label;
- stmt->u.R819B.expr = expr;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-
- ++ffestd_block_level_;
- assert (ffestd_block_level_ > 0);
-}
-
-/* ffestd_R825 -- END DO statement
-
- ffestd_R825(name_token);
-
- Make sure ffestd_kind_ identifies a DO block. If not
- NULL, make sure name_token gives the correct name. Do whatever
- is specific to seeing END DO with a DO-target label definition on it,
- where the END DO is really treated as a CONTINUE (i.e. generate th
- same code you would for CONTINUE). ffestd_do handles the actual
- generation of end-loop code. */
-
-void
-ffestd_R825 (ffelexToken name UNUSED)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR825_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
-}
-
-/* ffestd_R834 -- CYCLE statement
-
- ffestd_R834(name_token);
-
- Handle a CYCLE within a loop. */
-
-void
-ffestd_R834 (ffestw block)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR834_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R834.block = block;
-}
-
-/* ffestd_R835 -- EXIT statement
-
- ffestd_R835(name_token);
-
- Handle a EXIT within a loop. */
-
-void
-ffestd_R835 (ffestw block)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR835_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R835.block = block;
-}
-
-/* ffestd_R836 -- GOTO statement
-
- ffestd_R836(label);
-
- Make sure label_token identifies a valid label for a GOTO. Update
- that label's info to indicate it is the target of a GOTO. */
-
-void
-ffestd_R836 (ffelab label)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR836_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R836.label = label;
-
- if (ffestd_block_level_ == 0)
- ffestd_is_reachable_ = FALSE;
-}
-
-/* ffestd_R837 -- Computed GOTO statement
-
- ffestd_R837(labels,expr);
-
- Make sure label_list identifies valid labels for a GOTO. Update
- each label's info to indicate it is the target of a GOTO. */
-
-void
-ffestd_R837 (ffelab *labels, int count, ffebld expr)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR837_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R837.pool = ffesta_output_pool;
- stmt->u.R837.labels = labels;
- stmt->u.R837.count = count;
- stmt->u.R837.expr = expr;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-}
-
-/* ffestd_R838 -- ASSIGN statement
-
- ffestd_R838(label_token,target_variable,target_token);
-
- Make sure label_token identifies a valid label for an assignment. Update
- that label's info to indicate it is the source of an assignment. Update
- target_variable's info to indicate it is the target the assignment of that
- label. */
-
-void
-ffestd_R838 (ffelab label, ffebld target)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR838_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R838.pool = ffesta_output_pool;
- stmt->u.R838.label = label;
- stmt->u.R838.target = target;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-}
-
-/* ffestd_R839 -- Assigned GOTO statement
-
- ffestd_R839(target,labels);
-
- Make sure label_list identifies valid labels for a GOTO. Update
- each label's info to indicate it is the target of a GOTO. */
-
-void
-ffestd_R839 (ffebld target, ffelab *labels UNUSED, int count UNUSED)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR839_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R839.pool = ffesta_output_pool;
- stmt->u.R839.target = target;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-
- if (ffestd_block_level_ == 0)
- ffestd_is_reachable_ = FALSE;
-}
-
-/* ffestd_R840 -- Arithmetic IF statement
-
- ffestd_R840(expr,expr_token,neg,zero,pos);
-
- Make sure the labels are valid; implement. */
-
-void
-ffestd_R840 (ffebld expr, ffelab neg, ffelab zero, ffelab pos)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR840_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R840.pool = ffesta_output_pool;
- stmt->u.R840.expr = expr;
- stmt->u.R840.neg = neg;
- stmt->u.R840.zero = zero;
- stmt->u.R840.pos = pos;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-
- if (ffestd_block_level_ == 0)
- ffestd_is_reachable_ = FALSE;
-}
-
-/* ffestd_R841 -- CONTINUE statement
-
- ffestd_R841(); */
-
-void
-ffestd_R841 (bool in_where UNUSED)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR841_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
-}
-
-/* ffestd_R842 -- STOP statement
-
- ffestd_R842(expr); */
-
-void
-ffestd_R842 (ffebld expr)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR842_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- if (ffesta_outpooldisp () == FFESTA_pooldispPRESERVE)
- {
- /* This is a "spurious" (automatically-generated) STOP
- that follows a previous STOP or other statement.
- Make sure we don't have an expression in the pool,
- and then mark that the pool has already been killed. */
- assert (expr == NULL);
- stmt->u.R842.pool = NULL;
- stmt->u.R842.expr = NULL;
- }
- else
- {
- stmt->u.R842.pool = ffesta_output_pool;
- stmt->u.R842.expr = expr;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-
- if (ffestd_block_level_ == 0)
- ffestd_is_reachable_ = FALSE;
-}
-
-/* ffestd_R843 -- PAUSE statement
-
- ffestd_R843(expr,expr_token);
-
- Make sure statement is valid here; implement. expr and expr_token are
- both NULL if there was no expression. */
-
-void
-ffestd_R843 (ffebld expr)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR843_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R843.pool = ffesta_output_pool;
- stmt->u.R843.expr = expr;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-}
-
-/* ffestd_R904 -- OPEN statement
-
- ffestd_R904();
-
- Make sure an OPEN is valid in the current context, and implement it. */
-
-void
-ffestd_R904 (void)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
-#define specified(something) \
- (ffestp_file.open.open_spec[something].kw_or_val_present)
-
- /* Warn if there are any thing we don't handle via f2c libraries. */
-
- if (specified (FFESTP_openixACTION)
- || specified (FFESTP_openixASSOCIATEVARIABLE)
- || specified (FFESTP_openixBLOCKSIZE)
- || specified (FFESTP_openixBUFFERCOUNT)
- || specified (FFESTP_openixCARRIAGECONTROL)
- || specified (FFESTP_openixDEFAULTFILE)
- || specified (FFESTP_openixDELIM)
- || specified (FFESTP_openixDISPOSE)
- || specified (FFESTP_openixEXTENDSIZE)
- || specified (FFESTP_openixINITIALSIZE)
- || specified (FFESTP_openixKEY)
- || specified (FFESTP_openixMAXREC)
- || specified (FFESTP_openixNOSPANBLOCKS)
- || specified (FFESTP_openixORGANIZATION)
- || specified (FFESTP_openixPAD)
- || specified (FFESTP_openixPOSITION)
- || specified (FFESTP_openixREADONLY)
- || specified (FFESTP_openixRECORDTYPE)
- || specified (FFESTP_openixSHARED)
- || specified (FFESTP_openixUSEROPEN))
- {
- ffebad_start (FFEBAD_OPEN_UNSUPPORTED);
- ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
- ffelex_token_where_column (ffesta_tokens[0]));
- ffebad_finish ();
- }
-
-#undef specified
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR904_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R904.pool = ffesta_output_pool;
- stmt->u.R904.params = ffestd_subr_copy_open_ ();
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-}
-
-/* ffestd_R907 -- CLOSE statement
-
- ffestd_R907();
-
- Make sure a CLOSE is valid in the current context, and implement it. */
-
-void
-ffestd_R907 (void)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR907_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R907.pool = ffesta_output_pool;
- stmt->u.R907.params = ffestd_subr_copy_close_ ();
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-}
-
-/* ffestd_R909_start -- READ(...) statement list begin
-
- ffestd_R909_start(FALSE);
-
- Verify that READ is valid here, and begin accepting items in the
- list. */
-
-void
-ffestd_R909_start (bool only_format, ffestvUnit unit,
- ffestvFormat format, bool rec, bool key)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_start_ ();
-
-#define specified(something) \
- (ffestp_file.read.read_spec[something].kw_or_val_present)
-
- /* Warn if there are any thing we don't handle via f2c libraries. */
- if (specified (FFESTP_readixADVANCE)
- || specified (FFESTP_readixEOR)
- || specified (FFESTP_readixKEYEQ)
- || specified (FFESTP_readixKEYGE)
- || specified (FFESTP_readixKEYGT)
- || specified (FFESTP_readixKEYID)
- || specified (FFESTP_readixNULLS)
- || specified (FFESTP_readixSIZE))
- {
- ffebad_start (FFEBAD_READ_UNSUPPORTED);
- ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
- ffelex_token_where_column (ffesta_tokens[0]));
- ffebad_finish ();
- }
-
-#undef specified
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR909_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R909.pool = ffesta_output_pool;
- stmt->u.R909.params = ffestd_subr_copy_read_ ();
- stmt->u.R909.only_format = only_format;
- stmt->u.R909.unit = unit;
- stmt->u.R909.format = format;
- stmt->u.R909.rec = rec;
- stmt->u.R909.key = key;
- stmt->u.R909.list = NULL;
- ffestd_expr_list_ = &stmt->u.R909.list;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-}
-
-/* ffestd_R909_item -- READ statement i/o item
-
- ffestd_R909_item(expr,expr_token);
-
- Implement output-list expression. */
-
-void
-ffestd_R909_item (ffebld expr, ffelexToken expr_token)
-{
- ffestdExprItem_ item;
-
- ffestd_check_item_ ();
-
- item = malloc_new_kp (ffesta_output_pool, "ffestdExprItem_", sizeof (*item));
-
- item->next = NULL;
- item->expr = expr;
- item->token = ffelex_token_use (expr_token);
- *ffestd_expr_list_ = item;
- ffestd_expr_list_ = &item->next;
-}
-
-/* ffestd_R909_finish -- READ statement list complete
-
- ffestd_R909_finish();
-
- Just wrap up any local activities. */
-
-void
-ffestd_R909_finish (void)
-{
- ffestd_check_finish_ ();
-}
-
-/* ffestd_R910_start -- WRITE(...) statement list begin
-
- ffestd_R910_start();
-
- Verify that WRITE is valid here, and begin accepting items in the
- list. */
-
-void
-ffestd_R910_start (ffestvUnit unit, ffestvFormat format, bool rec)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_start_ ();
-
-#define specified(something) \
- (ffestp_file.write.write_spec[something].kw_or_val_present)
-
- /* Warn if there are any thing we don't handle via f2c libraries. */
- if (specified (FFESTP_writeixADVANCE)
- || specified (FFESTP_writeixEOR))
- {
- ffebad_start (FFEBAD_WRITE_UNSUPPORTED);
- ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
- ffelex_token_where_column (ffesta_tokens[0]));
- ffebad_finish ();
- }
-
-#undef specified
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR910_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R910.pool = ffesta_output_pool;
- stmt->u.R910.params = ffestd_subr_copy_write_ ();
- stmt->u.R910.unit = unit;
- stmt->u.R910.format = format;
- stmt->u.R910.rec = rec;
- stmt->u.R910.list = NULL;
- ffestd_expr_list_ = &stmt->u.R910.list;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-}
-
-/* ffestd_R910_item -- WRITE statement i/o item
-
- ffestd_R910_item(expr,expr_token);
-
- Implement output-list expression. */
-
-void
-ffestd_R910_item (ffebld expr, ffelexToken expr_token)
-{
- ffestdExprItem_ item;
-
- ffestd_check_item_ ();
-
- item = malloc_new_kp (ffesta_output_pool, "ffestdExprItem_", sizeof (*item));
-
- item->next = NULL;
- item->expr = expr;
- item->token = ffelex_token_use (expr_token);
- *ffestd_expr_list_ = item;
- ffestd_expr_list_ = &item->next;
-}
-
-/* ffestd_R910_finish -- WRITE statement list complete
-
- ffestd_R910_finish();
-
- Just wrap up any local activities. */
-
-void
-ffestd_R910_finish (void)
-{
- ffestd_check_finish_ ();
-}
-
-/* ffestd_R911_start -- PRINT statement list begin
-
- ffestd_R911_start();
-
- Verify that PRINT is valid here, and begin accepting items in the
- list. */
-
-void
-ffestd_R911_start (ffestvFormat format)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_start_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR911_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R911.pool = ffesta_output_pool;
- stmt->u.R911.params = ffestd_subr_copy_print_ ();
- stmt->u.R911.format = format;
- stmt->u.R911.list = NULL;
- ffestd_expr_list_ = &stmt->u.R911.list;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-}
-
-/* ffestd_R911_item -- PRINT statement i/o item
-
- ffestd_R911_item(expr,expr_token);
-
- Implement output-list expression. */
-
-void
-ffestd_R911_item (ffebld expr, ffelexToken expr_token)
-{
- ffestdExprItem_ item;
-
- ffestd_check_item_ ();
-
- item = malloc_new_kp (ffesta_output_pool, "ffestdExprItem_", sizeof (*item));
-
- item->next = NULL;
- item->expr = expr;
- item->token = ffelex_token_use (expr_token);
- *ffestd_expr_list_ = item;
- ffestd_expr_list_ = &item->next;
-}
-
-/* ffestd_R911_finish -- PRINT statement list complete
-
- ffestd_R911_finish();
-
- Just wrap up any local activities. */
-
-void
-ffestd_R911_finish (void)
-{
- ffestd_check_finish_ ();
-}
-
-/* ffestd_R919 -- BACKSPACE statement
-
- ffestd_R919();
-
- Make sure a BACKSPACE is valid in the current context, and implement it. */
-
-void
-ffestd_R919 (void)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR919_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R919.pool = ffesta_output_pool;
- stmt->u.R919.params = ffestd_subr_copy_beru_ ();
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-}
-
-/* ffestd_R920 -- ENDFILE statement
-
- ffestd_R920();
-
- Make sure a ENDFILE is valid in the current context, and implement it. */
-
-void
-ffestd_R920 (void)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR920_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R920.pool = ffesta_output_pool;
- stmt->u.R920.params = ffestd_subr_copy_beru_ ();
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-}
-
-/* ffestd_R921 -- REWIND statement
-
- ffestd_R921();
-
- Make sure a REWIND is valid in the current context, and implement it. */
-
-void
-ffestd_R921 (void)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR921_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R921.pool = ffesta_output_pool;
- stmt->u.R921.params = ffestd_subr_copy_beru_ ();
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-}
-
-/* ffestd_R923A -- INQUIRE statement (non-IOLENGTH version)
-
- ffestd_R923A(bool by_file);
-
- Make sure an INQUIRE is valid in the current context, and implement it. */
-
-void
-ffestd_R923A (bool by_file)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
-#define specified(something) \
- (ffestp_file.inquire.inquire_spec[something].kw_or_val_present)
-
- /* Warn if there are any thing we don't handle via f2c libraries. */
- if (specified (FFESTP_inquireixACTION)
- || specified (FFESTP_inquireixCARRIAGECONTROL)
- || specified (FFESTP_inquireixDEFAULTFILE)
- || specified (FFESTP_inquireixDELIM)
- || specified (FFESTP_inquireixKEYED)
- || specified (FFESTP_inquireixORGANIZATION)
- || specified (FFESTP_inquireixPAD)
- || specified (FFESTP_inquireixPOSITION)
- || specified (FFESTP_inquireixREAD)
- || specified (FFESTP_inquireixREADWRITE)
- || specified (FFESTP_inquireixRECORDTYPE)
- || specified (FFESTP_inquireixWRITE))
- {
- ffebad_start (FFEBAD_INQUIRE_UNSUPPORTED);
- ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
- ffelex_token_where_column (ffesta_tokens[0]));
- ffebad_finish ();
- }
-
-#undef specified
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR923A_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R923A.pool = ffesta_output_pool;
- stmt->u.R923A.params = ffestd_subr_copy_inquire_ ();
- stmt->u.R923A.by_file = by_file;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-}
-
-/* ffestd_R923B_start -- INQUIRE(IOLENGTH=expr) statement list begin
-
- ffestd_R923B_start();
-
- Verify that INQUIRE is valid here, and begin accepting items in the
- list. */
-
-void
-ffestd_R923B_start (void)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_start_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR923B_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R923B.pool = ffesta_output_pool;
- stmt->u.R923B.params = ffestd_subr_copy_inquire_ ();
- stmt->u.R923B.list = NULL;
- ffestd_expr_list_ = &stmt->u.R923B.list;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-}
-
-/* ffestd_R923B_item -- INQUIRE statement i/o item
-
- ffestd_R923B_item(expr,expr_token);
-
- Implement output-list expression. */
-
-void
-ffestd_R923B_item (ffebld expr)
-{
- ffestdExprItem_ item;
-
- ffestd_check_item_ ();
-
- item = malloc_new_kp (ffesta_output_pool, "ffestdExprItem_", sizeof (*item));
-
- item->next = NULL;
- item->expr = expr;
- *ffestd_expr_list_ = item;
- ffestd_expr_list_ = &item->next;
-}
-
-/* ffestd_R923B_finish -- INQUIRE statement list complete
-
- ffestd_R923B_finish();
-
- Just wrap up any local activities. */
-
-void
-ffestd_R923B_finish (void)
-{
- ffestd_check_finish_ ();
-}
-
-/* ffestd_R1001 -- FORMAT statement
-
- ffestd_R1001(format_list); */
-
-void
-ffestd_R1001 (ffesttFormatList f)
-{
- ffestsHolder str;
- ffests s = &str;
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- if (ffestd_label_formatdef_ == NULL)
- return; /* Nothing to hook it up to (no label def). */
-
- ffests_new (s, malloc_pool_image (), 80);
- ffests_putc (s, '(');
- ffestd_R1001dump_ (s, f); /* Build the string in s. */
- ffests_putc (s, ')');
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR1001_);
- ffestd_stmt_append_ (stmt);
- stmt->u.R1001.str = str;
-
- ffestd_label_formatdef_ = NULL;
-}
-
-/* ffestd_R1001dump_ -- Dump list of formats
-
- ffesttFormatList list;
- ffestd_R1001dump_(list,0);
-
- The formats in the list are dumped. */
-
-static void
-ffestd_R1001dump_ (ffests s, ffesttFormatList list)
-{
- ffesttFormatList next;
-
- for (next = list->next; next != list; next = next->next)
- {
- if (next != list->next)
- ffests_putc (s, ',');
- switch (next->type)
- {
- case FFESTP_formattypeI:
- ffestd_R1001dump_1005_3_ (s, next, "I");
- break;
-
- case FFESTP_formattypeB:
- ffestd_R1001error_ (next);
- break;
-
- case FFESTP_formattypeO:
- ffestd_R1001dump_1005_3_ (s, next, "O");
- break;
-
- case FFESTP_formattypeZ:
- ffestd_R1001dump_1005_3_ (s, next, "Z");
- break;
-
- case FFESTP_formattypeF:
- ffestd_R1001dump_1005_4_ (s, next, "F");
- break;
-
- case FFESTP_formattypeE:
- ffestd_R1001dump_1005_5_ (s, next, "E");
- break;
-
- case FFESTP_formattypeEN:
- ffestd_R1001error_ (next);
- break;
-
- case FFESTP_formattypeG:
- ffestd_R1001dump_1005_5_ (s, next, "G");
- break;
-
- case FFESTP_formattypeL:
- ffestd_R1001dump_1005_2_ (s, next, "L");
- break;
-
- case FFESTP_formattypeA:
- ffestd_R1001dump_1005_1_ (s, next, "A");
- break;
-
- case FFESTP_formattypeD:
- ffestd_R1001dump_1005_4_ (s, next, "D");
- break;
-
- case FFESTP_formattypeQ:
- ffestd_R1001error_ (next);
- break;
-
- case FFESTP_formattypeDOLLAR:
- ffestd_R1001dump_1010_1_ (s, next, "$");
- break;
-
- case FFESTP_formattypeP:
- ffestd_R1001dump_1010_4_ (s, next, "P");
- break;
-
- case FFESTP_formattypeT:
- ffestd_R1001dump_1010_5_ (s, next, "T");
- break;
-
- case FFESTP_formattypeTL:
- ffestd_R1001dump_1010_5_ (s, next, "TL");
- break;
-
- case FFESTP_formattypeTR:
- ffestd_R1001dump_1010_5_ (s, next, "TR");
- break;
-
- case FFESTP_formattypeX:
- ffestd_R1001dump_1010_2_ (s, next, "X");
- break;
-
- case FFESTP_formattypeS:
- ffestd_R1001dump_1010_1_ (s, next, "S");
- break;
-
- case FFESTP_formattypeSP:
- ffestd_R1001dump_1010_1_ (s, next, "SP");
- break;
-
- case FFESTP_formattypeSS:
- ffestd_R1001dump_1010_1_ (s, next, "SS");
- break;
-
- case FFESTP_formattypeBN:
- ffestd_R1001dump_1010_1_ (s, next, "BN");
- break;
-
- case FFESTP_formattypeBZ:
- ffestd_R1001dump_1010_1_ (s, next, "BZ");
- break;
-
- case FFESTP_formattypeSLASH:
- ffestd_R1001dump_1010_2_ (s, next, "/");
- break;
-
- case FFESTP_formattypeCOLON:
- ffestd_R1001dump_1010_1_ (s, next, ":");
- break;
-
- case FFESTP_formattypeR1016:
- switch (ffelex_token_type (next->t))
- {
- case FFELEX_typeCHARACTER:
- {
- char *p = ffelex_token_text (next->t);
- ffeTokenLength i = ffelex_token_length (next->t);
-
- ffests_putc (s, '\002');
- while (i-- != 0)
- {
- if (*p == '\002')
- ffests_putc (s, '\002');
- ffests_putc (s, *p);
- ++p;
- }
- ffests_putc (s, '\002');
- }
- break;
-
- case FFELEX_typeHOLLERITH:
- {
- char *p = ffelex_token_text (next->t);
- ffeTokenLength i = ffelex_token_length (next->t);
-
- ffests_printf (s, "%" ffeTokenLength_f "uH", i);
- while (i-- != 0)
- {
- ffests_putc (s, *p);
- ++p;
- }
- }
- break;
-
- default:
- assert (FALSE);
- }
- break;
-
- case FFESTP_formattypeFORMAT:
- if (next->u.R1003D.R1004.present)
- {
- if (next->u.R1003D.R1004.rtexpr)
- ffestd_R1001rtexpr_ (s, next, next->u.R1003D.R1004.u.expr);
- else
- ffests_printf (s, "%lu", next->u.R1003D.R1004.u.unsigned_val);
- }
-
- ffests_putc (s, '(');
- ffestd_R1001dump_ (s, next->u.R1003D.format);
- ffests_putc (s, ')');
- break;
-
- default:
- assert (FALSE);
- }
- }
-}
-
-/* ffestd_R1001dump_1005_1_ -- Dump a particular format
-
- ffesttFormatList f;
- ffestd_R1001dump_1005_1_(f,"I");
-
- The format is dumped with form [r]X[w]. */
-
-static void
-ffestd_R1001dump_1005_1_ (ffests s, ffesttFormatList f, const char *string)
-{
- assert (!f->u.R1005.R1007_or_R1008.present);
- assert (!f->u.R1005.R1009.present);
-
- if (f->u.R1005.R1004.present)
- {
- if (f->u.R1005.R1004.rtexpr)
- ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1004.u.expr);
- else
- ffests_printf (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
- }
-
- ffests_puts (s, string);
-
- if (f->u.R1005.R1006.present)
- {
- if (f->u.R1005.R1006.rtexpr)
- ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1006.u.expr);
- else
- ffests_printf (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
- }
-}
-
-/* ffestd_R1001dump_1005_2_ -- Dump a particular format
-
- ffesttFormatList f;
- ffestd_R1001dump_1005_2_(f,"I");
-
- The format is dumped with form [r]Xw. */
-
-static void
-ffestd_R1001dump_1005_2_ (ffests s, ffesttFormatList f, const char *string)
-{
- assert (!f->u.R1005.R1007_or_R1008.present);
- assert (!f->u.R1005.R1009.present);
- assert (f->u.R1005.R1006.present);
-
- if (f->u.R1005.R1004.present)
- {
- if (f->u.R1005.R1004.rtexpr)
- ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1004.u.expr);
- else
- ffests_printf (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
- }
-
- ffests_puts (s, string);
-
- if (f->u.R1005.R1006.rtexpr)
- ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1006.u.expr);
- else
- ffests_printf (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
-}
-
-/* ffestd_R1001dump_1005_3_ -- Dump a particular format
-
- ffesttFormatList f;
- ffestd_R1001dump_1005_3_(f,"I");
-
- The format is dumped with form [r]Xw[.m]. */
-
-static void
-ffestd_R1001dump_1005_3_ (ffests s, ffesttFormatList f, const char *string)
-{
- assert (!f->u.R1005.R1009.present);
- assert (f->u.R1005.R1006.present);
-
- if (f->u.R1005.R1004.present)
- {
- if (f->u.R1005.R1004.rtexpr)
- ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1004.u.expr);
- else
- ffests_printf (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
- }
-
- ffests_puts (s, string);
-
- if (f->u.R1005.R1006.rtexpr)
- ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1006.u.expr);
- else
- ffests_printf (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
-
- if (f->u.R1005.R1007_or_R1008.present)
- {
- ffests_putc (s, '.');
- if (f->u.R1005.R1007_or_R1008.rtexpr)
- ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1007_or_R1008.u.expr);
- else
- ffests_printf (s, "%lu", f->u.R1005.R1007_or_R1008.u.unsigned_val);
- }
-}
-
-/* ffestd_R1001dump_1005_4_ -- Dump a particular format
-
- ffesttFormatList f;
- ffestd_R1001dump_1005_4_(f,"I");
-
- The format is dumped with form [r]Xw.d. */
-
-static void
-ffestd_R1001dump_1005_4_ (ffests s, ffesttFormatList f, const char *string)
-{
- assert (!f->u.R1005.R1009.present);
- assert (f->u.R1005.R1007_or_R1008.present);
- assert (f->u.R1005.R1006.present);
-
- if (f->u.R1005.R1004.present)
- {
- if (f->u.R1005.R1004.rtexpr)
- ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1004.u.expr);
- else
- ffests_printf (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
- }
-
- ffests_puts (s, string);
-
- if (f->u.R1005.R1006.rtexpr)
- ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1006.u.expr);
- else
- ffests_printf (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
-
- ffests_putc (s, '.');
- if (f->u.R1005.R1007_or_R1008.rtexpr)
- ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1007_or_R1008.u.expr);
- else
- ffests_printf (s, "%lu", f->u.R1005.R1007_or_R1008.u.unsigned_val);
-}
-
-/* ffestd_R1001dump_1005_5_ -- Dump a particular format
-
- ffesttFormatList f;
- ffestd_R1001dump_1005_5_(f,"I");
-
- The format is dumped with form [r]Xw.d[Ee]. */
-
-static void
-ffestd_R1001dump_1005_5_ (ffests s, ffesttFormatList f, const char *string)
-{
- assert (f->u.R1005.R1007_or_R1008.present);
- assert (f->u.R1005.R1006.present);
-
- if (f->u.R1005.R1004.present)
- {
- if (f->u.R1005.R1004.rtexpr)
- ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1004.u.expr);
- else
- ffests_printf (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
- }
-
- ffests_puts (s, string);
-
- if (f->u.R1005.R1006.rtexpr)
- ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1006.u.expr);
- else
- ffests_printf (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
-
- ffests_putc (s, '.');
- if (f->u.R1005.R1007_or_R1008.rtexpr)
- ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1007_or_R1008.u.expr);
- else
- ffests_printf (s, "%lu", f->u.R1005.R1007_or_R1008.u.unsigned_val);
-
- if (f->u.R1005.R1009.present)
- {
- ffests_putc (s, 'E');
- if (f->u.R1005.R1009.rtexpr)
- ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1009.u.expr);
- else
- ffests_printf (s, "%lu", f->u.R1005.R1009.u.unsigned_val);
- }
-}
-
-/* ffestd_R1001dump_1010_1_ -- Dump a particular format
-
- ffesttFormatList f;
- ffestd_R1001dump_1010_1_(f,"I");
-
- The format is dumped with form X. */
-
-static void
-ffestd_R1001dump_1010_1_ (ffests s, ffesttFormatList f, const char *string)
-{
- assert (!f->u.R1010.val.present);
-
- ffests_puts (s, string);
-}
-
-/* ffestd_R1001dump_1010_2_ -- Dump a particular format
-
- ffesttFormatList f;
- ffestd_R1001dump_1010_2_(f,"I");
-
- The format is dumped with form [r]X. */
-
-static void
-ffestd_R1001dump_1010_2_ (ffests s, ffesttFormatList f, const char *string)
-{
- if (f->u.R1010.val.present)
- {
- if (f->u.R1010.val.rtexpr)
- ffestd_R1001rtexpr_ (s, f, f->u.R1010.val.u.expr);
- else
- ffests_printf (s, "%lu", f->u.R1010.val.u.unsigned_val);
- }
-
- ffests_puts (s, string);
-}
-
-/* ffestd_R1001dump_1010_4_ -- Dump a particular format
-
- ffesttFormatList f;
- ffestd_R1001dump_1010_4_(f,"I");
-
- The format is dumped with form kX. Note that k is signed. */
-
-static void
-ffestd_R1001dump_1010_4_ (ffests s, ffesttFormatList f, const char *string)
-{
- assert (f->u.R1010.val.present);
-
- if (f->u.R1010.val.rtexpr)
- ffestd_R1001rtexpr_ (s, f, f->u.R1010.val.u.expr);
- else
- ffests_printf (s, "%ld", f->u.R1010.val.u.signed_val);
-
- ffests_puts (s, string);
-}
-
-/* ffestd_R1001dump_1010_5_ -- Dump a particular format
-
- ffesttFormatList f;
- ffestd_R1001dump_1010_5_(f,"I");
-
- The format is dumped with form Xn. */
-
-static void
-ffestd_R1001dump_1010_5_ (ffests s, ffesttFormatList f, const char *string)
-{
- assert (f->u.R1010.val.present);
-
- ffests_puts (s, string);
-
- if (f->u.R1010.val.rtexpr)
- ffestd_R1001rtexpr_ (s, f, f->u.R1010.val.u.expr);
- else
- ffests_printf (s, "%lu", f->u.R1010.val.u.unsigned_val);
-}
-
-/* ffestd_R1001error_ -- Complain about FORMAT specification not supported
-
- ffesttFormatList f;
- ffestd_R1001error_(f);
-
- An error message is produced. */
-
-static void
-ffestd_R1001error_ (ffesttFormatList f)
-{
- ffebad_start (FFEBAD_FORMAT_UNSUPPORTED);
- ffebad_here (0, ffelex_token_where_line (f->t), ffelex_token_where_column (f->t));
- ffebad_finish ();
-}
-
-static void
-ffestd_R1001rtexpr_ (ffests s, ffesttFormatList f, ffebld expr)
-{
- if ((expr == NULL)
- || (ffebld_op (expr) != FFEBLD_opCONTER)
- || (ffeinfo_basictype (ffebld_info (expr)) != FFEINFO_basictypeINTEGER)
- || (ffeinfo_kindtype (ffebld_info (expr)) == FFEINFO_kindtypeINTEGER4))
- {
- ffebad_start (FFEBAD_FORMAT_VARIABLE);
- ffebad_here (0, ffelex_token_where_line (f->t), ffelex_token_where_column (f->t));
- ffebad_finish ();
- }
- else
- {
- int val;
-
- switch (ffeinfo_kindtype (ffebld_info (expr)))
- {
-#if FFETARGET_okINTEGER1
- case FFEINFO_kindtypeINTEGER1:
- val = ffebld_constant_integer1 (ffebld_conter (expr));
- break;
-#endif
-
-#if FFETARGET_okINTEGER2
- case FFEINFO_kindtypeINTEGER2:
- val = ffebld_constant_integer2 (ffebld_conter (expr));
- break;
-#endif
-
-#if FFETARGET_okINTEGER3
- case FFEINFO_kindtypeINTEGER3:
- val = ffebld_constant_integer3 (ffebld_conter (expr));
- break;
-#endif
-
- default:
- assert ("bad INTEGER constant kind type" == NULL);
- /* Fall through. */
- case FFEINFO_kindtypeANY:
- return;
- }
- ffests_printf (s, "%ld", (long) val);
- }
-}
-
-/* ffestd_R1102 -- PROGRAM statement
-
- ffestd_R1102(name_token);
-
- Make sure ffestd_kind_ identifies an empty block. Make sure name_token
- gives a valid name. Implement the beginning of a main program. */
-
-void
-ffestd_R1102 (ffesymbol s, ffelexToken name UNUSED)
-{
- ffestd_check_simple_ ();
-
- assert (ffestd_block_level_ == 0);
- ffestd_is_reachable_ = TRUE;
-
- ffecom_notify_primary_entry (s);
- ffe_set_is_mainprog (TRUE); /* Is a main program. */
- ffe_set_is_saveall (TRUE); /* Main program always has implicit SAVE. */
-
- ffestw_set_sym (ffestw_stack_top (), s);
-}
-
-/* ffestd_R1103 -- End a PROGRAM
-
- ffestd_R1103(); */
-
-void
-ffestd_R1103 (bool ok UNUSED)
-{
- ffestdStmt_ stmt;
-
- assert (ffestd_block_level_ == 0);
-
- if (FFESTD_IS_END_OPTIMIZED_ && ffestd_is_reachable_)
- ffestd_R842 (NULL); /* Generate STOP. */
-
- if (ffestw_state (ffestw_stack_top ()) != FFESTV_statePROGRAM5)
- ffestd_subr_labels_ (FALSE);/* Handle any undefined labels. */
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR1103_);
- ffestd_stmt_append_ (stmt);
-}
-
-/* ffestd_R1111 -- BLOCK DATA statement
-
- ffestd_R1111(name_token);
-
- Make sure ffestd_kind_ identifies no current program unit. If not
- NULL, make sure name_token gives a valid name. Implement the beginning
- of a block data program unit. */
-
-void
-ffestd_R1111 (ffesymbol s, ffelexToken name UNUSED)
-{
- assert (ffestd_block_level_ == 0);
- ffestd_is_reachable_ = TRUE;
-
- ffestd_check_simple_ ();
-
- ffecom_notify_primary_entry (s);
- ffestw_set_sym (ffestw_stack_top (), s);
-}
-
-/* ffestd_R1112 -- End a BLOCK DATA
-
- ffestd_R1112(TRUE); */
-
-void
-ffestd_R1112 (bool ok UNUSED)
-{
- ffestdStmt_ stmt;
-
- assert (ffestd_block_level_ == 0);
-
- /* Generate any return-like code here (not likely for BLOCK DATA!). */
-
- if (ffestw_state (ffestw_stack_top ()) != FFESTV_stateBLOCKDATA5)
- ffestd_subr_labels_ (TRUE); /* Handle any undefined labels. */
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR1112_);
- ffestd_stmt_append_ (stmt);
-}
-
-/* ffestd_R1207_start -- EXTERNAL statement list begin
-
- ffestd_R1207_start();
-
- Verify that EXTERNAL is valid here, and begin accepting items in the list. */
-
-void
-ffestd_R1207_start (void)
-{
- ffestd_check_start_ ();
-}
-
-/* ffestd_R1207_item -- EXTERNAL statement for name
-
- ffestd_R1207_item(name_token);
-
- Make sure name_token identifies a valid object to be EXTERNALd. */
-
-void
-ffestd_R1207_item (ffelexToken name)
-{
- ffestd_check_item_ ();
- assert (name != NULL);
-}
-
-/* ffestd_R1207_finish -- EXTERNAL statement list complete
-
- ffestd_R1207_finish();
-
- Just wrap up any local activities. */
-
-void
-ffestd_R1207_finish (void)
-{
- ffestd_check_finish_ ();
-}
-
-/* ffestd_R1208_start -- INTRINSIC statement list begin
-
- ffestd_R1208_start();
-
- Verify that INTRINSIC is valid here, and begin accepting items in the list. */
-
-void
-ffestd_R1208_start (void)
-{
- ffestd_check_start_ ();
-}
-
-/* ffestd_R1208_item -- INTRINSIC statement for name
-
- ffestd_R1208_item(name_token);
-
- Make sure name_token identifies a valid object to be INTRINSICd. */
-
-void
-ffestd_R1208_item (ffelexToken name)
-{
- ffestd_check_item_ ();
- assert (name != NULL);
-}
-
-/* ffestd_R1208_finish -- INTRINSIC statement list complete
-
- ffestd_R1208_finish();
-
- Just wrap up any local activities. */
-
-void
-ffestd_R1208_finish (void)
-{
- ffestd_check_finish_ ();
-}
-
-/* ffestd_R1212 -- CALL statement
-
- ffestd_R1212(expr,expr_token);
-
- Make sure statement is valid here; implement. */
-
-void
-ffestd_R1212 (ffebld expr)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR1212_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R1212.pool = ffesta_output_pool;
- stmt->u.R1212.expr = expr;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-}
-
-/* ffestd_R1219 -- FUNCTION statement
-
- ffestd_R1219(funcname,arglist,ending_token,kind,kindt,len,lent,
- recursive);
-
- Make sure statement is valid here, register arguments for the
- function name, and so on.
-
- 06-Jun-90 JCB 2.0
- Added the kind, len, and recursive arguments. */
-
-void
-ffestd_R1219 (ffesymbol s, ffelexToken funcname UNUSED,
- ffesttTokenList args UNUSED, ffestpType type UNUSED,
- ffebld kind UNUSED, ffelexToken kindt UNUSED,
- ffebld len UNUSED, ffelexToken lent UNUSED,
- bool recursive UNUSED, ffelexToken result UNUSED,
- bool separate_result UNUSED)
-{
- assert (ffestd_block_level_ == 0);
- ffestd_is_reachable_ = TRUE;
-
- ffestd_check_simple_ ();
-
- ffecom_notify_primary_entry (s);
- ffestw_set_sym (ffestw_stack_top (), s);
-}
-
-/* ffestd_R1221 -- End a FUNCTION
-
- ffestd_R1221(TRUE); */
-
-void
-ffestd_R1221 (bool ok UNUSED)
-{
- ffestdStmt_ stmt;
-
- assert (ffestd_block_level_ == 0);
-
- if (FFESTD_IS_END_OPTIMIZED_ && ffestd_is_reachable_)
- ffestd_R1227 (NULL); /* Generate RETURN. */
-
- if (ffestw_state (ffestw_stack_top ()) != FFESTV_stateFUNCTION5)
- ffestd_subr_labels_ (FALSE);/* Handle any undefined labels. */
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR1221_);
- ffestd_stmt_append_ (stmt);
-}
-
-/* ffestd_R1223 -- SUBROUTINE statement
-
- ffestd_R1223(subrname,arglist,ending_token,recursive_token);
-
- Make sure statement is valid here, register arguments for the
- subroutine name, and so on.
-
- 06-Jun-90 JCB 2.0
- Added the recursive argument. */
-
-void
-ffestd_R1223 (ffesymbol s, ffelexToken subrname UNUSED,
- ffesttTokenList args UNUSED, ffelexToken final UNUSED,
- bool recursive UNUSED)
-{
- assert (ffestd_block_level_ == 0);
- ffestd_is_reachable_ = TRUE;
-
- ffestd_check_simple_ ();
-
- ffecom_notify_primary_entry (s);
- ffestw_set_sym (ffestw_stack_top (), s);
-}
-
-/* ffestd_R1225 -- End a SUBROUTINE
-
- ffestd_R1225(TRUE); */
-
-void
-ffestd_R1225 (bool ok UNUSED)
-{
- ffestdStmt_ stmt;
-
- assert (ffestd_block_level_ == 0);
-
- if (FFESTD_IS_END_OPTIMIZED_ && ffestd_is_reachable_)
- ffestd_R1227 (NULL); /* Generate RETURN. */
-
- if (ffestw_state (ffestw_stack_top ()) != FFESTV_stateSUBROUTINE5)
- ffestd_subr_labels_ (FALSE);/* Handle any undefined labels. */
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR1225_);
- ffestd_stmt_append_ (stmt);
-}
-
-/* ffestd_R1226 -- ENTRY statement
-
- ffestd_R1226(entryname,arglist,ending_token);
-
- Make sure we're in a SUBROUTINE or FUNCTION, register arguments for the
- entry point name, and so on. */
-
-void
-ffestd_R1226 (ffesymbol entry)
-{
- ffestd_check_simple_ ();
-
- if (!ffesta_seen_first_exec || ffecom_2pass_advise_entrypoint (entry))
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR1226_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R1226.entry = entry;
- stmt->u.R1226.entrynum = ++ffestd_2pass_entrypoints_;
- }
-
- ffestd_is_reachable_ = TRUE;
-}
-
-/* ffestd_R1227 -- RETURN statement
-
- ffestd_R1227(expr);
-
- Make sure statement is valid here; implement. expr and expr_token are
- both NULL if there was no expression. */
-
-void
-ffestd_R1227 (ffebld expr)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR1227_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R1227.pool = ffesta_output_pool;
- stmt->u.R1227.block = ffestw_stack_top ();
- stmt->u.R1227.expr = expr;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-
- if (ffestd_block_level_ == 0)
- ffestd_is_reachable_ = FALSE;
-}
-
-/* ffestd_R1229_start -- STMTFUNCTION statement begin
-
- ffestd_R1229_start(func_name,func_arg_list,close_paren);
-
- This function does not really need to do anything, since _finish_
- gets all the info needed, and ffestc_R1229_start has already
- done all the stuff that makes a two-phase operation (start and
- finish) for handling statement functions necessary.
-
- 03-Jan-91 JCB 2.0
- Do nothing, now that _finish_ does everything. */
-
-void
-ffestd_R1229_start (ffelexToken name UNUSED, ffesttTokenList args UNUSED)
-{
- ffestd_check_start_ ();
-}
-
-/* ffestd_R1229_finish -- STMTFUNCTION statement list complete
-
- ffestd_R1229_finish(s);
-
- The statement function's symbol is passed. Its list of dummy args is
- accessed via ffesymbol_dummyargs and its expansion expression (expr)
- is accessed via ffesymbol_sfexpr.
-
- If sfexpr is NULL, an error occurred parsing the expansion expression, so
- just cancel the effects of ffestd_R1229_start and pretend nothing
- happened. Otherwise, install the expression as the expansion for the
- statement function, then clean up.
-
- 03-Jan-91 JCB 2.0
- Takes sfunc sym instead of just the expansion expression as an
- argument, so this function can do all the work, and _start_ is just
- a nicety than can do nothing in a back end. */
-
-void
-ffestd_R1229_finish (ffesymbol s)
-{
- ffebld expr = ffesymbol_sfexpr (s);
-
- ffestd_check_finish_ ();
-
- if (expr == NULL)
- return; /* Nothing to do, definition didn't work. */
-
- /* With gcc, cannot do anything here, because the backend hasn't even
- (necessarily) been notified that we're compiling a program unit! */
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-}
-
-/* ffestd_S3P4 -- INCLUDE line
-
- ffestd_S3P4(filename,filename_token);
-
- Make sure INCLUDE not preceded by any semicolons or a label def; implement. */
-
-void
-ffestd_S3P4 (ffebld filename)
-{
- FILE *fi;
- ffetargetCharacterDefault buildname;
- ffewhereFile wf;
-
- ffestd_check_simple_ ();
-
- assert (filename != NULL);
- if (ffebld_op (filename) != FFEBLD_opANY)
- {
- assert (ffebld_op (filename) == FFEBLD_opCONTER);
- assert (ffeinfo_basictype (ffebld_info (filename))
- == FFEINFO_basictypeCHARACTER);
- assert (ffeinfo_kindtype (ffebld_info (filename))
- == FFEINFO_kindtypeCHARACTERDEFAULT);
- buildname = ffebld_constant_characterdefault (ffebld_conter (filename));
- wf = ffewhere_file_new (ffetarget_text_characterdefault (buildname),
- ffetarget_length_characterdefault (buildname));
- fi = ffecom_open_include (ffewhere_file_name (wf),
- ffelex_token_where_line (ffesta_tokens[0]),
- ffelex_token_where_column (ffesta_tokens[0]));
- if (fi != NULL)
- ffelex_set_include (wf, (ffelex_token_type (ffesta_tokens[0])
- == FFELEX_typeNAME), fi);
- }
-}
-
-/* ffestd_V014_start -- VOLATILE statement list begin
-
- ffestd_V014_start();
-
- Verify that VOLATILE is valid here, and begin accepting items in the list. */
-
-void
-ffestd_V014_start (void)
-{
- ffestd_check_start_ ();
-}
-
-/* ffestd_V014_item_object -- VOLATILE statement for object-name
-
- ffestd_V014_item_object(name_token);
-
- Make sure name_token identifies a valid object to be VOLATILEd. */
-
-void
-ffestd_V014_item_object (ffelexToken name UNUSED)
-{
- ffestd_check_item_ ();
-}
-
-/* ffestd_V014_item_cblock -- VOLATILE statement for common-block-name
-
- ffestd_V014_item_cblock(name_token);
-
- Make sure name_token identifies a valid common block to be VOLATILEd. */
-
-void
-ffestd_V014_item_cblock (ffelexToken name UNUSED)
-{
- ffestd_check_item_ ();
-}
-
-/* ffestd_V014_finish -- VOLATILE statement list complete
-
- ffestd_V014_finish();
-
- Just wrap up any local activities. */
-
-void
-ffestd_V014_finish (void)
-{
- ffestd_check_finish_ ();
-}
-
-/* ffestd_V020_start -- TYPE statement list begin
-
- ffestd_V020_start();
-
- Verify that TYPE is valid here, and begin accepting items in the
- list. */
-
-void
-ffestd_V020_start (ffestvFormat format UNUSED)
-{
- ffestd_check_start_ ();
- ffestd_subr_vxt_ ();
-}
-
-/* ffestd_V020_item -- TYPE statement i/o item
-
- ffestd_V020_item(expr,expr_token);
-
- Implement output-list expression. */
-
-void
-ffestd_V020_item (ffebld expr UNUSED)
-{
- ffestd_check_item_ ();
-}
-
-/* ffestd_V020_finish -- TYPE statement list complete
-
- ffestd_V020_finish();
-
- Just wrap up any local activities. */
-
-void
-ffestd_V020_finish (void)
-{
- ffestd_check_finish_ ();
-}
-
-/* ffestd_V027_start -- VXT PARAMETER statement list begin
-
- ffestd_V027_start();
-
- Verify that PARAMETER is valid here, and begin accepting items in the list. */
-
-void
-ffestd_V027_start (void)
-{
- ffestd_check_start_ ();
- ffestd_subr_vxt_ ();
-}
-
-/* ffestd_V027_item -- VXT PARAMETER statement assignment
-
- ffestd_V027_item(dest,dest_token,source,source_token);
-
- Make sure the source is a valid source for the destination; make the
- assignment. */
-
-void
-ffestd_V027_item (ffelexToken dest_token UNUSED, ffebld source UNUSED)
-{
- ffestd_check_item_ ();
-}
-
-/* ffestd_V027_finish -- VXT PARAMETER statement list complete
-
- ffestd_V027_finish();
-
- Just wrap up any local activities. */
-
-void
-ffestd_V027_finish (void)
-{
- ffestd_check_finish_ ();
-}
-
-/* Any executable statement. */
-
-void
-ffestd_any (void)
-{
- ffestdStmt_ stmt;
-
- ffestd_check_simple_ ();
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR841_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
-}