/* DCRECDIR.TH */ /* Y.L. Noyelle, Supelec, France 1994 */ #ifndef DCRECDIR_TH #define DCRECDIR_TH #include "dc.th" #define EndCh '\0' #define IncplMacDef LONG_MIN #define SizeSymTab (ThCode)(1 << PowTwoSizeSymTab) #define MacroVisible #define MacroNotVisible && pCurId->nstLvl>=0 #define MacroTxt (pNxtCh == &nxtChFromMac) #define NxtChar() (*pNxtCh)() #define NoConv ((void (*)(char) /*~PortableQM*/)1) #define SearchSym(x, y) /* search name in corresponding 'small table ' */ \ for (pCurId = symTabHeads[hCode & (SizeSymTab - 1)]; pCurId != NULL; \ pCurId = pCurId->next) { \ if (Lgt1(pCurId->idName)==Lgt1(x) /* same lgt? */ \ && (memcmp(pCurId->idName, x, FullLgt(x))==0)y) break;} /* Structures definitions */ typedef ubyte TsTok; /* macro storage format for tokens */ /* Shorthands */ #define pIdSeman u1._pIdSeman #define noLex u1._noLex #define pTabArg u1._pTabArg #define sameBlk u2._sameBlk #define dFileName u2._dFileName typedef struct _TdescrId TdescrId; struct _TdescrId { TdescrId *next, *prec; /* 'next' must be the first field, to handle correct- ly elimination of the first identifier in a "small table". */ Tname idName; long nstLvl; union { TsemanElt *_pIdSeman; Ttok _noLex; TsTok **_pTabArg; } u1; union { TdescrId *_sameBlk; Tstring _dFileName; } u2; }; /*~ zif Offset(TdescrId, next) != 0 "'next' field not first in TdescrId structure" */ typedef struct _TcondStkElt TcondStkElt; #endif /* ifndef DCRECDIR_TH */ /* End DCRECDIR.TH */