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 #ifndef symtab_INCLUDED
00039 #define symtab_INCLUDED
00040
00041
00042
00043
00044 #include <list>
00045 using namespace std;
00046
00047 #ifndef segmented_array_INCLUDED
00048 #include "segmented_array.h"
00049 #endif
00050
00051 #ifndef cmplr_segmented_array_INCLUDED
00052 #include "cmplr_segmented_array.h"
00053 #endif
00054
00055 #ifndef symtab_idx_INCLUDED
00056 #include "symtab_idx.h"
00057 #endif
00058
00059 #ifndef mtypes_INCLUDED
00060 #include "mtypes.h"
00061 #endif
00062
00063 #ifndef targ_const_INCLUDED
00064 #include "targ_const.h"
00065 #endif
00066
00067 #ifndef strtab_INCLUDED
00068 #include "strtab.h"
00069 #endif
00070
00071 #ifndef irbdata_defs_INCLUDED
00072 #include "irbdata_defs.h"
00073 #endif
00074
00075 #include "symtab_defs.h"
00076 #include "symtab_verify.h"
00077 #include "symtab_access.h"
00078 #include "symtab_utils.h"
00079 #include "symtab_compatible.h"
00080
00081
00082
00083
00084
00085
00086
00087 inline ST*
00088 New_ST (SYMTAB_IDX level)
00089 {
00090 UINT idx;
00091 ST& s = Scope_tab[level].st_tab->New_entry (idx);
00092 Set_ST_st_idx (s, make_ST_IDX (idx, level));
00093 return &s;
00094 }
00095
00096 inline ST *
00097 New_ST () { return New_ST (CURRENT_SYMTAB); }
00098
00099
00100 inline void
00101 ST_Init (ST* st, STR_IDX n, ST_CLASS sc, ST_SCLASS stc, ST_EXPORT exp,
00102 TY_IDX t)
00103 {
00104 st->u1.name_idx = n;
00105 st->sym_class = sc;
00106 st->storage_class = stc;
00107 st->export_class = exp;
00108 st->u2.type = t;
00109 st->base_idx = st->st_idx;
00110 st->offset = 0;
00111 st->flags = 0;
00112 st->flags_ext = 0;
00113
00114 if (sc == CLASS_VAR || sc == CLASS_PARAMETER)
00115 Set_ST_keep_name_w2f(st);
00116 }
00117
00118 inline void
00119 Set_ST_classes (ST* s, ST_CLASS c, ST_SCLASS sc)
00120 {
00121 #ifdef Is_True_On
00122 ST_Verify_Class_Sclass (c, sc);
00123 #endif
00124 s->sym_class = c;
00125 s->storage_class = sc;
00126 }
00127
00128
00129 inline UINT32
00130 ST_Table_Size (SYMTAB_IDX level) {
00131 return Scope_tab[level].st_tab->Size ();
00132 }
00133
00134
00135 inline char *
00136 ST_name (ST_IDX idx) { return ST_name (St_Table[idx]); }
00137
00138 inline ST_CLASS
00139 ST_class (const ST_IDX s) { return ST_class (St_Table[s]); }
00140
00141 inline ST_SCLASS
00142 ST_sclass (const ST_IDX s) { return ST_sclass(St_Table[s]); }
00143
00144 inline TY_IDX
00145
00146 ST_type (const ST_IDX s)
00147
00148 {
00149 if (! TY_is_f90_pointer(ST_type(St_Table[s])))
00150 return ST_type(St_Table[s]);
00151 else
00152 return TY_pointed(ST_type(St_Table[s]));
00153 }
00154
00155 inline TYPE_ID
00156 ST_mtype (const ST* s) {
00157 return TY_mtype (Ty_Table[ST_type (s)]);
00158 }
00159 inline TYPE_ID
00160 ST_btype (const ST* s) { return ST_mtype(s); }
00161
00162 inline void
00163 Set_ST_base (ST& s, ST& base) { s.base_idx = ST_st_idx(base); }
00164
00165 inline ST&
00166 ST_base (const ST& s) { return St_Table[ST_base_idx (s)]; }
00167
00168 inline ST&
00169 ST_strong (const ST& s) {
00170 FmtAssert (ST_is_weak_symbol (s), ("Expecting a weak symbol"));
00171 return St_Table[s.base_idx];
00172 }
00173
00174 inline ST&
00175 ST_full (const ST& s) {
00176 FmtAssert (ST_is_split_common (s), ("Expecting a split common"));
00177 return St_Table[s.base_idx];
00178 }
00179
00180 inline TCON&
00181 ST_tcon_val (const ST* s) { return Tcon_Table[ST_tcon (s)]; }
00182
00183
00184 inline BOOL
00185 ST_is_preemptible (const ST* s) {
00186 return (ST_export (s) == EXPORT_PREEMPTIBLE ||
00187 ST_export (s) == EXPORT_OPTIONAL);
00188 }
00189
00190 inline BOOL
00191 ST_is_export_local (const ST *s)
00192 {
00193
00194 return (ST_export(s) == EXPORT_LOCAL ||
00195 ST_export(s) == EXPORT_LOCAL_INTERNAL);
00196 }
00197
00198 inline TY_IDX
00199 ST_pu_type (const ST* s)
00200 {
00201 Is_True (s->sym_class == CLASS_FUNC ||
00202 (ST_sym_class (s) == CLASS_NAME &&
00203 (ST_asm_function_st (*s))),
00204 ("Invalid argument for ST_pu_type"));
00205 return PU_prototype (Pu_Table[ST_pu (s)]);
00206 }
00207
00208 inline SYMTAB_IDX
00209 ST_level (const ST* s) { return ST_IDX_level(ST_st_idx(s)); }
00210 inline UINT32
00211 ST_index (const ST* s) { return ST_IDX_index(ST_st_idx(s)); }
00212
00213 inline BOOL
00214 Has_Base_Block (const ST* s) {
00215 return ST_base_idx (s) != ST_st_idx (s);
00216 }
00217
00218 inline BOOL
00219 Has_Strong_Symbol (const ST* s) {
00220 return ST_is_weak_symbol(s) && (ST_sclass(s) == SCLASS_EXTERN)
00221 && (ST_strong(s) != s);
00222 }
00223
00224
00225
00226
00227 inline UINT
00228 INITO_Table_Size (SYMTAB_IDX level) {
00229 return Scope_tab[level].inito_tab->Size();
00230 }
00231
00232
00233
00234
00235 inline UINT
00236 INITV_Table_Size () { return Initv_Table.Size();}
00237
00238 inline INITV_IDX
00239 INITV_index (SYMTAB_IDX level, ST_IDX st) {
00240
00241 for (UINT i = 1; i < INITO_Table_Size(level); i++) {
00242 INITO* init = &Inito_Table(level, i);
00243 if (init->st_idx == st) {
00244 return init->val;
00245 }
00246 }
00247 return INITV_Table_Size()+1;
00248 }
00249
00250
00251
00252
00253
00254
00255
00256 inline PU&
00257 New_PU (PU_IDX& pu) { return Pu_Table.New_entry (pu); }
00258
00259 inline void
00260 PU_Init (PU& pu, TY_IDX prototype, SYMTAB_IDX level)
00261 {
00262 pu.target_idx = TARGET_INFO_IDX_ZERO;
00263 pu.prototype = prototype;
00264 Is_True (level > GLOBAL_SYMTAB, ("lexical level of a PU must be > 1"));
00265 pu.lexical_level = level;
00266 pu.gp_group = 0;
00267 pu.src_lang = PU_UNKNOWN_LANG;
00268 pu.unused = 0;
00269 pu.flags = 0;
00270 Set_PU_need_unparsed(pu);
00271 }
00272
00273 inline UINT
00274 PU_Table_Size () { return Pu_Table.Size(); }
00275
00276 inline BOOL
00277 PU_has_nested (const PU& pu) { return (PU_uplevel(pu) ||
00278 PU_has_mp(pu)); }
00279
00280 inline BOOL
00281 PU_ftn_lang (const PU& pu) { return (PU_f90_lang(pu) ||
00282 PU_f77_lang(pu)); }
00283
00284 inline SYMTAB_IDX
00285 PU_lexical_level (const ST* st)
00286 {
00287 Is_True (ST_sym_class (st) == CLASS_FUNC ||
00288 (ST_sym_class (st) == CLASS_NAME &&
00289 (ST_asm_function_st (*st))),
00290 ("Symbol is not a function"));
00291 return PU_lexical_level (Pu_Table[ST_pu (st)]);
00292 }
00293
00294 inline ST *
00295 Get_Current_PU_ST ()
00296 {
00297 return Scope_tab[CURRENT_SYMTAB].st;
00298 }
00299
00300 inline PU &
00301 Get_Current_PU ()
00302 {
00303 #ifdef FRONT_END
00304 return Pu_Table[ST_pu (Scope_tab[CURRENT_SYMTAB].st)];
00305 #else
00306 return *Current_pu;
00307 #endif
00308 }
00309
00310
00311 inline PU &
00312 Get_Scope_PU (UINT level)
00313 {
00314 return Pu_Table[ST_pu (Scope_tab[level].st)];
00315 }
00316
00317
00318
00319
00320
00321 inline TY&
00322 New_TY (TY_IDX& ty_idx)
00323 {
00324 UINT idx;
00325 TY& ty = Ty_tab.New_entry (idx);
00326 ty_idx = make_TY_IDX (idx);
00327 return ty;
00328 }
00329
00330 inline void
00331 TY_Init (TY& ty, UINT64 s, TY_KIND k, TYPE_ID t, STR_IDX n)
00332 {
00333 #ifdef Is_True_On
00334 if (k == KIND_FUNCTION)
00335 TY_Verify_Kind_Function(k,s,t);
00336
00337 TY_Verify_Kind_Mtype (k, t);
00338 #endif
00339
00340 ty.size = s;
00341 ty.kind = k;
00342 ty.mtype = t;
00343 ty.flags = 0;
00344 ty.u1.fld = 0;
00345 ty.name_idx = n;
00346 ty.u2.etype = 0;
00347 }
00348
00349 inline UINT32
00350 TY_Table_Size () { return Ty_tab.Size (); }
00351
00352 inline UINT64
00353 TY_size (TY_IDX ty_idx) { return TY_size (Ty_Table[ty_idx]); }
00354
00355 inline TY_KIND
00356 TY_kind (TY_IDX ty_idx) { return TY_kind (Ty_Table[ty_idx]); }
00357
00358 inline TYPE_ID
00359 TY_mtype (TY_IDX ty_idx) { return Ty_Table[ty_idx].mtype; }
00360
00361 inline char *
00362 TY_name (TY_IDX ty_idx) { return TY_name (Ty_Table[ty_idx]); }
00363
00364 inline TY_IDX
00365 TY_ret_type (const TY& ty) {
00366 Is_True (TY_kind (ty) == KIND_FUNCTION, ("TY_kind is not KIND_FUNCTION"));
00367 return Tylist_Table[TY_tylist (ty)];
00368 }
00369 inline TY_IDX
00370 TY_ret_type (const TY_IDX ty_idx) { return TY_ret_type(Ty_Table[ty_idx]);}
00371
00372 inline TYLIST_IDX
00373 TY_parms (const TY& ty) {
00374 Is_True (TY_kind (ty) == KIND_FUNCTION, ("TY_kind is not KIND_FUNCTION"));
00375 return TY_tylist (ty) + 1;
00376 }
00377 inline TYLIST_IDX
00378 TY_parms (const TY_IDX ty_idx) { return TY_parms(Ty_Table[ty_idx]); }
00379
00380 inline BOOL
00381 Is_Simple_Type (const TY& ty)
00382 {
00383 switch (TY_kind (ty)) {
00384 case KIND_SCALAR:
00385 case KIND_POINTER:
00386 case KIND_VOID:
00387 return TRUE;
00388 default:
00389 return FALSE;
00390 }
00391 }
00392 inline BOOL
00393 Is_Simple_Type (TY_IDX ty) { return Is_Simple_Type (Ty_Table[ty]); }
00394
00395
00396 inline BOOL
00397 Is_Structure_Type (const TY& ty)
00398 {
00399 return TY_kind (ty) == KIND_STRUCT;
00400 }
00401 inline BOOL
00402 Is_Structure_Type (TY_IDX ty) { return Is_Structure_Type (Ty_Table[ty]); }
00403
00404
00405 inline BOOL
00406 Is_Composite_Type (const TY& ty)
00407 {
00408 switch (TY_kind (ty)) {
00409 case KIND_STRUCT:
00410 case KIND_ARRAY:
00411 return TRUE;
00412 default:
00413 return FALSE;
00414 }
00415 }
00416 inline BOOL
00417 Is_Composite_Type (TY_IDX ty) { return Is_Composite_Type (Ty_Table[ty]); }
00418
00419
00420
00421
00422 inline FLD_HANDLE
00423 New_FLD ()
00424 {
00425 FLD_IDX fld_idx;
00426 FLD& fld = Fld_Table.New_entry (fld_idx);
00427 return FLD_HANDLE (&fld, fld_idx);
00428 }
00429
00430 inline void
00431 FLD_Init (FLD_HANDLE f, STR_IDX _name, TY_IDX _type, UINT64 _ofst)
00432 {
00433 FLD* fld = f.Entry ();
00434 fld->name_idx = _name;
00435 fld->type = _type;
00436 fld->ofst = _ofst;
00437 fld->flags = 0;
00438 fld->bsize = fld->bofst = 0;
00439 fld->st = 0;
00440 }
00441
00442 inline UINT
00443 FLD_Table_Size () { return Fld_Table.Size(); }
00444
00445
00446
00447
00448
00449 inline ARB_HANDLE
00450 New_ARB ()
00451 {
00452 ARB_IDX arb_idx;
00453 ARB& arb = Arb_Table.New_entry(arb_idx);
00454 return ARB_HANDLE(&arb,arb_idx);
00455 }
00456
00457 inline void
00458 ARB_Init (ARB_HANDLE arb_h, INT64 lbnd, INT64 ubnd, INT64 stride)
00459 {
00460 ARB * arb = arb_h.Entry();
00461 arb->flags = ARB_CONST_LBND | ARB_CONST_UBND | ARB_CONST_STRIDE;
00462 arb->dimension = 1;
00463 arb->co_dimension = 0;
00464 arb->unused = 0;
00465 arb->u1.lbnd_val = lbnd;
00466 arb->u2.ubnd_val = ubnd;
00467 arb->u3.stride_val = stride;
00468 }
00469
00470 inline UINT
00471 ARB_Table_Size () { return Arb_Table.Size(); }
00472
00473
00474
00475
00476 inline TYLIST&
00477 New_TYLIST (TYLIST_IDX& tylist) { return Tylist_Table.New_entry (tylist); }
00478
00479 inline UINT32
00480 TYLIST_Table_Size () { return Tylist_Table.Size (); }
00481
00482
00483
00484
00485 inline LABEL&
00486 New_LABEL (SYMTAB_IDX scope, LABEL_IDX& label_idx)
00487 {
00488 LABEL& label = Scope_tab[scope].label_tab->New_entry (label_idx);
00489 Set_LABEL_name_idx (label, 0);
00490 Set_LABEL_KIND (label, LKIND_DEFAULT);
00491 label.flags = 0;
00492 return label;
00493 }
00494
00495 inline void
00496 LABEL_Init (LABEL& label, STR_IDX name_idx, LABEL_KIND kind)
00497 {
00498 label.name_idx = name_idx;
00499 label.kind = kind;
00500 label.flags = 0;
00501 }
00502
00503 inline UINT32
00504 LABEL_Table_Size (SYMTAB_IDX level)
00505 {
00506 return Scope_tab[level].label_tab->Size ();
00507 }
00508
00509
00510 inline char *
00511 LABEL_name (LABEL_IDX idx) { return LABEL_name(Label_Table[idx]);}
00512
00513
00514
00515
00516 inline PREG&
00517 New_PREG_explicit (SCOPE *scope_tab, SYMTAB_IDX scope, PREG_IDX& p)
00518 {
00519 return scope_tab[scope].preg_tab->New_entry (p);
00520 }
00521
00522 inline PREG&
00523 New_PREG (SYMTAB_IDX scope, PREG_IDX& p)
00524 {
00525 return New_PREG_explicit(Scope_tab, scope, p);
00526 }
00527
00528 inline UINT32
00529 PREG_Table_Size_explicit (SCOPE *scope_tab, SYMTAB_IDX level) {
00530 return scope_tab[level].preg_tab->Size();
00531 }
00532
00533 inline UINT32
00534 PREG_Table_Size (SYMTAB_IDX level) {
00535 return PREG_Table_Size_explicit(Scope_tab, level);
00536 }
00537
00538 inline void
00539 Reset_PREG_Table_Size_explicit (SCOPE *scope_tab, SYMTAB_IDX level, UINT32 size)
00540 {
00541 INT32 diff = PREG_Table_Size_explicit (scope_tab, level) - size;
00542 Is_True (diff >= 0, ("Deleting too many entries"));
00543 scope_tab[level].preg_tab->Delete_last (diff);
00544 }
00545
00546 inline void
00547 Reset_PREG_Table_Size (SYMTAB_IDX level, UINT32 size)
00548 {
00549 Reset_PREG_Table_Size_explicit(Scope_tab, level, size);
00550 }
00551
00552
00553
00554
00555 inline ST_ATTR&
00556 New_ST_ATTR_explicit (SCOPE *scope_tab, SYMTAB_IDX scope, ST_ATTR_IDX& p)
00557 {
00558 return scope_tab[scope].st_attr_tab->New_entry (p);
00559 }
00560
00561 inline ST_ATTR&
00562 New_ST_ATTR (SYMTAB_IDX scope, ST_ATTR_IDX& p)
00563 {
00564 return New_ST_ATTR_explicit(Scope_tab, scope, p);
00565 }
00566
00567 inline void
00568 ST_ATTR_Init (ST_ATTR& st_attr, ST_IDX st_idx, ST_ATTR_KIND akind, UINT32 val)
00569 {
00570 st_attr.st_idx = st_idx;
00571 st_attr.kind = akind;
00572 st_attr.u.value = val;
00573 }
00574
00575 inline UINT32
00576 ST_ATTR_Table_Size_explicit (SCOPE *scope_tab, SYMTAB_IDX level) {
00577 return scope_tab[level].st_attr_tab->Size();
00578 }
00579
00580 inline UINT32
00581 ST_ATTR_Table_Size (SYMTAB_IDX level) {
00582 return ST_ATTR_Table_Size_explicit(Scope_tab, level);
00583 }
00584
00585 inline void
00586 Reset_ST_ATTR_Table_Size_explicit (SCOPE *scope_tab, SYMTAB_IDX level, UINT32 size)
00587 {
00588 INT32 diff = ST_ATTR_Table_Size_explicit (scope_tab, level) - size;
00589 Is_True (diff >= 0, ("Deleting too many entries"));
00590 scope_tab[level].st_attr_tab->Delete_last (diff);
00591 }
00592
00593 inline void
00594 Reset_ST_ATTR_Table_Size (SYMTAB_IDX level, UINT32 size)
00595 {
00596 Reset_ST_ATTR_Table_Size_explicit(Scope_tab, level, size);
00597 }
00598
00599
00600
00601
00602 const UINT32 MAX_PREDEFINED_TCON_IDX = 2;
00603
00604 TCON_IDX
00605 Enter_tcon (const TCON& tcon);
00606
00607 void Init_Constab (void);
00608
00609 inline UINT32
00610 TCON_Table_Size () { return Tcon_Table.Size (); }
00611
00612
00613
00614
00615
00616
00617 inline BOOL
00618 Is_Global_Symbol (const ST* s) { return ST_level(s) <= GLOBAL_SYMTAB; }
00619
00620 inline BOOL
00621 Is_Local_Symbol (const ST* s) { return ST_level(s) == CURRENT_SYMTAB; }
00622
00623
00624
00625
00626
00627 inline BLK&
00628 New_BLK (BLK_IDX& blk_idx)
00629 {
00630 BLK& blk = Blk_Table.New_entry(blk_idx);
00631 blk.Init ();
00632 return blk;
00633 }
00634
00635
00636 inline UINT64
00637 STB_size (const ST *s) {
00638 return Blk_Table[ST_blk(s)].Size();
00639 }
00640 inline void
00641 Set_STB_size (ST *s, UINT64 size) {
00642 Blk_Table[ST_blk(s)].Set_size(size);
00643 }
00644 inline UINT
00645 STB_align (const ST *s) {
00646 UINT16 align = Blk_Table[ST_blk(s)].Align();
00647
00648
00649
00650
00651
00652
00653 Is_True ((align == 0xffff) ||
00654 ((align & ~TY_ALIGN) == 0),
00655 ("STB_align unacceptably large (%d)\n", align));
00656 if (align == 0xffff) return 0;
00657 return (1 << align);
00658 }
00659 inline void
00660 Set_STB_align (ST *s, UINT align) {
00661 UINT16 packed_align;
00662 extern UINT32 TY_log_base2 (UINT32 align);
00663
00664 if (align == 0) {
00665
00666 packed_align = 0xffff;
00667 }
00668 else if (align & 0x3f) {
00669 packed_align = (align & 0x7) ? (align >> 1) : 3 + (align >> 4);
00670 } else {
00671 packed_align = TY_log_base2(align);
00672 }
00673
00674 Blk_Table[ST_blk(s)].Set_align(packed_align);
00675 }
00676 inline UINT16
00677 STB_section_idx (const ST *s) {
00678 return Blk_Table[ST_blk(s)].Section_idx();
00679 }
00680 inline void
00681 Set_STB_section_idx (ST *s, UINT16 sec) {
00682 Blk_Table[ST_blk(s)].Set_section_idx(sec);
00683 }
00684 inline UINT16
00685 STB_scninfo_idx (const ST *s) {
00686 return Blk_Table[ST_blk(s)].Scninfo_idx();
00687 }
00688 inline void
00689 Set_STB_scninfo_idx (ST *s, UINT16 scn) {
00690 Blk_Table[ST_blk(s)].Set_scninfo_idx(scn);
00691 }
00692 inline UINT16
00693 STB_flags (const ST *s) {
00694 return Blk_Table[ST_blk(s)].Flags();
00695 }
00696 inline BOOL
00697 STB_is_set (const ST* s, UINT16 flags) {
00698 return Blk_Table[ST_blk(s)].Is_set (flags);
00699 }
00700 inline void
00701 Set_STB_flags (ST* s, UINT16 flags) {
00702 Blk_Table[ST_blk(s)].Set_flags (flags);
00703 }
00704 inline void
00705 Reset_STB_flags (ST* s, UINT16 flags) {
00706 Blk_Table[ST_blk(s)].Clear_flags (flags);
00707 }
00708 #define STB_decrement(s) (STB_is_set (s, BLK_DECREMENT))
00709 #define Set_STB_decrement(s) (Set_STB_flags (s, BLK_DECREMENT))
00710 #define Reset_STB_decrement(s) (Reset_STB_flags (s, BLK_DECREMENT))
00711 #define STB_section(s) (STB_is_set (s, BLK_SECTION))
00712 #define Set_STB_section(s) (Set_STB_flags (s, BLK_SECTION))
00713 #define Reset_STB_section(s) (Reset_STB_flags (s, BLK_SECTION))
00714 #define STB_root_base(s) (STB_is_set (s, BLK_ROOT_BASE))
00715 #define Set_STB_root_base(s) (Set_STB_flags (s, BLK_ROOT_BASE))
00716 #define Reset_STB_root_base(s) (Reset_STB_flags (s, BLK_ROOT_BASE))
00717 #define STB_is_basereg(s) (STB_is_set (s, BLK_IS_BASEREG))
00718 #define Set_STB_is_basereg(s) (Set_STB_flags (s, BLK_IS_BASEREG))
00719 #define Reset_STB_is_basereg(s) (Reset_STB_flags (s, BLK_IS_BASEREG))
00720 #define STB_exec(s) (STB_is_set (s, BLK_EXEC))
00721 #define Set_STB_exec(s) (Set_STB_flags (s, BLK_EXEC))
00722 #define Reset_STB_exec(s) (Reset_STB_flags (s, BLK_EXEC))
00723 #define STB_nobits(s) (STB_is_set (s, BLK_NOBITS))
00724 #define Set_STB_nobits(s) (Set_STB_flags (s, BLK_NOBITS))
00725 #define Reset_STB_nobits(s) (Reset_STB_flags (s, BLK_NOBITS))
00726 #define STB_merge(s) (STB_is_set (s, BLK_MERGE))
00727 #define Set_STB_merge(s) (Set_STB_flags (s, BLK_MERGE))
00728 #define Reset_STB_merge(s) (Reset_STB_flags (s, BLK_MERGE))
00729 #define STB_compiler_layout(s) (STB_is_set (s, BLK_COMPILER_LAYOUT))
00730 #define Set_STB_compiler_layout(s) (Set_STB_flags (s, BLK_COMPILER_LAYOUT))
00731 #define Reset_STB_compiler_layout(s) (Reset_STB_flags (s, BLK_COMPILER_LAYOUT))
00732
00733 #endif
00734
00735