Annotation of coherent/b/bin/c/n0/cc0key.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * n0/cc0key.c
                      3:  * C compiler.
                      4:  * Symbol table initialization.
                      5:  */
                      6: 
                      7: #ifdef   vax
                      8: #include "INC$LIB:cc0.h"
                      9: #else
                     10: #include "cc0.h"
                     11: #endif
                     12: 
                     13: /*
                     14:  * Initialized tokens.
                     15:  * Each of these gets linked in place into the hash table.
                     16:  * This is a truly sleazy hack; each cxfoo string ends up at the right
                     17:  * place to be the t_id member of the TOK.
                     18:  */
                     19: static TOK txfile=     {NULL,NULL};    static char cxfile[]=   "__FILE__";
                     20: static TOK txuline=    {NULL,NULL};    static char cxuline[]=  "__LINE__";
                     21: static TOK txdate=     {NULL,NULL};    static char cxdate[]=   "__DATE__";
                     22: static TOK txtime=     {NULL,NULL};    static char cxtime[]=   "__TIME__";
                     23: #if    0
                     24: /*
                     25:  * ANSI C says __STDC__ should be defined as 0 for a non-ANSI compiler,
                     26:  * but too many sources use #ifdef __STDC__ when they should use #if __STDC__.
                     27:  * This is therefore conditionalized out here and in n0/expand.c.
                     28:  */
                     29: static TOK txstdc=     {NULL,NULL};    static char cxstdc[]=   "__STDC__";
                     30: #endif
                     31: static TOK txbasefile= {NULL,NULL};    static char cxbasefile[]="__BASE_FILE__";
                     32: static TOK txudefined= {NULL,NULL};    static char cxudefined[]="defined";
                     33: static TOK txdefine=   {NULL,NULL};    static char cxdefine[]= "#define";
                     34: static TOK txinclude=  {NULL,NULL};    static char cxinclude[]="#include";
                     35: static TOK txundef=    {NULL,NULL};    static char cxundef[]=  "#undef";
                     36: static TOK txline=     {NULL,NULL};    static char cxline[]=   "#line";
                     37: static TOK txassert=   {NULL,NULL};    static char cxassert[]= "#assert";
                     38: static TOK txerror=    {NULL,NULL};    static char cxerror[]=  "#error";
                     39: static TOK txpragma=   {NULL,NULL};    static char cxpragma[]= "#pragma";
                     40: static TOK txif=       {NULL,NULL};    static char cxif[]=     "#if";
                     41: static TOK txifdef=    {NULL,NULL};    static char cxifdef[]=  "#ifdef";
                     42: static TOK txifndef=   {NULL,NULL};    static char cxifndef[]= "#ifndef";
                     43: static TOK txelse=     {NULL,NULL};    static char cxelse[]=   "#else";
                     44: static TOK txelif=     {NULL,NULL};    static char cxelif[]=   "#elif";
                     45: static TOK txendif=    {NULL,NULL};    static char cxendif[]=  "#endif";
                     46: static TOK txident=    {NULL,NULL};    static char cxident[]=  "#ident";
                     47: static TOK tint=       {NULL,NULL};    static char cint[]=     "int";
                     48: static TOK tchar=      {NULL,NULL};    static char cchar[]=    "char";
                     49: static TOK tfloat=     {NULL,NULL};    static char cfloat[]=   "float";
                     50: static TOK tdouble=    {NULL,NULL};    static char cdouble[]=  "double";
                     51: static TOK tunsigned=  {NULL,NULL};    static char cunsigned[]="unsigned";
                     52: static TOK tsigned=    {NULL,NULL};    static char csigned[]=  "signed";
                     53: static TOK tregister=  {NULL,NULL};    static char cregister[]="register";
                     54: static TOK tlong=      {NULL,NULL};    static char clong[]=    "long";
                     55: static TOK tstruct=    {NULL,NULL};    static char cstruct[]=  "struct";
                     56: static TOK tunion=     {NULL,NULL};    static char cunion[]=   "union";
                     57: static TOK tenum=      {NULL,NULL};    static char cenum[]=    "enum";
                     58: static TOK tauto=      {NULL,NULL};    static char cauto[]=    "auto";
                     59: static TOK tvoid=      {NULL,NULL};    static char cvoid[]=    "void";
                     60: static TOK tstatic=    {NULL,NULL};    static char cstatic[]=  "static";
                     61: static TOK textern=    {NULL,NULL};    static char cextern[]=  "extern";
                     62: static TOK tgoto=      {NULL,NULL};    static char cgoto[]=    "goto";
                     63: static TOK treturn=    {NULL,NULL};    static char creturn[]=  "return";
                     64: static TOK tif=                {NULL,NULL};    static char cif[]=      "if";
                     65: static TOK twhile=     {NULL,NULL};    static char cwhile[]=   "while";
                     66: static TOK tfor=       {NULL,NULL};    static char cfor[]=     "for";
                     67: static TOK tdo=                {NULL,NULL};    static char cdo[]=      "do";
                     68: static TOK telse=      {NULL,NULL};    static char celse[]=    "else";
                     69: static TOK tswitch=    {NULL,NULL};    static char cswitch[]=  "switch";
                     70: static TOK tcase=      {NULL,NULL};    static char ccase[]=    "case";
                     71: static TOK tdefault=   {NULL,NULL};    static char cdefault[]= "default";
                     72: static TOK tbreak=     {NULL,NULL};    static char cbreak[]=   "break";
                     73: static TOK tcontinue=  {NULL,NULL};    static char ccontinue[]="continue";
                     74: static TOK ttypedef=   {NULL,NULL};    static char ctypedef[]= "typedef";
                     75: static TOK tsizeof=    {NULL,NULL};    static char csizeof[]=  "sizeof";
                     76: static TOK tshort=     {NULL,NULL};    static char cshort[]=   "short";
                     77: static TOK tconst=     {NULL,NULL};    static char cconst[]=   "const";
                     78: static TOK tvolatile=  {NULL,NULL};    static char cvolatile[]="volatile";
                     79: #ifdef READONLY
                     80: static TOK treadonly=  {NULL,NULL};    static char creadonly[]="readonly";
                     81: #endif
                     82: #ifdef ALIEN
                     83: static TOK talien=     {NULL,NULL};    static char calien[]=   "alien";
                     84: #endif
                     85: 
                     86: /*
                     87:  * Initialized symbols.
                     88:  * Each of these gets linked in place into the symbol table,
                     89:  * and the token each symbol specifies is entered into the token hash.
                     90:  * This must be correspond to the symbol order in ktok[] below.
                     91:  */
                     92: static KEYSYM ktab[] = {
                     93:        NULL,   SL_CPP,         XUFILE,
                     94:        NULL,   SL_CPP,         XULINE,
                     95:        NULL,   SL_CPP,         XUDATE,
                     96:        NULL,   SL_CPP,         XUTIME,
                     97: #if    0
                     98:        NULL,   SL_CPP,         XUSTDC,
                     99: #endif
                    100:        NULL,   SL_CPP,         XUBASE,
                    101:        NULL,   SL_CPP,         XDEFINED,
                    102:        NULL,   SL_CPP,         XDEFINE,
                    103:        NULL,   SL_CPP,         XINCLUDE,
                    104:        NULL,   SL_CPP,         XUNDEF,
                    105:        NULL,   SL_CPP,         XLINE,
                    106:        NULL,   SL_CPP,         XASSERT,
                    107:        NULL,   SL_CPP,         XERROR,
                    108:        NULL,   SL_CPP,         XPRAGMA,
                    109:        NULL,   SL_CPP,         XIF,
                    110:        NULL,   SL_CPP,         XIFDEF,
                    111:        NULL,   SL_CPP,         XIFNDEF,
                    112:        NULL,   SL_CPP,         XELSE,
                    113:        NULL,   SL_CPP,         XELIF,
                    114:        NULL,   SL_CPP,         XENDIF,
                    115:        NULL,   SL_CPP,         XIDENT,
                    116:        NULL,   SL_KEY,         INT,
                    117:        NULL,   SL_KEY,         CHAR,
                    118:        NULL,   SL_KEY,         FLOAT,
                    119:        NULL,   SL_KEY,         DOUBLE,
                    120:        NULL,   SL_KEY,         UNSIGNED,
                    121:        NULL,   SL_KEY,         SIGNED,
                    122:        NULL,   SL_KEY,         REGISTER,
                    123:        NULL,   SL_KEY,         LONG,
                    124:        NULL,   SL_KEY,         STRUCT,
                    125:        NULL,   SL_KEY,         UNION,
                    126:        NULL,   SL_KEY,         ENUM,
                    127:        NULL,   SL_KEY,         AUTO,
                    128:        NULL,   SL_KEY,         VOID,
                    129:        NULL,   SL_KEY,         STATIC,
                    130:        NULL,   SL_KEY,         EXTERN,
                    131:        NULL,   SL_KEY,         GOTO,
                    132:        NULL,   SL_KEY,         RETURN,
                    133:        NULL,   SL_KEY,         IF,
                    134:        NULL,   SL_KEY,         WHILE,
                    135:        NULL,   SL_KEY,         FOR,
                    136:        NULL,   SL_KEY,         DO,
                    137:        NULL,   SL_KEY,         ELSE,
                    138:        NULL,   SL_KEY,         SWITCH,
                    139:        NULL,   SL_KEY,         CASE,
                    140:        NULL,   SL_KEY,         DEFAULT,
                    141:        NULL,   SL_KEY,         BREAK,
                    142:        NULL,   SL_KEY,         CONTINUE,
                    143:        NULL,   SL_KEY,         TYPEDEF,
                    144:        NULL,   SL_KEY,         SIZEOF,
                    145:        NULL,   SL_KEY,         SHORT,
                    146:        NULL,   SL_KEY,         CONST,
                    147:        NULL,   SL_KEY,         VOLATILE,
                    148: #ifdef READONLY
                    149:        NULL,   SL_KEY,         READONLY,
                    150: #endif
                    151: #ifdef ALIEN
                    152:        NULL,   SL_KEY,         ALIEN
                    153: #endif
                    154: };
                    155: #define        NKEYS   sizeof(ktab)/sizeof(KEYSYM)
                    156: 
                    157: /*
                    158:  * Keyword token pointers, used to initialize symbol table.
                    159:  * This must be correspond to the symbol order in ktab[] above.
                    160:  */
                    161: static TOK *ktok[] = {
                    162:        &txfile,
                    163:        &txuline,
                    164:        &txdate,
                    165:        &txtime,
                    166: #if    0
                    167:        &txstdc,
                    168: #endif
                    169:        &txbasefile,
                    170:        &txudefined,
                    171:        &txdefine,
                    172:        &txinclude,
                    173:        &txundef,
                    174:        &txline,
                    175:        &txassert,
                    176:        &txerror,
                    177:        &txpragma,
                    178:        &txif,
                    179:        &txifdef,
                    180:        &txifndef,
                    181:        &txelse,
                    182:        &txelif,
                    183:        &txendif,
                    184:        &txident,
                    185:        &tint,
                    186:        &tchar,
                    187:        &tfloat,
                    188:        &tdouble,
                    189:        &tunsigned,
                    190:        &tsigned,
                    191:        &tregister,
                    192:        &tlong,
                    193:        &tstruct,
                    194:        &tunion,
                    195:        &tenum,
                    196:        &tauto,
                    197:        &tvoid,
                    198:        &tstatic,
                    199:        &textern,
                    200:        &tgoto,
                    201:        &treturn,
                    202:        &tif,
                    203:        &twhile,
                    204:        &tfor,
                    205:        &tdo,
                    206:        &telse,
                    207:        &tswitch,
                    208:        &tcase,
                    209:        &tdefault,
                    210:        &tbreak,
                    211:        &tcontinue,
                    212:        &ttypedef,
                    213:        &tsizeof,
                    214:        &tshort,
                    215:        &tconst,
                    216:        &tvolatile,
                    217: #ifdef READONLY
                    218:        &treadonly,
                    219: #endif
                    220: #ifdef ALIEN
                    221:        &talien
                    222: #endif
                    223: };
                    224: 
                    225: /*
                    226:  * Enter reserved words into the hash table.
                    227:  */
                    228: kinit()
                    229: {
                    230:        register char   *p;
                    231:        register int    c;
                    232:        register TOK    **tpp, *tp;
                    233:        register KEYSYM *kp;
                    234: 
                    235:        for (kp = ktab, tpp = ktok; kp < &ktab[NKEYS]; ++kp) {
                    236:                tp = *tpp++;
                    237: #ifdef VALIEN
                    238:                if (kp->s_value==ALIEN && notvariant(VALIEN))
                    239:                        continue;
                    240: #endif
                    241: #ifdef VREADONLY
                    242:                if (kp->s_value==READONLY && notvariant(VREADONLY))
                    243:                        continue;
                    244: #endif
                    245:                p = tp->t_id;
                    246:                idhash = 0;
                    247:                while (c = *p++)
                    248:                        idhash += c;
                    249:                idhash %= NHASH;
                    250:                tp->t_tp = hash0[idhash];
                    251:                hash0[idhash] = tp;
                    252:                tp->t_sym = kp;
                    253:        }
                    254: }
                    255: 
                    256: /* end of n0/cc0key.c */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.