Open64 (mfef90, whirl2f, and IR tools)  TAG: version-openad; SVN changeset: 916
symtab_compatible.h
Go to the documentation of this file.
00001 /*
00002 
00003   Copyright (C) 2000, 2001 Silicon Graphics, Inc.  All Rights Reserved.
00004 
00005   This program is free software; you can redistribute it and/or modify it
00006   under the terms of version 2 of the GNU General Public License as
00007   published by the Free Software Foundation.
00008 
00009   This program is distributed in the hope that it would be useful, but
00010   WITHOUT ANY WARRANTY; without even the implied warranty of
00011   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
00012 
00013   Further, this software is distributed without any warranty that it is
00014   free of the rightful claim of any third person regarding infringement 
00015   or the like.  Any license provided herein, whether implied or 
00016   otherwise, applies only to this software file.  Patent licenses, if 
00017   any, provided herein do not apply to combinations of this program with 
00018   other software, or any other product whatsoever.  
00019 
00020   You should have received a copy of the GNU General Public License along
00021   with this program; if not, write the Free Software Foundation, Inc., 59
00022   Temple Place - Suite 330, Boston MA 02111-1307, USA.
00023 
00024   Contact information:  Silicon Graphics, Inc., 1600 Amphitheatre Pky,
00025   Mountain View, CA 94043, or:
00026 
00027   http://www.sgi.com
00028 
00029   For further information regarding this notice, see:
00030 
00031   http://oss.sgi.com/projects/GenInfo/NoticeExplan
00032 
00033 */
00034 
00035 
00036 /* -*-Mode: c++;-*- (Tell emacs to use c++ mode) */
00037 
00038 // These functions are defined to be compatible with the old symbol table
00039 // format.  They are defined to ease the transition to the new symbol table.
00040 // Once the transition is over, this file will be removed.
00041 
00042 
00043 #ifndef symtab_compatible_INCLUDED
00044 #define symtab_compatible_INCLUDED
00045 
00046 #define SYMTAB_COMPATIBLE_DEVWARN_LIMIT 2
00047 
00048 // access functions for ST
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                         // for compatibility
00067 ST_class (const ST* s)                  { return ST_sym_class (s); }
00068 
00069 inline ST_CLASS                         // for compatibility
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 //        return s->st_idx;
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 // ST flags
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 // Please stop using the following functions (*ST_addr_not_*). They
00508 // are going away *soon*!
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 // TY
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 // TY flags
00604 //
00605 
00606 // TY pu_flags
00607 
00608 inline void Print_TY (FILE* f, TY_IDX tyi) {
00609   Ty_Table[tyi].Print (f);
00610 }
00611 
00612 //
00613 // TYLIST
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 // FLD
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 // TY_AR
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 // TY_AR with TY_IDX
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 // PU
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 // decrement the symtab/scope level
01015 #define SYMTAB_parent(s)        (s-1)
01016 
01017 // LABEL
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 // PREG
01091 /*
01092 inline void
01093 Set_Preg_Name(PREG_NUM preg_num, const char *const name)
01094 {
01095   Is_True(preg_num > Last_Dedicated_Preg_Offset,
01096           ("Set_Preg_Name: Cannot set name of dedicated PREG"));
01097   Set_PREG_name(Preg_Table[preg_num - Last_Dedicated_Preg_Offset], name);
01098 }
01099 */
01100 #endif // symtab_compatible_INCLUDED
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines