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 #ifndef symtab_compatible_INCLUDED
00044 #define symtab_compatible_INCLUDED
00045
00046 #define SYMTAB_COMPATIBLE_DEVWARN_LIMIT 2
00047
00048
00049
00050 inline STR_IDX
00051 ST_name_idx (const ST* s) { return s->u1.name_idx; }
00052 inline void
00053 Set_ST_name_idx (ST* s, STR_IDX idx) { s->u1.name_idx = idx; }
00054 inline char *
00055 ST_name (const ST* s) { return &Str_Table[ST_name_idx (s)]; }
00056 #define Set_ST_name(s,idx) Set_ST_name_idx(s,idx)
00057
00058 inline TCON_IDX
00059 ST_tcon (const ST* s) { return s->u1.tcon; }
00060 inline void
00061 Set_ST_tcon (ST* s, TCON_IDX tcon) { s->u1.tcon = tcon; }
00062
00063 inline ST_CLASS
00064 ST_sym_class (const ST* s) { return s->sym_class; }
00065
00066 inline ST_CLASS
00067 ST_class (const ST* s) { return ST_sym_class (s); }
00068
00069 inline ST_CLASS
00070 ST_class (const ST& s) { return ST_sym_class (s); }
00071
00072 inline void
00073 Set_ST_class (ST* s, ST_CLASS c) { s->sym_class = c; }
00074
00075 inline ST_SCLASS
00076 ST_sclass (const ST* s) { return s->storage_class; }
00077
00078 inline void
00079 Set_ST_sclass (ST* s, ST_SCLASS sc) { s->storage_class = sc; }
00080
00081 inline ST_EXPORT
00082 ST_export (const ST* s) { return s->export_class; }
00083 inline void
00084 Set_ST_export (ST* s, ST_EXPORT export_class)
00085 {
00086 #ifdef Is_True_On
00087 ST_Verify_Sclass_Export (ST_sclass (s), export_class, s);
00088 #endif
00089 s->export_class = export_class;
00090 }
00091
00092 inline TY_IDX
00093 ST_type (const ST* s) {
00094 #ifdef Is_True_On
00095 switch (s->sym_class) {
00096 default:
00097 Fail_FmtAssertion ("Invalid argument for ST_type ()");
00098 case CLASS_VAR:
00099 case CLASS_CONST:
00100 case CLASS_PREG:
00101 case CLASS_NAME:
00102 case CLASS_TYPE:
00103 case CLASS_PARAMETER:
00104 return s->u2.type;
00105 case CLASS_FUNC:
00106 Lmt_DevWarn (SYMTAB_COMPATIBLE_DEVWARN_LIMIT,
00107 ("Should use ST_pu_type instead"));
00108 return PU_prototype (Pu_Table[s->u2.pu]);
00109 }
00110 #else
00111 if (s->sym_class == CLASS_FUNC) {
00112 Lmt_DevWarn (SYMTAB_COMPATIBLE_DEVWARN_LIMIT,
00113 ("Should use ST_pu_type instead"));
00114 return PU_prototype (Pu_Table[s->u2.pu]);
00115 } else {
00116 return s->u2.type;
00117 }
00118 #endif // Is_True_On
00119 }
00120 inline void
00121 Set_ST_type (ST* s, TY_IDX t) {
00122 #ifdef Is_True_On
00123 switch (s->sym_class) {
00124 default:
00125 Fail_FmtAssertion ("Invalid argument for ST_type ()");
00126 case CLASS_VAR:
00127 case CLASS_CONST:
00128 case CLASS_PREG:
00129 case CLASS_NAME:
00130 case CLASS_TYPE:
00131 case CLASS_PARAMETER:
00132 s->u2.type = t;
00133 }
00134 #else
00135 s->u2.type = t;
00136 #endif // Is_True_On
00137 }
00138
00139 inline TY_IDX
00140 ST_pu_type (const ST_IDX s) {
00141 Is_True (St_Table[s].sym_class == CLASS_FUNC, ("Invalid argument for ST_pu"));
00142 return PU_prototype (Pu_Table[ST_pu (St_Table[s])]);
00143 }
00144
00145 inline PU_IDX
00146 ST_pu (const ST* s) {
00147 Is_True (s->sym_class == CLASS_FUNC ||
00148 (s->sym_class == CLASS_NAME &&
00149 ST_asm_function_st(*s)),
00150 ("Invalid argument for ST_pu"));
00151 return s->u2.pu;
00152 }
00153 inline void
00154 Set_ST_pu (ST* s, PU_IDX pu)
00155 {
00156 Is_True (s->sym_class == CLASS_FUNC ||
00157 (s->sym_class == CLASS_NAME &&
00158 ST_asm_function_st(*s)),
00159 ("Invalid argument for ST_pu"));
00160 s->u2.pu = pu;
00161 }
00162
00163 inline BLK_IDX
00164 ST_blk (const ST* s) {
00165 Is_True (s->sym_class == CLASS_BLOCK, ("Invalid argument for ST_blk"));
00166 return s->u2.blk;
00167 }
00168 inline void
00169 Set_ST_blk (ST* s, BLK_IDX b)
00170 {
00171 Is_True (s->sym_class == CLASS_BLOCK, ("Invalid argument for ST_blk"));
00172 s->u2.blk = b;
00173 }
00174
00175 inline ST_IDX
00176 ST_st_idx (const ST* s)
00177 { return (s != NULL? s->st_idx : (ST_IDX) 0); }
00178 inline void
00179 Set_ST_st_idx (ST* s, ST_IDX idx) { s->st_idx = idx; }
00180
00181 inline BOOL
00182 ST_is_weak_symbol (const ST* s) { return s->flags & ST_IS_WEAK_SYMBOL;}
00183 inline void
00184 Set_ST_is_weak_symbol (ST* s) { s->flags |= ST_IS_WEAK_SYMBOL; }
00185 inline void
00186 Clear_ST_is_weak_symbol (ST* s) { s->flags &= ~ST_IS_WEAK_SYMBOL; }
00187
00188 inline BOOL
00189 ST_is_split_common (const ST* s) { return s->flags & ST_IS_SPLIT_COMMON;}
00190 inline void
00191 Set_ST_is_split_common (ST* s) { s->flags |= ST_IS_SPLIT_COMMON; }
00192 inline void
00193 Clear_ST_is_split_common (ST* s) { s->flags &= ~ST_IS_SPLIT_COMMON; }
00194
00195 inline ST_IDX
00196 ST_base_idx (const ST* s)
00197 {
00198 if (ST_is_split_common (s))
00199
00200 return s->base_idx;
00201 else if (ST_is_weak_symbol (s) && ST_sclass(s) == SCLASS_EXTERN)
00202 return s->st_idx;
00203 else
00204 return s->base_idx;
00205 }
00206 inline void
00207 Set_ST_base_idx (ST* s, ST_IDX base)
00208 {
00209 if (ST_is_split_common (s))
00210 Lmt_DevWarn (SYMTAB_COMPATIBLE_DEVWARN_LIMIT,
00211 ("Shouldn't set base when split"));
00212 if (ST_is_weak_symbol(s) && ST_sclass(s) == SCLASS_EXTERN)
00213 Lmt_DevWarn (SYMTAB_COMPATIBLE_DEVWARN_LIMIT,
00214 ("Shouldn't set base when weak"));
00215 s->base_idx = base;
00216 }
00217 inline ST*
00218 ST_base (const ST* s) { return &St_Table[ST_base_idx (s)]; }
00219 inline void
00220 Set_ST_base (ST* s, ST* base) { Set_ST_base_idx(s, ST_st_idx(base)); }
00221
00222 inline UINT64
00223 ST_ofst (const ST* s) { return s->offset; }
00224 inline void
00225 Set_ST_ofst (ST* s, UINT64 offset) { s->offset = offset; }
00226
00227
00228
00229 inline BOOL
00230 ST_is_not_used (const ST* s) { return s->flags & ST_IS_NOT_USED;}
00231 inline void
00232 Set_ST_is_not_used (ST* s) { s->flags |= ST_IS_NOT_USED; }
00233 inline void
00234 Clear_ST_is_not_used (ST* s) { s->flags &= ~ST_IS_NOT_USED; }
00235
00236 inline BOOL
00237 ST_is_initialized (const ST* s) { return s->flags & ST_IS_INITIALIZED;}
00238 inline void
00239 Set_ST_is_initialized (ST* s) { s->flags |= ST_IS_INITIALIZED; }
00240 inline void
00241 Clear_ST_is_initialized (ST* s) { s->flags &= ~ST_IS_INITIALIZED; }
00242
00243 inline BOOL
00244 ST_is_return_var (const ST* s) { return s->flags & ST_IS_RETURN_VAR;}
00245 inline void
00246 Set_ST_is_return_var (ST* s) { s->flags |= ST_IS_RETURN_VAR; }
00247 inline void
00248 Clear_ST_is_return_var (ST* s) { s->flags &= ~ST_IS_RETURN_VAR; }
00249
00250 inline BOOL
00251 ST_is_private (const ST* s) { return s->flags & ST_IS_PRIVATE;}
00252 inline void
00253 Set_ST_is_private (ST* s) { s->flags |= ST_IS_PRIVATE; }
00254 inline void
00255 Clear_ST_is_private (ST* s) { s->flags &= ~ST_IS_PRIVATE; }
00256
00257
00258 inline BOOL
00259 ST_is_value_parm (const ST* s) { return s->flags & ST_IS_VALUE_PARM;}
00260 inline void
00261 Set_ST_is_value_parm (ST* s) { s->flags |= ST_IS_VALUE_PARM; }
00262 inline void
00263 Clear_ST_is_value_parm (ST* s) { s->flags &= ~ST_IS_VALUE_PARM; }
00264
00265 inline BOOL
00266 ST_promote_parm (const ST* s) { return s->flags & ST_PROMOTE_PARM;}
00267 inline void
00268 Set_ST_promote_parm (ST* s) { s->flags |= ST_PROMOTE_PARM; }
00269 inline void
00270 Clear_ST_promote_parm (ST* s) { s->flags &= ~ST_PROMOTE_PARM; }
00271
00272 inline BOOL
00273 ST_keep_name_w2f (const ST* s) { return s->flags & ST_KEEP_NAME_W2F;}
00274 inline void
00275 Set_ST_keep_name_w2f (ST* s) { s->flags |= ST_KEEP_NAME_W2F; }
00276 inline void
00277 Clear_ST_keep_name_w2f (ST* s) { s->flags &= ~ST_KEEP_NAME_W2F; }
00278
00279 inline BOOL
00280 ST_is_datapool (const ST* s) { return s->flags & ST_IS_DATAPOOL;}
00281 inline void
00282 Set_ST_is_datapool (ST* s) { s->flags |= ST_IS_DATAPOOL; }
00283 inline void
00284 Clear_ST_is_datapool (ST* s) { s->flags &= ~ST_IS_DATAPOOL; }
00285
00286 inline BOOL
00287 ST_is_reshaped (const ST* s) { return s->flags & ST_IS_RESHAPED;}
00288 inline void
00289 Set_ST_is_reshaped (ST* s) { s->flags |= ST_IS_RESHAPED; }
00290 inline void
00291 Clear_ST_is_reshaped (ST* s) { s->flags &= ~ST_IS_RESHAPED; }
00292
00293 inline BOOL
00294 ST_is_deleted (const ST* s) { return s->flags_ext & ST_IS_DELETED;}
00295 inline void
00296 Set_ST_is_deleted (ST* s) { s->flags_ext |= ST_IS_DELETED; }
00297 inline void
00298 Clear_ST_is_deleted (ST* s) { s->flags_ext &= ~ST_IS_DELETED; }
00299
00300 inline BOOL
00301 ST_emit_symbol (const ST* s) { return s->flags & ST_EMIT_SYMBOL;}
00302 inline void
00303 Set_ST_emit_symbol (ST* s) { s->flags |= ST_EMIT_SYMBOL; }
00304 inline void
00305 Clear_ST_emit_symbol (ST* s) { s->flags &= ~ST_EMIT_SYMBOL; }
00306
00307 inline BOOL
00308 ST_has_nested_ref (const ST* s) { return s->flags & ST_HAS_NESTED_REF;}
00309 inline void
00310 Set_ST_has_nested_ref (ST* s) { s->flags |= ST_HAS_NESTED_REF; }
00311 inline void
00312 Clear_ST_has_nested_ref (ST* s) { s->flags &= ~ST_HAS_NESTED_REF; }
00313
00314 inline BOOL
00315 ST_init_value_zero (const ST* s) { return s->flags & ST_INIT_VALUE_ZERO;}
00316 inline void
00317 Set_ST_init_value_zero (ST* s) { s->flags |= ST_INIT_VALUE_ZERO; }
00318 inline void
00319 Clear_ST_init_value_zero (ST* s) { s->flags &= ~ST_INIT_VALUE_ZERO; }
00320
00321 inline BOOL
00322 ST_gprel (const ST* s) { return s->flags & ST_GPREL;}
00323 inline void
00324 Set_ST_gprel (ST* s) { s->flags |= ST_GPREL; }
00325 inline void
00326 Clear_ST_gprel (ST* s) { s->flags &= ~ST_GPREL; }
00327
00328 inline BOOL
00329 ST_not_gprel (const ST* s) { return s->flags & ST_NOT_GPREL;}
00330 inline void
00331 Set_ST_not_gprel (ST* s) { s->flags |= ST_NOT_GPREL; }
00332 inline void
00333 Clear_ST_not_gprel (ST* s) { s->flags &= ~ST_NOT_GPREL; }
00334
00335 inline BOOL
00336 ST_is_namelist (const ST* s) { return s->flags & ST_IS_NAMELIST;}
00337 inline void
00338 Set_ST_is_namelist (ST* s) { s->flags |= ST_IS_NAMELIST; }
00339 inline void
00340 Clear_ST_is_namelist (ST* s) { s->flags &= ~ST_IS_NAMELIST; }
00341
00342 inline BOOL
00343 ST_is_f90_target (const ST* s) { return s->flags & ST_IS_F90_TARGET;}
00344 inline void
00345 Set_ST_is_f90_target (ST* s) { s->flags |= ST_IS_F90_TARGET; }
00346 inline void
00347 Clear_ST_is_f90_target (ST* s) { s->flags &= ~ST_IS_F90_TARGET; }
00348
00349 inline BOOL
00350 ST_is_my_pointer (const ST* s) { return s->flags_ext & ST_IS_POINTER;}
00351 inline void
00352 Set_ST_is_my_pointer (ST* s) { s->flags_ext |= ST_IS_POINTER; }
00353 inline void
00354 Clear_ST_is_my_pointer (ST* s) { s->flags_ext &= ~ST_IS_POINTER; }
00355
00356 inline BOOL
00357 ST_is_in_module (const ST* s) { return s->flags_ext & ST_IS_IN_MODULE;}
00358 inline void
00359 Set_ST_is_in_module (ST* s) { s->flags_ext |= ST_IS_IN_MODULE; }
00360 inline void
00361 Clear_ST_is_in_module (ST* s) { s->flags_ext &= ~ST_IS_IN_MODULE; }
00362
00363 inline BOOL
00364 ST_is_block_data (const ST* s) { return s->flags_ext & ST_IS_BLOCK_DATA;}
00365 inline void
00366 Set_ST_is_block_data (ST* s) { s->flags_ext |= ST_IS_BLOCK_DATA; }
00367 inline void
00368 Clear_ST_is_block_data (ST* s) { s->flags_ext &= ~ST_IS_BLOCK_DATA; }
00369
00370
00371 inline BOOL
00372 ST_is_external (const ST* s) { return s->flags_ext & ST_IS_EXTERNAL;}
00373 inline void
00374 Set_ST_is_external (ST* s) { s->flags_ext |= ST_IS_EXTERNAL; }
00375 inline void
00376 Clear_ST_is_external (ST* s) { s->flags_ext &= ~ST_IS_EXTERNAL; }
00377
00378 inline BOOL
00379 ST_is_coarray_concurrent (const ST* s) { return s->flags_ext & ST_IS_COARRAY_CONCURRENT;}
00380 inline void
00381 Set_ST_is_coarray_concurrent (ST* s) { s->flags_ext |= ST_IS_COARRAY_CONCURRENT; }
00382 inline void
00383 Clear_ST_is_coarray_concurrent (ST* s) { s->flags_ext &= ~ST_IS_COARRAY_CONCURRENT; }
00384
00385 inline BOOL
00386 ST_is_M_imported (const ST* s) { return s->flags_ext & ST_IS_M_IMPORTED;}
00387 inline void
00388 Set_ST_is_M_imported (ST* s) { s->flags_ext |= ST_IS_M_IMPORTED; }
00389 inline void
00390 Clear_ST_is_M_imported (ST* s) { s->flags_ext &= ~ST_IS_M_IMPORTED; }
00391
00392
00393 inline BOOL
00394 ST_is_allocatable (const ST* s) { return s->flags_ext & ST_IS_ALLOCATABLE;}
00395 inline void
00396 Set_ST_is_allocatable (ST* s) { s->flags_ext |= ST_IS_ALLOCATABLE; }
00397 inline void
00398 Clear_ST_is_allocatable (ST* s) { s->flags_ext &= ~ST_IS_ALLOCATABLE; }
00399
00400
00401
00402 inline BOOL
00403 ST_declared_static (const ST* s) { return s->flags & ST_DECLARED_STATIC;}
00404 inline void
00405 Set_ST_declared_static (ST* s) { s->flags |= ST_DECLARED_STATIC; }
00406 inline void
00407 Clear_ST_declared_static (ST* s) { s->flags &= ~ST_DECLARED_STATIC; }
00408
00409 inline BOOL
00410 ST_is_equivalenced (const ST* s) { return s->flags & ST_IS_EQUIVALENCED;}
00411 inline void
00412 Set_ST_is_equivalenced (ST* s) { s->flags |= ST_IS_EQUIVALENCED; }
00413 inline void
00414 Clear_ST_is_equivalenced (ST* s) { s->flags &= ~ST_IS_EQUIVALENCED; }
00415
00416 inline BOOL
00417 ST_is_fill_align (const ST* s) { return s->flags & ST_IS_FILL_ALIGN;}
00418 inline void
00419 Set_ST_is_fill_align (ST* s) { s->flags |= ST_IS_FILL_ALIGN; }
00420 inline void
00421 Clear_ST_is_fill_align (ST* s) { s->flags &= ~ST_IS_FILL_ALIGN; }
00422
00423 inline BOOL
00424 ST_is_optional_argument (const ST* s) { return s->flags & ST_IS_OPTIONAL_ARGUMENT;}
00425 inline void
00426 Set_ST_is_optional_argument (ST* s) { s->flags |= ST_IS_OPTIONAL_ARGUMENT; }
00427 inline void
00428 Clear_ST_is_optional_argument (ST* s) { s->flags &= ~ST_IS_OPTIONAL_ARGUMENT; }
00429
00430 inline BOOL
00431 ST_is_intent_in_argument (const ST* s) { return s->flags_ext & ST_IS_INTENT_IN_ARGUMENT;}
00432 inline void
00433 Set_ST_is_intent_in_argument (ST* s) { s->flags_ext |= ST_IS_INTENT_IN_ARGUMENT; }
00434 inline void
00435 Clear_ST_is_intent_in_argument (ST* s) { s->flags_ext &= ~ST_IS_INTENT_IN_ARGUMENT; }
00436
00437 inline BOOL
00438 ST_is_intent_out_argument (const ST* s) { return s->flags_ext & ST_IS_INTENT_OUT_ARGUMENT;}
00439 inline void
00440 Set_ST_is_intent_out_argument (ST* s) { s->flags_ext |= ST_IS_INTENT_OUT_ARGUMENT; }
00441 inline void
00442 Clear_ST_is_intent_out_argument (ST* s) { s->flags_ext &= ~ST_IS_INTENT_OUT_ARGUMENT; }
00443
00444 inline BOOL
00445 ST_is_assign_interface (const ST* s) { return s->flags_ext & ST_IS_ASSIGN_INTERFACE;}
00446 inline void
00447 Set_ST_is_assign_interface (ST* s) { s->flags_ext |= ST_IS_ASSIGN_INTERFACE; }
00448 inline void
00449 Clear_ST_is_assign_interface (ST* s) { s->flags_ext &= ~ST_IS_ASSIGN_INTERFACE; }
00450
00451 inline BOOL
00452 ST_is_operator_interface (const ST* s) { return s->flags_ext & ST_IS_OPERATOR_INTERFACE;}
00453 inline void
00454 Set_ST_is_operator_interface (ST* s) { s->flags_ext |= ST_IS_OPERATOR_INTERFACE; }
00455 inline void
00456 Clear_ST_is_operator_interface (ST* s) { s->flags_ext &= ~ST_IS_OPERATOR_INTERFACE; }
00457
00458 inline BOOL
00459 ST_is_u_operator_interface (const ST* s) { return s->flags_ext & ST_IS_U_OPERATOR_INTERFACE;}
00460 inline void
00461 Set_ST_is_u_operator_interface (ST* s) { s->flags_ext |= ST_IS_U_OPERATOR_INTERFACE; }
00462 inline void
00463 Clear_ST_is_u_operator_interface (ST* s) { s->flags_ext &= ~ST_IS_U_OPERATOR_INTERFACE; }
00464
00465 inline BOOL
00466 ST_is_parameter (const ST* s) { return s->flags_ext & ST_IS_PARAMETER;}
00467 inline void
00468 Set_ST_is_parameter (ST* s) { s->flags_ext |= ST_IS_PARAMETER; }
00469 inline void
00470 Clear_ST_is_parameter (ST* s) { s->flags_ext &= ~ST_IS_PARAMETER; }
00471
00472 inline BOOL
00473 ST_keep_in_openad(const ST* s) { return s->flags_ext & ST_KEEP_IN_OPENAD;}
00474 inline void
00475 Set_ST_keep_in_openad(ST* s) { s->flags_ext |= ST_KEEP_IN_OPENAD; }
00476 inline void
00477 Clear_ST_keep_in_openad(ST* s) { s->flags_ext &= ~ST_KEEP_IN_OPENAD; }
00478
00479 inline BOOL
00480 ST_is_temp_var (const ST* s) { return s->flags & ST_IS_TEMP_VAR;}
00481 inline void
00482 Set_ST_is_temp_var (ST* s) { s->flags |= ST_IS_TEMP_VAR; }
00483 inline void
00484 Clear_ST_is_temp_var (ST* s) { s->flags &= ~ST_IS_TEMP_VAR; }
00485
00486 inline BOOL
00487 ST_is_const_var (const ST* s) { return s->flags & ST_IS_CONST_VAR;}
00488 inline void
00489 Set_ST_is_const_var (ST* s) { s->flags |= ST_IS_CONST_VAR; }
00490 inline void
00491 Clear_ST_is_const_var (ST* s) { s->flags &= ~ST_IS_CONST_VAR; }
00492
00493 inline BOOL
00494 ST_addr_saved (const ST* s) { return s->flags & ST_ADDR_SAVED;}
00495 inline void
00496 Set_ST_addr_saved (ST* s) { s->flags |= ST_ADDR_SAVED; }
00497 inline void
00498 Clear_ST_addr_saved (ST* s) { s->flags &= ~ST_ADDR_SAVED; }
00499
00500 inline BOOL
00501 ST_addr_passed (const ST* s) { return s->flags & ST_ADDR_PASSED;}
00502 inline void
00503 Set_ST_addr_passed (ST* s) { s->flags |= ST_ADDR_PASSED; }
00504 inline void
00505 Clear_ST_addr_passed (ST* s) { s->flags &= ~ST_ADDR_PASSED; }
00506
00507
00508
00509 inline BOOL
00510 ST_addr_not_saved(const ST &s) { return !(s.flags & ST_ADDR_SAVED); }
00511 inline void
00512 Set_ST_addr_not_saved(ST &s) { s.flags &= ~ST_ADDR_SAVED; }
00513 inline void
00514 Clear_ST_addr_not_saved(ST &s) { s.flags |= ST_ADDR_SAVED; }
00515
00516 inline BOOL
00517 ST_addr_not_passed(const ST &s) { return !(s.flags & ST_ADDR_PASSED); }
00518 inline void
00519 Set_ST_addr_not_passed(ST &s) { s.flags &= ~ST_ADDR_PASSED; }
00520 inline void
00521 Clear_ST_addr_not_passed(ST &s) { s.flags |= ST_ADDR_PASSED; }
00522
00523 inline BOOL
00524 ST_addr_not_saved (const ST* s) { return !(s->flags & ST_ADDR_SAVED); }
00525 inline void
00526 Set_ST_addr_not_saved (ST* s) { s->flags &= ~ST_ADDR_SAVED; }
00527 inline void
00528 Clear_ST_addr_not_saved (ST* s) { s->flags |= ST_ADDR_SAVED; }
00529
00530 inline BOOL
00531 ST_addr_not_passed (const ST* s) { return !(s->flags & ST_ADDR_PASSED);}
00532 inline void
00533 Set_ST_addr_not_passed (ST* s) { s->flags &= ~ST_ADDR_PASSED; }
00534 inline void
00535 Clear_ST_addr_not_passed (ST* s) { s->flags |= ST_ADDR_PASSED; }
00536
00537 inline BOOL
00538 ST_is_thread_private (const ST* s) { return s->flags & ST_IS_THREAD_PRIVATE;}
00539 inline void
00540 Set_ST_is_thread_private (ST* s) { s->flags |= ST_IS_THREAD_PRIVATE; }
00541 inline void
00542 Clear_ST_is_thread_private (ST* s) { s->flags &= ~ST_IS_THREAD_PRIVATE; }
00543
00544 inline BOOL
00545 ST_pt_to_unique_mem (const ST* s) { return s->flags & ST_PT_TO_UNIQUE_MEM;}
00546 inline void
00547 Set_ST_pt_to_unique_mem (ST* s) { s->flags |= ST_PT_TO_UNIQUE_MEM; }
00548 inline void
00549 Clear_ST_pt_to_unique_mem (ST* s) { s->flags &= ~ST_PT_TO_UNIQUE_MEM; }
00550
00551 inline BOOL
00552 ST_pt_to_compiler_generated_mem (const ST* s)
00553 { return s->flags & ST_PT_TO_COMPILER_GENERATED_MEM;}
00554 inline void
00555 Set_ST_pt_to_compiler_generated_mem (ST* s)
00556 { s->flags |= ST_PT_TO_COMPILER_GENERATED_MEM; }
00557 inline void
00558 Clear_ST_pt_to_compiler_generated_mem (ST* s)
00559 { s->flags &= ~ST_PT_TO_COMPILER_GENERATED_MEM; }
00560
00561 inline BOOL
00562 ST_assigned_to_dedicated_preg (const ST* s)
00563 { return s->flags & ST_ASSIGNED_TO_DEDICATED_PREG;}
00564 inline void
00565 Set_ST_assigned_to_dedicated_preg (ST* s)
00566 { s->flags |= ST_ASSIGNED_TO_DEDICATED_PREG; }
00567 inline void
00568 Clear_ST_assigned_to_dedicated_preg (ST* s)
00569 { s->flags &= ~ST_ASSIGNED_TO_DEDICATED_PREG; }
00570
00571 inline BOOL
00572 ST_addr_taken (const ST* s)
00573 {
00574 return ST_addr_saved(s) || ST_addr_passed(s);
00575 }
00576
00577 inline ST*
00578 ST_full (const ST* s) {
00579 FmtAssert (ST_is_split_common (s), ("Expecting a split common"));
00580 return &St_Table[s->base_idx];
00581 }
00582 inline ST*
00583 ST_strong (const ST* s) {
00584 FmtAssert (ST_is_weak_symbol (s), ("Expecting a weak symbol"));
00585 return &St_Table[s->base_idx];
00586 }
00587
00588 inline TCON&
00589 STC_val (const ST* s) { return Tcon_Table[ST_tcon (s)]; }
00590
00591 inline void
00592 Print_ST (FILE *f, const ST* st, BOOL) { st->Print (f); }
00593
00594
00595
00596 inline UINT
00597 TY_id (TY_IDX ty) { return TY_IDX_index (ty); }
00598
00599 inline FLD_HANDLE
00600 TY_flist (const TY& ty) { return TY_fld (ty); }
00601
00602
00603
00604
00605
00606
00607
00608 inline void Print_TY (FILE* f, TY_IDX tyi) {
00609 Ty_Table[tyi].Print (f);
00610 }
00611
00612
00613
00614
00615
00616 inline TY_IDX
00617 TYLIST_item (const TYLIST_IDX tli) { return TYLIST_type(tli); }
00618 inline TYLIST_IDX
00619 TYLIST_next (const TYLIST_IDX tli) { return tli+1; }
00620
00621
00622
00623
00624
00625 inline FLD_HANDLE
00626 FLD_next (FLD_HANDLE f)
00627 {
00628 if (FLD_last_field (f))
00629 return FLD_HANDLE();
00630 else
00631 return FLD_HANDLE (f.Idx() + 1);
00632 }
00633
00634
00635
00636
00637
00638
00639 inline BOOL
00640 TY_AR_const_lbnd (const TY& ty, INT32 i)
00641 {
00642 return ARB_const_lbnd (TY_arb(ty)[i]);
00643 }
00644
00645 inline void
00646 Set_TY_AR_const_lbnd (const TY& ty, INT32 i)
00647 {
00648 Set_ARB_const_lbnd (TY_arb(ty)[i]);
00649 }
00650
00651 inline void
00652 Clear_TY_AR_const_lbnd (const TY& ty, INT32 i)
00653 {
00654 Clear_ARB_const_lbnd (TY_arb(ty)[i]);
00655 }
00656
00657 inline BOOL
00658 TY_AR_const_ubnd (const TY& ty, INT32 i)
00659 {
00660 return ARB_const_ubnd(TY_arb(ty)[i]);
00661 }
00662
00663 inline void
00664 Set_TY_AR_const_ubnd (const TY& ty, INT32 i)
00665 {
00666 Set_ARB_const_ubnd (TY_arb(ty)[i]);
00667 }
00668
00669 inline void
00670 Clear_TY_AR_const_ubnd (const TY& ty, INT32 i)
00671 {
00672 Clear_ARB_const_ubnd (TY_arb(ty)[i]);
00673 }
00674
00675 inline BOOL
00676 TY_AR_const_stride (const TY& ty, INT32 i)
00677 {
00678 return ARB_const_stride(TY_arb(ty)[i]);
00679 }
00680
00681 inline void
00682 Set_TY_AR_const_stride (const TY& ty, INT32 i)
00683 {
00684 Set_ARB_const_stride (TY_arb(ty)[i]);
00685 }
00686
00687 inline void
00688 Clear_TY_AR_const_stride (const TY& ty, INT32 i)
00689 {
00690 Clear_ARB_const_stride (TY_arb(ty)[i]);
00691 }
00692
00693 inline BOOL
00694 TY_AR_empty_lbnd (const TY& ty, INT32 i)
00695 {
00696 return ARB_empty_lbnd (TY_arb(ty)[i]);
00697 }
00698
00699 inline void
00700 Set_TY_AR_empty_lbnd (const TY& ty, INT32 i)
00701 {
00702 Set_ARB_empty_lbnd (TY_arb(ty)[i]);
00703 }
00704
00705 inline void
00706 Clear_TY_AR_empty_lbnd (const TY& ty, INT32 i)
00707 {
00708 Clear_ARB_const_lbnd (TY_arb(ty)[i]);
00709 }
00710
00711 inline BOOL
00712 TY_AR_empty_ubnd (const TY& ty, INT32 i)
00713 {
00714 return ARB_empty_ubnd(TY_arb(ty)[i]);
00715 }
00716
00717 inline void
00718 Set_TY_AR_empty_ubnd (const TY& ty, INT32 i)
00719 {
00720 Set_ARB_empty_ubnd (TY_arb(ty)[i]);
00721 }
00722
00723 inline void
00724 Clear_TY_AR_empty_ubnd (const TY& ty, INT32 i)
00725 {
00726 Clear_ARB_empty_ubnd (TY_arb(ty)[i]);
00727 }
00728
00729 inline BOOL
00730 TY_AR_star_ubnd (const TY& ty, INT32 i)
00731 {
00732 return ARB_star_ubnd(TY_arb(ty)[i]);
00733 }
00734
00735 inline void
00736 Set_TY_AR_star_ubnd (const TY& ty, INT32 i)
00737 {
00738 Set_ARB_star_ubnd (TY_arb(ty)[i]);
00739 }
00740
00741 inline void
00742 Clear_TY_AR_star_ubnd (const TY& ty, INT32 i)
00743 {
00744 Clear_ARB_star_ubnd (TY_arb(ty)[i]);
00745 }
00746 inline BOOL
00747 TY_AR_empty_stride (const TY& ty, INT32 i)
00748 {
00749 return ARB_empty_stride(TY_arb(ty)[i]);
00750 }
00751
00752 inline void
00753 Set_TY_AR_empty_stride (const TY& ty, INT32 i)
00754 {
00755 Set_ARB_empty_stride (TY_arb(ty)[i]);
00756 }
00757
00758 inline void
00759 Clear_TY_AR_empty_stride (const TY& ty, INT32 i)
00760 {
00761 Clear_ARB_empty_stride (TY_arb(ty)[i]);
00762 }
00763
00764
00765
00766 inline BOOL
00767 TY_AR_last_dimen (const TY& ty, INT32 i)
00768 {
00769 return ARB_last_dimen(TY_arb(ty)[i]);
00770 }
00771
00772 inline INT64
00773 TY_AR_lbnd_val (const TY& ty, INT32 i)
00774 {
00775 return ARB_lbnd_val(TY_arb(ty)[i]);
00776 }
00777
00778 inline void
00779 Set_TY_AR_lbnd_val (const TY& ty, INT32 i, INT64 v)
00780 {
00781 Set_ARB_lbnd_val (TY_arb(ty)[i], v);
00782 }
00783
00784 inline ST_IDX
00785 TY_AR_lbnd_var (const TY& ty, INT32 i)
00786 {
00787 return ARB_lbnd_var(TY_arb(ty)[i]);
00788 }
00789
00790 inline void
00791 Set_TY_AR_lbnd_var (const TY& ty, INT32 i, ST_IDX s)
00792 {
00793 Set_ARB_lbnd_var (TY_arb(ty)[i], s);
00794 }
00795
00796 inline INT64
00797 TY_AR_ubnd_val (const TY& ty, INT32 i)
00798 {
00799 return ARB_ubnd_val(TY_arb(ty)[i]);
00800 }
00801
00802 inline void
00803 Set_TY_AR_ubnd_val (const TY& ty, INT32 i, INT64 v)
00804 {
00805 Set_ARB_ubnd_val (TY_arb(ty)[i], v);
00806 }
00807
00808 inline ST_IDX
00809 TY_AR_ubnd_var (const TY& ty, INT32 i)
00810 {
00811 return ARB_ubnd_var(TY_arb(ty)[i]);
00812 }
00813
00814 inline void
00815 Set_TY_AR_ubnd_var (const TY& ty, INT32 i, ST_IDX s)
00816 {
00817 Set_ARB_ubnd_var (TY_arb(ty)[i], s);
00818 }
00819
00820 inline INT64
00821 TY_AR_stride_val (const TY& ty, INT32 i)
00822 {
00823 return ARB_stride_val(TY_arb(ty)[i]);
00824 }
00825
00826 inline void
00827 Set_TY_AR_stride_val (const TY& ty, INT32 i, INT64 v)
00828 {
00829 Set_ARB_stride_val (TY_arb(ty)[i], v);
00830 }
00831
00832 inline ST_IDX
00833 TY_AR_stride_var (const TY& ty, INT32 i)
00834 {
00835 return ARB_stride_var(TY_arb(ty)[i]);
00836 }
00837
00838 inline void
00839 Set_TY_AR_stride_var (const TY& ty, INT32 i, ST_IDX s)
00840 {
00841 Set_ARB_stride_var (TY_arb(ty)[i], s);
00842 }
00843
00844 inline TY_IDX
00845 TY_AR_etype (const TY& ty) { return TY_etype (ty); }
00846
00847 inline INT32
00848 TY_AR_ndims (const TY& ty)
00849 {
00850 return ARB_dimension (TY_arb (ty));
00851 }
00852
00853
00854
00855
00856 inline BOOL
00857 TY_AR_const_lbnd (const TY_IDX ty_idx, INT32 i)
00858 {
00859 return TY_AR_const_lbnd (Ty_Table[ty_idx], i);
00860 }
00861
00862 inline void
00863 Set_TY_AR_const_lbnd (const TY_IDX ty_idx, INT32 i)
00864 {
00865 Set_TY_AR_const_lbnd (Ty_Table[ty_idx], i);
00866 }
00867
00868 inline void
00869 Clear_TY_AR_const_lbnd (const TY_IDX ty_idx, INT32 i)
00870 {
00871 Clear_TY_AR_const_lbnd (Ty_Table[ty_idx], i);
00872 }
00873
00874 inline BOOL
00875 TY_AR_const_ubnd (const TY_IDX ty_idx, INT32 i)
00876 {
00877 return TY_AR_const_ubnd (Ty_Table[ty_idx], i);
00878 }
00879
00880 inline void
00881 Set_TY_AR_const_ubnd (const TY_IDX ty_idx, INT32 i)
00882 {
00883 Set_TY_AR_const_ubnd (Ty_Table[ty_idx], i);
00884 }
00885
00886 inline void
00887 Clear_TY_AR_const_ubnd (const TY_IDX ty_idx, INT32 i)
00888 {
00889 Clear_TY_AR_const_ubnd (Ty_Table[ty_idx], i);
00890 }
00891
00892 inline BOOL
00893 TY_AR_const_stride (const TY_IDX ty_idx, INT32 i)
00894 {
00895 return TY_AR_const_stride(Ty_Table[ty_idx], i);
00896 }
00897
00898 inline void
00899 Set_TY_AR_const_stride (const TY_IDX ty_idx, INT32 i)
00900 {
00901 Set_TY_AR_const_stride (Ty_Table[ty_idx], i);
00902 }
00903
00904 inline void
00905 Clear_TY_AR_const_stride (const TY_IDX ty_idx, INT32 i)
00906 {
00907 Clear_TY_AR_const_stride (Ty_Table[ty_idx], i);
00908 }
00909
00910 inline BOOL
00911 TY_AR_last_dimen (const TY_IDX ty_idx, INT32 i)
00912 {
00913 return TY_AR_last_dimen(Ty_Table[ty_idx], i);
00914 }
00915
00916 inline INT64
00917 TY_AR_lbnd_val (const TY_IDX ty_idx, INT32 i)
00918 {
00919 return TY_AR_lbnd_val(Ty_Table[ty_idx], i);
00920 }
00921
00922 inline void
00923 Set_TY_AR_lbnd_val (const TY_IDX ty_idx, INT32 i, INT64 v)
00924 {
00925 Set_TY_AR_lbnd_val (Ty_Table[ty_idx], i, v);
00926 }
00927
00928 inline ST_IDX
00929 TY_AR_lbnd_var (const TY_IDX ty_idx, INT32 i)
00930 {
00931 return TY_AR_lbnd_var(Ty_Table[ty_idx], i);
00932 }
00933
00934 inline void
00935 Set_TY_AR_lbnd_var (const TY_IDX ty_idx, INT32 i, ST_IDX s)
00936 {
00937 Set_TY_AR_lbnd_var (Ty_Table[ty_idx], i, s);
00938 }
00939
00940 inline INT64
00941 TY_AR_ubnd_val (const TY_IDX ty_idx, INT32 i)
00942 {
00943 return TY_AR_ubnd_val(Ty_Table[ty_idx], i);
00944 }
00945
00946 inline void
00947 Set_TY_AR_ubnd_val (const TY_IDX ty_idx, INT32 i, INT64 v)
00948 {
00949 Set_TY_AR_ubnd_val (Ty_Table[ty_idx], i, v);
00950 }
00951
00952 inline ST_IDX
00953 TY_AR_ubnd_var (const TY_IDX ty_idx, INT32 i)
00954 {
00955 return TY_AR_ubnd_var(Ty_Table[ty_idx], i);
00956 }
00957
00958 inline void
00959 Set_TY_AR_ubnd_var (const TY_IDX ty_idx, INT32 i, ST_IDX s)
00960 {
00961 Set_TY_AR_ubnd_var (Ty_Table[ty_idx], i, s);
00962 }
00963
00964 inline INT64
00965 TY_AR_stride_val (const TY_IDX ty_idx, INT32 i)
00966 {
00967 return TY_AR_stride_val(Ty_Table[ty_idx], i);
00968 }
00969
00970 inline void
00971 Set_TY_AR_stride_val (const TY_IDX ty_idx, INT32 i, INT64 v)
00972 {
00973 Set_TY_AR_stride_val (Ty_Table[ty_idx], i, v);
00974 }
00975
00976 inline ST_IDX
00977 TY_AR_stride_var (const TY_IDX ty_idx, INT32 i)
00978 {
00979 return TY_AR_stride_var(Ty_Table[ty_idx], i);
00980 }
00981
00982 inline void
00983 Set_TY_AR_stride_var (const TY_IDX ty_idx, INT32 i, ST_IDX s)
00984 {
00985 Set_TY_AR_stride_var (Ty_Table[ty_idx], i, s);
00986 }
00987
00988 inline TY_IDX
00989 TY_AR_etype (const TY_IDX ty_idx) { return TY_AR_etype (Ty_Table[ty_idx]); }
00990
00991 inline INT32
00992 TY_AR_ndims (const TY_IDX ty_idx)
00993 {
00994 return ARB_dimension (TY_arb (Ty_Table[ty_idx]));
00995 }
00996
00997
00998
00999 inline SYMTAB_IDX
01000 PU_lexical_level (const PU_IDX pui) { return Pu_Table[pui].lexical_level; }
01001
01002 inline BOOL
01003 PU_has_exc_scopes (const PU_IDX pui) { return Pu_Table[pui].flags & PU_HAS_EXC_SCOPES; }
01004
01005 inline BOOL
01006 PU_in_elf_section (const PU_IDX pui) { return Pu_Table[pui].flags & PU_IN_ELF_SECTION; }
01007
01008 inline BOOL
01009 PU_is_mainpu (const PU_IDX pui) { return Pu_Table[pui].flags & PU_IS_MAINPU; }
01010
01011 inline UINT64
01012 PU_src_lang (const PU_IDX pui) { return Pu_Table[pui].src_lang; }
01013
01014
01015 #define SYMTAB_parent(s) (s-1)
01016
01017
01018
01019 inline STR_IDX
01020 LABEL_name_idx (const LABEL_IDX idx) { return Label_Table[idx].name_idx; }
01021
01022 #define Set_LABEL_kind(l,k) Set_LABEL_KIND(l,k)
01023
01024 inline BOOL
01025 LABEL_begin_eh_range (const LABEL_IDX lbi)
01026 {
01027 return (LABEL_kind(Label_Table[lbi]) == LKIND_BEGIN_EH_RANGE);
01028 }
01029 inline void
01030 Set_LABEL_begin_eh_range (LABEL_IDX lbi)
01031 {
01032 Set_LABEL_kind(Label_Table[lbi], LKIND_BEGIN_EH_RANGE);
01033 }
01034 inline BOOL
01035 LABEL_end_eh_range (const LABEL_IDX lbi)
01036 {
01037 return (LABEL_kind(Label_Table[lbi]) == LKIND_END_EH_RANGE);
01038 }
01039 inline void
01040 Set_LABEL_end_eh_range (LABEL_IDX lbi)
01041 {
01042 Set_LABEL_kind(Label_Table[lbi], LKIND_END_EH_RANGE);
01043 }
01044 inline BOOL
01045 LABEL_target_of_goto_outer_block (const LABEL_IDX lbi)
01046 {
01047 return (LABEL_target_of_goto_outer_block(Label_Table[lbi]));
01048 }
01049 inline void
01050 Set_LABEL_target_of_goto_outer_block (const LABEL_IDX lbi)
01051 {
01052 Set_LABEL_target_of_goto_outer_block(Label_Table[lbi]);
01053 }
01054 inline void
01055 Clear_LABEL_target_of_goto_outer_block (const LABEL_IDX lbi)
01056 {
01057 Clear_LABEL_target_of_goto_outer_block(Label_Table[lbi]);
01058 }
01059 inline BOOL
01060 LABEL_addr_saved (const LABEL_IDX lbi)
01061 {
01062 return (LABEL_addr_saved(Label_Table[lbi]));
01063 }
01064 inline void
01065 Set_LABEL_addr_saved (const LABEL_IDX lbi)
01066 {
01067 Set_LABEL_addr_saved(Label_Table[lbi]);
01068 }
01069 inline void
01070 Clear_LABEL_addr_saved (const LABEL_IDX lbi)
01071 {
01072 Clear_LABEL_addr_saved(Label_Table[lbi]);
01073 }
01074 inline BOOL
01075 LABEL_addr_passed (const LABEL_IDX lbi)
01076 {
01077 return (LABEL_addr_passed(Label_Table[lbi]));
01078 }
01079 inline void
01080 Set_LABEL_addr_passed (const LABEL_IDX lbi)
01081 {
01082 Set_LABEL_addr_passed(Label_Table[lbi]);
01083 }
01084 inline void
01085 Clear_LABEL_addr_passed (const LABEL_IDX lbi)
01086 {
01087 Clear_LABEL_addr_passed(Label_Table[lbi]);
01088 }
01089
01090
01091
01092
01093
01094
01095
01096
01097
01098
01099
01100 #endif // symtab_compatible_INCLUDED