00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #include "proj.h"
00036 #include "std.h"
00037 #include "bld.h"
00038 #include "com.h"
00039 #include "lab.h"
00040 #include "lex.h"
00041 #include "malloc.h"
00042 #include "sta.h"
00043 #include "ste.h"
00044 #include "stp.h"
00045 #include "str.h"
00046 #include "sts.h"
00047 #include "stt.h"
00048 #include "stv.h"
00049 #include "stw.h"
00050 #include "symbol.h"
00051 #include "target.h"
00052
00053
00054
00055
00056
00057
00058 #define FFESTD_COPY_EASY_ 1
00059
00060 #define FFESTD_IS_END_OPTIMIZED_ 1
00061
00062
00063 typedef enum
00064 {
00065 FFESTD_stateletSIMPLE_,
00066 FFESTD_stateletATTRIB_,
00067 FFESTD_stateletITEM_,
00068 FFESTD_stateletITEMVALS_,
00069 FFESTD_
00070 } ffestdStatelet_;
00071
00072 typedef enum
00073 {
00074 FFESTD_stmtidENDDOLOOP_,
00075 FFESTD_stmtidENDLOGIF_,
00076 FFESTD_stmtidEXECLABEL_,
00077 FFESTD_stmtidFORMATLABEL_,
00078 FFESTD_stmtidR737A_,
00079 FFESTD_stmtidR803_,
00080 FFESTD_stmtidR804_,
00081 FFESTD_stmtidR805_,
00082 FFESTD_stmtidR806_,
00083 FFESTD_stmtidR807_,
00084 FFESTD_stmtidR809_,
00085 FFESTD_stmtidR810_,
00086 FFESTD_stmtidR811_,
00087 FFESTD_stmtidR819A_,
00088 FFESTD_stmtidR819B_,
00089 FFESTD_stmtidR825_,
00090 FFESTD_stmtidR834_,
00091 FFESTD_stmtidR835_,
00092 FFESTD_stmtidR836_,
00093 FFESTD_stmtidR837_,
00094 FFESTD_stmtidR838_,
00095 FFESTD_stmtidR839_,
00096 FFESTD_stmtidR840_,
00097 FFESTD_stmtidR841_,
00098 FFESTD_stmtidR842_,
00099 FFESTD_stmtidR843_,
00100 FFESTD_stmtidR904_,
00101 FFESTD_stmtidR907_,
00102 FFESTD_stmtidR909_,
00103 FFESTD_stmtidR910_,
00104 FFESTD_stmtidR911_,
00105 FFESTD_stmtidR919_,
00106 FFESTD_stmtidR920_,
00107 FFESTD_stmtidR921_,
00108 FFESTD_stmtidR923A_,
00109 FFESTD_stmtidR923B_,
00110 FFESTD_stmtidR1001_,
00111 FFESTD_stmtidR1103_,
00112 FFESTD_stmtidR1112_,
00113 FFESTD_stmtidR1212_,
00114 FFESTD_stmtidR1221_,
00115 FFESTD_stmtidR1225_,
00116 FFESTD_stmtidR1226_,
00117 FFESTD_stmtidR1227_,
00118 #if FFESTR_VXT
00119 FFESTD_stmtidV018_,
00120 FFESTD_stmtidV019_,
00121 #endif
00122 FFESTD_stmtidV020_,
00123 #if FFESTR_VXT
00124 FFESTD_stmtidV021_,
00125 FFESTD_stmtidV022_,
00126 FFESTD_stmtidV023_,
00127 FFESTD_stmtidV024_,
00128 FFESTD_stmtidV025start_,
00129 FFESTD_stmtidV025item_,
00130 FFESTD_stmtidV025finish_,
00131 FFESTD_stmtidV026_,
00132 #endif
00133 FFESTD_stmtid_,
00134 } ffestdStmtId_;
00135
00136
00137
00138 typedef struct _ffestd_expr_item_ *ffestdExprItem_;
00139 typedef struct _ffestd_stmt_ *ffestdStmt_;
00140
00141
00142
00143
00144
00145
00146 struct _ffestd_expr_item_
00147 {
00148 ffestdExprItem_ next;
00149 ffebld expr;
00150 ffelexToken token;
00151 };
00152
00153 struct _ffestd_stmt_
00154 {
00155 ffestdStmt_ next;
00156 ffestdStmt_ previous;
00157 ffestdStmtId_ id;
00158 char *filename;
00159 int filelinenum;
00160 union
00161 {
00162 struct
00163 {
00164 ffestw block;
00165 }
00166 enddoloop;
00167 struct
00168 {
00169 ffelab label;
00170 }
00171 execlabel;
00172 struct
00173 {
00174 ffelab label;
00175 }
00176 formatlabel;
00177 struct
00178 {
00179 mallocPool pool;
00180 ffebld dest;
00181 ffebld source;
00182 }
00183 R737A;
00184 struct
00185 {
00186 mallocPool pool;
00187 ffestw block;
00188 ffebld expr;
00189 }
00190 R803;
00191 struct
00192 {
00193 mallocPool pool;
00194 ffestw block;
00195 ffebld expr;
00196 }
00197 R804;
00198 struct
00199 {
00200 ffestw block;
00201 }
00202 R805;
00203 struct
00204 {
00205 ffestw block;
00206 }
00207 R806;
00208 struct
00209 {
00210 mallocPool pool;
00211 ffebld expr;
00212 }
00213 R807;
00214 struct
00215 {
00216 mallocPool pool;
00217 ffestw block;
00218 ffebld expr;
00219 }
00220 R809;
00221 struct
00222 {
00223 mallocPool pool;
00224 ffestw block;
00225 unsigned long casenum;
00226 }
00227 R810;
00228 struct
00229 {
00230 ffestw block;
00231 }
00232 R811;
00233 struct
00234 {
00235 mallocPool pool;
00236 ffestw block;
00237 ffelab label;
00238 ffebld var;
00239 ffebld start;
00240 ffelexToken start_token;
00241 ffebld end;
00242 ffelexToken end_token;
00243 ffebld incr;
00244 ffelexToken incr_token;
00245 }
00246 R819A;
00247 struct
00248 {
00249 mallocPool pool;
00250 ffestw block;
00251 ffelab label;
00252 ffebld expr;
00253 }
00254 R819B;
00255 struct
00256 {
00257 ffestw block;
00258 }
00259 R834;
00260 struct
00261 {
00262 ffestw block;
00263 }
00264 R835;
00265 struct
00266 {
00267 ffelab label;
00268 }
00269 R836;
00270 struct
00271 {
00272 mallocPool pool;
00273 ffelab *labels;
00274 int count;
00275 ffebld expr;
00276 }
00277 R837;
00278 struct
00279 {
00280 mallocPool pool;
00281 ffelab label;
00282 ffebld target;
00283 }
00284 R838;
00285 struct
00286 {
00287 mallocPool pool;
00288 ffebld target;
00289 }
00290 R839;
00291 struct
00292 {
00293 mallocPool pool;
00294 ffebld expr;
00295 ffelab neg;
00296 ffelab zero;
00297 ffelab pos;
00298 }
00299 R840;
00300 struct
00301 {
00302 mallocPool pool;
00303 ffebld expr;
00304 }
00305 R842;
00306 struct
00307 {
00308 mallocPool pool;
00309 ffebld expr;
00310 }
00311 R843;
00312 struct
00313 {
00314 mallocPool pool;
00315 ffestpOpenStmt *params;
00316 }
00317 R904;
00318 struct
00319 {
00320 mallocPool pool;
00321 ffestpCloseStmt *params;
00322 }
00323 R907;
00324 struct
00325 {
00326 mallocPool pool;
00327 ffestpReadStmt *params;
00328 bool only_format;
00329 ffestvUnit unit;
00330 ffestvFormat format;
00331 bool rec;
00332 bool key;
00333 ffestdExprItem_ list;
00334 }
00335 R909;
00336 struct
00337 {
00338 mallocPool pool;
00339 ffestpWriteStmt *params;
00340 ffestvUnit unit;
00341 ffestvFormat format;
00342 bool rec;
00343 ffestdExprItem_ list;
00344 }
00345 R910;
00346 struct
00347 {
00348 mallocPool pool;
00349 ffestpPrintStmt *params;
00350 ffestvFormat format;
00351 ffestdExprItem_ list;
00352 }
00353 R911;
00354 struct
00355 {
00356 mallocPool pool;
00357 ffestpBeruStmt *params;
00358 }
00359 R919;
00360 struct
00361 {
00362 mallocPool pool;
00363 ffestpBeruStmt *params;
00364 }
00365 R920;
00366 struct
00367 {
00368 mallocPool pool;
00369 ffestpBeruStmt *params;
00370 }
00371 R921;
00372 struct
00373 {
00374 mallocPool pool;
00375 ffestpInquireStmt *params;
00376 bool by_file;
00377 }
00378 R923A;
00379 struct
00380 {
00381 mallocPool pool;
00382 ffestpInquireStmt *params;
00383 ffestdExprItem_ list;
00384 }
00385 R923B;
00386 struct
00387 {
00388 ffestsHolder str;
00389 }
00390 R1001;
00391 struct
00392 {
00393 mallocPool pool;
00394 ffebld expr;
00395 }
00396 R1212;
00397 struct
00398 {
00399 ffesymbol entry;
00400 int entrynum;
00401 }
00402 R1226;
00403 struct
00404 {
00405 mallocPool pool;
00406 ffestw block;
00407 ffebld expr;
00408 }
00409 R1227;
00410 #if FFESTR_VXT
00411 struct
00412 {
00413 mallocPool pool;
00414 ffestpRewriteStmt *params;
00415 ffestvFormat format;
00416 ffestdExprItem_ list;
00417 }
00418 V018;
00419 struct
00420 {
00421 mallocPool pool;
00422 ffestpAcceptStmt *params;
00423 ffestvFormat format;
00424 ffestdExprItem_ list;
00425 }
00426 V019;
00427 #endif
00428 struct
00429 {
00430 mallocPool pool;
00431 ffestpTypeStmt *params;
00432 ffestvFormat format;
00433 ffestdExprItem_ list;
00434 }
00435 V020;
00436 #if FFESTR_VXT
00437 struct
00438 {
00439 mallocPool pool;
00440 ffestpDeleteStmt *params;
00441 }
00442 V021;
00443 struct
00444 {
00445 mallocPool pool;
00446 ffestpBeruStmt *params;
00447 }
00448 V022;
00449 struct
00450 {
00451 mallocPool pool;
00452 ffestpVxtcodeStmt *params;
00453 ffestdExprItem_ list;
00454 }
00455 V023;
00456 struct
00457 {
00458 mallocPool pool;
00459 ffestpVxtcodeStmt *params;
00460 ffestdExprItem_ list;
00461 }
00462 V024;
00463 struct
00464 {
00465 ffebld u;
00466 ffebld m;
00467 ffebld n;
00468 ffebld asv;
00469 }
00470 V025item;
00471 struct
00472 {
00473 mallocPool pool;
00474 } V025finish;
00475 struct
00476 {
00477 mallocPool pool;
00478 ffestpFindStmt *params;
00479 }
00480 V026;
00481 #endif
00482 }
00483 u;
00484 };
00485
00486
00487
00488 static ffestdStatelet_ ffestd_statelet_ = FFESTD_stateletSIMPLE_;
00489 static int ffestd_block_level_ = 0;
00490 static bool ffestd_is_reachable_;
00491 static ffelab ffestd_label_formatdef_ = NULL;
00492 static ffestdExprItem_ *ffestd_expr_list_;
00493 static struct
00494 {
00495 ffestdStmt_ first;
00496 ffestdStmt_ last;
00497 }
00498 ffestd_stmt_list_ =
00499 {
00500 NULL, NULL
00501 };
00502
00503
00504
00505 static int ffestd_2pass_entrypoints_ = 0;
00506
00507
00508
00509 static void ffestd_stmt_append_ (ffestdStmt_ stmt);
00510 static ffestdStmt_ ffestd_stmt_new_ (ffestdStmtId_ id);
00511 static void ffestd_stmt_pass_ (void);
00512 #if FFESTD_COPY_EASY_
00513 static ffestpInquireStmt *ffestd_subr_copy_easy_ (ffestpInquireIx max);
00514 #endif
00515 static void ffestd_subr_vxt_ (void);
00516 #if FFESTR_F90
00517 static void ffestd_subr_f90_ (void);
00518 #endif
00519 static void ffestd_subr_labels_ (bool unexpected);
00520 static void ffestd_R1001dump_ (ffests s, ffesttFormatList list);
00521 static void ffestd_R1001dump_1005_1_ (ffests s, ffesttFormatList f,
00522 const char *string);
00523 static void ffestd_R1001dump_1005_2_ (ffests s, ffesttFormatList f,
00524 const char *string);
00525 static void ffestd_R1001dump_1005_3_ (ffests s, ffesttFormatList f,
00526 const char *string);
00527 static void ffestd_R1001dump_1005_4_ (ffests s, ffesttFormatList f,
00528 const char *string);
00529 static void ffestd_R1001dump_1005_5_ (ffests s, ffesttFormatList f,
00530 const char *string);
00531 static void ffestd_R1001dump_1010_1_ (ffests s, ffesttFormatList f,
00532 const char *string);
00533 static void ffestd_R1001dump_1010_2_ (ffests s, ffesttFormatList f,
00534 const char *string);
00535 static void ffestd_R1001dump_1010_3_ (ffests s, ffesttFormatList f,
00536 const char *string);
00537 static void ffestd_R1001dump_1010_4_ (ffests s, ffesttFormatList f,
00538 const char *string);
00539 static void ffestd_R1001dump_1010_5_ (ffests s, ffesttFormatList f,
00540 const char *string);
00541 static void ffestd_R1001error_ (ffesttFormatList f);
00542 static void ffestd_R1001rtexpr_ (ffests s, ffesttFormatList f, ffebld expr);
00543
00544
00545
00546 #define ffestd_subr_line_now_() \
00547 ffeste_set_line (ffelex_token_where_filename (ffesta_tokens[0]), \
00548 ffelex_token_where_filelinenum (ffesta_tokens[0]))
00549 #define ffestd_subr_line_restore_(s) \
00550 ffeste_set_line ((s)->filename, (s)->filelinenum)
00551 #define ffestd_subr_line_save_(s) \
00552 ((s)->filename = ffelex_token_where_filename (ffesta_tokens[0]), \
00553 (s)->filelinenum = ffelex_token_where_filelinenum (ffesta_tokens[0]))
00554 #define ffestd_check_simple_() \
00555 assert(ffestd_statelet_ == FFESTD_stateletSIMPLE_)
00556 #define ffestd_check_start_() \
00557 assert(ffestd_statelet_ == FFESTD_stateletSIMPLE_); \
00558 ffestd_statelet_ = FFESTD_stateletATTRIB_
00559 #define ffestd_check_attrib_() \
00560 assert(ffestd_statelet_ == FFESTD_stateletATTRIB_)
00561 #define ffestd_check_item_() \
00562 assert(ffestd_statelet_ == FFESTD_stateletATTRIB_ \
00563 || ffestd_statelet_ == FFESTD_stateletITEM_); \
00564 ffestd_statelet_ = FFESTD_stateletITEM_
00565 #define ffestd_check_item_startvals_() \
00566 assert(ffestd_statelet_ == FFESTD_stateletATTRIB_ \
00567 || ffestd_statelet_ == FFESTD_stateletITEM_); \
00568 ffestd_statelet_ = FFESTD_stateletITEMVALS_
00569 #define ffestd_check_item_value_() \
00570 assert(ffestd_statelet_ == FFESTD_stateletITEMVALS_)
00571 #define ffestd_check_item_endvals_() \
00572 assert(ffestd_statelet_ == FFESTD_stateletITEMVALS_); \
00573 ffestd_statelet_ = FFESTD_stateletITEM_
00574 #define ffestd_check_finish_() \
00575 assert(ffestd_statelet_ == FFESTD_stateletATTRIB_ \
00576 || ffestd_statelet_ == FFESTD_stateletITEM_); \
00577 ffestd_statelet_ = FFESTD_stateletSIMPLE_
00578
00579 #if FFESTD_COPY_EASY_
00580 #define ffestd_subr_copy_accept_() (ffestpAcceptStmt *) \
00581 ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_acceptix)
00582 #define ffestd_subr_copy_beru_() (ffestpBeruStmt *) \
00583 ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_beruix)
00584 #define ffestd_subr_copy_close_() (ffestpCloseStmt *) \
00585 ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_closeix)
00586 #define ffestd_subr_copy_delete_() (ffestpDeleteStmt *) \
00587 ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_deleteix)
00588 #define ffestd_subr_copy_find_() (ffestpFindStmt *) \
00589 ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_findix)
00590 #define ffestd_subr_copy_inquire_() (ffestpInquireStmt *) \
00591 ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_inquireix)
00592 #define ffestd_subr_copy_open_() (ffestpOpenStmt *) \
00593 ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_openix)
00594 #define ffestd_subr_copy_print_() (ffestpPrintStmt *) \
00595 ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_printix)
00596 #define ffestd_subr_copy_read_() (ffestpReadStmt *) \
00597 ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_readix)
00598 #define ffestd_subr_copy_rewrite_() (ffestpRewriteStmt *) \
00599 ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_rewriteix)
00600 #define ffestd_subr_copy_type_() (ffestpTypeStmt *) \
00601 ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_typeix)
00602 #define ffestd_subr_copy_vxtcode_() (ffestpVxtcodeStmt *) \
00603 ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_vxtcodeix)
00604 #define ffestd_subr_copy_write_() (ffestpWriteStmt *) \
00605 ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_writeix)
00606 #endif
00607
00608
00609
00610
00611
00612 static void
00613 ffestd_stmt_append_ (ffestdStmt_ stmt)
00614 {
00615 stmt->next = (ffestdStmt_) &ffestd_stmt_list_.first;
00616 stmt->previous = ffestd_stmt_list_.last;
00617 stmt->next->previous = stmt;
00618 stmt->previous->next = stmt;
00619 }
00620
00621
00622
00623
00624
00625
00626 static ffestdStmt_
00627 ffestd_stmt_new_ (ffestdStmtId_ id)
00628 {
00629 ffestdStmt_ stmt;
00630
00631 stmt = malloc_new_kp (ffe_pool_any_unit (), "ffestdStmt_", sizeof (*stmt));
00632 stmt->id = id;
00633 return stmt;
00634 }
00635
00636
00637
00638
00639
00640 static void
00641 ffestd_stmt_pass_ ()
00642 {
00643 ffestdStmt_ stmt;
00644 ffestdExprItem_ expr;
00645 bool okay = (TREE_CODE (current_function_decl) != ERROR_MARK);
00646
00647 if ((ffestd_2pass_entrypoints_ != 0) && okay)
00648 {
00649 tree which = ffecom_which_entrypoint_decl ();
00650 tree value;
00651 tree label;
00652 int pushok;
00653 int ents = ffestd_2pass_entrypoints_;
00654 tree duplicate;
00655
00656 expand_start_case (0, which, TREE_TYPE (which), "entrypoint dispatch");
00657
00658 stmt = ffestd_stmt_list_.first;
00659 do
00660 {
00661 while (stmt->id != FFESTD_stmtidR1226_)
00662 stmt = stmt->next;
00663
00664 if (stmt->u.R1226.entry != NULL)
00665 {
00666 value = build_int_2 (stmt->u.R1226.entrynum, 0);
00667
00668
00669
00670 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
00671
00672 pushok = pushcase (value, convert, label, &duplicate);
00673 assert (pushok == 0);
00674
00675 label = ffecom_temp_label ();
00676 TREE_USED (label) = 1;
00677 expand_goto (label);
00678
00679 ffesymbol_hook (stmt->u.R1226.entry).length_tree = label;
00680 }
00681 stmt = stmt->next;
00682 }
00683 while (--ents != 0);
00684
00685 expand_end_case (which);
00686 }
00687
00688 for (stmt = ffestd_stmt_list_.first;
00689 stmt != (ffestdStmt_) &ffestd_stmt_list_.first;
00690 stmt = stmt->next)
00691 {
00692 switch (stmt->id)
00693 {
00694 case FFESTD_stmtidENDDOLOOP_:
00695 ffestd_subr_line_restore_ (stmt);
00696 if (okay)
00697 ffeste_do (stmt->u.enddoloop.block);
00698 ffestw_kill (stmt->u.enddoloop.block);
00699 break;
00700
00701 case FFESTD_stmtidENDLOGIF_:
00702 ffestd_subr_line_restore_ (stmt);
00703 if (okay)
00704 ffeste_end_R807 ();
00705 break;
00706
00707 case FFESTD_stmtidEXECLABEL_:
00708 if (okay)
00709 ffeste_labeldef_branch (stmt->u.execlabel.label);
00710 break;
00711
00712 case FFESTD_stmtidFORMATLABEL_:
00713 if (okay)
00714 ffeste_labeldef_format (stmt->u.formatlabel.label);
00715 break;
00716
00717 case FFESTD_stmtidR737A_:
00718 ffestd_subr_line_restore_ (stmt);
00719 if (okay)
00720 ffeste_R737A (stmt->u.R737A.dest, stmt->u.R737A.source);
00721 malloc_pool_kill (stmt->u.R737A.pool);
00722 break;
00723
00724 case FFESTD_stmtidR803_:
00725 ffestd_subr_line_restore_ (stmt);
00726 if (okay)
00727 ffeste_R803 (stmt->u.R803.block, stmt->u.R803.expr);
00728 malloc_pool_kill (stmt->u.R803.pool);
00729 break;
00730
00731 case FFESTD_stmtidR804_:
00732 ffestd_subr_line_restore_ (stmt);
00733 if (okay)
00734 ffeste_R804 (stmt->u.R803.block, stmt->u.R804.expr);
00735 malloc_pool_kill (stmt->u.R804.pool);
00736 break;
00737
00738 case FFESTD_stmtidR805_:
00739 ffestd_subr_line_restore_ (stmt);
00740 if (okay)
00741 ffeste_R805 (stmt->u.R803.block);
00742 break;
00743
00744 case FFESTD_stmtidR806_:
00745 ffestd_subr_line_restore_ (stmt);
00746 if (okay)
00747 ffeste_R806 (stmt->u.R806.block);
00748 ffestw_kill (stmt->u.R806.block);
00749 break;
00750
00751 case FFESTD_stmtidR807_:
00752 ffestd_subr_line_restore_ (stmt);
00753 if (okay)
00754 ffeste_R807 (stmt->u.R807.expr);
00755 malloc_pool_kill (stmt->u.R807.pool);
00756 break;
00757
00758 case FFESTD_stmtidR809_:
00759 ffestd_subr_line_restore_ (stmt);
00760 if (okay)
00761 ffeste_R809 (stmt->u.R809.block, stmt->u.R809.expr);
00762 malloc_pool_kill (stmt->u.R809.pool);
00763 break;
00764
00765 case FFESTD_stmtidR810_:
00766 ffestd_subr_line_restore_ (stmt);
00767 if (okay)
00768 ffeste_R810 (stmt->u.R810.block, stmt->u.R810.casenum);
00769 malloc_pool_kill (stmt->u.R810.pool);
00770 break;
00771
00772 case FFESTD_stmtidR811_:
00773 ffestd_subr_line_restore_ (stmt);
00774 if (okay)
00775 ffeste_R811 (stmt->u.R811.block);
00776 malloc_pool_kill (ffestw_select (stmt->u.R811.block)->pool);
00777 ffestw_kill (stmt->u.R811.block);
00778 break;
00779
00780 case FFESTD_stmtidR819A_:
00781 ffestd_subr_line_restore_ (stmt);
00782 if (okay)
00783 ffeste_R819A (stmt->u.R819A.block, stmt->u.R819A.label,
00784 stmt->u.R819A.var,
00785 stmt->u.R819A.start, stmt->u.R819A.start_token,
00786 stmt->u.R819A.end, stmt->u.R819A.end_token,
00787 stmt->u.R819A.incr, stmt->u.R819A.incr_token);
00788 ffelex_token_kill (stmt->u.R819A.start_token);
00789 ffelex_token_kill (stmt->u.R819A.end_token);
00790 if (stmt->u.R819A.incr_token != NULL)
00791 ffelex_token_kill (stmt->u.R819A.incr_token);
00792 malloc_pool_kill (stmt->u.R819A.pool);
00793 break;
00794
00795 case FFESTD_stmtidR819B_:
00796 ffestd_subr_line_restore_ (stmt);
00797 if (okay)
00798 ffeste_R819B (stmt->u.R819B.block, stmt->u.R819B.label,
00799 stmt->u.R819B.expr);
00800 malloc_pool_kill (stmt->u.R819B.pool);
00801 break;
00802
00803 case FFESTD_stmtidR825_:
00804 ffestd_subr_line_restore_ (stmt);
00805 if (okay)
00806 ffeste_R825 ();
00807 break;
00808
00809 case FFESTD_stmtidR834_:
00810 ffestd_subr_line_restore_ (stmt);
00811 if (okay)
00812 ffeste_R834 (stmt->u.R834.block);
00813 break;
00814
00815 case FFESTD_stmtidR835_:
00816 ffestd_subr_line_restore_ (stmt);
00817 if (okay)
00818 ffeste_R835 (stmt->u.R835.block);
00819 break;
00820
00821 case FFESTD_stmtidR836_:
00822 ffestd_subr_line_restore_ (stmt);
00823 if (okay)
00824 ffeste_R836 (stmt->u.R836.label);
00825 break;
00826
00827 case FFESTD_stmtidR837_:
00828 ffestd_subr_line_restore_ (stmt);
00829 if (okay)
00830 ffeste_R837 (stmt->u.R837.labels, stmt->u.R837.count,
00831 stmt->u.R837.expr);
00832 malloc_pool_kill (stmt->u.R837.pool);
00833 break;
00834
00835 case FFESTD_stmtidR838_:
00836 ffestd_subr_line_restore_ (stmt);
00837 if (okay)
00838 ffeste_R838 (stmt->u.R838.label, stmt->u.R838.target);
00839 malloc_pool_kill (stmt->u.R838.pool);
00840 break;
00841
00842 case FFESTD_stmtidR839_:
00843 ffestd_subr_line_restore_ (stmt);
00844 if (okay)
00845 ffeste_R839 (stmt->u.R839.target);
00846 malloc_pool_kill (stmt->u.R839.pool);
00847 break;
00848
00849 case FFESTD_stmtidR840_:
00850 ffestd_subr_line_restore_ (stmt);
00851 if (okay)
00852 ffeste_R840 (stmt->u.R840.expr, stmt->u.R840.neg, stmt->u.R840.zero,
00853 stmt->u.R840.pos);
00854 malloc_pool_kill (stmt->u.R840.pool);
00855 break;
00856
00857 case FFESTD_stmtidR841_:
00858 ffestd_subr_line_restore_ (stmt);
00859 if (okay)
00860 ffeste_R841 ();
00861 break;
00862
00863 case FFESTD_stmtidR842_:
00864 ffestd_subr_line_restore_ (stmt);
00865 if (okay)
00866 ffeste_R842 (stmt->u.R842.expr);
00867 if (stmt->u.R842.pool != NULL)
00868 malloc_pool_kill (stmt->u.R842.pool);
00869 break;
00870
00871 case FFESTD_stmtidR843_:
00872 ffestd_subr_line_restore_ (stmt);
00873 if (okay)
00874 ffeste_R843 (stmt->u.R843.expr);
00875 malloc_pool_kill (stmt->u.R843.pool);
00876 break;
00877
00878 case FFESTD_stmtidR904_:
00879 ffestd_subr_line_restore_ (stmt);
00880 if (okay)
00881 ffeste_R904 (stmt->u.R904.params);
00882 malloc_pool_kill (stmt->u.R904.pool);
00883 break;
00884
00885 case FFESTD_stmtidR907_:
00886 ffestd_subr_line_restore_ (stmt);
00887 if (okay)
00888 ffeste_R907 (stmt->u.R907.params);
00889 malloc_pool_kill (stmt->u.R907.pool);
00890 break;
00891
00892 case FFESTD_stmtidR909_:
00893 ffestd_subr_line_restore_ (stmt);
00894 if (okay)
00895 ffeste_R909_start (stmt->u.R909.params, stmt->u.R909.only_format,
00896 stmt->u.R909.unit, stmt->u.R909.format,
00897 stmt->u.R909.rec, stmt->u.R909.key);
00898 for (expr = stmt->u.R909.list; expr != NULL; expr = expr->next)
00899 {
00900 if (okay)
00901 ffeste_R909_item (expr->expr, expr->token);
00902 ffelex_token_kill (expr->token);
00903 }
00904 if (okay)
00905 ffeste_R909_finish ();
00906 malloc_pool_kill (stmt->u.R909.pool);
00907 break;
00908
00909 case FFESTD_stmtidR910_:
00910 ffestd_subr_line_restore_ (stmt);
00911 if (okay)
00912 ffeste_R910_start (stmt->u.R910.params, stmt->u.R910.unit,
00913 stmt->u.R910.format, stmt->u.R910.rec);
00914 for (expr = stmt->u.R910.list; expr != NULL; expr = expr->next)
00915 {
00916 if (okay)
00917 ffeste_R910_item (expr->expr, expr->token);
00918 ffelex_token_kill (expr->token);
00919 }
00920 if (okay)
00921 ffeste_R910_finish ();
00922 malloc_pool_kill (stmt->u.R910.pool);
00923 break;
00924
00925 case FFESTD_stmtidR911_:
00926 ffestd_subr_line_restore_ (stmt);
00927 if (okay)
00928 ffeste_R911_start (stmt->u.R911.params, stmt->u.R911.format);
00929 for (expr = stmt->u.R911.list; expr != NULL; expr = expr->next)
00930 {
00931 if (okay)
00932 ffeste_R911_item (expr->expr, expr->token);
00933 ffelex_token_kill (expr->token);
00934 }
00935 if (okay)
00936 ffeste_R911_finish ();
00937 malloc_pool_kill (stmt->u.R911.pool);
00938 break;
00939
00940 case FFESTD_stmtidR919_:
00941 ffestd_subr_line_restore_ (stmt);
00942 if (okay)
00943 ffeste_R919 (stmt->u.R919.params);
00944 malloc_pool_kill (stmt->u.R919.pool);
00945 break;
00946
00947 case FFESTD_stmtidR920_:
00948 ffestd_subr_line_restore_ (stmt);
00949 if (okay)
00950 ffeste_R920 (stmt->u.R920.params);
00951 malloc_pool_kill (stmt->u.R920.pool);
00952 break;
00953
00954 case FFESTD_stmtidR921_:
00955 ffestd_subr_line_restore_ (stmt);
00956 if (okay)
00957 ffeste_R921 (stmt->u.R921.params);
00958 malloc_pool_kill (stmt->u.R921.pool);
00959 break;
00960
00961 case FFESTD_stmtidR923A_:
00962 ffestd_subr_line_restore_ (stmt);
00963 if (okay)
00964 ffeste_R923A (stmt->u.R923A.params, stmt->u.R923A.by_file);
00965 malloc_pool_kill (stmt->u.R923A.pool);
00966 break;
00967
00968 case FFESTD_stmtidR923B_:
00969 ffestd_subr_line_restore_ (stmt);
00970 if (okay)
00971 ffeste_R923B_start (stmt->u.R923B.params);
00972 for (expr = stmt->u.R923B.list; expr != NULL; expr = expr->next)
00973 {
00974 if (okay)
00975 ffeste_R923B_item (expr->expr);
00976 }
00977 if (okay)
00978 ffeste_R923B_finish ();
00979 malloc_pool_kill (stmt->u.R923B.pool);
00980 break;
00981
00982 case FFESTD_stmtidR1001_:
00983 if (okay)
00984 ffeste_R1001 (&stmt->u.R1001.str);
00985 ffests_kill (&stmt->u.R1001.str);
00986 break;
00987
00988 case FFESTD_stmtidR1103_:
00989 if (okay)
00990 ffeste_R1103 ();
00991 break;
00992
00993 case FFESTD_stmtidR1112_:
00994 if (okay)
00995 ffeste_R1112 ();
00996 break;
00997
00998 case FFESTD_stmtidR1212_:
00999 ffestd_subr_line_restore_ (stmt);
01000 if (okay)
01001 ffeste_R1212 (stmt->u.R1212.expr);
01002 malloc_pool_kill (stmt->u.R1212.pool);
01003 break;
01004
01005 case FFESTD_stmtidR1221_:
01006 if (okay)
01007 ffeste_R1221 ();
01008 break;
01009
01010 case FFESTD_stmtidR1225_:
01011 if (okay)
01012 ffeste_R1225 ();
01013 break;
01014
01015 case FFESTD_stmtidR1226_:
01016 ffestd_subr_line_restore_ (stmt);
01017 if (stmt->u.R1226.entry != NULL)
01018 {
01019 if (okay)
01020 ffeste_R1226 (stmt->u.R1226.entry);
01021 }
01022 break;
01023
01024 case FFESTD_stmtidR1227_:
01025 ffestd_subr_line_restore_ (stmt);
01026 if (okay)
01027 ffeste_R1227 (stmt->u.R1227.block, stmt->u.R1227.expr);
01028 malloc_pool_kill (stmt->u.R1227.pool);
01029 break;
01030
01031 #if FFESTR_VXT
01032 case FFESTD_stmtidV018_:
01033 ffestd_subr_line_restore_ (stmt);
01034 if (okay)
01035 ffeste_V018_start (stmt->u.V018.params, stmt->u.V018.format);
01036 for (expr = stmt->u.V018.list; expr != NULL; expr = expr->next)
01037 {
01038 if (okay)
01039 ffeste_V018_item (expr->expr);
01040 }
01041 if (okay)
01042 ffeste_V018_finish ();
01043 malloc_pool_kill (stmt->u.V018.pool);
01044 break;
01045
01046 case FFESTD_stmtidV019_:
01047 ffestd_subr_line_restore_ (stmt);
01048 if (okay)
01049 ffeste_V019_start (stmt->u.V019.params, stmt->u.V019.format);
01050 for (expr = stmt->u.V019.list; expr != NULL; expr = expr->next)
01051 {
01052 if (okay)
01053 ffeste_V019_item (expr->expr);
01054 }
01055 if (okay)
01056 ffeste_V019_finish ();
01057 malloc_pool_kill (stmt->u.V019.pool);
01058 break;
01059 #endif
01060
01061 case FFESTD_stmtidV020_:
01062 ffestd_subr_line_restore_ (stmt);
01063 if (okay)
01064 ffeste_V020_start (stmt->u.V020.params, stmt->u.V020.format);
01065 for (expr = stmt->u.V020.list; expr != NULL; expr = expr->next)
01066 {
01067 if (okay)
01068 ffeste_V020_item (expr->expr);
01069 }
01070 if (okay)
01071 ffeste_V020_finish ();
01072 malloc_pool_kill (stmt->u.V020.pool);
01073 break;
01074
01075 #if FFESTR_VXT
01076 case FFESTD_stmtidV021_:
01077 ffestd_subr_line_restore_ (stmt);
01078 if (okay)
01079 ffeste_V021 (stmt->u.V021.params);
01080 malloc_pool_kill (stmt->u.V021.pool);
01081 break;
01082
01083 case FFESTD_stmtidV023_:
01084 ffestd_subr_line_restore_ (stmt);
01085 if (okay)
01086 ffeste_V023_start (stmt->u.V023.params);
01087 for (expr = stmt->u.V023.list; expr != NULL; expr = expr->next)
01088 {
01089 if (okay)
01090 ffeste_V023_item (expr->expr);
01091 }
01092 if (okay)
01093 ffeste_V023_finish ();
01094 malloc_pool_kill (stmt->u.V023.pool);
01095 break;
01096
01097 case FFESTD_stmtidV024_:
01098 ffestd_subr_line_restore_ (stmt);
01099 if (okay)
01100 ffeste_V024_start (stmt->u.V024.params);
01101 for (expr = stmt->u.V024.list; expr != NULL; expr = expr->next)
01102 {
01103 if (okay)
01104 ffeste_V024_item (expr->expr);
01105 }
01106 if (okay)
01107 ffeste_V024_finish ();
01108 malloc_pool_kill (stmt->u.V024.pool);
01109 break;
01110
01111 case FFESTD_stmtidV025start_:
01112 ffestd_subr_line_restore_ (stmt);
01113 if (okay)
01114 ffeste_V025_start ();
01115 break;
01116
01117 case FFESTD_stmtidV025item_:
01118 if (okay)
01119 ffeste_V025_item (stmt->u.V025item.u, stmt->u.V025item.m,
01120 stmt->u.V025item.n, stmt->u.V025item.asv);
01121 break;
01122
01123 case FFESTD_stmtidV025finish_:
01124 if (okay)
01125 ffeste_V025_finish ();
01126 malloc_pool_kill (stmt->u.V025finish.pool);
01127 break;
01128
01129 case FFESTD_stmtidV026_:
01130 ffestd_subr_line_restore_ (stmt);
01131 if (okay)
01132 ffeste_V026 (stmt->u.V026.params);
01133 malloc_pool_kill (stmt->u.V026.pool);
01134 break;
01135 #endif
01136
01137 default:
01138 assert ("bad stmt->id" == NULL);
01139 break;
01140 }
01141 }
01142 }
01143
01144
01145
01146
01147
01148
01149
01150
01151
01152
01153
01154
01155 #if FFESTD_COPY_EASY_
01156 static ffestpInquireStmt *
01157 ffestd_subr_copy_easy_ (ffestpInquireIx max)
01158 {
01159 ffestpInquireStmt *stmt;
01160 ffestpInquireIx ix;
01161
01162 stmt = (ffestpInquireStmt *) malloc_new_kp (ffesta_output_pool,
01163 "FFESTD easy", sizeof (ffestpFile) * max);
01164
01165 for (ix = 0; ix < max; ++ix)
01166 {
01167 if ((stmt->inquire_spec[ix].kw_or_val_present
01168 = ffestp_file.inquire.inquire_spec[ix].kw_or_val_present)
01169 && (stmt->inquire_spec[ix].value_present
01170 = ffestp_file.inquire.inquire_spec[ix].value_present))
01171 {
01172 if ((stmt->inquire_spec[ix].value_is_label
01173 = ffestp_file.inquire.inquire_spec[ix].value_is_label))
01174 stmt->inquire_spec[ix].u.label
01175 = ffestp_file.inquire.inquire_spec[ix].u.label;
01176 else
01177 stmt->inquire_spec[ix].u.expr
01178 = ffestp_file.inquire.inquire_spec[ix].u.expr;
01179 }
01180 }
01181
01182 return stmt;
01183 }
01184
01185 #endif
01186
01187
01188
01189
01190
01191
01192
01193
01194 static void
01195 ffestd_subr_labels_ (bool unexpected)
01196 {
01197 ffelab l;
01198 ffelabHandle h;
01199 ffelabNumber undef;
01200 ffesttFormatList f;
01201
01202 undef = ffelab_number () - ffestv_num_label_defines_;
01203
01204 for (h = ffelab_handle_first (); h != NULL; h = ffelab_handle_next (h))
01205 {
01206 l = ffelab_handle_target (h);
01207 if (ffewhere_line_is_unknown (ffelab_definition_line (l)))
01208 {
01209 assert (!unexpected);
01210 assert (undef > 0);
01211 undef--;
01212 ffebad_start (FFEBAD_UNDEF_LABEL);
01213 if (ffelab_type (l) == FFELAB_typeLOOPEND)
01214 ffebad_here (0, ffelab_doref_line (l), ffelab_doref_column (l));
01215 else if (ffelab_type (l) != FFELAB_typeANY)
01216 ffebad_here (0, ffelab_firstref_line (l), ffelab_firstref_column (l));
01217 else if (!ffewhere_line_is_unknown (ffelab_firstref_line (l)))
01218 ffebad_here (0, ffelab_firstref_line (l), ffelab_firstref_column (l));
01219 else if (!ffewhere_line_is_unknown (ffelab_doref_line (l)))
01220 ffebad_here (0, ffelab_doref_line (l), ffelab_doref_column (l));
01221 else
01222 ffebad_here (0, ffelab_definition_line (l), ffelab_definition_column (l));
01223 ffebad_finish ();
01224
01225 switch (ffelab_type (l))
01226 {
01227 case FFELAB_typeFORMAT:
01228 ffelab_set_definition_line (l,
01229 ffewhere_line_use (ffelab_firstref_line (l)));
01230 ffelab_set_definition_column (l,
01231 ffewhere_column_use (ffelab_firstref_column (l)));
01232 ffestv_num_label_defines_++;
01233 f = ffestt_formatlist_create (NULL, NULL);
01234 ffestd_labeldef_format (l);
01235 ffestd_R1001 (f);
01236 ffestt_formatlist_kill (f);
01237 break;
01238
01239 case FFELAB_typeASSIGNABLE:
01240 ffelab_set_definition_line (l,
01241 ffewhere_line_use (ffelab_firstref_line (l)));
01242 ffelab_set_definition_column (l,
01243 ffewhere_column_use (ffelab_firstref_column (l)));
01244 ffestv_num_label_defines_++;
01245 ffelab_set_type (l, FFELAB_typeNOTLOOP);
01246 ffelab_set_blocknum (l, ffestw_blocknum (ffestw_stack_top ()));
01247 ffestd_labeldef_notloop (l);
01248 ffestd_R842 (NULL);
01249 break;
01250
01251 case FFELAB_typeNOTLOOP:
01252 ffelab_set_definition_line (l,
01253 ffewhere_line_use (ffelab_firstref_line (l)));
01254 ffelab_set_definition_column (l,
01255 ffewhere_column_use (ffelab_firstref_column (l)));
01256 ffestv_num_label_defines_++;
01257 ffelab_set_blocknum (l, ffestw_blocknum (ffestw_stack_top ()));
01258 ffestd_labeldef_notloop (l);
01259 ffestd_R842 (NULL);
01260 break;
01261
01262 default:
01263 assert ("bad label type" == NULL);
01264
01265 case FFELAB_typeUNKNOWN:
01266 case FFELAB_typeANY:
01267 break;
01268 }
01269 }
01270 }
01271 ffelab_handle_done (h);
01272 assert (undef == 0);
01273 }
01274
01275
01276
01277
01278
01279 #if FFESTR_F90
01280 static void
01281 ffestd_subr_f90_ ()
01282 {
01283 ffebad_start (FFEBAD_F90);
01284 ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
01285 ffelex_token_where_column (ffesta_tokens[0]));
01286 ffebad_finish ();
01287 }
01288
01289 #endif
01290
01291
01292
01293
01294 static void
01295 ffestd_subr_vxt_ ()
01296 {
01297 ffebad_start (FFEBAD_VXT_UNSUPPORTED);
01298 ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
01299 ffelex_token_where_column (ffesta_tokens[0]));
01300 ffebad_finish ();
01301 }
01302
01303
01304
01305
01306
01307
01308
01309
01310
01311
01312
01313 void
01314 ffestd_begin_uses ()
01315 {
01316 }
01317
01318
01319
01320
01321
01322
01323
01324
01325
01326
01327
01328 void
01329 ffestd_do (bool ok UNUSED)
01330 {
01331 ffestdStmt_ stmt;
01332
01333 stmt = ffestd_stmt_new_ (FFESTD_stmtidENDDOLOOP_);
01334 ffestd_stmt_append_ (stmt);
01335 ffestd_subr_line_save_ (stmt);
01336 stmt->u.enddoloop.block = ffestw_stack_top ();
01337
01338 --ffestd_block_level_;
01339 assert (ffestd_block_level_ >= 0);
01340 }
01341
01342
01343
01344
01345
01346
01347
01348
01349 #if FFESTR_F90
01350 void
01351 ffestd_end_uses (bool ok)
01352 {
01353 }
01354
01355
01356
01357
01358
01359 void
01360 ffestd_end_R740 (bool ok)
01361 {
01362 return;
01363 }
01364
01365 #endif
01366
01367
01368
01369
01370
01371
01372
01373
01374
01375
01376 void
01377 ffestd_end_R807 (bool ok UNUSED)
01378 {
01379 ffestdStmt_ stmt;
01380
01381 stmt = ffestd_stmt_new_ (FFESTD_stmtidENDLOGIF_);
01382 ffestd_stmt_append_ (stmt);
01383 ffestd_subr_line_save_ (stmt);
01384
01385 --ffestd_block_level_;
01386 assert (ffestd_block_level_ >= 0);
01387 }
01388
01389
01390
01391
01392
01393 void
01394 ffestd_exec_begin ()
01395 {
01396 ffecom_exec_transition ();
01397
01398 if (ffestd_2pass_entrypoints_ != 0)
01399 {
01400
01401 ffestdStmt_ stmt;
01402 int ents = ffestd_2pass_entrypoints_;
01403
01404 stmt = ffestd_stmt_list_.first;
01405 do
01406 {
01407 while (stmt->id != FFESTD_stmtidR1226_)
01408 stmt = stmt->next;
01409
01410 if (!ffecom_2pass_advise_entrypoint (stmt->u.R1226.entry))
01411 {
01412 stmt->u.R1226.entry = NULL;
01413 --ffestd_2pass_entrypoints_;
01414 }
01415 stmt = stmt->next;
01416 }
01417 while (--ents != 0);
01418 }
01419 }
01420
01421
01422
01423
01424
01425 void
01426 ffestd_exec_end ()
01427 {
01428 int old_lineno = lineno;
01429 const char *old_input_filename = input_filename;
01430
01431 ffecom_end_transition ();
01432
01433 ffestd_stmt_pass_ ();
01434
01435 ffecom_finish_progunit ();
01436
01437 if (ffestd_2pass_entrypoints_ != 0)
01438 {
01439 int ents = ffestd_2pass_entrypoints_;
01440 ffestdStmt_ stmt = ffestd_stmt_list_.first;
01441
01442 do
01443 {
01444 while (stmt->id != FFESTD_stmtidR1226_)
01445 stmt = stmt->next;
01446
01447 if (stmt->u.R1226.entry != NULL)
01448 {
01449 ffestd_subr_line_restore_ (stmt);
01450 ffecom_2pass_do_entrypoint (stmt->u.R1226.entry);
01451 }
01452 stmt = stmt->next;
01453 }
01454 while (--ents != 0);
01455 }
01456
01457 ffestd_stmt_list_.first = NULL;
01458 ffestd_stmt_list_.last = NULL;
01459 ffestd_2pass_entrypoints_ = 0;
01460
01461 lineno = old_lineno;
01462 input_filename = old_input_filename;
01463 }
01464
01465
01466
01467
01468
01469 void
01470 ffestd_init_3 ()
01471 {
01472 ffestd_stmt_list_.first = (ffestdStmt_) &ffestd_stmt_list_.first;
01473 ffestd_stmt_list_.last = (ffestdStmt_) &ffestd_stmt_list_.first;
01474 }
01475
01476
01477
01478 void
01479 ffestd_labeldef_any (ffelab label UNUSED)
01480 {
01481 }
01482
01483
01484
01485
01486
01487 void
01488 ffestd_labeldef_branch (ffelab label)
01489 {
01490 ffestdStmt_ stmt;
01491
01492 stmt = ffestd_stmt_new_ (FFESTD_stmtidEXECLABEL_);
01493 ffestd_stmt_append_ (stmt);
01494 stmt->u.execlabel.label = label;
01495
01496 ffestd_is_reachable_ = TRUE;
01497 }
01498
01499
01500
01501
01502
01503 void
01504 ffestd_labeldef_format (ffelab label)
01505 {
01506 ffestdStmt_ stmt;
01507
01508 ffestd_label_formatdef_ = label;
01509
01510 stmt = ffestd_stmt_new_ (FFESTD_stmtidFORMATLABEL_);
01511 ffestd_stmt_append_ (stmt);
01512 stmt->u.formatlabel.label = label;
01513 }
01514
01515
01516
01517
01518
01519 void
01520 ffestd_labeldef_useless (ffelab label UNUSED)
01521 {
01522 }
01523
01524
01525
01526
01527
01528 #if FFESTR_F90
01529 void
01530 ffestd_R423A ()
01531 {
01532 ffestd_check_simple_ ();
01533 }
01534
01535
01536
01537
01538
01539 void
01540 ffestd_R423B ()
01541 {
01542 ffestd_check_simple_ ();
01543 }
01544
01545
01546
01547
01548
01549
01550
01551 void
01552 ffestd_R424 (ffelexToken access, ffestrOther access_kw, ffelexToken name)
01553 {
01554 ffestd_check_simple_ ();
01555
01556 ffestd_subr_f90_ ();
01557 return;
01558
01559 #ifdef FFESTD_F90
01560 char *a;
01561
01562 if (access == NULL)
01563 fprintf (dmpout, "* TYPE %s\n", ffelex_token_text (name));
01564 else
01565 {
01566 switch (access_kw)
01567 {
01568 case FFESTR_otherPUBLIC:
01569 a = "PUBLIC";
01570 break;
01571
01572 case FFESTR_otherPRIVATE:
01573 a = "PRIVATE";
01574 break;
01575
01576 default:
01577 assert (FALSE);
01578 }
01579 fprintf (dmpout, "* TYPE,%s: %s\n", a, ffelex_token_text (name));
01580 }
01581 #endif
01582 }
01583
01584
01585
01586
01587
01588 void
01589 ffestd_R425 (bool ok)
01590 {
01591 }
01592
01593
01594
01595
01596
01597
01598
01599 void
01600 ffestd_R519_start (ffestrOther intent_kw)
01601 {
01602 ffestd_check_start_ ();
01603
01604 ffestd_subr_f90_ ();
01605 return;
01606
01607 #ifdef FFESTD_F90
01608 char *a;
01609
01610 switch (intent_kw)
01611 {
01612 case FFESTR_otherIN:
01613 a = "IN";
01614 break;
01615
01616 case FFESTR_otherOUT:
01617 a = "OUT";
01618 break;
01619
01620 case FFESTR_otherINOUT:
01621 a = "INOUT";
01622 break;
01623
01624 default:
01625 assert (FALSE);
01626 }
01627 fprintf (dmpout, "* INTENT (%s) ", a);
01628 #endif
01629 }
01630
01631
01632
01633
01634
01635
01636
01637 void
01638 ffestd_R519_item (ffelexToken name)
01639 {
01640 ffestd_check_item_ ();
01641
01642 return;
01643
01644 #ifdef FFESTD_F90
01645 fprintf (dmpout, "%s,", ffelex_token_text (name));
01646 #endif
01647 }
01648
01649
01650
01651
01652
01653
01654
01655 void
01656 ffestd_R519_finish ()
01657 {
01658 ffestd_check_finish_ ();
01659
01660 return;
01661
01662 #ifdef FFESTD_F90
01663 fputc ('\n', dmpout);
01664 #endif
01665 }
01666
01667
01668
01669
01670
01671
01672
01673 void
01674 ffestd_R520_start ()
01675 {
01676 ffestd_check_start_ ();
01677
01678 ffestd_subr_f90_ ();
01679 return;
01680
01681 #ifdef FFESTD_F90
01682 fputs ("* OPTIONAL ", dmpout);
01683 #endif
01684 }
01685
01686
01687
01688
01689
01690
01691
01692 void
01693 ffestd_R520_item (ffelexToken name)
01694 {
01695 ffestd_check_item_ ();
01696
01697 return;
01698
01699 #ifdef FFESTD_F90
01700 fprintf (dmpout, "%s,", ffelex_token_text (name));
01701 #endif
01702 }
01703
01704
01705
01706
01707
01708
01709
01710 void
01711 ffestd_R520_finish ()
01712 {
01713 ffestd_check_finish_ ();
01714
01715 return;
01716
01717 #ifdef FFESTD_F90
01718 fputc ('\n', dmpout);
01719 #endif
01720 }
01721
01722
01723
01724
01725
01726
01727
01728 void
01729 ffestd_R521A ()
01730 {
01731 ffestd_check_simple_ ();
01732
01733 ffestd_subr_f90_ ();
01734 return;
01735
01736 #ifdef FFESTD_F90
01737 fputs ("* PUBLIC\n", dmpout);
01738 #endif
01739 }
01740
01741
01742
01743
01744
01745
01746
01747 void
01748 ffestd_R521Astart ()
01749 {
01750 ffestd_check_start_ ();
01751
01752 ffestd_subr_f90_ ();
01753 return;
01754
01755 #ifdef FFESTD_F90
01756 fputs ("* PUBLIC ", dmpout);
01757 #endif
01758 }
01759
01760
01761
01762
01763
01764
01765
01766 void
01767 ffestd_R521Aitem (ffelexToken name)
01768 {
01769 ffestd_check_item_ ();
01770
01771 return;
01772
01773 #ifdef FFESTD_F90
01774 fprintf (dmpout, "%s,", ffelex_token_text (name));
01775 #endif
01776 }
01777
01778
01779
01780
01781
01782
01783
01784 void
01785 ffestd_R521Afinish ()
01786 {
01787 ffestd_check_finish_ ();
01788
01789 return;
01790
01791 #ifdef FFESTD_F90
01792 fputc ('\n', dmpout);
01793 #endif
01794 }
01795
01796
01797
01798
01799
01800
01801
01802 void
01803 ffestd_R521B ()
01804 {
01805 ffestd_check_simple_ ();
01806
01807 ffestd_subr_f90_ ();
01808 return;
01809
01810 #ifdef FFESTD_F90
01811 fputs ("* PRIVATE_outside_of_R422_derived_type_def\n", dmpout);
01812 #endif
01813 }
01814
01815
01816
01817
01818
01819
01820
01821 void
01822 ffestd_R521Bstart ()
01823 {
01824 ffestd_check_start_ ();
01825
01826 ffestd_subr_f90_ ();
01827 return;
01828
01829 #ifdef FFESTD_F90
01830 fputs ("* PRIVATE ", dmpout);
01831 #endif
01832 }
01833
01834
01835
01836
01837
01838
01839
01840 void
01841 ffestd_R521Bitem (ffelexToken name)
01842 {
01843 ffestd_check_item_ ();
01844
01845 return;
01846
01847 #ifdef FFESTD_F90
01848 fprintf (dmpout, "%s,", ffelex_token_text (name));
01849 #endif
01850 }
01851
01852
01853
01854
01855
01856
01857
01858 void
01859 ffestd_R521Bfinish ()
01860 {
01861 ffestd_check_finish_ ();
01862
01863 return;
01864
01865 #ifdef FFESTD_F90
01866 fputc ('\n', dmpout);
01867 #endif
01868 }
01869
01870 #endif
01871
01872
01873
01874
01875
01876
01877 void
01878 ffestd_R522 ()
01879 {
01880 ffestd_check_simple_ ();
01881 }
01882
01883
01884
01885
01886
01887
01888
01889 void
01890 ffestd_R522start ()
01891 {
01892 ffestd_check_start_ ();
01893 }
01894
01895
01896
01897
01898
01899
01900
01901 void
01902 ffestd_R522item_object (ffelexToken name UNUSED)
01903 {
01904 ffestd_check_item_ ();
01905 }
01906
01907
01908
01909
01910
01911
01912
01913 void
01914 ffestd_R522item_cblock (ffelexToken name UNUSED)
01915 {
01916 ffestd_check_item_ ();
01917 }
01918
01919
01920
01921
01922
01923
01924
01925 void
01926 ffestd_R522finish ()
01927 {
01928 ffestd_check_finish_ ();
01929 }
01930
01931
01932
01933
01934
01935
01936
01937 void
01938 ffestd_R524_start (bool virtual UNUSED)
01939 {
01940 ffestd_check_start_ ();
01941 }
01942
01943
01944
01945
01946
01947
01948
01949 void
01950 ffestd_R524_item (ffelexToken name UNUSED, ffesttDimList dims UNUSED)
01951 {
01952 ffestd_check_item_ ();
01953 }
01954
01955
01956
01957
01958
01959
01960
01961 void
01962 ffestd_R524_finish ()
01963 {
01964 ffestd_check_finish_ ();
01965 }
01966
01967
01968
01969
01970
01971
01972
01973
01974 #if FFESTR_F90
01975 void
01976 ffestd_R525_start ()
01977 {
01978 ffestd_check_start_ ();
01979
01980 ffestd_subr_f90_ ();
01981 return;
01982
01983 #ifdef FFESTD_F90
01984 fputs ("* ALLOCATABLE ", dmpout);
01985 #endif
01986 }
01987
01988
01989
01990
01991
01992
01993
01994 void
01995 ffestd_R525_item (ffelexToken name, ffesttDimList dims)
01996 {
01997 ffestd_check_item_ ();
01998
01999 return;
02000
02001 #ifdef FFESTD_F90
02002 fputs (ffelex_token_text (name), dmpout);
02003 if (dims != NULL)
02004 {
02005 fputc ('(', dmpout);
02006 ffestt_dimlist_dump (dims);
02007 fputc (')', dmpout);
02008 }
02009 fputc (',', dmpout);
02010 #endif
02011 }
02012
02013
02014
02015
02016
02017
02018
02019 void
02020 ffestd_R525_finish ()
02021 {
02022 ffestd_check_finish_ ();
02023
02024 return;
02025
02026 #ifdef FFESTD_F90
02027 fputc ('\n', dmpout);
02028 #endif
02029 }
02030
02031
02032
02033
02034
02035
02036
02037
02038 void
02039 ffestd_R526_start ()
02040 {
02041 ffestd_check_start_ ();
02042
02043 ffestd_subr_f90_ ();
02044 return;
02045
02046 #ifdef FFESTD_F90
02047 fputs ("* POINTER ", dmpout);
02048 #endif
02049 }
02050
02051
02052
02053
02054
02055
02056
02057 void
02058 ffestd_R526_item (ffelexToken name, ffesttDimList dims)
02059 {
02060 ffestd_check_item_ ();
02061
02062 return;
02063
02064 #ifdef FFESTD_F90
02065 fputs (ffelex_token_text (name), dmpout);
02066 if (dims != NULL)
02067 {
02068 fputc ('(', dmpout);
02069 ffestt_dimlist_dump (dims);
02070 fputc (')', dmpout);
02071 }
02072 fputc (',', dmpout);
02073 #endif
02074 }
02075
02076
02077
02078
02079
02080
02081
02082 void
02083 ffestd_R526_finish ()
02084 {
02085 ffestd_check_finish_ ();
02086
02087 return;
02088
02089 #ifdef FFESTD_F90
02090 fputc ('\n', dmpout);
02091 #endif
02092 }
02093
02094
02095
02096
02097
02098
02099
02100
02101 void
02102 ffestd_R527_start ()
02103 {
02104 ffestd_check_start_ ();
02105
02106 ffestd_subr_f90_ ();
02107 return;
02108
02109 #ifdef FFESTD_F90
02110 fputs ("* TARGET ", dmpout);
02111 #endif
02112 }
02113
02114
02115
02116
02117
02118
02119
02120 void
02121 ffestd_R527_item (ffelexToken name, ffesttDimList dims)
02122 {
02123 ffestd_check_item_ ();
02124
02125 return;
02126
02127 #ifdef FFESTD_F90
02128 fputs (ffelex_token_text (name), dmpout);
02129 if (dims != NULL)
02130 {
02131 fputc ('(', dmpout);
02132 ffestt_dimlist_dump (dims);
02133 fputc (')', dmpout);
02134 }
02135 fputc (',', dmpout);
02136 #endif
02137 }
02138
02139
02140
02141
02142
02143
02144
02145 void
02146 ffestd_R527_finish ()
02147 {
02148 ffestd_check_finish_ ();
02149
02150 return;
02151
02152 #ifdef FFESTD_F90
02153 fputc ('\n', dmpout);
02154 #endif
02155 }
02156
02157 #endif
02158
02159
02160
02161
02162
02163
02164 void
02165 ffestd_R537_start ()
02166 {
02167 ffestd_check_start_ ();
02168 }
02169
02170
02171
02172
02173
02174
02175
02176
02177 void
02178 ffestd_R537_item (ffebld dest UNUSED, ffebld source UNUSED)
02179 {
02180 ffestd_check_item_ ();
02181 }
02182
02183
02184
02185
02186
02187
02188
02189 void
02190 ffestd_R537_finish ()
02191 {
02192 ffestd_check_finish_ ();
02193 }
02194
02195
02196
02197
02198
02199
02200
02201 void
02202 ffestd_R539 ()
02203 {
02204 ffestd_check_simple_ ();
02205 }
02206
02207
02208
02209
02210
02211
02212
02213 void
02214 ffestd_R539start ()
02215 {
02216 ffestd_check_start_ ();
02217 }
02218
02219
02220
02221
02222
02223
02224
02225 void
02226 ffestd_R539item (ffestpType type UNUSED, ffebld kind UNUSED,
02227 ffelexToken kindt UNUSED, ffebld len UNUSED,
02228 ffelexToken lent UNUSED, ffesttImpList letters UNUSED)
02229 {
02230 ffestd_check_item_ ();
02231 }
02232
02233
02234
02235
02236
02237
02238
02239 void
02240 ffestd_R539finish ()
02241 {
02242 ffestd_check_finish_ ();
02243 }
02244
02245
02246
02247
02248
02249
02250
02251 void
02252 ffestd_R542_start ()
02253 {
02254 ffestd_check_start_ ();
02255 }
02256
02257
02258
02259
02260
02261
02262
02263 void
02264 ffestd_R542_item_nlist (ffelexToken name UNUSED)
02265 {
02266 ffestd_check_item_ ();
02267 }
02268
02269
02270
02271
02272
02273
02274
02275 void
02276 ffestd_R542_item_nitem (ffelexToken name UNUSED)
02277 {
02278 ffestd_check_item_ ();
02279 }
02280
02281
02282
02283
02284
02285
02286
02287 void
02288 ffestd_R542_finish ()
02289 {
02290 ffestd_check_finish_ ();
02291 }
02292
02293
02294
02295
02296
02297
02298
02299
02300 #if 0
02301 void
02302 ffestd_R544_start ()
02303 {
02304 ffestd_check_start_ ();
02305 }
02306
02307 #endif
02308
02309
02310
02311
02312
02313
02314 #if 0
02315 void
02316 ffestd_R544_item (ffesttExprList exprlist)
02317 {
02318 ffestd_check_item_ ();
02319 }
02320
02321 #endif
02322
02323
02324
02325
02326
02327
02328 #if 0
02329 void
02330 ffestd_R544_finish ()
02331 {
02332 ffestd_check_finish_ ();
02333 }
02334
02335 #endif
02336
02337
02338
02339
02340
02341
02342 void
02343 ffestd_R547_start ()
02344 {
02345 ffestd_check_start_ ();
02346 }
02347
02348
02349
02350
02351
02352
02353
02354 void
02355 ffestd_R547_item_object (ffelexToken name UNUSED,
02356 ffesttDimList dims UNUSED)
02357 {
02358 ffestd_check_item_ ();
02359 }
02360
02361
02362
02363
02364
02365
02366
02367 void
02368 ffestd_R547_item_cblock (ffelexToken name UNUSED)
02369 {
02370 ffestd_check_item_ ();
02371 }
02372
02373
02374
02375
02376
02377
02378
02379 void
02380 ffestd_R547_finish ()
02381 {
02382 ffestd_check_finish_ ();
02383 }
02384
02385
02386
02387
02388
02389
02390
02391 #if FFESTR_F90
02392 void
02393 ffestd_R620 (ffesttExprList exprlist, ffebld stat)
02394 {
02395 ffestd_check_simple_ ();
02396
02397 ffestd_subr_f90_ ();
02398 }
02399
02400
02401
02402
02403
02404
02405
02406 void
02407 ffestd_R624 (ffesttExprList pointers)
02408 {
02409 ffestd_check_simple_ ();
02410
02411 ffestd_subr_f90_ ();
02412 return;
02413
02414 #ifdef FFESTD_F90
02415 fputs ("+ NULLIFY (", dmpout);
02416 assert (pointers != NULL);
02417 ffestt_exprlist_dump (pointers);
02418 fputs (")\n", dmpout);
02419 #endif
02420 }
02421
02422
02423
02424
02425
02426
02427
02428 void
02429 ffestd_R625 (ffesttExprList exprlist, ffebld stat)
02430 {
02431 ffestd_check_simple_ ();
02432
02433 ffestd_subr_f90_ ();
02434 }
02435
02436 #endif
02437
02438
02439
02440
02441 void
02442 ffestd_R737A (ffebld dest, ffebld source)
02443 {
02444 ffestdStmt_ stmt;
02445
02446 ffestd_check_simple_ ();
02447
02448 stmt = ffestd_stmt_new_ (FFESTD_stmtidR737A_);
02449 ffestd_stmt_append_ (stmt);
02450 ffestd_subr_line_save_ (stmt);
02451 stmt->u.R737A.pool = ffesta_output_pool;
02452 stmt->u.R737A.dest = dest;
02453 stmt->u.R737A.source = source;
02454 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
02455 }
02456
02457
02458
02459
02460
02461 #if FFESTR_F90
02462 void
02463 ffestd_R737B (ffebld dest, ffebld source)
02464 {
02465 ffestd_check_simple_ ();
02466 }
02467
02468
02469
02470
02471
02472
02473
02474 void
02475 ffestd_R738 (ffebld dest, ffebld source)
02476 {
02477 ffestd_check_simple_ ();
02478
02479 ffestd_subr_f90_ ();
02480 }
02481
02482
02483
02484
02485
02486
02487
02488 void
02489 ffestd_R740 (ffebld expr)
02490 {
02491 ffestd_check_simple_ ();
02492
02493 ffestd_subr_f90_ ();
02494 }
02495
02496
02497
02498
02499
02500
02501
02502 void
02503 ffestd_R742 (ffebld expr)
02504 {
02505 ffestd_check_simple_ ();
02506
02507 ffestd_subr_f90_ ();
02508 }
02509
02510
02511
02512
02513
02514
02515
02516
02517 void
02518 ffestd_R744 ()
02519 {
02520 ffestd_check_simple_ ();
02521
02522 return;
02523
02524 #ifdef FFESTD_F90
02525 fputs ("+ ELSE_WHERE\n", dmpout);
02526 #endif
02527 }
02528
02529
02530
02531 void
02532 ffestd_R745 (bool ok)
02533 {
02534 return;
02535
02536 #ifdef FFESTD_F90
02537 fputs ("+ END_WHERE\n", dmpout);
02538
02539 --ffestd_block_level_;
02540 assert (ffestd_block_level_ >= 0);
02541 #endif
02542 }
02543
02544 #endif
02545
02546
02547
02548 void
02549 ffestd_R803 (ffelexToken construct_name UNUSED, ffebld expr)
02550 {
02551 ffestdStmt_ stmt;
02552
02553 ffestd_check_simple_ ();
02554
02555 stmt = ffestd_stmt_new_ (FFESTD_stmtidR803_);
02556 ffestd_stmt_append_ (stmt);
02557 ffestd_subr_line_save_ (stmt);
02558 stmt->u.R803.pool = ffesta_output_pool;
02559 stmt->u.R803.block = ffestw_use (ffestw_stack_top ());
02560 stmt->u.R803.expr = expr;
02561 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
02562
02563 ++ffestd_block_level_;
02564 assert (ffestd_block_level_ > 0);
02565 }
02566
02567
02568
02569 void
02570 ffestd_R804 (ffebld expr, ffelexToken name UNUSED)
02571 {
02572 ffestdStmt_ stmt;
02573
02574 ffestd_check_simple_ ();
02575
02576 stmt = ffestd_stmt_new_ (FFESTD_stmtidR804_);
02577 ffestd_stmt_append_ (stmt);
02578 ffestd_subr_line_save_ (stmt);
02579 stmt->u.R804.pool = ffesta_output_pool;
02580 stmt->u.R804.block = ffestw_use (ffestw_stack_top ());
02581 stmt->u.R804.expr = expr;
02582 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
02583 }
02584
02585
02586
02587 void
02588 ffestd_R805 (ffelexToken name UNUSED)
02589 {
02590 ffestdStmt_ stmt;
02591
02592 ffestd_check_simple_ ();
02593
02594 stmt = ffestd_stmt_new_ (FFESTD_stmtidR805_);
02595 ffestd_stmt_append_ (stmt);
02596 ffestd_subr_line_save_ (stmt);
02597 stmt->u.R805.block = ffestw_use (ffestw_stack_top ());
02598 }
02599
02600
02601
02602 void
02603 ffestd_R806 (bool ok UNUSED)
02604 {
02605 ffestdStmt_ stmt;
02606
02607 stmt = ffestd_stmt_new_ (FFESTD_stmtidR806_);
02608 ffestd_stmt_append_ (stmt);
02609 ffestd_subr_line_save_ (stmt);
02610 stmt->u.R806.block = ffestw_use (ffestw_stack_top ());
02611
02612 --ffestd_block_level_;
02613 assert (ffestd_block_level_ >= 0);
02614 }
02615
02616
02617
02618
02619
02620
02621
02622 void
02623 ffestd_R807 (ffebld expr)
02624 {
02625 ffestdStmt_ stmt;
02626
02627 ffestd_check_simple_ ();
02628
02629 stmt = ffestd_stmt_new_ (FFESTD_stmtidR807_);
02630 ffestd_stmt_append_ (stmt);
02631 ffestd_subr_line_save_ (stmt);
02632 stmt->u.R807.pool = ffesta_output_pool;
02633 stmt->u.R807.expr = expr;
02634 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
02635
02636 ++ffestd_block_level_;
02637 assert (ffestd_block_level_ > 0);
02638 }
02639
02640
02641
02642
02643
02644
02645
02646 void
02647 ffestd_R809 (ffelexToken construct_name UNUSED, ffebld expr)
02648 {
02649 ffestdStmt_ stmt;
02650
02651 ffestd_check_simple_ ();
02652
02653 stmt = ffestd_stmt_new_ (FFESTD_stmtidR809_);
02654 ffestd_stmt_append_ (stmt);
02655 ffestd_subr_line_save_ (stmt);
02656 stmt->u.R809.pool = ffesta_output_pool;
02657 stmt->u.R809.block = ffestw_use (ffestw_stack_top ());
02658 stmt->u.R809.expr = expr;
02659 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
02660 malloc_pool_use (ffestw_select (ffestw_stack_top ())->pool);
02661
02662 ++ffestd_block_level_;
02663 assert (ffestd_block_level_ > 0);
02664 }
02665
02666
02667
02668
02669
02670
02671
02672
02673
02674 void
02675 ffestd_R810 (unsigned long casenum)
02676 {
02677 ffestdStmt_ stmt;
02678
02679 ffestd_check_simple_ ();
02680
02681 stmt = ffestd_stmt_new_ (FFESTD_stmtidR810_);
02682 ffestd_stmt_append_ (stmt);
02683 ffestd_subr_line_save_ (stmt);
02684 stmt->u.R810.pool = ffesta_output_pool;
02685 stmt->u.R810.block = ffestw_stack_top ();
02686 stmt->u.R810.casenum = casenum;
02687 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
02688 }
02689
02690
02691
02692
02693
02694 void
02695 ffestd_R811 (bool ok UNUSED)
02696 {
02697 ffestdStmt_ stmt;
02698
02699 stmt = ffestd_stmt_new_ (FFESTD_stmtidR811_);
02700 ffestd_stmt_append_ (stmt);
02701 ffestd_subr_line_save_ (stmt);
02702 stmt->u.R811.block = ffestw_stack_top ();
02703
02704 --ffestd_block_level_;
02705 assert (ffestd_block_level_ >= 0);
02706 }
02707
02708
02709
02710
02711
02712
02713
02714 void
02715 ffestd_R819A (ffelexToken construct_name UNUSED, ffelab label,
02716 ffebld var, ffebld start, ffelexToken start_token,
02717 ffebld end, ffelexToken end_token,
02718 ffebld incr, ffelexToken incr_token)
02719 {
02720 ffestdStmt_ stmt;
02721
02722 ffestd_check_simple_ ();
02723
02724 stmt = ffestd_stmt_new_ (FFESTD_stmtidR819A_);
02725 ffestd_stmt_append_ (stmt);
02726 ffestd_subr_line_save_ (stmt);
02727 stmt->u.R819A.pool = ffesta_output_pool;
02728 stmt->u.R819A.block = ffestw_use (ffestw_stack_top ());
02729 stmt->u.R819A.label = label;
02730 stmt->u.R819A.var = var;
02731 stmt->u.R819A.start = start;
02732 stmt->u.R819A.start_token = ffelex_token_use (start_token);
02733 stmt->u.R819A.end = end;
02734 stmt->u.R819A.end_token = ffelex_token_use (end_token);
02735 stmt->u.R819A.incr = incr;
02736 stmt->u.R819A.incr_token = (incr_token == NULL) ? NULL
02737 : ffelex_token_use (incr_token);
02738 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
02739
02740 ++ffestd_block_level_;
02741 assert (ffestd_block_level_ > 0);
02742 }
02743
02744
02745
02746
02747
02748
02749
02750 void
02751 ffestd_R819B (ffelexToken construct_name UNUSED, ffelab label,
02752 ffebld expr)
02753 {
02754 ffestdStmt_ stmt;
02755
02756 ffestd_check_simple_ ();
02757
02758 stmt = ffestd_stmt_new_ (FFESTD_stmtidR819B_);
02759 ffestd_stmt_append_ (stmt);
02760 ffestd_subr_line_save_ (stmt);
02761 stmt->u.R819B.pool = ffesta_output_pool;
02762 stmt->u.R819B.block = ffestw_use (ffestw_stack_top ());
02763 stmt->u.R819B.label = label;
02764 stmt->u.R819B.expr = expr;
02765 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
02766
02767 ++ffestd_block_level_;
02768 assert (ffestd_block_level_ > 0);
02769 }
02770
02771
02772
02773
02774
02775
02776
02777
02778
02779
02780
02781
02782 void
02783 ffestd_R825 (ffelexToken name UNUSED)
02784 {
02785 ffestdStmt_ stmt;
02786
02787 ffestd_check_simple_ ();
02788
02789 stmt = ffestd_stmt_new_ (FFESTD_stmtidR825_);
02790 ffestd_stmt_append_ (stmt);
02791 ffestd_subr_line_save_ (stmt);
02792 }
02793
02794
02795
02796
02797
02798
02799
02800 void
02801 ffestd_R834 (ffestw block)
02802 {
02803 ffestdStmt_ stmt;
02804
02805 ffestd_check_simple_ ();
02806
02807 stmt = ffestd_stmt_new_ (FFESTD_stmtidR834_);
02808 ffestd_stmt_append_ (stmt);
02809 ffestd_subr_line_save_ (stmt);
02810 stmt->u.R834.block = block;
02811 }
02812
02813
02814
02815
02816
02817
02818
02819 void
02820 ffestd_R835 (ffestw block)
02821 {
02822 ffestdStmt_ stmt;
02823
02824 ffestd_check_simple_ ();
02825
02826 stmt = ffestd_stmt_new_ (FFESTD_stmtidR835_);
02827 ffestd_stmt_append_ (stmt);
02828 ffestd_subr_line_save_ (stmt);
02829 stmt->u.R835.block = block;
02830 }
02831
02832
02833
02834
02835
02836
02837
02838
02839 void
02840 ffestd_R836 (ffelab label)
02841 {
02842 ffestdStmt_ stmt;
02843
02844 ffestd_check_simple_ ();
02845
02846 stmt = ffestd_stmt_new_ (FFESTD_stmtidR836_);
02847 ffestd_stmt_append_ (stmt);
02848 ffestd_subr_line_save_ (stmt);
02849 stmt->u.R836.label = label;
02850
02851 if (ffestd_block_level_ == 0)
02852 ffestd_is_reachable_ = FALSE;
02853 }
02854
02855
02856
02857
02858
02859
02860
02861
02862 void
02863 ffestd_R837 (ffelab *labels, int count, ffebld expr)
02864 {
02865 ffestdStmt_ stmt;
02866
02867 ffestd_check_simple_ ();
02868
02869 stmt = ffestd_stmt_new_ (FFESTD_stmtidR837_);
02870 ffestd_stmt_append_ (stmt);
02871 ffestd_subr_line_save_ (stmt);
02872 stmt->u.R837.pool = ffesta_output_pool;
02873 stmt->u.R837.labels = labels;
02874 stmt->u.R837.count = count;
02875 stmt->u.R837.expr = expr;
02876 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
02877 }
02878
02879
02880
02881
02882
02883
02884
02885
02886
02887
02888 void
02889 ffestd_R838 (ffelab label, ffebld target)
02890 {
02891 ffestdStmt_ stmt;
02892
02893 ffestd_check_simple_ ();
02894
02895 stmt = ffestd_stmt_new_ (FFESTD_stmtidR838_);
02896 ffestd_stmt_append_ (stmt);
02897 ffestd_subr_line_save_ (stmt);
02898 stmt->u.R838.pool = ffesta_output_pool;
02899 stmt->u.R838.label = label;
02900 stmt->u.R838.target = target;
02901 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
02902 }
02903
02904
02905
02906
02907
02908
02909
02910
02911 void
02912 ffestd_R839 (ffebld target, ffelab *labels UNUSED, int count UNUSED)
02913 {
02914 ffestdStmt_ stmt;
02915
02916 ffestd_check_simple_ ();
02917
02918 stmt = ffestd_stmt_new_ (FFESTD_stmtidR839_);
02919 ffestd_stmt_append_ (stmt);
02920 ffestd_subr_line_save_ (stmt);
02921 stmt->u.R839.pool = ffesta_output_pool;
02922 stmt->u.R839.target = target;
02923 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
02924
02925 if (ffestd_block_level_ == 0)
02926 ffestd_is_reachable_ = FALSE;
02927 }
02928
02929
02930
02931
02932
02933
02934
02935 void
02936 ffestd_R840 (ffebld expr, ffelab neg, ffelab zero, ffelab pos)
02937 {
02938 ffestdStmt_ stmt;
02939
02940 ffestd_check_simple_ ();
02941
02942 stmt = ffestd_stmt_new_ (FFESTD_stmtidR840_);
02943 ffestd_stmt_append_ (stmt);
02944 ffestd_subr_line_save_ (stmt);
02945 stmt->u.R840.pool = ffesta_output_pool;
02946 stmt->u.R840.expr = expr;
02947 stmt->u.R840.neg = neg;
02948 stmt->u.R840.zero = zero;
02949 stmt->u.R840.pos = pos;
02950 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
02951
02952 if (ffestd_block_level_ == 0)
02953 ffestd_is_reachable_ = FALSE;
02954 }
02955
02956
02957
02958
02959
02960 void
02961 ffestd_R841 (bool in_where UNUSED)
02962 {
02963 ffestdStmt_ stmt;
02964
02965 ffestd_check_simple_ ();
02966
02967 stmt = ffestd_stmt_new_ (FFESTD_stmtidR841_);
02968 ffestd_stmt_append_ (stmt);
02969 ffestd_subr_line_save_ (stmt);
02970 }
02971
02972
02973
02974
02975
02976 void
02977 ffestd_R842 (ffebld expr)
02978 {
02979 ffestdStmt_ stmt;
02980
02981 ffestd_check_simple_ ();
02982
02983 stmt = ffestd_stmt_new_ (FFESTD_stmtidR842_);
02984 ffestd_stmt_append_ (stmt);
02985 ffestd_subr_line_save_ (stmt);
02986 if (ffesta_outpooldisp () == FFESTA_pooldispPRESERVE)
02987 {
02988
02989
02990
02991
02992 assert (expr == NULL);
02993 stmt->u.R842.pool = NULL;
02994 stmt->u.R842.expr = NULL;
02995 }
02996 else
02997 {
02998 stmt->u.R842.pool = ffesta_output_pool;
02999 stmt->u.R842.expr = expr;
03000 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
03001 }
03002
03003 if (ffestd_block_level_ == 0)
03004 ffestd_is_reachable_ = FALSE;
03005 }
03006
03007
03008
03009
03010
03011
03012
03013
03014 void
03015 ffestd_R843 (ffebld expr)
03016 {
03017 ffestdStmt_ stmt;
03018
03019 ffestd_check_simple_ ();
03020
03021 stmt = ffestd_stmt_new_ (FFESTD_stmtidR843_);
03022 ffestd_stmt_append_ (stmt);
03023 ffestd_subr_line_save_ (stmt);
03024 stmt->u.R843.pool = ffesta_output_pool;
03025 stmt->u.R843.expr = expr;
03026 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
03027 }
03028
03029
03030
03031
03032
03033
03034
03035 void
03036 ffestd_R904 ()
03037 {
03038 ffestdStmt_ stmt;
03039
03040 ffestd_check_simple_ ();
03041
03042 #define specified(something) \
03043 (ffestp_file.open.open_spec[something].kw_or_val_present)
03044
03045
03046
03047 if (specified (FFESTP_openixACTION)
03048 || specified (FFESTP_openixASSOCIATEVARIABLE)
03049 || specified (FFESTP_openixBLOCKSIZE)
03050 || specified (FFESTP_openixBUFFERCOUNT)
03051 || specified (FFESTP_openixCARRIAGECONTROL)
03052 || specified (FFESTP_openixDEFAULTFILE)
03053 || specified (FFESTP_openixDELIM)
03054 || specified (FFESTP_openixDISPOSE)
03055 || specified (FFESTP_openixEXTENDSIZE)
03056 || specified (FFESTP_openixINITIALSIZE)
03057 || specified (FFESTP_openixKEY)
03058 || specified (FFESTP_openixMAXREC)
03059 || specified (FFESTP_openixNOSPANBLOCKS)
03060 || specified (FFESTP_openixORGANIZATION)
03061 || specified (FFESTP_openixPAD)
03062 || specified (FFESTP_openixPOSITION)
03063 || specified (FFESTP_openixREADONLY)
03064 || specified (FFESTP_openixRECORDTYPE)
03065 || specified (FFESTP_openixSHARED)
03066 || specified (FFESTP_openixUSEROPEN))
03067 {
03068 ffebad_start (FFEBAD_OPEN_UNSUPPORTED);
03069 ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
03070 ffelex_token_where_column (ffesta_tokens[0]));
03071 ffebad_finish ();
03072 }
03073
03074 #undef specified
03075
03076 stmt = ffestd_stmt_new_ (FFESTD_stmtidR904_);
03077 ffestd_stmt_append_ (stmt);
03078 ffestd_subr_line_save_ (stmt);
03079 stmt->u.R904.pool = ffesta_output_pool;
03080 stmt->u.R904.params = ffestd_subr_copy_open_ ();
03081 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
03082 }
03083
03084
03085
03086
03087
03088
03089
03090 void
03091 ffestd_R907 ()
03092 {
03093 ffestdStmt_ stmt;
03094
03095 ffestd_check_simple_ ();
03096
03097 stmt = ffestd_stmt_new_ (FFESTD_stmtidR907_);
03098 ffestd_stmt_append_ (stmt);
03099 ffestd_subr_line_save_ (stmt);
03100 stmt->u.R907.pool = ffesta_output_pool;
03101 stmt->u.R907.params = ffestd_subr_copy_close_ ();
03102 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
03103 }
03104
03105
03106
03107
03108
03109
03110
03111
03112 void
03113 ffestd_R909_start (bool only_format, ffestvUnit unit,
03114 ffestvFormat format, bool rec, bool key)
03115 {
03116 ffestdStmt_ stmt;
03117
03118 ffestd_check_start_ ();
03119
03120 #define specified(something) \
03121 (ffestp_file.read.read_spec[something].kw_or_val_present)
03122
03123
03124 if (specified (FFESTP_readixADVANCE)
03125 || specified (FFESTP_readixEOR)
03126 || specified (FFESTP_readixKEYEQ)
03127 || specified (FFESTP_readixKEYGE)
03128 || specified (FFESTP_readixKEYGT)
03129 || specified (FFESTP_readixKEYID)
03130 || specified (FFESTP_readixNULLS)
03131 || specified (FFESTP_readixSIZE))
03132 {
03133 ffebad_start (FFEBAD_READ_UNSUPPORTED);
03134 ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
03135 ffelex_token_where_column (ffesta_tokens[0]));
03136 ffebad_finish ();
03137 }
03138
03139 #undef specified
03140
03141 stmt = ffestd_stmt_new_ (FFESTD_stmtidR909_);
03142 ffestd_stmt_append_ (stmt);
03143 ffestd_subr_line_save_ (stmt);
03144 stmt->u.R909.pool = ffesta_output_pool;
03145 stmt->u.R909.params = ffestd_subr_copy_read_ ();
03146 stmt->u.R909.only_format = only_format;
03147 stmt->u.R909.unit = unit;
03148 stmt->u.R909.format = format;
03149 stmt->u.R909.rec = rec;
03150 stmt->u.R909.key = key;
03151 stmt->u.R909.list = NULL;
03152 ffestd_expr_list_ = &stmt->u.R909.list;
03153 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
03154 }
03155
03156
03157
03158
03159
03160
03161
03162 void
03163 ffestd_R909_item (ffebld expr, ffelexToken expr_token)
03164 {
03165 ffestdExprItem_ item;
03166
03167 ffestd_check_item_ ();
03168
03169 item = (ffestdExprItem_) malloc_new_kp (ffesta_output_pool,
03170 "ffestdExprItem_", sizeof (*item));
03171
03172 item->next = NULL;
03173 item->expr = expr;
03174 item->token = ffelex_token_use (expr_token);
03175 *ffestd_expr_list_ = item;
03176 ffestd_expr_list_ = &item->next;
03177 }
03178
03179
03180
03181
03182
03183
03184
03185 void
03186 ffestd_R909_finish ()
03187 {
03188 ffestd_check_finish_ ();
03189 }
03190
03191
03192
03193
03194
03195
03196
03197
03198 void
03199 ffestd_R910_start (ffestvUnit unit, ffestvFormat format, bool rec)
03200 {
03201 ffestdStmt_ stmt;
03202
03203 ffestd_check_start_ ();
03204
03205 #define specified(something) \
03206 (ffestp_file.write.write_spec[something].kw_or_val_present)
03207
03208
03209 if (specified (FFESTP_writeixADVANCE)
03210 || specified (FFESTP_writeixEOR))
03211 {
03212 ffebad_start (FFEBAD_WRITE_UNSUPPORTED);
03213 ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
03214 ffelex_token_where_column (ffesta_tokens[0]));
03215 ffebad_finish ();
03216 }
03217
03218 #undef specified
03219
03220 stmt = ffestd_stmt_new_ (FFESTD_stmtidR910_);
03221 ffestd_stmt_append_ (stmt);
03222 ffestd_subr_line_save_ (stmt);
03223 stmt->u.R910.pool = ffesta_output_pool;
03224 stmt->u.R910.params = ffestd_subr_copy_write_ ();
03225 stmt->u.R910.unit = unit;
03226 stmt->u.R910.format = format;
03227 stmt->u.R910.rec = rec;
03228 stmt->u.R910.list = NULL;
03229 ffestd_expr_list_ = &stmt->u.R910.list;
03230 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
03231 }
03232
03233
03234
03235
03236
03237
03238
03239 void
03240 ffestd_R910_item (ffebld expr, ffelexToken expr_token)
03241 {
03242 ffestdExprItem_ item;
03243
03244 ffestd_check_item_ ();
03245
03246 item = (ffestdExprItem_) malloc_new_kp (ffesta_output_pool,
03247 "ffestdExprItem_", sizeof (*item));
03248
03249 item->next = NULL;
03250 item->expr = expr;
03251 item->token = ffelex_token_use (expr_token);
03252 *ffestd_expr_list_ = item;
03253 ffestd_expr_list_ = &item->next;
03254 }
03255
03256
03257
03258
03259
03260
03261
03262 void
03263 ffestd_R910_finish ()
03264 {
03265 ffestd_check_finish_ ();
03266 }
03267
03268
03269
03270
03271
03272
03273
03274
03275 void
03276 ffestd_R911_start (ffestvFormat format)
03277 {
03278 ffestdStmt_ stmt;
03279
03280 ffestd_check_start_ ();
03281
03282 stmt = ffestd_stmt_new_ (FFESTD_stmtidR911_);
03283 ffestd_stmt_append_ (stmt);
03284 ffestd_subr_line_save_ (stmt);
03285 stmt->u.R911.pool = ffesta_output_pool;
03286 stmt->u.R911.params = ffestd_subr_copy_print_ ();
03287 stmt->u.R911.format = format;
03288 stmt->u.R911.list = NULL;
03289 ffestd_expr_list_ = &stmt->u.R911.list;
03290 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
03291 }
03292
03293
03294
03295
03296
03297
03298
03299 void
03300 ffestd_R911_item (ffebld expr, ffelexToken expr_token)
03301 {
03302 ffestdExprItem_ item;
03303
03304 ffestd_check_item_ ();
03305
03306 item = (ffestdExprItem_) malloc_new_kp (ffesta_output_pool,
03307 "ffestdExprItem_", sizeof (*item));
03308
03309 item->next = NULL;
03310 item->expr = expr;
03311 item->token = ffelex_token_use (expr_token);
03312 *ffestd_expr_list_ = item;
03313 ffestd_expr_list_ = &item->next;
03314 }
03315
03316
03317
03318
03319
03320
03321
03322 void
03323 ffestd_R911_finish ()
03324 {
03325 ffestd_check_finish_ ();
03326 }
03327
03328
03329
03330
03331
03332
03333
03334 void
03335 ffestd_R919 ()
03336 {
03337 ffestdStmt_ stmt;
03338
03339 ffestd_check_simple_ ();
03340
03341 stmt = ffestd_stmt_new_ (FFESTD_stmtidR919_);
03342 ffestd_stmt_append_ (stmt);
03343 ffestd_subr_line_save_ (stmt);
03344 stmt->u.R919.pool = ffesta_output_pool;
03345 stmt->u.R919.params = ffestd_subr_copy_beru_ ();
03346 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
03347 }
03348
03349
03350
03351
03352
03353
03354
03355 void
03356 ffestd_R920 ()
03357 {
03358 ffestdStmt_ stmt;
03359
03360 ffestd_check_simple_ ();
03361
03362 stmt = ffestd_stmt_new_ (FFESTD_stmtidR920_);
03363 ffestd_stmt_append_ (stmt);
03364 ffestd_subr_line_save_ (stmt);
03365 stmt->u.R920.pool = ffesta_output_pool;
03366 stmt->u.R920.params = ffestd_subr_copy_beru_ ();
03367 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
03368 }
03369
03370
03371
03372
03373
03374
03375
03376 void
03377 ffestd_R921 ()
03378 {
03379 ffestdStmt_ stmt;
03380
03381 ffestd_check_simple_ ();
03382
03383 stmt = ffestd_stmt_new_ (FFESTD_stmtidR921_);
03384 ffestd_stmt_append_ (stmt);
03385 ffestd_subr_line_save_ (stmt);
03386 stmt->u.R921.pool = ffesta_output_pool;
03387 stmt->u.R921.params = ffestd_subr_copy_beru_ ();
03388 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
03389 }
03390
03391
03392
03393
03394
03395
03396
03397 void
03398 ffestd_R923A (bool by_file)
03399 {
03400 ffestdStmt_ stmt;
03401
03402 ffestd_check_simple_ ();
03403
03404 #define specified(something) \
03405 (ffestp_file.inquire.inquire_spec[something].kw_or_val_present)
03406
03407
03408 if (specified (FFESTP_inquireixACTION)
03409 || specified (FFESTP_inquireixCARRIAGECONTROL)
03410 || specified (FFESTP_inquireixDEFAULTFILE)
03411 || specified (FFESTP_inquireixDELIM)
03412 || specified (FFESTP_inquireixKEYED)
03413 || specified (FFESTP_inquireixORGANIZATION)
03414 || specified (FFESTP_inquireixPAD)
03415 || specified (FFESTP_inquireixPOSITION)
03416 || specified (FFESTP_inquireixREAD)
03417 || specified (FFESTP_inquireixREADWRITE)
03418 || specified (FFESTP_inquireixRECORDTYPE)
03419 || specified (FFESTP_inquireixWRITE))
03420 {
03421 ffebad_start (FFEBAD_INQUIRE_UNSUPPORTED);
03422 ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]),
03423 ffelex_token_where_column (ffesta_tokens[0]));
03424 ffebad_finish ();
03425 }
03426
03427 #undef specified
03428
03429 stmt = ffestd_stmt_new_ (FFESTD_stmtidR923A_);
03430 ffestd_stmt_append_ (stmt);
03431 ffestd_subr_line_save_ (stmt);
03432 stmt->u.R923A.pool = ffesta_output_pool;
03433 stmt->u.R923A.params = ffestd_subr_copy_inquire_ ();
03434 stmt->u.R923A.by_file = by_file;
03435 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
03436 }
03437
03438
03439
03440
03441
03442
03443
03444
03445 void
03446 ffestd_R923B_start ()
03447 {
03448 ffestdStmt_ stmt;
03449
03450 ffestd_check_start_ ();
03451
03452 stmt = ffestd_stmt_new_ (FFESTD_stmtidR923B_);
03453 ffestd_stmt_append_ (stmt);
03454 ffestd_subr_line_save_ (stmt);
03455 stmt->u.R923B.pool = ffesta_output_pool;
03456 stmt->u.R923B.params = ffestd_subr_copy_inquire_ ();
03457 stmt->u.R923B.list = NULL;
03458 ffestd_expr_list_ = &stmt->u.R923B.list;
03459 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
03460 }
03461
03462
03463
03464
03465
03466
03467
03468 void
03469 ffestd_R923B_item (ffebld expr)
03470 {
03471 ffestdExprItem_ item;
03472
03473 ffestd_check_item_ ();
03474
03475 item = (ffestdExprItem_) malloc_new_kp (ffesta_output_pool,
03476 "ffestdExprItem_", sizeof (*item));
03477
03478 item->next = NULL;
03479 item->expr = expr;
03480 *ffestd_expr_list_ = item;
03481 ffestd_expr_list_ = &item->next;
03482 }
03483
03484
03485
03486
03487
03488
03489
03490 void
03491 ffestd_R923B_finish ()
03492 {
03493 ffestd_check_finish_ ();
03494 }
03495
03496
03497
03498
03499
03500 void
03501 ffestd_R1001 (ffesttFormatList f)
03502 {
03503 ffestsHolder str;
03504 ffests s = &str;
03505 ffestdStmt_ stmt;
03506
03507 ffestd_check_simple_ ();
03508
03509 if (ffestd_label_formatdef_ == NULL)
03510 return;
03511
03512 ffests_new (s, malloc_pool_image (), 80);
03513 ffests_putc (s, '(');
03514 ffestd_R1001dump_ (s, f);
03515 ffests_putc (s, ')');
03516
03517 stmt = ffestd_stmt_new_ (FFESTD_stmtidR1001_);
03518 ffestd_stmt_append_ (stmt);
03519 stmt->u.R1001.str = str;
03520
03521 ffestd_label_formatdef_ = NULL;
03522 }
03523
03524
03525
03526
03527
03528
03529
03530
03531 static void
03532 ffestd_R1001dump_ (ffests s, ffesttFormatList list)
03533 {
03534 ffesttFormatList next;
03535
03536 for (next = list->next; next != list; next = next->next)
03537 {
03538 if (next != list->next)
03539 ffests_putc (s, ',');
03540 switch (next->type)
03541 {
03542 case FFESTP_formattypeI:
03543 ffestd_R1001dump_1005_3_ (s, next, "I");
03544 break;
03545
03546 case FFESTP_formattypeB:
03547 ffestd_R1001error_ (next);
03548 break;
03549
03550 case FFESTP_formattypeO:
03551 ffestd_R1001dump_1005_3_ (s, next, "O");
03552 break;
03553
03554 case FFESTP_formattypeZ:
03555 ffestd_R1001dump_1005_3_ (s, next, "Z");
03556 break;
03557
03558 case FFESTP_formattypeF:
03559 ffestd_R1001dump_1005_4_ (s, next, "F");
03560 break;
03561
03562 case FFESTP_formattypeE:
03563 ffestd_R1001dump_1005_5_ (s, next, "E");
03564 break;
03565
03566 case FFESTP_formattypeEN:
03567 ffestd_R1001error_ (next);
03568 break;
03569
03570 case FFESTP_formattypeG:
03571 ffestd_R1001dump_1005_5_ (s, next, "G");
03572 break;
03573
03574 case FFESTP_formattypeL:
03575 ffestd_R1001dump_1005_2_ (s, next, "L");
03576 break;
03577
03578 case FFESTP_formattypeA:
03579 ffestd_R1001dump_1005_1_ (s, next, "A");
03580 break;
03581
03582 case FFESTP_formattypeD:
03583 ffestd_R1001dump_1005_4_ (s, next, "D");
03584 break;
03585
03586 case FFESTP_formattypeQ:
03587 ffestd_R1001error_ (next);
03588 break;
03589
03590 case FFESTP_formattypeDOLLAR:
03591 ffestd_R1001dump_1010_1_ (s, next, "$");
03592 break;
03593
03594 case FFESTP_formattypeP:
03595 ffestd_R1001dump_1010_4_ (s, next, "P");
03596 break;
03597
03598 case FFESTP_formattypeT:
03599 ffestd_R1001dump_1010_5_ (s, next, "T");
03600 break;
03601
03602 case FFESTP_formattypeTL:
03603 ffestd_R1001dump_1010_5_ (s, next, "TL");
03604 break;
03605
03606 case FFESTP_formattypeTR:
03607 ffestd_R1001dump_1010_5_ (s, next, "TR");
03608 break;
03609
03610 case FFESTP_formattypeX:
03611 ffestd_R1001dump_1010_3_ (s, next, "X");
03612 break;
03613
03614 case FFESTP_formattypeS:
03615 ffestd_R1001dump_1010_1_ (s, next, "S");
03616 break;
03617
03618 case FFESTP_formattypeSP:
03619 ffestd_R1001dump_1010_1_ (s, next, "SP");
03620 break;
03621
03622 case FFESTP_formattypeSS:
03623 ffestd_R1001dump_1010_1_ (s, next, "SS");
03624 break;
03625
03626 case FFESTP_formattypeBN:
03627 ffestd_R1001dump_1010_1_ (s, next, "BN");
03628 break;
03629
03630 case FFESTP_formattypeBZ:
03631 ffestd_R1001dump_1010_1_ (s, next, "BZ");
03632 break;
03633
03634 case FFESTP_formattypeSLASH:
03635 ffestd_R1001dump_1010_2_ (s, next, "/");
03636 break;
03637
03638 case FFESTP_formattypeCOLON:
03639 ffestd_R1001dump_1010_1_ (s, next, ":");
03640 break;
03641
03642 case FFESTP_formattypeR1016:
03643 switch (ffelex_token_type (next->t))
03644 {
03645 case FFELEX_typeCHARACTER:
03646 {
03647 char *p = ffelex_token_text (next->t);
03648 ffeTokenLength i = ffelex_token_length (next->t);
03649
03650 ffests_putc (s, '\002');
03651 while (i-- != 0)
03652 {
03653 if (*p == '\002')
03654 ffests_putc (s, '\002');
03655 ffests_putc (s, *p);
03656 ++p;
03657 }
03658 ffests_putc (s, '\002');
03659 }
03660 break;
03661
03662 case FFELEX_typeHOLLERITH:
03663 {
03664 char *p = ffelex_token_text (next->t);
03665 ffeTokenLength i = ffelex_token_length (next->t);
03666
03667 ffests_printf (s, "%" ffeTokenLength_f "uH", i);
03668 while (i-- != 0)
03669 {
03670 ffests_putc (s, *p);
03671 ++p;
03672 }
03673 }
03674 break;
03675
03676 default:
03677 assert (FALSE);
03678 }
03679 break;
03680
03681 case FFESTP_formattypeFORMAT:
03682 if (next->u.R1003D.R1004.present)
03683 {
03684 if (next->u.R1003D.R1004.rtexpr)
03685 ffestd_R1001rtexpr_ (s, next, next->u.R1003D.R1004.u.expr);
03686 else
03687 ffests_printf (s, "%lu", next->u.R1003D.R1004.u.unsigned_val);
03688 }
03689
03690 ffests_putc (s, '(');
03691 ffestd_R1001dump_ (s, next->u.R1003D.format);
03692 ffests_putc (s, ')');
03693 break;
03694
03695 default:
03696 assert (FALSE);
03697 }
03698 }
03699 }
03700
03701
03702
03703
03704
03705
03706
03707
03708 static void
03709 ffestd_R1001dump_1005_1_ (ffests s, ffesttFormatList f, const char *string)
03710 {
03711 assert (!f->u.R1005.R1007_or_R1008.present);
03712 assert (!f->u.R1005.R1009.present);
03713
03714 if (f->u.R1005.R1004.present)
03715 {
03716 if (f->u.R1005.R1004.rtexpr)
03717 ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1004.u.expr);
03718 else
03719 ffests_printf (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
03720 }
03721
03722 ffests_puts (s, string);
03723
03724 if (f->u.R1005.R1006.present)
03725 {
03726 if (f->u.R1005.R1006.rtexpr)
03727 ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1006.u.expr);
03728 else
03729 ffests_printf (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
03730 }
03731 }
03732
03733
03734
03735
03736
03737
03738
03739
03740 static void
03741 ffestd_R1001dump_1005_2_ (ffests s, ffesttFormatList f, const char *string)
03742 {
03743 assert (!f->u.R1005.R1007_or_R1008.present);
03744 assert (!f->u.R1005.R1009.present);
03745 assert (f->u.R1005.R1006.present);
03746
03747 if (f->u.R1005.R1004.present)
03748 {
03749 if (f->u.R1005.R1004.rtexpr)
03750 ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1004.u.expr);
03751 else
03752 ffests_printf (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
03753 }
03754
03755 ffests_puts (s, string);
03756
03757 if (f->u.R1005.R1006.rtexpr)
03758 ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1006.u.expr);
03759 else
03760 ffests_printf (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
03761 }
03762
03763
03764
03765
03766
03767
03768
03769
03770 static void
03771 ffestd_R1001dump_1005_3_ (ffests s, ffesttFormatList f, const char *string)
03772 {
03773 assert (!f->u.R1005.R1009.present);
03774 assert (f->u.R1005.R1006.present);
03775
03776 if (f->u.R1005.R1004.present)
03777 {
03778 if (f->u.R1005.R1004.rtexpr)
03779 ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1004.u.expr);
03780 else
03781 ffests_printf (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
03782 }
03783
03784 ffests_puts (s, string);
03785
03786 if (f->u.R1005.R1006.rtexpr)
03787 ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1006.u.expr);
03788 else
03789 ffests_printf (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
03790
03791 if (f->u.R1005.R1007_or_R1008.present)
03792 {
03793 ffests_putc (s, '.');
03794 if (f->u.R1005.R1007_or_R1008.rtexpr)
03795 ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1007_or_R1008.u.expr);
03796 else
03797 ffests_printf (s, "%lu", f->u.R1005.R1007_or_R1008.u.unsigned_val);
03798 }
03799 }
03800
03801
03802
03803
03804
03805
03806
03807
03808 static void
03809 ffestd_R1001dump_1005_4_ (ffests s, ffesttFormatList f, const char *string)
03810 {
03811 assert (!f->u.R1005.R1009.present);
03812 assert (f->u.R1005.R1007_or_R1008.present);
03813 assert (f->u.R1005.R1006.present);
03814
03815 if (f->u.R1005.R1004.present)
03816 {
03817 if (f->u.R1005.R1004.rtexpr)
03818 ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1004.u.expr);
03819 else
03820 ffests_printf (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
03821 }
03822
03823 ffests_puts (s, string);
03824
03825 if (f->u.R1005.R1006.rtexpr)
03826 ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1006.u.expr);
03827 else
03828 ffests_printf (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
03829
03830 ffests_putc (s, '.');
03831 if (f->u.R1005.R1007_or_R1008.rtexpr)
03832 ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1007_or_R1008.u.expr);
03833 else
03834 ffests_printf (s, "%lu", f->u.R1005.R1007_or_R1008.u.unsigned_val);
03835 }
03836
03837
03838
03839
03840
03841
03842
03843
03844 static void
03845 ffestd_R1001dump_1005_5_ (ffests s, ffesttFormatList f, const char *string)
03846 {
03847 assert (f->u.R1005.R1007_or_R1008.present);
03848 assert (f->u.R1005.R1006.present);
03849
03850 if (f->u.R1005.R1004.present)
03851 {
03852 if (f->u.R1005.R1004.rtexpr)
03853 ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1004.u.expr);
03854 else
03855 ffests_printf (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
03856 }
03857
03858 ffests_puts (s, string);
03859
03860 if (f->u.R1005.R1006.rtexpr)
03861 ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1006.u.expr);
03862 else
03863 ffests_printf (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
03864
03865 ffests_putc (s, '.');
03866 if (f->u.R1005.R1007_or_R1008.rtexpr)
03867 ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1007_or_R1008.u.expr);
03868 else
03869 ffests_printf (s, "%lu", f->u.R1005.R1007_or_R1008.u.unsigned_val);
03870
03871 if (f->u.R1005.R1009.present)
03872 {
03873 ffests_putc (s, 'E');
03874 if (f->u.R1005.R1009.rtexpr)
03875 ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1009.u.expr);
03876 else
03877 ffests_printf (s, "%lu", f->u.R1005.R1009.u.unsigned_val);
03878 }
03879 }
03880
03881
03882
03883
03884
03885
03886
03887
03888 static void
03889 ffestd_R1001dump_1010_1_ (ffests s, ffesttFormatList f, const char *string)
03890 {
03891 assert (!f->u.R1010.val.present);
03892
03893 ffests_puts (s, string);
03894 }
03895
03896
03897
03898
03899
03900
03901
03902
03903 static void
03904 ffestd_R1001dump_1010_2_ (ffests s, ffesttFormatList f, const char *string)
03905 {
03906 if (f->u.R1010.val.present)
03907 {
03908 if (f->u.R1010.val.rtexpr)
03909 ffestd_R1001rtexpr_ (s, f, f->u.R1010.val.u.expr);
03910 else
03911 ffests_printf (s, "%lu", f->u.R1010.val.u.unsigned_val);
03912 }
03913
03914 ffests_puts (s, string);
03915 }
03916
03917
03918
03919
03920
03921
03922
03923
03924 static void
03925 ffestd_R1001dump_1010_3_ (ffests s, ffesttFormatList f, const char *string)
03926 {
03927 assert (f->u.R1010.val.present);
03928
03929 if (f->u.R1010.val.rtexpr)
03930 ffestd_R1001rtexpr_ (s, f, f->u.R1010.val.u.expr);
03931 else
03932 ffests_printf (s, "%lu", f->u.R1010.val.u.unsigned_val);
03933
03934 ffests_puts (s, string);
03935 }
03936
03937
03938
03939
03940
03941
03942
03943
03944 static void
03945 ffestd_R1001dump_1010_4_ (ffests s, ffesttFormatList f, const char *string)
03946 {
03947 assert (f->u.R1010.val.present);
03948
03949 if (f->u.R1010.val.rtexpr)
03950 ffestd_R1001rtexpr_ (s, f, f->u.R1010.val.u.expr);
03951 else
03952 ffests_printf (s, "%ld", f->u.R1010.val.u.signed_val);
03953
03954 ffests_puts (s, string);
03955 }
03956
03957
03958
03959
03960
03961
03962
03963
03964 static void
03965 ffestd_R1001dump_1010_5_ (ffests s, ffesttFormatList f, const char *string)
03966 {
03967 assert (f->u.R1010.val.present);
03968
03969 ffests_puts (s, string);
03970
03971 if (f->u.R1010.val.rtexpr)
03972 ffestd_R1001rtexpr_ (s, f, f->u.R1010.val.u.expr);
03973 else
03974 ffests_printf (s, "%lu", f->u.R1010.val.u.unsigned_val);
03975 }
03976
03977
03978
03979
03980
03981
03982
03983
03984 static void
03985 ffestd_R1001error_ (ffesttFormatList f)
03986 {
03987 ffebad_start (FFEBAD_FORMAT_UNSUPPORTED);
03988 ffebad_here (0, ffelex_token_where_line (f->t), ffelex_token_where_column (f->t));
03989 ffebad_finish ();
03990 }
03991
03992 static void
03993 ffestd_R1001rtexpr_ (ffests s, ffesttFormatList f, ffebld expr)
03994 {
03995 if ((expr == NULL)
03996 || (ffebld_op (expr) != FFEBLD_opCONTER)
03997 || (ffeinfo_basictype (ffebld_info (expr)) != FFEINFO_basictypeINTEGER)
03998 || (ffeinfo_kindtype (ffebld_info (expr)) == FFEINFO_kindtypeINTEGER4))
03999 {
04000 ffebad_start (FFEBAD_FORMAT_VARIABLE);
04001 ffebad_here (0, ffelex_token_where_line (f->t), ffelex_token_where_column (f->t));
04002 ffebad_finish ();
04003 }
04004 else
04005 {
04006 int val;
04007
04008 switch (ffeinfo_kindtype (ffebld_info (expr)))
04009 {
04010 #if FFETARGET_okINTEGER1
04011 case FFEINFO_kindtypeINTEGER1:
04012 val = ffebld_constant_integer1 (ffebld_conter (expr));
04013 break;
04014 #endif
04015
04016 #if FFETARGET_okINTEGER2
04017 case FFEINFO_kindtypeINTEGER2:
04018 val = ffebld_constant_integer2 (ffebld_conter (expr));
04019 break;
04020 #endif
04021
04022 #if FFETARGET_okINTEGER3
04023 case FFEINFO_kindtypeINTEGER3:
04024 val = ffebld_constant_integer3 (ffebld_conter (expr));
04025 break;
04026 #endif
04027
04028 default:
04029 assert ("bad INTEGER constant kind type" == NULL);
04030
04031 case FFEINFO_kindtypeANY:
04032 return;
04033 }
04034 ffests_printf (s, "%ld", (long) val);
04035 }
04036 }
04037
04038
04039
04040
04041
04042
04043
04044
04045 void
04046 ffestd_R1102 (ffesymbol s, ffelexToken name UNUSED)
04047 {
04048 ffestd_check_simple_ ();
04049
04050 assert (ffestd_block_level_ == 0);
04051 ffestd_is_reachable_ = TRUE;
04052
04053 ffecom_notify_primary_entry (s);
04054 ffe_set_is_mainprog (TRUE);
04055 ffe_set_is_saveall (TRUE);
04056
04057 ffestw_set_sym (ffestw_stack_top (), s);
04058 }
04059
04060
04061
04062
04063
04064 void
04065 ffestd_R1103 (bool ok UNUSED)
04066 {
04067 ffestdStmt_ stmt;
04068
04069 assert (ffestd_block_level_ == 0);
04070
04071 if (FFESTD_IS_END_OPTIMIZED_ && ffestd_is_reachable_)
04072 ffestd_R842 (NULL);
04073
04074 if (ffestw_state (ffestw_stack_top ()) != FFESTV_statePROGRAM5)
04075 ffestd_subr_labels_ (FALSE);
04076
04077 stmt = ffestd_stmt_new_ (FFESTD_stmtidR1103_);
04078 ffestd_stmt_append_ (stmt);
04079 }
04080
04081
04082
04083
04084
04085
04086
04087
04088 #if FFESTR_F90
04089 void
04090 ffestd_R1105 (ffelexToken name)
04091 {
04092 assert (ffestd_block_level_ == 0);
04093
04094 ffestd_check_simple_ ();
04095
04096 ffestd_subr_f90_ ();
04097 return;
04098
04099 #ifdef FFESTD_F90
04100 fprintf (dmpout, "* MODULE %s\n", ffelex_token_text (name));
04101 #endif
04102 }
04103
04104
04105
04106
04107
04108 void
04109 ffestd_R1106 (bool ok)
04110 {
04111 assert (ffestd_block_level_ == 0);
04112
04113
04114
04115 if (ffestw_state (ffestw_stack_top ()) != FFESTV_stateMODULE5)
04116 ffestd_subr_labels_ (TRUE);
04117
04118 return;
04119
04120 #ifdef FFESTD_F90
04121 fprintf (dmpout, "< END_MODULE %s\n",
04122 ffelex_token_text (ffestw_name (ffestw_stack_top ())));
04123 #endif
04124 }
04125
04126
04127
04128
04129
04130
04131
04132 void
04133 ffestd_R1107_start (ffelexToken name, bool only)
04134 {
04135 ffestd_check_start_ ();
04136
04137 ffestd_subr_f90_ ();
04138 return;
04139
04140 #ifdef FFESTD_F90
04141 fprintf (dmpout, "* USE %s,", ffelex_token_text (name));
04142
04143 if (only)
04144 fputs ("only: ", dmpout);
04145 #endif
04146 }
04147
04148
04149
04150
04151
04152
04153
04154
04155 void
04156 ffestd_R1107_item (ffelexToken local, ffelexToken use)
04157 {
04158 ffestd_check_item_ ();
04159 assert (use != NULL);
04160
04161 return;
04162
04163 #ifdef FFESTD_F90
04164 if (local != NULL)
04165 fprintf (dmpout, "%s=>", ffelex_token_text (local));
04166 fprintf (dmpout, "%s,", ffelex_token_text (use));
04167 #endif
04168 }
04169
04170
04171
04172
04173
04174
04175
04176 void
04177 ffestd_R1107_finish ()
04178 {
04179 ffestd_check_finish_ ();
04180
04181 return;
04182
04183 #ifdef FFESTD_F90
04184 fputc ('\n', dmpout);
04185 #endif
04186 }
04187
04188 #endif
04189
04190
04191
04192
04193
04194
04195
04196
04197 void
04198 ffestd_R1111 (ffesymbol s, ffelexToken name UNUSED)
04199 {
04200 assert (ffestd_block_level_ == 0);
04201 ffestd_is_reachable_ = TRUE;
04202
04203 ffestd_check_simple_ ();
04204
04205 ffecom_notify_primary_entry (s);
04206 ffestw_set_sym (ffestw_stack_top (), s);
04207 }
04208
04209
04210
04211
04212
04213 void
04214 ffestd_R1112 (bool ok UNUSED)
04215 {
04216 ffestdStmt_ stmt;
04217
04218 assert (ffestd_block_level_ == 0);
04219
04220
04221
04222 if (ffestw_state (ffestw_stack_top ()) != FFESTV_stateBLOCKDATA5)
04223 ffestd_subr_labels_ (TRUE);
04224
04225 stmt = ffestd_stmt_new_ (FFESTD_stmtidR1112_);
04226 ffestd_stmt_append_ (stmt);
04227 }
04228
04229
04230
04231
04232
04233
04234
04235
04236
04237
04238
04239
04240 #if FFESTR_F90
04241 void
04242 ffestd_R1202 (ffestpDefinedOperator operator, ffelexToken name)
04243 {
04244 ffestd_check_simple_ ();
04245
04246 ffestd_subr_f90_ ();
04247 return;
04248
04249 #ifdef FFESTD_F90
04250 switch (operator)
04251 {
04252 case FFESTP_definedoperatorNone:
04253 if (name == NULL)
04254 fputs ("* INTERFACE_unnamed\n", dmpout);
04255 else
04256 fprintf (dmpout, "* INTERFACE %s\n", ffelex_token_text (name));
04257 break;
04258
04259 case FFESTP_definedoperatorOPERATOR:
04260 fprintf (dmpout, "* INTERFACE_OPERATOR (.%s.)\n", ffelex_token_text (name));
04261 break;
04262
04263 case FFESTP_definedoperatorASSIGNMENT:
04264 fputs ("* INTERFACE_ASSIGNMENT (=)\n", dmpout);
04265 break;
04266
04267 case FFESTP_definedoperatorPOWER:
04268 fputs ("* INTERFACE_OPERATOR (**)\n", dmpout);
04269 break;
04270
04271 case FFESTP_definedoperatorMULT:
04272 fputs ("* INTERFACE_OPERATOR (*)\n", dmpout);
04273 break;
04274
04275 case FFESTP_definedoperatorADD:
04276 fputs ("* INTERFACE_OPERATOR (+)\n", dmpout);
04277 break;
04278
04279 case FFESTP_definedoperatorCONCAT:
04280 fputs ("* INTERFACE_OPERATOR (//)\n", dmpout);
04281 break;
04282
04283 case FFESTP_definedoperatorDIVIDE:
04284 fputs ("* INTERFACE_OPERATOR (/)\n", dmpout);
04285 break;
04286
04287 case FFESTP_definedoperatorSUBTRACT:
04288 fputs ("* INTERFACE_OPERATOR (-)\n", dmpout);
04289 break;
04290
04291 case FFESTP_definedoperatorNOT:
04292 fputs ("* INTERFACE_OPERATOR (.not.)\n", dmpout);
04293 break;
04294
04295 case FFESTP_definedoperatorAND:
04296 fputs ("* INTERFACE_OPERATOR (.and.)\n", dmpout);
04297 break;
04298
04299 case FFESTP_definedoperatorOR:
04300 fputs ("* INTERFACE_OPERATOR (.or.)\n", dmpout);
04301 break;
04302
04303 case FFESTP_definedoperatorEQV:
04304 fputs ("* INTERFACE_OPERATOR (.eqv.)\n", dmpout);
04305 break;
04306
04307 case FFESTP_definedoperatorNEQV:
04308 fputs ("* INTERFACE_OPERATOR (.neqv.)\n", dmpout);
04309 break;
04310
04311 case FFESTP_definedoperatorEQ:
04312 fputs ("* INTERFACE_OPERATOR (==)\n", dmpout);
04313 break;
04314
04315 case FFESTP_definedoperatorNE:
04316 fputs ("* INTERFACE_OPERATOR (/=)\n", dmpout);
04317 break;
04318
04319 case FFESTP_definedoperatorLT:
04320 fputs ("* INTERFACE_OPERATOR (<)\n", dmpout);
04321 break;
04322
04323 case FFESTP_definedoperatorLE:
04324 fputs ("* INTERFACE_OPERATOR (<=)\n", dmpout);
04325 break;
04326
04327 case FFESTP_definedoperatorGT:
04328 fputs ("* INTERFACE_OPERATOR (>)\n", dmpout);
04329 break;
04330
04331 case FFESTP_definedoperatorGE:
04332 fputs ("* INTERFACE_OPERATOR (>=)\n", dmpout);
04333 break;
04334
04335 default:
04336 assert (FALSE);
04337 break;
04338 }
04339 #endif
04340 }
04341
04342
04343
04344
04345
04346 void
04347 ffestd_R1203 (bool ok)
04348 {
04349 return;
04350
04351 #ifdef FFESTD_F90
04352 fputs ("* END_INTERFACE\n", dmpout);
04353 #endif
04354 }
04355
04356
04357
04358
04359
04360
04361
04362
04363 void
04364 ffestd_R1205_start ()
04365 {
04366 ffestd_check_start_ ();
04367
04368 return;
04369
04370 #ifdef FFESTD_F90
04371 fputs ("* MODULE_PROCEDURE ", dmpout);
04372 #endif
04373 }
04374
04375
04376
04377
04378
04379
04380
04381 void
04382 ffestd_R1205_item (ffelexToken name)
04383 {
04384 ffestd_check_item_ ();
04385 assert (name != NULL);
04386
04387 return;
04388
04389 #ifdef FFESTD_F90
04390 fprintf (dmpout, "%s,", ffelex_token_text (name));
04391 #endif
04392 }
04393
04394
04395
04396
04397
04398
04399
04400 void
04401 ffestd_R1205_finish ()
04402 {
04403 ffestd_check_finish_ ();
04404
04405 return;
04406
04407 #ifdef FFESTD_F90
04408 fputc ('\n', dmpout);
04409 #endif
04410 }
04411
04412 #endif
04413
04414
04415
04416
04417
04418
04419 void
04420 ffestd_R1207_start ()
04421 {
04422 ffestd_check_start_ ();
04423 }
04424
04425
04426
04427
04428
04429
04430
04431 void
04432 ffestd_R1207_item (ffelexToken name)
04433 {
04434 ffestd_check_item_ ();
04435 assert (name != NULL);
04436 }
04437
04438
04439
04440
04441
04442
04443
04444 void
04445 ffestd_R1207_finish ()
04446 {
04447 ffestd_check_finish_ ();
04448 }
04449
04450
04451
04452
04453
04454
04455
04456 void
04457 ffestd_R1208_start ()
04458 {
04459 ffestd_check_start_ ();
04460 }
04461
04462
04463
04464
04465
04466
04467
04468 void
04469 ffestd_R1208_item (ffelexToken name)
04470 {
04471 ffestd_check_item_ ();
04472 assert (name != NULL);
04473 }
04474
04475
04476
04477
04478
04479
04480
04481 void
04482 ffestd_R1208_finish ()
04483 {
04484 ffestd_check_finish_ ();
04485 }
04486
04487
04488
04489
04490
04491
04492
04493 void
04494 ffestd_R1212 (ffebld expr)
04495 {
04496 ffestdStmt_ stmt;
04497
04498 ffestd_check_simple_ ();
04499
04500 stmt = ffestd_stmt_new_ (FFESTD_stmtidR1212_);
04501 ffestd_stmt_append_ (stmt);
04502 ffestd_subr_line_save_ (stmt);
04503 stmt->u.R1212.pool = ffesta_output_pool;
04504 stmt->u.R1212.expr = expr;
04505 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
04506 }
04507
04508
04509
04510
04511
04512
04513
04514 #if FFESTR_F90
04515 void
04516 ffestd_R1213 (ffebld dest, ffebld source)
04517 {
04518 ffestd_check_simple_ ();
04519
04520 ffestd_subr_f90_ ();
04521 }
04522
04523 #endif
04524
04525
04526
04527
04528
04529
04530
04531
04532
04533
04534
04535 void
04536 ffestd_R1219 (ffesymbol s, ffelexToken funcname UNUSED,
04537 ffesttTokenList args UNUSED, ffestpType type UNUSED,
04538 ffebld kind UNUSED, ffelexToken kindt UNUSED,
04539 ffebld len UNUSED, ffelexToken lent UNUSED,
04540 bool recursive UNUSED, ffelexToken result UNUSED,
04541 bool separate_result UNUSED)
04542 {
04543 assert (ffestd_block_level_ == 0);
04544 ffestd_is_reachable_ = TRUE;
04545
04546 ffestd_check_simple_ ();
04547
04548 ffecom_notify_primary_entry (s);
04549 ffestw_set_sym (ffestw_stack_top (), s);
04550 }
04551
04552
04553
04554
04555
04556 void
04557 ffestd_R1221 (bool ok UNUSED)
04558 {
04559 ffestdStmt_ stmt;
04560
04561 assert (ffestd_block_level_ == 0);
04562
04563 if (FFESTD_IS_END_OPTIMIZED_ && ffestd_is_reachable_)
04564 ffestd_R1227 (NULL);
04565
04566 if (ffestw_state (ffestw_stack_top ()) != FFESTV_stateFUNCTION5)
04567 ffestd_subr_labels_ (FALSE);
04568
04569 stmt = ffestd_stmt_new_ (FFESTD_stmtidR1221_);
04570 ffestd_stmt_append_ (stmt);
04571 }
04572
04573
04574
04575
04576
04577
04578
04579
04580
04581
04582
04583 void
04584 ffestd_R1223 (ffesymbol s, ffelexToken subrname UNUSED,
04585 ffesttTokenList args UNUSED, ffelexToken final UNUSED,
04586 bool recursive UNUSED)
04587 {
04588 assert (ffestd_block_level_ == 0);
04589 ffestd_is_reachable_ = TRUE;
04590
04591 ffestd_check_simple_ ();
04592
04593 ffecom_notify_primary_entry (s);
04594 ffestw_set_sym (ffestw_stack_top (), s);
04595 }
04596
04597
04598
04599
04600
04601 void
04602 ffestd_R1225 (bool ok UNUSED)
04603 {
04604 ffestdStmt_ stmt;
04605
04606 assert (ffestd_block_level_ == 0);
04607
04608 if (FFESTD_IS_END_OPTIMIZED_ && ffestd_is_reachable_)
04609 ffestd_R1227 (NULL);
04610
04611 if (ffestw_state (ffestw_stack_top ()) != FFESTV_stateSUBROUTINE5)
04612 ffestd_subr_labels_ (FALSE);
04613
04614 stmt = ffestd_stmt_new_ (FFESTD_stmtidR1225_);
04615 ffestd_stmt_append_ (stmt);
04616 }
04617
04618
04619
04620
04621
04622
04623
04624
04625 void
04626 ffestd_R1226 (ffesymbol entry)
04627 {
04628 ffestd_check_simple_ ();
04629
04630 if (!ffesta_seen_first_exec || ffecom_2pass_advise_entrypoint (entry))
04631 {
04632 ffestdStmt_ stmt;
04633
04634 stmt = ffestd_stmt_new_ (FFESTD_stmtidR1226_);
04635 ffestd_stmt_append_ (stmt);
04636 ffestd_subr_line_save_ (stmt);
04637 stmt->u.R1226.entry = entry;
04638 stmt->u.R1226.entrynum = ++ffestd_2pass_entrypoints_;
04639 }
04640
04641 ffestd_is_reachable_ = TRUE;
04642 }
04643
04644
04645
04646
04647
04648
04649
04650
04651 void
04652 ffestd_R1227 (ffebld expr)
04653 {
04654 ffestdStmt_ stmt;
04655
04656 ffestd_check_simple_ ();
04657
04658 stmt = ffestd_stmt_new_ (FFESTD_stmtidR1227_);
04659 ffestd_stmt_append_ (stmt);
04660 ffestd_subr_line_save_ (stmt);
04661 stmt->u.R1227.pool = ffesta_output_pool;
04662 stmt->u.R1227.block = ffestw_stack_top ();
04663 stmt->u.R1227.expr = expr;
04664 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
04665
04666 if (ffestd_block_level_ == 0)
04667 ffestd_is_reachable_ = FALSE;
04668 }
04669
04670
04671
04672
04673
04674 #if FFESTR_F90
04675 void
04676 ffestd_R1228 ()
04677 {
04678 assert (ffestd_block_level_ == 0);
04679
04680 ffestd_check_simple_ ();
04681
04682
04683
04684 ffestd_subr_labels_ (ffestw_state (ffestw_stack_top ())
04685 == FFESTV_stateMODULE5);
04686
04687
04688 ffestd_subr_f90_ ();
04689 return;
04690
04691 #ifdef FFESTD_F90
04692 fputs ("- CONTAINS\n", dmpout);
04693 #endif
04694 }
04695
04696 #endif
04697
04698
04699
04700
04701
04702
04703
04704
04705
04706
04707
04708
04709 void
04710 ffestd_R1229_start (ffelexToken name UNUSED, ffesttTokenList args UNUSED)
04711 {
04712 ffestd_check_start_ ();
04713 }
04714
04715
04716
04717
04718
04719
04720
04721
04722
04723
04724
04725
04726
04727
04728
04729
04730
04731
04732
04733 void
04734 ffestd_R1229_finish (ffesymbol s)
04735 {
04736 ffebld expr = ffesymbol_sfexpr (s);
04737
04738 ffestd_check_finish_ ();
04739
04740 if (expr == NULL)
04741 return;
04742
04743
04744
04745 ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
04746 }
04747
04748
04749
04750
04751
04752
04753
04754 void
04755 ffestd_S3P4 (ffebld filename)
04756 {
04757 FILE *fi;
04758 ffetargetCharacterDefault buildname;
04759 ffewhereFile wf;
04760
04761 ffestd_check_simple_ ();
04762
04763 assert (filename != NULL);
04764 if (ffebld_op (filename) != FFEBLD_opANY)
04765 {
04766 assert (ffebld_op (filename) == FFEBLD_opCONTER);
04767 assert (ffeinfo_basictype (ffebld_info (filename))
04768 == FFEINFO_basictypeCHARACTER);
04769 assert (ffeinfo_kindtype (ffebld_info (filename))
04770 == FFEINFO_kindtypeCHARACTERDEFAULT);
04771 buildname = ffebld_constant_characterdefault (ffebld_conter (filename));
04772 wf = ffewhere_file_new (ffetarget_text_characterdefault (buildname),
04773 ffetarget_length_characterdefault (buildname));
04774 fi = ffecom_open_include (ffewhere_file_name (wf),
04775 ffelex_token_where_line (ffesta_tokens[0]),
04776 ffelex_token_where_column (ffesta_tokens[0]));
04777 if (fi == NULL)
04778 ffewhere_file_kill (wf);
04779 else
04780 ffelex_set_include (wf, (ffelex_token_type (ffesta_tokens[0])
04781 == FFELEX_typeNAME), fi);
04782 }
04783 }
04784
04785
04786
04787
04788
04789
04790
04791 #if FFESTR_VXT
04792 void
04793 ffestd_V003_start (ffelexToken structure_name)
04794 {
04795 ffestd_check_start_ ();
04796 ffestd_subr_vxt_ ();
04797 }
04798
04799
04800
04801
04802
04803
04804
04805 void
04806 ffestd_V003_item (ffelexToken name, ffesttDimList dims)
04807 {
04808 ffestd_check_item_ ();
04809 }
04810
04811
04812
04813
04814
04815
04816
04817 void
04818 ffestd_V003_finish ()
04819 {
04820 ffestd_check_finish_ ();
04821 }
04822
04823
04824
04825
04826
04827 void
04828 ffestd_V004 (bool ok)
04829 {
04830 }
04831
04832
04833
04834
04835
04836 void
04837 ffestd_V009 ()
04838 {
04839 ffestd_check_simple_ ();
04840 }
04841
04842
04843
04844
04845
04846 void
04847 ffestd_V010 (bool ok)
04848 {
04849 }
04850
04851
04852
04853
04854
04855 void
04856 ffestd_V012 ()
04857 {
04858 ffestd_check_simple_ ();
04859 }
04860
04861
04862
04863
04864
04865 void
04866 ffestd_V013 (bool ok)
04867 {
04868 }
04869
04870 #endif
04871
04872
04873
04874
04875
04876
04877 void
04878 ffestd_V014_start ()
04879 {
04880 ffestd_check_start_ ();
04881 }
04882
04883
04884
04885
04886
04887
04888
04889 void
04890 ffestd_V014_item_object (ffelexToken name UNUSED)
04891 {
04892 ffestd_check_item_ ();
04893 }
04894
04895
04896
04897
04898
04899
04900
04901 void
04902 ffestd_V014_item_cblock (ffelexToken name UNUSED)
04903 {
04904 ffestd_check_item_ ();
04905 }
04906
04907
04908
04909
04910
04911
04912
04913 void
04914 ffestd_V014_finish ()
04915 {
04916 ffestd_check_finish_ ();
04917 }
04918
04919
04920
04921
04922
04923
04924
04925 #if FFESTR_VXT
04926 void
04927 ffestd_V016_start ()
04928 {
04929 ffestd_check_start_ ();
04930 }
04931
04932
04933
04934
04935
04936
04937
04938 void
04939 ffestd_V016_item_structure (ffelexToken name)
04940 {
04941 ffestd_check_item_ ();
04942 }
04943
04944
04945
04946
04947
04948
04949
04950 void
04951 ffestd_V016_item_object (ffelexToken name, ffesttDimList dims)
04952 {
04953 ffestd_check_item_ ();
04954 }
04955
04956
04957
04958
04959
04960
04961
04962 void
04963 ffestd_V016_finish ()
04964 {
04965 ffestd_check_finish_ ();
04966 }
04967
04968
04969
04970
04971
04972
04973
04974
04975 void
04976 ffestd_V018_start (ffestvFormat format)
04977 {
04978 ffestd_check_start_ ();
04979 ffestd_subr_vxt_ ();
04980 }
04981
04982
04983
04984
04985
04986
04987
04988 void
04989 ffestd_V018_item (ffebld expr)
04990 {
04991 ffestd_check_item_ ();
04992 }
04993
04994
04995
04996
04997
04998
04999
05000 void
05001 ffestd_V018_finish ()
05002 {
05003 ffestd_check_finish_ ();
05004 }
05005
05006
05007
05008
05009
05010
05011
05012
05013 void
05014 ffestd_V019_start (ffestvFormat format)
05015 {
05016 ffestd_check_start_ ();
05017 ffestd_subr_vxt_ ();
05018 }
05019
05020
05021
05022
05023
05024
05025
05026 void
05027 ffestd_V019_item (ffebld expr)
05028 {
05029 ffestd_check_item_ ();
05030 }
05031
05032
05033
05034
05035
05036
05037
05038 void
05039 ffestd_V019_finish ()
05040 {
05041 ffestd_check_finish_ ();
05042 }
05043
05044 #endif
05045
05046
05047
05048
05049
05050
05051
05052 void
05053 ffestd_V020_start (ffestvFormat format UNUSED)
05054 {
05055 ffestd_check_start_ ();
05056 ffestd_subr_vxt_ ();
05057 }
05058
05059
05060
05061
05062
05063
05064
05065 void
05066 ffestd_V020_item (ffebld expr UNUSED)
05067 {
05068 ffestd_check_item_ ();
05069 }
05070
05071
05072
05073
05074
05075
05076
05077 void
05078 ffestd_V020_finish ()
05079 {
05080 ffestd_check_finish_ ();
05081 }
05082
05083
05084
05085
05086
05087
05088
05089 #if FFESTR_VXT
05090 void
05091 ffestd_V021 ()
05092 {
05093 ffestd_check_simple_ ();
05094 ffestd_subr_vxt_ ();
05095 }
05096
05097
05098
05099
05100
05101
05102
05103 void
05104 ffestd_V022 ()
05105 {
05106 ffestd_check_simple_ ();
05107 ffestd_subr_vxt_ ();
05108 }
05109
05110
05111
05112
05113
05114
05115
05116
05117 void
05118 ffestd_V023_start ()
05119 {
05120 ffestd_check_start_ ();
05121 ffestd_subr_vxt_ ();
05122 }
05123
05124
05125
05126
05127
05128
05129
05130 void
05131 ffestd_V023_item (ffebld expr)
05132 {
05133 ffestd_check_item_ ();
05134 }
05135
05136
05137
05138
05139
05140
05141
05142 void
05143 ffestd_V023_finish ()
05144 {
05145 ffestd_check_finish_ ();
05146 }
05147
05148
05149
05150
05151
05152
05153
05154
05155 void
05156 ffestd_V024_start ()
05157 {
05158 ffestd_check_start_ ();
05159 ffestd_subr_vxt_ ();
05160 }
05161
05162
05163
05164
05165
05166
05167
05168 void
05169 ffestd_V024_item (ffebld expr)
05170 {
05171 ffestd_check_item_ ();
05172 }
05173
05174
05175
05176
05177
05178
05179
05180 void
05181 ffestd_V024_finish ()
05182 {
05183 ffestd_check_finish_ ();
05184 }
05185
05186
05187
05188
05189
05190
05191
05192
05193 void
05194 ffestd_V025_start ()
05195 {
05196 ffestd_check_start_ ();
05197 ffestd_subr_vxt_ ();
05198 }
05199
05200
05201
05202
05203
05204
05205
05206
05207 void
05208 ffestd_V025_item (ffebld u, ffebld m, ffebld n, ffebld asv)
05209 {
05210 ffestd_check_item_ ();
05211 }
05212
05213
05214
05215
05216
05217
05218
05219 void
05220 ffestd_V025_finish ()
05221 {
05222 ffestd_check_finish_ ();
05223 }
05224
05225
05226
05227
05228
05229
05230
05231 void
05232 ffestd_V026 ()
05233 {
05234 ffestd_check_simple_ ();
05235 ffestd_subr_vxt_ ();
05236 }
05237
05238 #endif
05239
05240
05241
05242
05243
05244
05245 void
05246 ffestd_V027_start ()
05247 {
05248 ffestd_check_start_ ();
05249 ffestd_subr_vxt_ ();
05250 }
05251
05252
05253
05254
05255
05256
05257
05258
05259 void
05260 ffestd_V027_item (ffelexToken dest_token UNUSED, ffebld source UNUSED)
05261 {
05262 ffestd_check_item_ ();
05263 }
05264
05265
05266
05267
05268
05269
05270
05271 void
05272 ffestd_V027_finish ()
05273 {
05274 ffestd_check_finish_ ();
05275 }
05276
05277
05278
05279 void
05280 ffestd_any ()
05281 {
05282 ffestdStmt_ stmt;
05283
05284 ffestd_check_simple_ ();
05285
05286 stmt = ffestd_stmt_new_ (FFESTD_stmtidR841_);
05287 ffestd_stmt_append_ (stmt);
05288 ffestd_subr_line_save_ (stmt);
05289 }