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
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060 enum blk_cntxt_values {Unknown_Blk,
00061 Blockdata_Blk,
00062 Module_Blk,
00063 Program_Blk,
00064 Function_Blk,
00065 Subroutine_Blk,
00066 Internal_Blk,
00067 Module_Proc_Blk,
00068 Interface_Body_Blk,
00069 Do_Blk,
00070 Forall_Blk,
00071 If_Blk,
00072 If_Then_Blk,
00073 If_Else_If_Blk,
00074 If_Else_Blk,
00075 Select_Blk,
00076 Case_Blk,
00077 Where_Then_Blk,
00078 Where_Else_Blk,
00079 Where_Else_Mask_Blk,
00080 Parallel_Blk,
00081 Doall_Blk,
00082 Do_Parallel_Blk,
00083 Guard_Blk,
00084 Parallel_Case_Blk,
00085 Wait_Blk,
00086 SGI_Doacross_Blk,
00087 SGI_Psection_Blk,
00088 SGI_Section_Blk,
00089 SGI_Pdo_Blk,
00090 SGI_Parallel_Do_Blk,
00091 SGI_Parallel_Blk,
00092 SGI_Critical_Section_Blk,
00093 SGI_Single_Process_Blk,
00094 SGI_Region_Blk,
00095 Open_Mp_Parallel_Blk,
00096 Open_Mp_Do_Blk,
00097 Open_Mp_Parallel_Sections_Blk,
00098 Open_Mp_Sections_Blk,
00099 Open_Mp_Section_Blk,
00100 Open_Mp_Single_Blk,
00101 Open_Mp_Parallel_Do_Blk,
00102 Open_Mp_Master_Blk,
00103 Open_Mp_Critical_Blk,
00104 Open_Mp_Ordered_Blk,
00105 Open_Mp_Workshare_Blk,
00106 Open_Mp_Parallel_Workshare_Blk,
00107 Contains_Blk,
00108 Interface_Blk,
00109 Derived_Type_Blk,
00110 #ifdef KEY
00111 Enum_Blk
00112 #endif
00113 };
00114
00115 enum do_loop_values {Unknown_Loop,
00116 Iterative_Loop,
00117 While_Loop,
00118 Infinite_Loop };
00119
00120 enum expr_values {Expr_Unknown,
00121 Scalar_Int_Init_Expr,
00122 Scalar_Int_Expr,
00123 Scalar_Init_Expr,
00124 Scalar_Expr
00125 };
00126
00127
00128 enum directive_region_values {Parallel_Region,
00129 Doall_Region,
00130 Do_Parallel_Region,
00131 Guard_Region,
00132 Case_Region,
00133 Region_Region,
00134 Sgi_Parallel_Region,
00135 Doacross_Region,
00136 Parallel_Do_Region,
00137 Pdo_Region,
00138 Parallel_Section_Region,
00139 Critical_Section_Region,
00140 Single_Process_Region,
00141 Open_Mp_Parallel_Region,
00142 Open_Mp_Do_Region,
00143 Open_Mp_Parallel_Sections_Region,
00144 Open_Mp_Sections_Region,
00145 Open_Mp_Section_Region,
00146 Open_Mp_Single_Region,
00147 Open_Mp_Parallel_Do_Region,
00148 Open_Mp_Master_Region,
00149 Open_Mp_Critical_Region,
00150 Open_Mp_Ordered_Region,
00151 Open_Mp_Workshare_Region,
00152 Open_Mp_Parallel_Workshare_Region,
00153 Last_Region};
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164 enum lbl_pos_values { Top_Lbl, Cycle_Lbl, Exit_Lbl, Skip_Lbl };
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174 enum lbl_ref_values {Illegal_Lbl_Ref_Value,
00175 Branch_Context,
00176 Format_Ref,
00177 Assign_Ref,
00178 Do_Ref};
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188 enum search_values {Find_None,
00189 Find_EOS,
00190 Find_Lparen,
00191 Find_Rparen,
00192 Find_Matching_Rparen,
00193 Find_Comma,
00194 Find_Comma_Slash,
00195 Find_Comma_Rparen,
00196 Find_Expr_End,
00197 Find_Ref_End
00198 };
00199
00200
00201 enum stmt_category_values {Init_Stmt_Cat,
00202 Sub_Func_Stmt_Cat,
00203 Dir_Integer_Stmt_Cat,
00204 Use_Stmt_Cat,
00205 #ifdef KEY
00206 Import_Stmt_Cat,
00207 #endif
00208 Implicit_None_Stmt_Cat,
00209 Implicit_Stmt_Cat,
00210 Declaration_Stmt_Cat,
00211 Executable_Stmt_Cat };
00212
00213 typedef enum blk_cntxt_values blk_cntxt_type;
00214 typedef union blk_stk_entry blk_stk_type;
00215 typedef enum do_loop_values do_loop_type;
00216 typedef enum expr_values expr_type;
00217 typedef enum lbl_pos_values lbl_pos_type;
00218 typedef enum lbl_ref_values lbl_ref_type;
00219 typedef enum search_values search_type;
00220 typedef enum stmt_category_values stmt_category_type;
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232 union blk_stk_entry {
00233 struct {
00234 Uint def_line : 24;
00235 Uint def_column : 8;
00236 Uint name_idx : 20;
00237 boolean parallel_region : 1;
00238 boolean blk_err : 1;
00239 boolean no_exec : 1;
00240 boolean fnd_default : 1;
00241 blk_cntxt_type blk_type : 8;
00242
00243 Uint first_sh_idx : 24;
00244 Uint UNUSED2 : 8;
00245 Uint UNUSED3 : 8;
00246 Uint label_idx : 24;
00247
00248 opnd_type multiuse_opnd ;
00249
00250 Uint top_lbl_idx : 20;
00251 Uint loop_num : 12;
00252 boolean has_cycle_stmt : 1;
00253 boolean has_exit_stmt : 1;
00254 boolean has_nested_loop : 1;
00255 boolean blkbl_nest_ok : 1;
00256 do_loop_type do_type : 4;
00257 Uint skip_lbl_idx : 24;
00258
00259 Uint start_temp_idx : 24;
00260 Uint UNUSED8 : 8;
00261 Uint UNUSED9 : 12;
00262 Uint inc_temp_idx : 20;
00263
00264 Uint induc_temp_idx : 24;
00265 Uint UNUSED10 : 8;
00266 Uint UNUSED11 : 8;
00267 Uint tc_temp_idx : 24;
00268
00269 Uint blkbl_dir_sh_idx : 24;
00270 Uint blkbl_num_lcvs : 8;
00271 Uint intchg_num_lcvs : 8;
00272 Uint intchg_dir_sh_idx : 24;
00273
00274 Uint UNUSED12 : 24;
00275 Uint UNUSED13 : 8;
00276 Uint dir_nest_num_lcvs : 8;
00277 Uint dir_nest_ck_sh_idx: 24;
00278 } fld;
00279
00280 struct {
00281 Uint field32_1 : 32;
00282 Uint field32_2 : 32;
00283
00284 Uint field32_3 : 32;
00285 Uint field32_4 : 32;
00286
00287 Uint field32_5_1 : 16;
00288 Uint field32_5_2 : 16;
00289 Uint field32_6_1 : 16;
00290 Uint field32_6_2 : 16;
00291
00292 Uint field32_7 : 32;
00293 Uint field32_8 : 32;
00294
00295 Uint field32_9 : 32;
00296 Uint field32_10 : 32;
00297
00298 Uint field32_11 : 32;
00299 Uint field32_12 : 32;
00300
00301 Uint field32_13 : 32;
00302 Uint field32_14 : 32;
00303
00304 Uint field32_15 : 32;
00305 Uint field32_16 : 32;
00306 } fld_long;
00307
00308 long wd[NUM_BLK_STK_WDS];
00309 };
00310
00311
00312
00313
00314
00315
00316
00317
00318 extern int blk_match_err(blk_cntxt_type, boolean, boolean);
00319 extern void build_fwd_ref_entry (int, lbl_ref_type);
00320 extern char ch_after_paren_grp (void);
00321 extern void check_for_vestigial_task_blks(void);
00322 extern int check_label_ref (void);
00323 extern void complete_intrinsic_definition(int);
00324 #ifdef KEY
00325 extern int intrinsic_module_lookup(int);
00326 #endif
00327 extern void determine_stmt_type (void);
00328 extern boolean digit_is_format_label(void);
00329 extern void do_cmic_blk_checks(void);
00330 extern void end_critical_section_blk (boolean);
00331 extern void end_do_parallel_blk (boolean);
00332 extern void end_doacross_blk (boolean);
00333 extern void end_doall_blk (boolean);
00334 extern void end_guard_blk (boolean);
00335 extern void end_labeled_do (void);
00336 extern void end_open_mp_critical_blk (boolean);
00337 extern void end_open_mp_do_blk (boolean);
00338 extern void end_open_mp_master_blk (boolean);
00339 extern void end_open_mp_ordered_blk (boolean);
00340 extern void end_open_mp_parallel_blk (boolean);
00341 extern void end_open_mp_parallel_do_blk (boolean);
00342 extern void end_open_mp_parallel_sections_blk (boolean);
00343 extern void end_open_mp_section_blk (boolean);
00344 extern void end_open_mp_sections_blk (boolean);
00345 extern void end_open_mp_single_blk (boolean);
00346 extern void end_open_mp_parallel_workshare_blk(boolean);
00347 extern void end_open_mp_workshare_blk(boolean);
00348 extern void end_parallel_blk (boolean);
00349 extern void end_parallel_case_blk (boolean);
00350 extern void end_pdo_blk (boolean);
00351 extern void end_psection_blk (boolean);
00352 extern void end_region_blk (boolean);
00353 extern void end_SGI_parallel_blk (boolean);
00354 extern void end_single_process_blk (boolean);
00355 extern void end_wait_blk (boolean);
00356
00357 # if defined(_EXPRESSION_EVAL)
00358 extern void expression_eval_end (void);
00359 # endif
00360
00361 extern void flush_LA_to_EOS (void);
00362 extern void flush_LA_to_symbol (void);
00363 extern void format_line_n_col (int *, int *, int);
00364 extern void gen_attr_and_IR_for_lbl (boolean);
00365 extern int gen_loop_lbl_name (int, lbl_pos_type);
00366 extern void implicit_use_semantics(void);
00367 extern boolean iss_blk_stk_err(void);
00368 extern boolean is_implied_do (void);
00369 extern boolean is_substring_ref (void);
00370 extern void label_ref_semantics (int, lbl_ref_type, int, int, int);
00371 extern boolean matched_specific_token (token_values_type, token_class_type);
00372 extern boolean matched_token_class (token_class_type);
00373 extern boolean merge_access (int, int, int, access_type);
00374 extern boolean merge_allocatable (boolean, int, int, int);
00375 extern boolean merge_automatic (boolean, int, int, int);
00376 extern boolean merge_co_array (boolean, int, int, int, int);
00377 extern boolean merge_data (boolean, int, int, int);
00378 extern boolean merge_dimension (int, int, int, int);
00379 extern boolean merge_external (boolean, int, int, int);
00380 extern boolean merge_intent (boolean, int, int, int);
00381 extern boolean merge_intrinsic (boolean, int, int, int);
00382 extern boolean merge_optional (boolean, int, int, int);
00383 extern boolean merge_pointer (boolean, int, int, int);
00384 extern boolean merge_save (boolean, int, int, int);
00385 extern boolean merge_target (boolean, int, int, int);
00386 extern boolean merge_volatile (boolean, int, int, int);
00387 #ifdef KEY
00388 extern boolean merge_bind(boolean, int, int, int);
00389 extern boolean merge_value(boolean, int, int, int);
00390 #endif
00391 extern int move_blk_to_end(int);
00392 extern boolean next_arg_is_kwd_equal (void);
00393 extern boolean next_id_is_imp_control (void);
00394 extern boolean next_tok_is_paren_slash (void);
00395 extern int ntr_io_string_constant(void);
00396 extern boolean parse_err_flush (search_type, char *);
00397 extern boolean parse_io_list (opnd_type *);
00398 extern boolean parse_operand (opnd_type *);
00399 extern boolean pop_and_err_blk_stk (int, boolean);
00400 extern void prev_char_line_and_col (int *, int *);
00401 extern int put_char_const_in_tbl (char, int *);
00402 extern int put_format_in_tbl (void);
00403 extern boolean remove_do_parallel_blk(boolean, char *, int, int);
00404 extern boolean remove_pdo_blk(boolean, char *, int, int);
00405 extern void resolve_fwd_lbl_refs (void);
00406 extern int start_new_prog_unit (pgm_unit_type, blk_cntxt_type,
00407 boolean, boolean, int *);
00408 extern void set_format_start_idx (int);
00409 extern boolean stmt_has_double_colon (void);
00410 extern boolean stmt_is_DATA_stmt (void);
00411 extern boolean stmt_is_DO_stmt (void);
00412 extern boolean stmt_is_save_stmt(int, int);
00413 #ifdef KEY
00414 extern void surprise_volatile(char *);
00415 extern void revisit_volatile();
00416 #endif
00417
00418
00419
00420
00421
00422 extern void parse_allocatable_stmt (void);
00423 extern void parse_allocate_stmt (void);
00424 extern void parse_access_stmt (void);
00425 extern void parse_assign_stmt (void);
00426 extern void parse_assignment_stmt (void);
00427 extern void parse_automatic_stmt (void);
00428 extern void parse_bad_stmt(void);
00429 extern void parse_backspace_stmt (void);
00430 extern void parse_block_stmt (void);
00431 extern void parse_buffer_stmt (void);
00432 extern void parse_call_stmt (void);
00433 extern void parse_case_stmt (void);
00434 extern void parse_close_stmt (void);
00435 extern void parse_common_stmt (void);
00436 extern void parse_contains_stmt (void);
00437 extern void parse_continue_stmt (void);
00438 extern void parse_cycle_stmt (void);
00439 extern void parse_data_stmt (void);
00440 extern void parse_deallocate_stmt (void);
00441 extern void parse_decode_stmt (void);
00442 extern void parse_dimension_stmt (void);
00443 extern void parse_directive_stmt (void);
00444 extern void parse_do_stmt (void);
00445 extern void parse_elemental_stmt (void);
00446 extern void parse_else_stmt (void);
00447 extern void parse_encode_stmt (void);
00448 extern void parse_end_stmt (void);
00449 extern void parse_endfile_stmt (void);
00450 extern void parse_entry_stmt (void);
00451 extern void parse_equivalence_stmt (void);
00452 extern void parse_exit_stmt (void);
00453 extern void parse_external_stmt (void);
00454 extern void parse_forall (void);
00455 extern void parse_format_stmt (void);
00456 extern void parse_function_stmt (void);
00457 extern void parse_goto_stmt (void);
00458 extern void parse_if_stmt (void);
00459 extern void parse_implicit_stmt (void);
00460 #ifdef KEY
00461 extern void parse_import_stmt (void);
00462 #endif
00463 #ifdef KEY
00464 extern void parse_enum_stmt (void);
00465 extern void parse_enumerator_stmt (void);
00466 extern boolean parse_int_spec_expr(long *, fld_type *, boolean, boolean);
00467 #endif
00468 #ifdef KEY
00469 extern void parse_bind_stmt (void);
00470 extern void parse_value_stmt (void);
00471 #endif
00472 extern void parse_inquire_stmt (void);
00473 extern void parse_intent_stmt (void);
00474 extern void parse_interface_stmt (void);
00475 extern void parse_intrinsic_stmt (void);
00476 extern void parse_module_stmt (void);
00477 extern void parse_namelist_stmt (void);
00478 extern void parse_nullify_stmt (void);
00479 extern void parse_open_stmt (void);
00480 extern void parse_optional_stmt (void);
00481 extern void parse_parameter_stmt (void);
00482 extern void parse_pointer_stmt (void);
00483 extern void parse_print_stmt (void);
00484 extern void parse_program_stmt (void);
00485 extern void parse_pure_stmt (void);
00486 extern void parse_read_stmt (void);
00487 extern void parse_recursive_stmt (void);
00488 extern void parse_return_stmt (void);
00489 extern void parse_rewind_stmt (void);
00490 extern void parse_save_stmt (void);
00491 extern void parse_select_stmt (void);
00492 extern void parse_sequence_stmt (void);
00493 extern void parse_stmt_func_stmt (int, int);
00494 extern void parse_stop_pause_stmt (void);
00495 extern void parse_subroutine_stmt (void);
00496 extern void parse_target_stmt (void);
00497 extern void parse_task_common_stmt (void);
00498 extern void parse_type_dcl_stmt (void);
00499 extern void parse_use_stmt (void);
00500 extern void parse_volatile_stmt (void);
00501 extern void parse_where_stmt (void);
00502 extern void parse_write_stmt (void);
00503
00504
00505
00506
00507
00508
00509 extern int generic_spec_semantics (void);
00510 extern boolean paren_grp_is_cplx_const(void);
00511 extern boolean parse_actual_arg_spec (opnd_type *, boolean, int);
00512 extern int parse_array_spec (int);
00513 extern int parse_pe_array_spec (int);
00514 extern boolean parse_deref (opnd_type *, int);
00515 extern boolean parse_expr (opnd_type *);
00516 extern boolean parse_generic_spec (void);
00517 extern boolean parse_imp_do (opnd_type *);
00518 extern intent_type parse_intent_spec (void);
00519 extern void parse_length_selector (int, boolean, boolean);
00520 #ifdef KEY
00521 extern int parse_non_char_kind_selector(boolean);
00522 #endif
00523 extern boolean parse_type_spec (boolean);
00524 extern void parse_typed_function_stmt (void);
00525 #ifdef KEY
00526 extern int parse_language_binding_spec(token_type *result);
00527 extern void set_binding_label(fld_type, int, token_type *);
00528 #endif
00529
00530
00531
00532
00533
00534 extern blk_stk_type *blk_stk;
00535 extern int blk_stk_idx;
00536 extern int blk_stk_inc;
00537 extern int blk_stk_init_size;
00538 extern int blk_stk_limit;
00539 extern int blk_stk_num_wds;
00540 extern int blk_stk_size;
00541 extern int blk_stk_largest_idx;
00542
00543 extern int cif_end_unit_column;
00544 extern int cif_end_unit_line;
00545 extern boolean clearing_blk_stk;
00546 extern boolean colon_recovery;
00547 extern stmt_category_type curr_stmt_category;
00548
00549 extern boolean EOPU_encountered;
00550
00551 extern boolean label_ok;
00552 extern token_type label_token;
00553
00554 extern token_type main_token;
00555
00556 extern intent_type new_intent;
00557 #ifdef KEY
00558
00559
00560 # define BIND_SPECIFIES_NAME(nbl) (!TOKEN_ERR(nbl))
00561 # define SET_BIND_SPECIFIES_NAME(nbl,val) (TOKEN_ERR(nbl) = !(val))
00562 extern token_type new_binding_label;
00563 #endif
00564
00565 extern char *obj_str[];
00566 extern int stmt_construct_idx;
00567 extern int stmt_line_idx;
00568 extern long long stmt_in_blk[];
00569 extern stmt_category_type stmt_top_cat[];
00570 extern type_tbl_type type_init_tbl[];
00571
00572 extern void (*stmt_parsers[])();
00573
00574 extern int if_stmt_lbl_idx;
00575
00576
00577 extern long directive_state;
00578
00579
00580
00581
00582
00583
00584
00585 enum line_type_values {Comment_Line,
00586 Include_Line,
00587 Cond_Comp_Line,
00588 Dir_Line,
00589 Dir_Continuation_Line,
00590 Regular_Line,
00591 Continuation_Line,
00592 Pound_Include_Enter_Line,
00593 Pound_Include_Exit_Line,
00594 Pound_Src_Line,
00595 EOF_Line };
00596
00597 typedef enum line_type_values line_type;
00598
00599 struct cc_stmt_buf_line_entry {long line;
00600 long start_idx;
00601 };
00602
00603 typedef struct cc_stmt_buf_line_entry cc_stmt_buf_line_type;
00604