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
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091 #ifdef _KEEP_RCS_ID
00092
00093 static char *rcs_id = "$Source: /depot/CVSROOT/javi/src/sw/cmplr/be/whirl2f/st2f.cxx,v $ $Revision: 1.1 $";
00094 #endif
00095
00096 #include "whirl2f_common.h"
00097 #include "PUinfo.h"
00098 #include "tcon2f.h"
00099 #include "wn2f.h"
00100 #include "ty2f.h"
00101 #include "st2f.h"
00102 #include "init2f.h"
00103 #include "cxx_memory.h"
00104 #include "be_symtab.h"
00105
00106
00107
00108
00109 extern BOOL Use_Purple_Array_Bnds_Placeholder;
00110
00111
00112
00113
00114 static BOOL ST2F_Is_Dummy_Procedure(ST *st) ;
00115 static void ST2F_Declare_Return_Type(TOKEN_BUFFER tokens,TY_IDX return_ty, const char* name) ;
00116
00117
00118
00119
00120 static void ST2F_ignore(TOKEN_BUFFER tokens, ST *st);
00121
00122 static void ST2F_decl_error(TOKEN_BUFFER tokens, ST *st);
00123 static void ST2F_decl_var(TOKEN_BUFFER tokens, ST *st);
00124 static void ST2F_decl_func(TOKEN_BUFFER tokens, ST *st);
00125 static void ST2F_decl_const(TOKEN_BUFFER tokens, ST *st);
00126
00127 static void ST2F_use_error(TOKEN_BUFFER tokens, ST *st);
00128 static void ST2F_use_var(TOKEN_BUFFER tokens, ST *st);
00129 static void ST2F_use_func(TOKEN_BUFFER tokens, ST *st);
00130 static void ST2F_use_const(TOKEN_BUFFER tokens, ST *st);
00131 static void ST2F_use_block(TOKEN_BUFFER tokens, ST *st);
00132
00133
00134
00135
00136 typedef void (*ST2F_HANDLER_FUNC)(TOKEN_BUFFER, ST *);
00137
00138 static const ST2F_HANDLER_FUNC ST2F_Decl_Handler[CLASS_COUNT] =
00139 {
00140 &ST2F_ignore,
00141 &ST2F_decl_var,
00142 &ST2F_decl_func,
00143 &ST2F_decl_const,
00144 &ST2F_decl_error,
00145 &ST2F_decl_error,
00146 &ST2F_decl_error,
00147 };
00148
00149 static const ST2F_HANDLER_FUNC ST2F_Use_Handler[CLASS_COUNT] =
00150 {
00151 &ST2F_ignore,
00152 &ST2F_use_var,
00153 &ST2F_use_func,
00154 &ST2F_use_const,
00155 &ST2F_use_error,
00156 &ST2F_use_block,
00157 &ST2F_use_error
00158 };
00159
00160
00161
00162
00163 static void
00164 ST2F_Define_Preg(const char *name, TY_IDX ty)
00165 {
00166
00167
00168
00169 TOKEN_BUFFER decl_tokens = New_Token_Buffer();
00170 UINT current_indent = Current_Indentation();
00171
00172 Set_Current_Indentation(PUinfo_local_decls_indent);
00173 Append_F77_Indented_Newline(PUinfo_local_decls, 1, NULL);
00174 Append_Token_String(decl_tokens, name);
00175 TY2F_translate(decl_tokens, ty);
00176 Append_And_Reclaim_Token_List(PUinfo_local_decls, &decl_tokens);
00177 Set_Current_Indentation(current_indent);
00178 }
00179
00180
00181 static void
00182 ST2F_ignore(TOKEN_BUFFER tokens, ST *st)
00183 {
00184 return;
00185 }
00186
00187 static void
00188 ST2F_decl_error(TOKEN_BUFFER tokens, ST *st)
00189 {
00190 ASSERT_DBG_FATAL(FALSE,
00191 (DIAG_W2F_UNEXPECTED_SYMCLASS,
00192 ST_sym_class(st), "ST2F_decl_error"));
00193 }
00194
00195 static void
00196 ST2F_decl_var(TOKEN_BUFFER tokens, ST *st)
00197 {
00198 INITO_IDX inito;
00199 const char *pointee_name;
00200 const char *st_name = W2CF_Symtab_Nameof_St(st);
00201 TOKEN_BUFFER decl_tokens = New_Token_Buffer();
00202 TY_IDX ty_rt = ST_type(st);
00203
00204 ASSERT_DBG_FATAL(ST_sym_class(st)==CLASS_VAR,
00205 (DIAG_W2F_UNEXPECTED_SYMCLASS,
00206 ST_sym_class(st), "ST2F_decl_var"));
00207
00208 if (Current_scope > GLOBAL_SYMTAB)
00209 {
00210 ASSERT_DBG_FATAL(!PUINFO_RETURN_TO_PARAM || st != PUINFO_RETURN_PARAM,
00211 (DIAG_W2F_DECLARE_RETURN_PARAM, "ST2F_decl_var"));
00212 }
00213
00214
00215 if (Stab_Is_Common_Block(st))
00216 {
00217
00218 TY2F_Translate_Common(decl_tokens, st_name, ST_type(st));
00219 }
00220 else if (Stab_Is_Equivalence_Block(st))
00221 {
00222 if (ST_is_return_var(st))
00223 TY2F_Translate_Equivalence(decl_tokens,
00224 ST_type(st),
00225 TRUE );
00226 else
00227 TY2F_Translate_Equivalence(decl_tokens,
00228 ST_type(st),
00229 FALSE );
00230 }
00231 else if (TY_Is_Pointer(ty_rt) && ST_sclass(st) != SCLASS_FORMAL)
00232 {
00233
00234 pointee_name = W2CF_Symtab_Nameof_St_Pointee(st);
00235 Append_Token_String(decl_tokens, pointee_name);
00236
00237 if (TY_ptr_as_array(Ty_Table[ty_rt]))
00238 TY2F_translate(decl_tokens,
00239 Stab_Array_Of(TY_pointed(ty_rt), 0));
00240 else
00241 TY2F_translate(decl_tokens, TY_pointed(ty_rt));
00242
00243 Append_F77_Indented_Newline(decl_tokens, 1, NULL);
00244
00245
00246 Append_Token_String(decl_tokens, "POINTER");
00247 Append_Token_Special(decl_tokens, '(');
00248 Append_Token_String(decl_tokens, st_name);
00249 Append_Token_Special(decl_tokens, ',');
00250 Append_Token_String(decl_tokens, pointee_name);
00251 Append_Token_Special(decl_tokens, ')');
00252 }
00253 else if (ST_sclass(st) == SCLASS_FORMAL && !ST_is_value_parm(st))
00254 {
00255
00256
00257
00258 ASSERT_DBG_FATAL(TY_Is_Pointer(ty_rt),
00259 (DIAG_W2F_UNEXPECTED_TYPE_KIND,
00260 TY_kind(ty_rt), "ST2F_decl_var"));
00261 Append_Token_String(decl_tokens, st_name);
00262 if (TY_kind(TY_pointed(ST_type(st))) == KIND_FUNCTION)
00263 {
00264 Prepend_Token_String(decl_tokens, "EXTERNAL");
00265 }
00266 else
00267 {
00268 TY_IDX ty;
00269 TY_IDX ty1 = TY_pointed(ty_rt);
00270
00271 if (TY_Is_Pointer(ty1) && TY_ptr_as_array(Ty_Table[ty1]))
00272 {
00273
00274
00275 ty = Stab_Array_Of(TY_pointed(ty1), 0);
00276 }
00277 else
00278 {
00279 ty = TY_pointed(ty_rt);
00280 }
00281 if (Use_Purple_Array_Bnds_Placeholder && TY_Is_Array(ty))
00282 TY2F_Translate_Purple_Array(decl_tokens, st, ty);
00283 else
00284 TY2F_translate(decl_tokens, ty);
00285 }
00286 }
00287 else if (ST2F_Is_Dummy_Procedure(st))
00288 {
00289 TYLIST tylist_idx = TY_tylist(TY_pointed(ST_type(st)));
00290 TY_IDX rt = TY_IDX_ZERO;
00291 if (tylist_idx != (TYLIST) 0)
00292 rt = TYLIST_type(Tylist_Table[tylist_idx]);
00293
00294 ST2F_Declare_Return_Type(tokens,rt,ST_name(st));
00295 }
00296 else if (ST_sclass(st) == SCLASS_EXTERN &&
00297 (strcmp(ST_name(st), "__mp_cur_numthreads") == 0 ||
00298 strcmp(ST_name(st), "__mp_sug_numthreads") == 0))
00299 {
00300
00301 st_name = Concat3_Strings(ST_name(st), "_func", "$");
00302 Append_Token_String(decl_tokens, st_name);
00303 TY2F_translate(decl_tokens, ST_type(st));
00304 Append_F77_Indented_Newline(decl_tokens, 1, NULL);
00305 Append_Token_String(decl_tokens, "EXTERNAL ");
00306 Append_Token_String(decl_tokens, st_name);
00307 }
00308 else
00309 {
00310
00311 Append_Token_String(decl_tokens, st_name);
00312 if (Use_Purple_Array_Bnds_Placeholder && TY_Is_Array(ST_type(st)))
00313 TY2F_Translate_Purple_Array(decl_tokens, st, ST_type(st));
00314 else
00315 TY2F_translate(decl_tokens, ST_type(st));
00316 }
00317 TY2F_Prepend_Structures(decl_tokens);
00318 Append_And_Reclaim_Token_List(tokens, &decl_tokens);
00319
00320
00321
00322
00323 if (!Stab_Is_Equivalence_Block(st) &&
00324 (ST_sclass(st) == SCLASS_FSTATIC || ST_sclass(st) == SCLASS_PSTATIC))
00325 {
00326 Append_F77_Indented_Newline(tokens, 1, NULL);
00327 Append_Token_String(tokens, "SAVE");
00328 Append_Token_String(tokens, st_name);
00329 }
00330
00331
00332 if (ST_is_initialized(st) &&
00333 !Stab_No_Linkage(st) &&
00334 (!TY_Is_Structured(ST_type(st)) ||
00335 Stab_Is_Common_Block(st) ||
00336 Stab_Is_Equivalence_Block(st)))
00337 {
00338 inito = Find_INITO_For_Symbol(st);
00339 if (inito != (INITO_IDX) 0)
00340 INITO2F_translate(Data_Stmt_Tokens, inito);
00341 }
00342 }
00343
00344
00345 static void
00346 ST2F_decl_func(TOKEN_BUFFER tokens, ST *st)
00347 {
00348
00349
00350
00351 ASSERT_DBG_FATAL(ST_sym_class(st)==CLASS_FUNC,
00352 (DIAG_W2F_UNEXPECTED_SYMCLASS,
00353 ST_sym_class(st), "ST2F_decl_func"));
00354
00355
00356
00357 if (ST_export(st) == EXPORT_LOCAL_INTERNAL)
00358 return ;
00359
00360 const char *func_name = W2CF_Symtab_Nameof_St(st);
00361 TY_IDX return_ty;
00362
00363
00364
00365
00366 if (ST_sclass(st) == SCLASS_EXTERN)
00367 {
00368 Append_Token_String(tokens, "EXTERNAL");
00369 Append_Token_String(tokens, func_name);
00370 }
00371
00372
00373
00374 return_ty = Func_Return_Type(ST_pu_type(st));
00375 ST2F_Declare_Return_Type(tokens,return_ty,func_name);
00376
00377 }
00378
00379 static void
00380 ST2F_decl_const(TOKEN_BUFFER tokens, ST *st)
00381 {
00382
00383
00384
00385 ASSERT_DBG_FATAL(FALSE,
00386 (DIAG_W2F_UNEXPECTED_SYMCLASS,
00387 ST_sym_class(st), "ST2F_decl_const"));
00388 }
00389
00390
00391
00392
00393
00394 static void
00395 ST2F_use_error(TOKEN_BUFFER tokens, ST *st)
00396 {
00397 ASSERT_DBG_FATAL(FALSE,
00398 (DIAG_W2F_UNEXPECTED_SYMCLASS,
00399 ST_sym_class(st), "ST2F_use_error"));
00400 }
00401
00402 static void
00403 ST2F_use_var(TOKEN_BUFFER tokens, ST *st)
00404 {
00405 TY_IDX return_ty;
00406
00407 ASSERT_DBG_FATAL(ST_sym_class(st)==CLASS_VAR,
00408 (DIAG_W2F_UNEXPECTED_SYMCLASS,
00409 ST_sym_class(st), "ST2F_use_var"));
00410
00411
00412
00413
00414
00415 #ifdef KEY
00416
00417 if (PUinfo_current_func)
00418 #endif
00419 return_ty = PUINFO_RETURN_TY;
00420 #ifdef KEY
00421
00422 else
00423 return_ty = (TY_IDX) 0;
00424 #endif
00425 if ((return_ty != (TY_IDX) 0 &&
00426 TY_kind(return_ty) == KIND_SCALAR &&
00427 ST_is_return_var(st)) ||
00428 #ifdef KEY
00429
00430 (PUinfo_return_preg && PUINFO_RETURN_TO_PARAM && st == PUINFO_RETURN_PARAM))
00431 #else
00432 (PUINFO_RETURN_TO_PARAM && st == PUINFO_RETURN_PARAM))
00433 #endif
00434 {
00435
00436
00437
00438 Append_Token_String(tokens, PUINFO_FUNC_NAME);
00439 }
00440 else if (ST_keep_name_w2f(st))
00441 {
00442
00443
00444
00445
00446 Append_Token_String(tokens,
00447 WHIRL2F_make_valid_name(ST_name(st),WN2F_F90_pu && !ST_is_temp_var(st)));
00448 }
00449 else if (Stab_Is_Based_At_Common_Or_Equivalence(st))
00450 {
00451
00452
00453
00454
00455
00456
00457 WN2F_CONTEXT context = INIT_WN2F_CONTEXT;
00458
00459 WN2F_Offset_Symref(tokens,
00460 ST_base(st),
00461 Stab_Pointer_To(ST_type(ST_base(st))),
00462 ST_type(st),
00463 ST_ofst(st),
00464 context);
00465 Set_BE_ST_w2fc_referenced((ST *)ST_base(st));
00466 }
00467 else if (ST_sclass(st) == SCLASS_EXTERN &&
00468 (strcmp(ST_name(st), "__mp_cur_numthreads") == 0 ||
00469 strcmp(ST_name(st), "__mp_sug_numthreads") == 0))
00470 {
00471
00472 Append_Token_String(tokens, Concat3_Strings(ST_name(st), "_func", "$"));
00473 Append_Token_Special(tokens, '(');
00474 Append_Token_Special(tokens, ')');
00475 Set_BE_ST_w2fc_referenced(st);
00476 }
00477 else
00478 {
00479 Append_Token_String(tokens, W2CF_Symtab_Nameof_St(st));
00480 Set_BE_ST_w2fc_referenced(st);
00481 }
00482 }
00483
00484
00485 static void
00486 ST2F_use_func(TOKEN_BUFFER tokens, ST *st)
00487 {
00488 ASSERT_DBG_FATAL(ST_sym_class(st)==CLASS_FUNC,
00489 (DIAG_W2F_UNEXPECTED_SYMCLASS,
00490 ST_sym_class(st), "ST2F_use_func"));
00491
00492 Append_Token_String(tokens, W2CF_Symtab_Nameof_St(st));
00493 Set_BE_ST_w2fc_referenced(st);
00494 }
00495
00496 static void
00497 ST2F_use_const(TOKEN_BUFFER tokens, ST *st)
00498 {
00499 TY_IDX ty_idx = ST_type(st);
00500 TY& ty = Ty_Table[ty_idx];
00501
00502 ASSERT_DBG_FATAL(ST_sym_class(st)==CLASS_CONST,
00503 (DIAG_W2F_UNEXPECTED_SYMCLASS,
00504 ST_sym_class(st), "ST2F_use_const"));
00505
00506
00507
00508
00509 if (TY_mtype(ty) == MTYPE_STR && TY_align(ty_idx) > 1)
00510 {
00511
00512 TCON2F_hollerith(tokens, STC_val(st));
00513 }
00514 else
00515 {
00516 TCON2F_translate(tokens, STC_val(st), TY_is_logical(ty));
00517 }
00518 }
00519
00520
00521 static void
00522 ST2F_use_block(TOKEN_BUFFER tokens, ST *st)
00523 {
00524
00525
00526
00527 ASSERT_DBG_FATAL(ST_sym_class(st)==CLASS_BLOCK,
00528 (DIAG_W2F_UNEXPECTED_SYMCLASS,
00529 ST_sym_class(st), "ST2F_use_block"));
00530
00531
00532 Append_Token_String(tokens, ST_name(st));
00533 }
00534
00535
00536
00537
00538
00539 void
00540 ST2F_initialize()
00541 {
00542
00543 return;
00544 }
00545
00546 void
00547 ST2F_finalize()
00548 {
00549 return;
00550 }
00551
00552 void
00553 ST2F_use_translate(TOKEN_BUFFER tokens, ST *st)
00554 {
00555 ST2F_Use_Handler[ST_sym_class(st)](tokens, st);
00556 }
00557
00558 void
00559 ST2F_deref_translate(TOKEN_BUFFER tokens, ST *st)
00560 {
00561 ASSERT_DBG_FATAL(ST_sym_class(st)==CLASS_VAR &&
00562 TY_Is_Pointer(ST_type(st)) &&
00563 !Stab_Is_Based_At_Common_Or_Equivalence(st),
00564 (DIAG_W2F_UNEXPECTED_SYMCLASS,
00565 ST_sym_class(st), "ST2F_deref_translate"));
00566
00567
00568 Append_Token_String(tokens, W2CF_Symtab_Nameof_St_Pointee(st));
00569 Set_BE_ST_w2fc_referenced(st);
00570
00571 }
00572
00573
00574 void
00575 ST2F_decl_translate(TOKEN_BUFFER tokens, const ST *st)
00576 {
00577 ST2F_Decl_Handler[ST_sym_class(st)](tokens, (ST *) st);
00578 }
00579
00580 void
00581 ST2F_func_header(TOKEN_BUFFER tokens,
00582 ST *st,
00583 ST **params,
00584 INT32 num_params,
00585 BOOL is_altentry)
00586 {
00587
00588
00589
00590
00591 TOKEN_BUFFER header_tokens = New_Token_Buffer();
00592 INT param, first_param, implicit_parms = 0;
00593 TY_IDX funtype = ST_pu_type(st);
00594 TY_IDX return_ty;
00595
00596 ASSERT_DBG_FATAL(TY_kind(funtype) == KIND_FUNCTION,
00597 (DIAG_W2F_UNEXPECTED_SYMBOL, "ST2F_func_header"));
00598
00599 return_ty = Func_Return_Type(funtype);
00600
00601
00602
00603 Append_Token_String(header_tokens, W2CF_Symtab_Nameof_St(st));
00604
00605
00606
00607
00608
00609 first_param = ST2F_FIRST_PARAM_IDX(funtype);
00610 if (params[first_param] != NULL)
00611 {
00612 Append_Token_Special(header_tokens, '(');
00613 for (param = first_param;
00614 param < num_params - implicit_parms;
00615 param++)
00616 {
00617
00618 Append_Token_String(header_tokens,
00619 W2CF_Symtab_Nameof_St(params[param]));
00620
00621 if (STAB_PARAM_HAS_IMPLICIT_LENGTH(params[param]))
00622 {
00623 implicit_parms++;
00624
00625
00626
00627
00628 if ((param == first_param) && (params[param+1] != NULL))
00629 {
00630 if (ST_is_value_parm(params[param]) && ST_is_value_parm(params[param+1]))
00631 {
00632 if (return_ty != (TY_IDX) 0 && TY_kind(return_ty) == KIND_VOID)
00633 {
00634 param ++ ;
00635 params[param] = NULL;
00636 implicit_parms--;
00637 }
00638 }
00639 }
00640 }
00641
00642 if (param+implicit_parms+1 < num_params)
00643 Append_Token_Special(header_tokens, ',');
00644 }
00645 Append_Token_Special(header_tokens, ')');
00646 }
00647 else if (!PU_is_mainpu(Get_Current_PU()))
00648 {
00649
00650
00651
00652 Append_Token_Special(header_tokens, '(');
00653 Append_Token_Special(header_tokens, ')');
00654 }
00655
00656
00657
00658
00659
00660 if (PU_is_mainpu(Get_Current_PU()))
00661 {
00662 Prepend_Token_String(header_tokens, "PROGRAM");
00663 }
00664 else if (return_ty != (TY_IDX) 0 && TY_kind(return_ty) != KIND_VOID)
00665 {
00666 if (is_altentry)
00667 Prepend_Token_String(header_tokens, "ENTRY");
00668 else
00669 {
00670 Prepend_Token_String(header_tokens, "FUNCTION");
00671
00672
00673
00674
00675
00676
00677 if (TY_Is_Pointer(return_ty))
00678 TY2F_translate(header_tokens,
00679 Stab_Mtype_To_Ty(TY_mtype(return_ty)));
00680 else
00681 TY2F_translate(header_tokens, return_ty);
00682 }
00683 }
00684 else
00685 {
00686 if (is_altentry)
00687 Prepend_Token_String(header_tokens, "ENTRY");
00688 else
00689 Prepend_Token_String(header_tokens, "SUBROUTINE");
00690 }
00691
00692 if (!is_altentry)
00693 {
00694
00695 Append_F77_Indented_Newline(header_tokens, 1, NULL);
00696 Append_Token_String(header_tokens, "IMPLICIT NONE");
00697
00698 for (param = first_param; param < num_params -implicit_parms; param++)
00699 {
00700 Append_F77_Indented_Newline(header_tokens, 1, NULL);
00701 if (params[param] != NULL)
00702 ST2F_decl_translate(header_tokens, params[param]);
00703 }
00704 }
00705
00706 Append_Token_Special(tokens, '\n');
00707 Append_F77_Indented_Newline(tokens, 0, NULL);
00708 Append_And_Reclaim_Token_List(tokens, &header_tokens);
00709 }
00710
00711 void
00712 ST2F_Use_Preg(TOKEN_BUFFER tokens,
00713 TY_IDX preg_ty,
00714 PREG_IDX preg_idx)
00715 {
00716
00717
00718
00719 const char *preg_name;
00720
00721 preg_ty = PUinfo_Preg_Type(preg_ty, preg_idx);
00722 preg_name = W2CF_Symtab_Nameof_Preg(preg_ty, preg_idx);
00723
00724
00725 if (!PUinfo_Is_Preg_Declared(preg_ty, preg_idx))
00726 {
00727 ST2F_Define_Preg(preg_name, preg_ty);
00728 PUinfo_Set_Preg_Declared(preg_ty, preg_idx);
00729 }
00730
00731 Append_Token_String(tokens, preg_name);
00732 }
00733
00734 void
00735 ST2F_Declare_Tempvar(TY_IDX ty, UINT idx)
00736 {
00737 TOKEN_BUFFER tmp_tokens = New_Token_Buffer();
00738 UINT current_indent = Current_Indentation();
00739
00740 Set_Current_Indentation(PUinfo_local_decls_indent);
00741 Append_F77_Indented_Newline(PUinfo_local_decls, 1, NULL);
00742 if (TY_Is_Pointer(ty))
00743 {
00744
00745
00746
00747
00748
00749 ty = Stab_Mtype_To_Ty(Pointer_Mtype);
00750 }
00751 Append_Token_String(tmp_tokens, W2CF_Symtab_Nameof_Tempvar(idx));
00752 TY2F_translate(tmp_tokens, ty);
00753 Append_And_Reclaim_Token_List(PUinfo_local_decls, &tmp_tokens);
00754 Set_Current_Indentation(current_indent);
00755 }
00756
00757
00758 static BOOL
00759 ST2F_Is_Dummy_Procedure(ST *st)
00760 {
00761
00762
00763 BOOL dummy = FALSE;
00764
00765 if (ST_sclass(st) == SCLASS_FORMAL && ST_is_value_parm(st))
00766 {
00767 TY_IDX ty = ST_type(st);
00768
00769 if (TY_kind(ty) == KIND_POINTER)
00770 if (TY_kind(TY_pointed(ty)) == KIND_FUNCTION)
00771 dummy = TRUE ;
00772 }
00773 return dummy ;
00774 }
00775
00776
00777 static void
00778 ST2F_Declare_Return_Type(TOKEN_BUFFER tokens,TY_IDX return_ty, const char *name)
00779 {
00780
00781
00782 if (return_ty != (TY_IDX) 0)
00783 {
00784 if (TY_kind(return_ty) != KIND_VOID)
00785 {
00786 TOKEN_BUFFER decl_tokens = New_Token_Buffer();
00787
00788 Append_F77_Indented_Newline(tokens, 1, NULL);
00789 Append_Token_String(decl_tokens, name);
00790
00791
00792
00793 if (TY_Is_Pointer(return_ty))
00794 TY2F_translate(decl_tokens, Stab_Mtype_To_Ty(TY_mtype(return_ty)));
00795 else
00796 TY2F_translate(decl_tokens, return_ty);
00797
00798 TY2F_Prepend_Structures(decl_tokens);
00799 Append_And_Reclaim_Token_List(tokens, &decl_tokens);
00800 }
00801 }
00802 }
00803
00804
00805
00806
00807
00808
00809
00810