Annotation of coherent/d/bin/test/obj386/y.tab.c, revision 1.1.1.1

1.1       root        1: 
                      2: #line 1 "../test.y"
                      3: 
                      4: /*
                      5:  * Set return status based on
                      6:  * various specified conditions,
                      7:  * mostly related to files.
                      8:  * Used mostly in shell files.
                      9:  */
                     10: 
                     11: #include <stdio.h>
                     12: #include <sys/stat.h>
                     13: #include <access.h>
                     14: #include "testnode.h"
                     15: 
                     16: #define        NPRIM   (sizeof(prims)/sizeof(prims[0]))
                     17: #define        NFNAME  500             /* size of filename buffer */
                     18: 
                     19: #include "y.tab.h"
                     20: #define YYCLEARIN yychar = -1000
                     21: #define YYERROK yyerrflag = 0
                     22: extern int yychar;
                     23: extern short yyerrflag;
                     24: #ifndef YYMAXDEPTH
                     25: #define YYMAXDEPTH 150
                     26: #endif
                     27: YYSTYPE yyval, yylval;
                     28: 
                     29: #line 63 "../test.y"
                     30: 
                     31: struct prim    {
                     32:        char    *p_name;
                     33:        int     p_lval;
                     34:        int     p_bin;
                     35: }      prims[] = {
                     36:        "-r", _R, 0,
                     37:        "-w", _W, 0,
                     38:        "-f", _F, 0,
                     39:        "-d", _D, 0,
                     40:        "-s", _S, 0,
                     41:        "-t", _T, 0,
                     42:        "-z", _Z, 0,
                     43:        "-n", _N, 0,
                     44:        "-eq", _EQ, 1,
                     45:        "-ne", _NE, 1,
                     46:        "-gt", _GT, 1,
                     47:        "-ge", _GE, 1,
                     48:        "-lt", _LT, 1,
                     49:        "-le", _LE, 1,
                     50:        "-o", OR, 1,
                     51:        "-a", AND, 1
                     52: };
                     53: 
                     54: 
                     55: char   **gav;
                     56: int    gac;
                     57: 
                     58: struct stat    sb;
                     59: 
                     60: NODE   *code;
                     61: 
                     62: char   *next();
                     63: NODE   *bnode();
                     64: NODE   *lnode();
                     65: long   atol();
                     66: int    xr();
                     67: int    xw();
                     68: int    xf();
                     69: int    xd();
                     70: int    xs();
                     71: int    xt();
                     72: int    xz();
                     73: int    xn();
                     74: int    xseq();
                     75: int    xsneq();
                     76: int    xeq();
                     77: int    xne();
                     78: int    xgt();
                     79: int    xge();
                     80: int    xlt();
                     81: 
                     82: main(argc, argv)
                     83: char *argv[];
                     84: {
                     85:        gav = argv+1;
                     86:        gac = argc-1;
                     87:        if (argv[0][0]=='[' && argv[0][1]=='\0') {
                     88:                if (strcmp(argv[gac], "]") != 0)
                     89:                        tsterr("unbalanced [..]");
                     90:                gac--;
                     91:        }
                     92:        if (gac == 0)
                     93:                exit(1);
                     94:        yyparse();
                     95:        exit(!execute(code));
                     96: }
                     97: 
                     98: /*
                     99:  * Lexical analyser
                    100:  */
                    101: yylex()
                    102: {
                    103:        static char laststr = 0; /* 1 if last token was string */
                    104:        register char *ap;
                    105:        register struct prim *pp;
                    106: 
                    107:        if ((yylval.fname = ap = next()) == NULL)
                    108:                return ('\n');
                    109: 
                    110:        if (*ap == '-') {
                    111:                for (pp = prims; pp < &prims[NPRIM]; pp++) {
                    112:                        if (strcmp(pp->p_name, ap) == 0) {
                    113:                                if (!laststr && pp->p_bin)
                    114:                                        break;
                    115:                                laststr = 0;
                    116:                                return (pp->p_lval);
                    117:                        }
                    118:                }
                    119:        }
                    120:        else {
                    121:                laststr = 0;
                    122:                if (strcmp("!=", ap) == 0)
                    123:                        return (SNEQ);
                    124: 
                    125:                if (ap[1] == '\0') {
                    126:                        if (ap[0]==')') {
                    127:                                laststr = 1;
                    128:                                return(')');
                    129:                        }
                    130:                        if (ap[0]=='(' || ap[0]=='!')
                    131:                                return (ap[0]);
                    132:                        if (ap[0]=='=')
                    133:                                return (SEQ);
                    134:                }
                    135:        }
                    136:        laststr = 1;
                    137:        return (STR);
                    138: }
                    139: 
                    140: yyerror()
                    141: {
                    142:        fprintf(stderr, "Test expression syntax error\n");
                    143:        usage();
                    144: }
                    145: 
                    146: /*
                    147:  * Return the next argument from the arg list.
                    148:  */
                    149: char *
                    150: next()
                    151: {
                    152:        if (gac < 1)
                    153:                return (NULL);
                    154:        gac--;
                    155:        return (*gav++);
                    156: }
                    157: 
                    158: /*
                    159:  * Build an expression tree node (non-leaf)
                    160:  */
                    161: NODE *
                    162: bnode(op, left, right)
                    163: int op;
                    164: NODE *left, *right;
                    165: {
                    166:        register NODE *np;
                    167:        char *malloc();
                    168: 
                    169:        if ((np = (NODE *)malloc(sizeof (NODE))) == NULL)
                    170:                tsterr("Out of space");
                    171:        np->n_un.n_op = op;
                    172:        np->n_left = left;
                    173:        np->n_right = right;
                    174:        return (np);
                    175: }
                    176: 
                    177: /*
                    178:  * Build a leaf node in expression tree.
                    179:  */
                    180: NODE *
                    181: lnode(fn, str1, str2)
                    182: int (*fn)();
                    183: char *str1, *str2;
                    184: {
                    185:        register NODE *np;
                    186:        char *malloc();
                    187: 
                    188:        if ((np = (NODE *)malloc(sizeof (NODE))) == NULL)
                    189:                tsterr("Out of space");
                    190:        np->n_left = np->n_right = NULL;
                    191:        np->n_un.n_fun = fn;
                    192:        np->n_s1 = str1;
                    193:        np->n_s2 = str2;
                    194:        return (np);
                    195: }
                    196: 
                    197: /*
                    198:  * Execute compiled code.
                    199:  */
                    200: execute(np)
                    201: register NODE *np;
                    202: {
                    203:        if (np->n_left != NULL)
                    204:                switch (np->n_un.n_op) {
                    205:                case AND:
                    206:                        if (execute(np->n_left) && execute(np->n_right))
                    207:                                return (1);
                    208:                        return (0);
                    209: 
                    210:                case OR:
                    211:                        if (execute(np->n_left) || execute(np->n_right))
                    212:                                return (1);
                    213:                        return (0);
                    214: 
                    215:                case '!':
                    216:                        return (!execute(np->n_left));
                    217: 
                    218:                default:
                    219:                        tsterr("Panic: bad tree (op %d)", np->n_un.n_op);
                    220:                }
                    221:        else
                    222:                return ((*np->n_un.n_fun)(np));
                    223:        /* NOTREACHED */
                    224: }
                    225: 
                    226: /*
                    227:  * Check to see if the file exists
                    228:  * and if readable.
                    229:  */
                    230: xr(np)
                    231: NODE *np;
                    232: {
                    233:        return (access(np->n_s1, AREAD) >= 0);
                    234: }
                    235: 
                    236: /*
                    237:  * Check if the file exists and is
                    238:  * writeable.
                    239:  */
                    240: xw(np)
                    241: NODE *np;
                    242: {
                    243:        return (access(np->n_s1, AWRITE) >= 0);
                    244: }
                    245: 
                    246: /*
                    247:  * Check if the file exists and is not
                    248:  * a directory.
                    249:  */
                    250: xf(np)
                    251: NODE *np;
                    252: {
                    253:        return (stat(np->n_s1, &sb)>=0 && (sb.st_mode&S_IFMT)!=S_IFDIR);
                    254: }
                    255: 
                    256: /*
                    257:  * Check to see if the file exists
                    258:  * and is a directory.
                    259:  */
                    260: xd(np)
                    261: NODE *np;
                    262: {
                    263:        return (stat(np->n_s1, &sb)>=0 && (sb.st_mode&S_IFMT)==S_IFDIR);
                    264: }
                    265: 
                    266: /*
                    267:  * Check to see if the file exists
                    268:  * and has a non-zero size.
                    269:  */
                    270: xs(np)
                    271: NODE *np;
                    272: {
                    273:        return (stat(np->n_s1, &sb)>=0 && sb.st_size>0);
                    274: }
                    275: 
                    276: /*
                    277:  * Check to see if the file
                    278:  * descriptor is associated
                    279:  * with a terminal.
                    280:  */
                    281: xt(np)
                    282: NODE *np;
                    283: {
                    284:        return (isatty(atoi(np->n_s1)));
                    285: }
                    286: 
                    287: /*
                    288:  * True if the length of the given
                    289:  * string is zero.
                    290:  */
                    291: xz(np)
                    292: NODE *np;
                    293: {
                    294:        return (np->n_s1[0] == '\0');
                    295: }
                    296: 
                    297: /*
                    298:  * True if the length of the given
                    299:  * string is non-zero.
                    300:  */
                    301: xn(np)
                    302: NODE *np;
                    303: {
                    304:        return (np->n_s1[0] != '\0');
                    305: }
                    306: 
                    307: /*
                    308:  * True if the two strings are
                    309:  * lexicographically equal.
                    310:  */
                    311: xseq(np)
                    312: register NODE *np;
                    313: {
                    314:        return (strcmp(np->n_s1, np->n_s2) == 0);
                    315: }
                    316: 
                    317: /*
                    318:  * True if the two strings are
                    319:  * lexicographically unequal.
                    320:  */
                    321: xsneq(np)
                    322: register NODE *np;
                    323: {
                    324:        return (strcmp(np->n_s1, np->n_s2) != 0);
                    325: }
                    326: 
                    327: /*
                    328:  * True if the two numbers are
                    329:  * equal.
                    330:  */
                    331: xeq(np)
                    332: register NODE *np;
                    333: {
                    334:        return (atol(np->n_s1) == atol(np->n_s2));
                    335: }
                    336: 
                    337: /*
                    338:  * True if the two numbers are
                    339:  * not equal.
                    340:  */
                    341: xne(np)
                    342: register NODE *np;
                    343: {
                    344:        return (atol(np->n_s1) != atol(np->n_s2));
                    345: }
                    346: 
                    347: /*
                    348:  * True if the first number is
                    349:  * greater than the second.
                    350:  */
                    351: xgt(np)
                    352: register NODE *np;
                    353: {
                    354:        return (atol(np->n_s1) > atol(np->n_s2));
                    355: }
                    356: 
                    357: /*
                    358:  * True if the first number is
                    359:  * greater than or equal to the second.
                    360:  */
                    361: xge(np)
                    362: register NODE *np;
                    363: {
                    364:        return (atol(np->n_s1) >= atol(np->n_s2));
                    365: }
                    366: 
                    367: /*
                    368:  * True if the first number is
                    369:  * less than the second.
                    370:  */
                    371: xlt(np)
                    372: register NODE *np;
                    373: {
                    374:        return (atol(np->n_s1) < atol(np->n_s2));
                    375: }
                    376: 
                    377: /*
                    378:  * True if the first number is
                    379:  * less than or equal to the second.
                    380:  */
                    381: xle(np)
                    382: register NODE *np;
                    383: {
                    384:        return (atol(np->n_s1) <= atol(np->n_s2));
                    385: }
                    386: 
                    387: /*
                    388:  * Error messages.
                    389:  */
                    390: /* VARARGS */
                    391: tsterr(x)
                    392: {
                    393:        fprintf(stderr, "test: %r\n", &x);
                    394:        exit(1);
                    395: }
                    396: 
                    397: usage()
                    398: {
                    399:        fprintf(stderr, "Usage: test expression\n");
                    400:        exit(1);
                    401: }
                    402: #ifdef YYTNAMES
                    403: readonly struct yytname yytnames[26] =
                    404: {
                    405:        "$end", -1, 
                    406:        "error", -2, 
                    407:        "OR", 256, 
                    408:        "AND", 257, 
                    409:        "'!'", 33, 
                    410:        "_R", 258, 
                    411:        "_W", 259, 
                    412:        "_F", 260, 
                    413:        "_D", 261, 
                    414:        "_S", 262, 
                    415:        "_T", 263, 
                    416:        "_Z", 264, 
                    417:        "_N", 265, 
                    418:        "SEQ", 266, 
                    419:        "SNEQ", 267, 
                    420:        "_EQ", 268, 
                    421:        "_NE", 269, 
                    422:        "_GT", 270, 
                    423:        "_GE", 271, 
                    424:        "_LT", 272, 
                    425:        "_LE", 273, 
                    426:        "STR", 275, 
                    427:        "'\\n'", 10, 
                    428:        "'('", 40, 
                    429:        "')'", 41, 
                    430:        NULL
                    431: } ;
                    432: #endif
                    433: #include <action.h>
                    434: unsigned char yypdnt[24] = {
                    435: 0, 1, 2, 2, 2, 2, 2, 2,
                    436: 2, 2, 2, 2, 2, 2, 2, 2,
                    437: 2, 2, 2, 2, 2, 2, 2, 2
                    438: };
                    439: unsigned char yypn[24] = {
                    440: 2, 2, 3, 2, 3, 3, 2, 2,
                    441: 2, 2, 2, 2, 1, 2, 2, 3,
                    442: 3, 3, 3, 3, 3, 3, 3, 1
                    443: };
                    444: unsigned char yypgo[3] = {
                    445: 0, 0, 2 
                    446: };
                    447: unsigned int yygo[12] = {
                    448: -1000, 12, 1, 14, 11, 31, 33, 45,
                    449: 34, 46, -1000, 13 
                    450: };
                    451: unsigned char yypa[47] = {
                    452: 0, 0, 24, 28, 32, 36, 40, 44,
                    453: 48, 52, 56, 0, 74, 78, 86, 88,
                    454: 90, 92, 94, 96, 98, 100, 102, 104,
                    455: 108, 112, 116, 120, 124, 128, 132, 136,
                    456: 144, 0, 0, 148, 150, 152, 154, 156,
                    457: 158, 160, 162, 164, 166, 168, 172 
                    458: };
                    459: unsigned int yyact[174] = {
                    460: 1, 33, 2, 258, 3, 259, 4, 260,
                    461: 5, 261, 6, 262, 7, 263, 8, 264,
                    462: 9, 265, 10, 275, 11, 40, 24576, -1000,
                    463: 15, 275, 24576, -1000, 16, 275, 24576, -1000,
                    464: 17, 275, 24576, -1000, 18, 275, 24576, -1000,
                    465: 19, 275, 24576, -1000, 20, 275, 8204, -1000,
                    466: 21, 275, 24576, -1000, 22, 275, 24576, -1000,
                    467: 23, 266, 24, 267, 25, 268, 26, 269,
                    468: 27, 270, 28, 271, 29, 272, 30, 273,
                    469: 8215, -1000, 32, -1, 24576, -1000, 33, 256,
                    470: 34, 257, 35, 10, 24576, -1000, 8195, -1000,
                    471: 8198, -1000, 8199, -1000, 8200, -1000, 8201, -1000,
                    472: 8202, -1000, 8203, -1000, 8205, -1000, 8206, -1000,
                    473: 36, 275, 24576, -1000, 37, 275, 24576, -1000,
                    474: 38, 275, 24576, -1000, 39, 275, 24576, -1000,
                    475: 40, 275, 24576, -1000, 41, 275, 24576, -1000,
                    476: 42, 275, 24576, -1000, 43, 275, 24576, -1000,
                    477: 33, 256, 34, 257, 44, 41, 24576, -1000,
                    478: 16384, -1, 24576, -1000, 8193, -1000, 8207, -1000,
                    479: 8208, -1000, 8209, -1000, 8210, -1000, 8211, -1000,
                    480: 8212, -1000, 8213, -1000, 8214, -1000, 8194, -1000,
                    481: 34, 257, 8196, -1000, 8197, -1000 
                    482: };
                    483: #define YYNOCHAR (-1000)
                    484: #define        yyerrok yyerrflag=0
                    485: #define        yyclearin       yylval=YYNOCHAR
                    486: int yystack[YYMAXDEPTH];
                    487: YYSTYPE yyvstack[YYMAXDEPTH], *yyv;
                    488: int yychar;
                    489: 
                    490: #ifdef YYDEBUG
                    491: int yydebug = 1;       /* No sir, not in the BSS */
                    492: #include <stdio.h>
                    493: #endif
                    494: 
                    495: short yyerrflag;
                    496: int *yys;
                    497: 
                    498: yyparse()
                    499: {
                    500:        register YYSTYPE *yypvt;
                    501:        int act;
                    502:        register unsigned *ip, yystate;
                    503:        int pno;
                    504:        yystate = 0;
                    505:        yychar = YYNOCHAR;
                    506:        yyv = &yyvstack[-1];
                    507:        yys = &yystack[-1];
                    508: 
                    509: stack:
                    510:        if( ++yys >= &yystack[YYMAXDEPTH] ) {
                    511:                write(2, "Stack overflow\n", 15);
                    512:                exit(1);
                    513:        }
                    514:        *yys = yystate;
                    515:        *++yyv = yyval;
                    516: #ifdef YYDEBUG
                    517:        if( yydebug )
                    518:                fprintf(stdout, "Stack state %d, char %d\n", yystate, yychar);
                    519: #endif
                    520: 
                    521: read:
                    522:        ip = &yyact[yypa[yystate]];
                    523:        if( ip[1] != YYNOCHAR ) {
                    524:                if( yychar == YYNOCHAR ) {
                    525:                        yychar = yylex();
                    526: #ifdef YYDEBUG
                    527:                        if( yydebug )
                    528:                                fprintf(stdout, "lex read char %d, val %d\n", yychar, yylval);
                    529: #endif
                    530:                }
                    531:                while (ip[1]!=YYNOCHAR) {
                    532:                        if (ip[1]==yychar)
                    533:                                break;
                    534:                        ip += 2;
                    535:                }
                    536:        }
                    537:        act = ip[0];
                    538:        switch( act>>YYACTSH ) {
                    539:        case YYSHIFTACT:
                    540:                if( ip[1]==YYNOCHAR )
                    541:                        goto YYerract;
                    542:                if( yychar != -1 )
                    543:                        yychar = YYNOCHAR; /* dont throw away EOF */
                    544:                yystate = act&YYAMASK;
                    545:                yyval = yylval;
                    546: #ifdef YYDEBUG
                    547:                if( yydebug )
                    548:                        fprintf(stdout, "shift %d\n", yystate);
                    549: #endif
                    550:                if( yyerrflag )
                    551:                        --yyerrflag;
                    552:                goto stack;
                    553: 
                    554:        case YYACCEPTACT:
                    555: #ifdef YYDEBUG
                    556:                if( yydebug )
                    557:                        fprintf(stdout, "accept\n");
                    558: #endif
                    559:                return(0);
                    560: 
                    561:        case YYERRACT:
                    562:        YYerract:
                    563:                switch (yyerrflag) {
                    564:                case 0:
                    565:                        yyerror("Syntax error");
                    566: 
                    567:                case 1:
                    568:                case 2:
                    569: 
                    570:                        yyerrflag = 3;
                    571:                        while( yys >= & yystack[0] ) {
                    572:                                ip = &yyact[yypa[*yys]];
                    573:                                while( ip[1]!=YYNOCHAR )
                    574:                                        ip += 2;
                    575:                                if( (*ip&~YYAMASK) == (YYSHIFTACT<<YYACTSH) ) {
                    576:                                        yystate = *ip&YYAMASK;
                    577:                                        goto stack;
                    578:                                }
                    579: #ifdef YYDEBUG
                    580:                                if( yydebug )
                    581:                                        fprintf(stderr, "error recovery leaves state %d, uncovers %d\n", *yys, yys[-1]);
                    582: #endif
                    583:                                yys--;
                    584:                                yyv--;
                    585:                        }
                    586: #ifdef YYDEBUG
                    587:                        if( yydebug )
                    588:                                fprintf(stderr, "no shift on error; abort\n");
                    589: #endif
                    590:                        return(1);
                    591: 
                    592:                case 3:
                    593: #ifdef YYDEBUG
                    594:                        if( yydebug )
                    595:                                fprintf(stderr, "Error recovery clobbers char %o\n", yychar);
                    596: #endif
                    597:                        if( yychar==YYEOFVAL )
                    598:                                return(1);
                    599:                        yychar = YYNOCHAR;
                    600:                        goto read;
                    601:                }
                    602: 
                    603:        case YYREDACT:
                    604:                pno = act&YYAMASK;
                    605: #ifdef YYDEBUG
                    606:                if( yydebug )
                    607:                        fprintf(stdout, "reduce %d\n", pno);
                    608: #endif
                    609:                yypvt = yyv;
                    610:                yyv -= yypn[pno];
                    611:                yys -= yypn[pno];
                    612:                yyval = yyv[1];
                    613:                switch(pno) {
                    614: 
                    615: case 1: {
                    616: 
                    617: #line 35 "../test.y"
                    618:  code = yypvt[-1].nodeptr; return; }break;
                    619: 
                    620: case 2: {
                    621: 
                    622: #line 39 "../test.y"
                    623:  yyval.nodeptr = yypvt[-1].nodeptr; }break;
                    624: 
                    625: case 3: {
                    626: 
                    627: #line 40 "../test.y"
                    628:  yyval.nodeptr = bnode('!', yypvt[0].nodeptr, NULL); }break;
                    629: 
                    630: case 4: {
                    631: 
                    632: #line 41 "../test.y"
                    633:  yyval.nodeptr = bnode(OR, yypvt[-2].nodeptr, yypvt[0].nodeptr); }break;
                    634: 
                    635: case 5: {
                    636: 
                    637: #line 42 "../test.y"
                    638:  yyval.nodeptr = bnode(AND, yypvt[-2].nodeptr, yypvt[0].nodeptr); }break;
                    639: 
                    640: case 6: {
                    641: 
                    642: #line 43 "../test.y"
                    643:  yyval.nodeptr = lnode(xr, yypvt[0].fname, NULL); }break;
                    644: 
                    645: case 7: {
                    646: 
                    647: #line 44 "../test.y"
                    648:  yyval.nodeptr = lnode(xw, yypvt[0].fname, NULL); }break;
                    649: 
                    650: case 8: {
                    651: 
                    652: #line 45 "../test.y"
                    653:  yyval.nodeptr = lnode(xf, yypvt[0].fname, NULL); }break;
                    654: 
                    655: case 9: {
                    656: 
                    657: #line 46 "../test.y"
                    658:  yyval.nodeptr = lnode(xd, yypvt[0].fname, NULL); }break;
                    659: 
                    660: case 10: {
                    661: 
                    662: #line 47 "../test.y"
                    663:  yyval.nodeptr = lnode(xs, yypvt[0].fname, NULL); }break;
                    664: 
                    665: case 11: {
                    666: 
                    667: #line 48 "../test.y"
                    668:  yyval.nodeptr = lnode(xt, yypvt[0].fname, NULL); }break;
                    669: 
                    670: case 12: {
                    671: 
                    672: #line 49 "../test.y"
                    673:  yyval.nodeptr = lnode(xt, "1", NULL); }break;
                    674: 
                    675: case 13: {
                    676: 
                    677: #line 50 "../test.y"
                    678:  yyval.nodeptr = lnode(xz, yypvt[0].fname, NULL); }break;
                    679: 
                    680: case 14: {
                    681: 
                    682: #line 51 "../test.y"
                    683:  yyval.nodeptr = lnode(xn, yypvt[0].fname, NULL); }break;
                    684: 
                    685: case 15: {
                    686: 
                    687: #line 52 "../test.y"
                    688:  yyval.nodeptr = lnode(xseq, yypvt[-2].fname, yypvt[0].fname); }break;
                    689: 
                    690: case 16: {
                    691: 
                    692: #line 53 "../test.y"
                    693:  yyval.nodeptr = lnode(xsneq, yypvt[-2].fname, yypvt[0].fname); }break;
                    694: 
                    695: case 17: {
                    696: 
                    697: #line 54 "../test.y"
                    698:  yyval.nodeptr = lnode(xeq, yypvt[-2].fname, yypvt[0].fname); }break;
                    699: 
                    700: case 18: {
                    701: 
                    702: #line 55 "../test.y"
                    703:  yyval.nodeptr = lnode(xne, yypvt[-2].fname, yypvt[0].fname); }break;
                    704: 
                    705: case 19: {
                    706: 
                    707: #line 56 "../test.y"
                    708:  yyval.nodeptr = lnode(xgt, yypvt[-2].fname, yypvt[0].fname); }break;
                    709: 
                    710: case 20: {
                    711: 
                    712: #line 57 "../test.y"
                    713:  yyval.nodeptr = lnode(xge, yypvt[-2].fname, yypvt[0].fname); }break;
                    714: 
                    715: case 21: {
                    716: 
                    717: #line 58 "../test.y"
                    718:  yyval.nodeptr = lnode(xlt, yypvt[-2].fname, yypvt[0].fname); }break;
                    719: 
                    720: case 22: {
                    721: 
                    722: #line 59 "../test.y"
                    723:  yyval.nodeptr = lnode(xle, yypvt[-2].fname, yypvt[0].fname); }break;
                    724: 
                    725: case 23: {
                    726: 
                    727: #line 60 "../test.y"
                    728:  yyval.nodeptr = lnode(xn, yypvt[0].fname, NULL); }break;
                    729: 
                    730:                }
                    731:                ip = &yygo[ yypgo[yypdnt[pno]] ];
                    732:                while( *ip!=*yys && *ip!=YYNOCHAR )
                    733:                        ip += 2;
                    734:                yystate = ip[1];
                    735:                goto stack;
                    736:        }
                    737: }
                    738: 
                    739: 
                    740: 
                    741: 

unix.superglobalmegacorp.com

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